Project import
diff --git a/slang/.clang-format b/slang/.clang-format
new file mode 100644
index 0000000..00c22f5
--- /dev/null
+++ b/slang/.clang-format
@@ -0,0 +1,2 @@
+# See http://clang.llvm.org/docs/ClangFormatStyleOptions.html
+BasedOnStyle: llvm
diff --git a/slang/Android.mk b/slang/Android.mk
new file mode 100644
index 0000000..61fba19
--- /dev/null
+++ b/slang/Android.mk
@@ -0,0 +1,207 @@
+#
+# Copyright (C) 2010 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+LOCAL_PATH := $(call my-dir)
+
+FORCE_BUILD_LLVM_DISABLE_NDEBUG ?= false
+# Legality check: FORCE_BUILD_LLVM_DISABLE_NDEBUG should consist of one word -- either "true" or "false".
+ifneq "$(words $(FORCE_BUILD_LLVM_DISABLE_NDEBUG))$(words $(filter-out true false,$(FORCE_BUILD_LLVM_DISABLE_NDEBUG)))" "10"
+  $(error FORCE_BUILD_LLVM_DISABLE_NDEBUG may only be true, false, or unset)
+endif
+
+FORCE_BUILD_LLVM_DEBUG ?= false
+# Legality check: FORCE_BUILD_LLVM_DEBUG should consist of one word -- either "true" or "false".
+ifneq "$(words $(FORCE_BUILD_LLVM_DEBUG))$(words $(filter-out true false,$(FORCE_BUILD_LLVM_DEBUG)))" "10"
+  $(error FORCE_BUILD_LLVM_DEBUG may only be true, false, or unset)
+endif
+
+# The prebuilt tools should be used when we are doing app-only build.
+ifeq ($(TARGET_BUILD_APPS),)
+
+
+local_cflags_for_slang := -Wall -Werror -std=c++11
+ifeq ($(TARGET_BUILD_VARIANT),eng)
+local_cflags_for_slang += -O0 -D__ENABLE_INTERNAL_OPTIONS
+else
+ifeq ($(TARGET_BUILD_VARIANT),userdebug)
+else
+local_cflags_for_slang += -D__DISABLE_ASSERTS
+endif
+endif
+local_cflags_for_slang += -DTARGET_BUILD_VARIANT=$(TARGET_BUILD_VARIANT)
+
+include $(LOCAL_PATH)/rs_version.mk
+local_cflags_for_slang += $(RS_VERSION_DEFINE)
+
+static_libraries_needed_by_slang := \
+	libLLVMBitWriter_2_9 \
+	libLLVMBitWriter_2_9_func \
+	libLLVMBitWriter_3_2
+
+# Static library libslang for host
+# ========================================================
+include $(CLEAR_VARS)
+include $(CLEAR_TBLGEN_VARS)
+
+LLVM_ROOT_PATH := external/llvm
+CLANG_ROOT_PATH := external/clang
+
+include $(CLANG_ROOT_PATH)/clang.mk
+
+LOCAL_MODULE := libslang
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_CFLAGS += $(local_cflags_for_slang)
+
+# Skip missing-field-initializer warnings for mingw.
+LOCAL_CFLAGS_windows += -Wno-error=missing-field-initializers
+
+TBLGEN_TABLES :=    \
+	AttrList.inc	\
+	Attrs.inc	\
+	CommentCommandList.inc \
+	CommentNodes.inc \
+	DeclNodes.inc	\
+	DiagnosticCommonKinds.inc	\
+	DiagnosticFrontendKinds.inc	\
+	DiagnosticSemaKinds.inc	\
+	StmtNodes.inc
+
+LOCAL_SRC_FILES :=	\
+	slang.cpp	\
+	slang_bitcode_gen.cpp	\
+	slang_backend.cpp	\
+	slang_diagnostic_buffer.cpp
+
+LOCAL_C_INCLUDES += frameworks/compile/libbcc/include
+
+LOCAL_LDLIBS := -ldl -lpthread
+
+include $(CLANG_HOST_BUILD_MK)
+include $(CLANG_TBLGEN_RULES_MK)
+include $(LLVM_GEN_INTRINSICS_MK)
+include $(LLVM_GEN_ATTRIBUTES_MK)
+include $(BUILD_HOST_STATIC_LIBRARY)
+
+# ========================================================
+include $(CLEAR_VARS)
+
+LLVM_ROOT_PATH := external/llvm
+
+LOCAL_MODULE := llvm-rs-as
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_MODULE_CLASS := EXECUTABLES
+
+LOCAL_SRC_FILES :=	\
+	llvm-rs-as.cpp
+
+LOCAL_CFLAGS += $(local_cflags_for_slang)
+LOCAL_STATIC_LIBRARIES :=	\
+	libslang \
+	$(static_libraries_needed_by_slang)
+LOCAL_SHARED_LIBRARIES := \
+	libLLVM
+
+include $(CLANG_HOST_BUILD_MK)
+include $(LLVM_HOST_BUILD_MK)
+include $(LLVM_GEN_ATTRIBUTES_MK)
+include $(BUILD_HOST_EXECUTABLE)
+
+# Executable llvm-rs-cc for host
+# ========================================================
+include $(CLEAR_VARS)
+include $(CLEAR_TBLGEN_VARS)
+
+LOCAL_IS_HOST_MODULE := true
+LOCAL_MODULE := llvm-rs-cc
+
+LOCAL_CFLAGS += $(local_cflags_for_slang)
+
+# Skip missing-field-initializer warnings for mingw.
+LOCAL_CFLAGS += -Wno-error=missing-field-initializers
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_MODULE_CLASS := EXECUTABLES
+
+TBLGEN_TABLES :=    \
+	AttrList.inc    \
+	Attrs.inc    \
+	CommentCommandList.inc \
+	CommentNodes.inc \
+	DeclNodes.inc    \
+	DiagnosticCommonKinds.inc   \
+	DiagnosticDriverKinds.inc	\
+	DiagnosticFrontendKinds.inc	\
+	DiagnosticSemaKinds.inc	\
+	Options.inc \
+	RSCCOptions.inc \
+	StmtNodes.inc
+
+LOCAL_SRC_FILES :=	\
+	llvm-rs-cc.cpp	\
+	rs_cc_options.cpp \
+	slang_rs_foreach_lowering.cpp \
+	slang_rs_ast_replace.cpp	\
+	slang_rs_check_ast.cpp	\
+	slang_rs_context.cpp	\
+	slang_rs_pragma_handler.cpp	\
+	slang_rs_exportable.cpp	\
+	slang_rs_export_type.cpp	\
+	slang_rs_export_element.cpp	\
+	slang_rs_export_var.cpp	\
+	slang_rs_export_func.cpp	\
+	slang_rs_export_foreach.cpp	\
+	slang_rs_export_reduce.cpp	\
+	slang_rs_object_ref_count.cpp	\
+	slang_rs_reflection.cpp \
+	slang_rs_reflection_cpp.cpp \
+	slang_rs_reflect_utils.cpp \
+	slang_rs_special_func.cpp	\
+	slang_rs_special_kernel_param.cpp \
+	strip_unknown_attributes.cpp
+
+LOCAL_C_INCLUDES += frameworks/compile/libbcc/include
+
+LOCAL_STATIC_LIBRARIES :=	\
+	libslang \
+	$(static_libraries_needed_by_slang)
+
+LOCAL_SHARED_LIBRARIES := \
+	libclang \
+	libLLVM
+
+LOCAL_LDLIBS_windows := -limagehlp -lpsapi
+LOCAL_LDLIBS_linux := -ldl -lpthread
+LOCAL_LDLIBS_darwin := -ldl -lpthread
+
+# For build RSCCOptions.inc from RSCCOptions.td
+intermediates := $(call local-generated-sources-dir)
+LOCAL_GENERATED_SOURCES += $(intermediates)/RSCCOptions.inc
+$(intermediates)/RSCCOptions.inc: $(LOCAL_PATH)/RSCCOptions.td $(LLVM_ROOT_PATH)/include/llvm/Option/OptParser.td $(LLVM_TBLGEN)
+	@echo "Building Renderscript compiler (llvm-rs-cc) Option tables with tblgen"
+	$(call transform-host-td-to-out,opt-parser-defs)
+
+include $(CLANG_HOST_BUILD_MK)
+include $(CLANG_TBLGEN_RULES_MK)
+include $(LLVM_GEN_ATTRIBUTES_MK)
+include $(BUILD_HOST_EXECUTABLE)
+
+endif  # TARGET_BUILD_APPS
+
+#=====================================================================
+# Include Subdirectories
+#=====================================================================
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/slang/BitWriter_2_9/Android.mk b/slang/BitWriter_2_9/Android.mk
new file mode 100644
index 0000000..ff9c5bc
--- /dev/null
+++ b/slang/BitWriter_2_9/Android.mk
@@ -0,0 +1,28 @@
+LOCAL_PATH:= $(call my-dir)
+
+LLVM_ROOT_PATH := $(LOCAL_PATH)/../../../../external/llvm
+include $(LLVM_ROOT_PATH)/llvm.mk
+
+bitcode_writer_2_9_SRC_FILES :=	\
+	BitcodeWriter.cpp	\
+	BitcodeWriterPass.cpp	\
+	ValueEnumerator.cpp
+
+# For the host
+# =====================================================
+include $(CLEAR_VARS)
+
+LOCAL_CFLAGS += $(local_cflags_for_slang)
+LOCAL_C_INCLUDES += frameworks/compile/slang
+
+LOCAL_SRC_FILES := $(bitcode_writer_2_9_SRC_FILES)
+
+LOCAL_MODULE:= libLLVMBitWriter_2_9
+
+LOCAL_MODULE_HOST_OS := darwin linux windows
+
+include $(LLVM_HOST_BUILD_MK)
+include $(LLVM_GEN_ATTRIBUTES_MK)
+include $(LLVM_GEN_INTRINSICS_MK)
+include $(BUILD_HOST_STATIC_LIBRARY)
+
diff --git a/slang/BitWriter_2_9/BitcodeWriter.cpp b/slang/BitWriter_2_9/BitcodeWriter.cpp
new file mode 100644
index 0000000..5a905f8
--- /dev/null
+++ b/slang/BitWriter_2_9/BitcodeWriter.cpp
@@ -0,0 +1,1739 @@
+//===--- Bitcode/Writer/BitcodeWriter.cpp - Bitcode Writer ----------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Bitcode writer implementation.
+//
+//===----------------------------------------------------------------------===//
+
+#include "ReaderWriter_2_9.h"
+#include "legacy_bitcode.h"
+#include "ValueEnumerator.h"
+#include "llvm/ADT/Triple.h"
+#include "llvm/Bitcode/BitstreamWriter.h"
+#include "llvm/Bitcode/LLVMBitCodes.h"
+#include "llvm/IR/Constants.h"
+#include "llvm/IR/DebugInfoMetadata.h"
+#include "llvm/IR/DerivedTypes.h"
+#include "llvm/IR/InlineAsm.h"
+#include "llvm/IR/Instructions.h"
+#include "llvm/IR/Module.h"
+#include "llvm/IR/Operator.h"
+#include "llvm/IR/ValueSymbolTable.h"
+#include "llvm/Support/ErrorHandling.h"
+#include "llvm/Support/MathExtras.h"
+#include "llvm/Support/Program.h"
+#include "llvm/Support/raw_ostream.h"
+#include <cctype>
+#include <map>
+using namespace llvm;
+
+// Redefine older bitcode opcodes for use here. Note that these come from
+// LLVM 2.7 (which is what HC shipped with).
+#define METADATA_NODE_2_7             2
+#define METADATA_FN_NODE_2_7          3
+#define METADATA_NAMED_NODE_2_7       5
+#define METADATA_ATTACHMENT_2_7       7
+#define FUNC_CODE_INST_CALL_2_7       22
+#define FUNC_CODE_DEBUG_LOC_2_7       32
+
+// Redefine older bitcode opcodes for use here. Note that these come from
+// LLVM 2.7 - 3.0.
+#define TYPE_BLOCK_ID_OLD_3_0 10
+#define TYPE_SYMTAB_BLOCK_ID_OLD_3_0 13
+#define TYPE_CODE_STRUCT_OLD_3_0 10
+
+/// These are manifest constants used by the bitcode writer. They do not need to
+/// be kept in sync with the reader, but need to be consistent within this file.
+enum {
+  CurVersion = 0,
+
+  // VALUE_SYMTAB_BLOCK abbrev id's.
+  VST_ENTRY_8_ABBREV = bitc::FIRST_APPLICATION_ABBREV,
+  VST_ENTRY_7_ABBREV,
+  VST_ENTRY_6_ABBREV,
+  VST_BBENTRY_6_ABBREV,
+
+  // CONSTANTS_BLOCK abbrev id's.
+  CONSTANTS_SETTYPE_ABBREV = bitc::FIRST_APPLICATION_ABBREV,
+  CONSTANTS_INTEGER_ABBREV,
+  CONSTANTS_CE_CAST_Abbrev,
+  CONSTANTS_NULL_Abbrev,
+
+  // FUNCTION_BLOCK abbrev id's.
+  FUNCTION_INST_LOAD_ABBREV = bitc::FIRST_APPLICATION_ABBREV,
+  FUNCTION_INST_BINOP_ABBREV,
+  FUNCTION_INST_BINOP_FLAGS_ABBREV,
+  FUNCTION_INST_CAST_ABBREV,
+  FUNCTION_INST_RET_VOID_ABBREV,
+  FUNCTION_INST_RET_VAL_ABBREV,
+  FUNCTION_INST_UNREACHABLE_ABBREV
+};
+
+static unsigned GetEncodedCastOpcode(unsigned Opcode) {
+  switch (Opcode) {
+  default: llvm_unreachable("Unknown cast instruction!");
+  case Instruction::Trunc   : return bitc::CAST_TRUNC;
+  case Instruction::ZExt    : return bitc::CAST_ZEXT;
+  case Instruction::SExt    : return bitc::CAST_SEXT;
+  case Instruction::FPToUI  : return bitc::CAST_FPTOUI;
+  case Instruction::FPToSI  : return bitc::CAST_FPTOSI;
+  case Instruction::UIToFP  : return bitc::CAST_UITOFP;
+  case Instruction::SIToFP  : return bitc::CAST_SITOFP;
+  case Instruction::FPTrunc : return bitc::CAST_FPTRUNC;
+  case Instruction::FPExt   : return bitc::CAST_FPEXT;
+  case Instruction::PtrToInt: return bitc::CAST_PTRTOINT;
+  case Instruction::IntToPtr: return bitc::CAST_INTTOPTR;
+  case Instruction::BitCast : return bitc::CAST_BITCAST;
+  }
+}
+
+static unsigned GetEncodedBinaryOpcode(unsigned Opcode) {
+  switch (Opcode) {
+  default: llvm_unreachable("Unknown binary instruction!");
+  case Instruction::Add:
+  case Instruction::FAdd: return bitc::BINOP_ADD;
+  case Instruction::Sub:
+  case Instruction::FSub: return bitc::BINOP_SUB;
+  case Instruction::Mul:
+  case Instruction::FMul: return bitc::BINOP_MUL;
+  case Instruction::UDiv: return bitc::BINOP_UDIV;
+  case Instruction::FDiv:
+  case Instruction::SDiv: return bitc::BINOP_SDIV;
+  case Instruction::URem: return bitc::BINOP_UREM;
+  case Instruction::FRem:
+  case Instruction::SRem: return bitc::BINOP_SREM;
+  case Instruction::Shl:  return bitc::BINOP_SHL;
+  case Instruction::LShr: return bitc::BINOP_LSHR;
+  case Instruction::AShr: return bitc::BINOP_ASHR;
+  case Instruction::And:  return bitc::BINOP_AND;
+  case Instruction::Or:   return bitc::BINOP_OR;
+  case Instruction::Xor:  return bitc::BINOP_XOR;
+  }
+}
+
+static void WriteStringRecord(unsigned Code, StringRef Str,
+                              unsigned AbbrevToUse, BitstreamWriter &Stream) {
+  SmallVector<unsigned, 64> Vals;
+
+  // Code: [strchar x N]
+  for (unsigned i = 0, e = Str.size(); i != e; ++i) {
+    if (AbbrevToUse && !BitCodeAbbrevOp::isChar6(Str[i]))
+      AbbrevToUse = 0;
+    Vals.push_back(Str[i]);
+  }
+
+  // Emit the finished record.
+  Stream.EmitRecord(Code, Vals, AbbrevToUse);
+}
+
+// Emit information about parameter attributes.
+static void WriteAttributeTable(const llvm_2_9::ValueEnumerator &VE,
+                                BitstreamWriter &Stream) {
+  const std::vector<AttributeSet> &Attrs = VE.getAttributes();
+  if (Attrs.empty()) return;
+
+  Stream.EnterSubblock(bitc::PARAMATTR_BLOCK_ID, 3);
+
+  SmallVector<uint64_t, 64> Record;
+  for (unsigned i = 0, e = Attrs.size(); i != e; ++i) {
+    const AttributeSet &A = Attrs[i];
+    for (unsigned i = 0, e = A.getNumSlots(); i != e; ++i) {
+      Record.push_back(A.getSlotIndex(i));
+      Record.push_back(encodeLLVMAttributesForBitcode(A, A.getSlotIndex(i)));
+    }
+
+    // This needs to use the 3.2 entry type
+    Stream.EmitRecord(bitc::PARAMATTR_CODE_ENTRY_OLD, Record);
+    Record.clear();
+  }
+
+  Stream.ExitBlock();
+}
+
+static void WriteTypeSymbolTable(const llvm_2_9::ValueEnumerator &VE,
+                                 BitstreamWriter &Stream) {
+  const llvm_2_9::ValueEnumerator::TypeList &TypeList = VE.getTypes();
+  Stream.EnterSubblock(TYPE_SYMTAB_BLOCK_ID_OLD_3_0, 3);
+
+  // 7-bit fixed width VST_CODE_ENTRY strings.
+  BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+  Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_ENTRY));
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
+                            Log2_32_Ceil(VE.getTypes().size()+1)));
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 7));
+  unsigned V7Abbrev = Stream.EmitAbbrev(Abbv);
+
+  SmallVector<unsigned, 64> NameVals;
+
+  for (unsigned i = 0, e = TypeList.size(); i != e; ++i) {
+    Type *T = TypeList[i];
+
+    switch (T->getTypeID()) {
+    case Type::StructTyID: {
+      StructType *ST = cast<StructType>(T);
+      if (ST->isLiteral()) {
+        // Skip anonymous struct definitions in type symbol table
+        // FIXME(srhines)
+        break;
+      }
+
+      // TST_ENTRY: [typeid, namechar x N]
+      NameVals.push_back(i);
+
+      const std::string &Str = ST->getName();
+      bool is7Bit = true;
+      for (unsigned i = 0, e = Str.size(); i != e; ++i) {
+        NameVals.push_back((unsigned char)Str[i]);
+        if (Str[i] & 128)
+          is7Bit = false;
+      }
+
+      // Emit the finished record.
+      Stream.EmitRecord(bitc::VST_CODE_ENTRY, NameVals, is7Bit ? V7Abbrev : 0);
+      NameVals.clear();
+
+      break;
+    }
+    default: break;
+    }
+  }
+
+  Stream.ExitBlock();
+}
+
+/// WriteTypeTable - Write out the type table for a module.
+static void WriteTypeTable(const llvm_2_9::ValueEnumerator &VE,
+                           BitstreamWriter &Stream) {
+  const llvm_2_9::ValueEnumerator::TypeList &TypeList = VE.getTypes();
+
+  Stream.EnterSubblock(TYPE_BLOCK_ID_OLD_3_0, 4 /*count from # abbrevs */);
+  SmallVector<uint64_t, 64> TypeVals;
+
+  uint64_t NumBits = Log2_32_Ceil(VE.getTypes().size()+1);
+
+  // Abbrev for TYPE_CODE_POINTER.
+  BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+  Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_POINTER));
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, NumBits));
+  Abbv->Add(BitCodeAbbrevOp(0));  // Addrspace = 0
+  unsigned PtrAbbrev = Stream.EmitAbbrev(Abbv);
+
+  // Abbrev for TYPE_CODE_FUNCTION.
+  Abbv = new BitCodeAbbrev();
+  Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_FUNCTION_OLD));
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));  // isvararg
+  Abbv->Add(BitCodeAbbrevOp(0));  // FIXME: DEAD value, remove in LLVM 3.0
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, NumBits));
+  unsigned FunctionAbbrev = Stream.EmitAbbrev(Abbv);
+
+
+  // Abbrev for TYPE_CODE_STRUCT.
+  Abbv = new BitCodeAbbrev();
+  Abbv->Add(BitCodeAbbrevOp(TYPE_CODE_STRUCT_OLD_3_0));
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));  // ispacked
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, NumBits));
+  unsigned StructAbbrev = Stream.EmitAbbrev(Abbv);
+
+  // Abbrev for TYPE_CODE_ARRAY.
+  Abbv = new BitCodeAbbrev();
+  Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_ARRAY));
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));   // size
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, NumBits));
+
+  unsigned ArrayAbbrev = Stream.EmitAbbrev(Abbv);
+
+  // Emit an entry count so the reader can reserve space.
+  TypeVals.push_back(TypeList.size());
+  Stream.EmitRecord(bitc::TYPE_CODE_NUMENTRY, TypeVals);
+  TypeVals.clear();
+
+  // Loop over all of the types, emitting each in turn.
+  for (unsigned i = 0, e = TypeList.size(); i != e; ++i) {
+    Type *T = TypeList[i];
+    int AbbrevToUse = 0;
+    unsigned Code = 0;
+
+    switch (T->getTypeID()) {
+    default: llvm_unreachable("Unknown type!");
+    case Type::VoidTyID:      Code = bitc::TYPE_CODE_VOID;   break;
+    case Type::FloatTyID:     Code = bitc::TYPE_CODE_FLOAT;  break;
+    case Type::DoubleTyID:    Code = bitc::TYPE_CODE_DOUBLE; break;
+    case Type::X86_FP80TyID:  Code = bitc::TYPE_CODE_X86_FP80; break;
+    case Type::FP128TyID:     Code = bitc::TYPE_CODE_FP128; break;
+    case Type::PPC_FP128TyID: Code = bitc::TYPE_CODE_PPC_FP128; break;
+    case Type::LabelTyID:     Code = bitc::TYPE_CODE_LABEL;  break;
+    case Type::MetadataTyID:  Code = bitc::TYPE_CODE_METADATA; break;
+    case Type::X86_MMXTyID:   Code = bitc::TYPE_CODE_X86_MMX; break;
+    case Type::IntegerTyID:
+      // INTEGER: [width]
+      Code = bitc::TYPE_CODE_INTEGER;
+      TypeVals.push_back(cast<IntegerType>(T)->getBitWidth());
+      break;
+    case Type::PointerTyID: {
+      PointerType *PTy = cast<PointerType>(T);
+      // POINTER: [pointee type, address space]
+      Code = bitc::TYPE_CODE_POINTER;
+      TypeVals.push_back(VE.getTypeID(PTy->getElementType()));
+      unsigned AddressSpace = PTy->getAddressSpace();
+      TypeVals.push_back(AddressSpace);
+      if (AddressSpace == 0) AbbrevToUse = PtrAbbrev;
+      break;
+    }
+    case Type::FunctionTyID: {
+      FunctionType *FT = cast<FunctionType>(T);
+      // FUNCTION: [isvararg, attrid, retty, paramty x N]
+      Code = bitc::TYPE_CODE_FUNCTION_OLD;
+      TypeVals.push_back(FT->isVarArg());
+      TypeVals.push_back(0);  // FIXME: DEAD: remove in llvm 3.0
+      TypeVals.push_back(VE.getTypeID(FT->getReturnType()));
+      for (unsigned i = 0, e = FT->getNumParams(); i != e; ++i)
+        TypeVals.push_back(VE.getTypeID(FT->getParamType(i)));
+      AbbrevToUse = FunctionAbbrev;
+      break;
+    }
+    case Type::StructTyID: {
+      StructType *ST = cast<StructType>(T);
+      // STRUCT: [ispacked, eltty x N]
+      TypeVals.push_back(ST->isPacked());
+      // Output all of the element types.
+      for (StructType::element_iterator I = ST->element_begin(),
+           E = ST->element_end(); I != E; ++I)
+        TypeVals.push_back(VE.getTypeID(*I));
+      Code = TYPE_CODE_STRUCT_OLD_3_0;
+      AbbrevToUse = StructAbbrev;
+      break;
+    }
+    case Type::ArrayTyID: {
+      ArrayType *AT = cast<ArrayType>(T);
+      // ARRAY: [numelts, eltty]
+      Code = bitc::TYPE_CODE_ARRAY;
+      TypeVals.push_back(AT->getNumElements());
+      TypeVals.push_back(VE.getTypeID(AT->getElementType()));
+      AbbrevToUse = ArrayAbbrev;
+      break;
+    }
+    case Type::VectorTyID: {
+      VectorType *VT = cast<VectorType>(T);
+      // VECTOR [numelts, eltty]
+      Code = bitc::TYPE_CODE_VECTOR;
+      TypeVals.push_back(VT->getNumElements());
+      TypeVals.push_back(VE.getTypeID(VT->getElementType()));
+      break;
+    }
+    }
+
+    // Emit the finished record.
+    Stream.EmitRecord(Code, TypeVals, AbbrevToUse);
+    TypeVals.clear();
+  }
+
+  Stream.ExitBlock();
+
+  WriteTypeSymbolTable(VE, Stream);
+}
+
+static unsigned getEncodedLinkage(const GlobalValue &GV) {
+  switch (GV.getLinkage()) {
+  case GlobalValue::ExternalLinkage:
+    return 0;
+  case GlobalValue::WeakAnyLinkage:
+    return 1;
+  case GlobalValue::AppendingLinkage:
+    return 2;
+  case GlobalValue::InternalLinkage:
+    return 3;
+  case GlobalValue::LinkOnceAnyLinkage:
+    return 4;
+  case GlobalValue::ExternalWeakLinkage:
+    return 7;
+  case GlobalValue::CommonLinkage:
+    return 8;
+  case GlobalValue::PrivateLinkage:
+    return 9;
+  case GlobalValue::WeakODRLinkage:
+    return 10;
+  case GlobalValue::LinkOnceODRLinkage:
+    return 11;
+  case GlobalValue::AvailableExternallyLinkage:
+    return 12;
+  }
+  llvm_unreachable("Invalid linkage");
+}
+
+static unsigned getEncodedVisibility(const GlobalValue &GV) {
+  switch (GV.getVisibility()) {
+  case GlobalValue::DefaultVisibility:   return 0;
+  case GlobalValue::HiddenVisibility:    return 1;
+  case GlobalValue::ProtectedVisibility: return 2;
+  }
+  llvm_unreachable("Invalid visibility");
+}
+
+// Emit top-level description of module, including target triple, inline asm,
+// descriptors for global variables, and function prototype info.
+static void WriteModuleInfo(const Module *M,
+                            const llvm_2_9::ValueEnumerator &VE,
+                            BitstreamWriter &Stream) {
+  // Emit various pieces of data attached to a module.
+  if (!M->getTargetTriple().empty())
+    WriteStringRecord(bitc::MODULE_CODE_TRIPLE, M->getTargetTriple(),
+                      0/*TODO*/, Stream);
+  const std::string &DL = M->getDataLayoutStr();
+  if (!DL.empty())
+    WriteStringRecord(bitc::MODULE_CODE_DATALAYOUT, DL, 0 /*TODO*/, Stream);
+  if (!M->getModuleInlineAsm().empty())
+    WriteStringRecord(bitc::MODULE_CODE_ASM, M->getModuleInlineAsm(),
+                      0/*TODO*/, Stream);
+
+  // Emit information about sections and GC, computing how many there are. Also
+  // compute the maximum alignment value.
+  std::map<std::string, unsigned> SectionMap;
+  std::map<std::string, unsigned> GCMap;
+  unsigned MaxAlignment = 0;
+  unsigned MaxGlobalType = 0;
+  for (const GlobalValue &GV : M->globals()) {
+    MaxAlignment = std::max(MaxAlignment, GV.getAlignment());
+    MaxGlobalType = std::max(MaxGlobalType, VE.getTypeID(GV.getType()));
+    if (GV.hasSection()) {
+      // Give section names unique ID's.
+      unsigned &Entry = SectionMap[GV.getSection()];
+      if (!Entry) {
+        WriteStringRecord(bitc::MODULE_CODE_SECTIONNAME, GV.getSection(),
+                          0/*TODO*/, Stream);
+        Entry = SectionMap.size();
+      }
+    }
+  }
+  for (const Function &F : *M) {
+    MaxAlignment = std::max(MaxAlignment, F.getAlignment());
+    if (F.hasSection()) {
+      // Give section names unique ID's.
+      unsigned &Entry = SectionMap[F.getSection()];
+      if (!Entry) {
+        WriteStringRecord(bitc::MODULE_CODE_SECTIONNAME, F.getSection(),
+                          0/*TODO*/, Stream);
+        Entry = SectionMap.size();
+      }
+    }
+    if (F.hasGC()) {
+      // Same for GC names.
+      unsigned &Entry = GCMap[F.getGC()];
+      if (!Entry) {
+        WriteStringRecord(bitc::MODULE_CODE_GCNAME, F.getGC(),
+                          0/*TODO*/, Stream);
+        Entry = GCMap.size();
+      }
+    }
+  }
+
+  // Emit abbrev for globals, now that we know # sections and max alignment.
+  unsigned SimpleGVarAbbrev = 0;
+  if (!M->global_empty()) {
+    // Add an abbrev for common globals with no visibility or thread localness.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::MODULE_CODE_GLOBALVAR));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
+                              Log2_32_Ceil(MaxGlobalType+1)));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));      // Constant.
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));        // Initializer.
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4));      // Linkage.
+    if (MaxAlignment == 0)                                      // Alignment.
+      Abbv->Add(BitCodeAbbrevOp(0));
+    else {
+      unsigned MaxEncAlignment = Log2_32(MaxAlignment)+1;
+      Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
+                               Log2_32_Ceil(MaxEncAlignment+1)));
+    }
+    if (SectionMap.empty())                                    // Section.
+      Abbv->Add(BitCodeAbbrevOp(0));
+    else
+      Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
+                               Log2_32_Ceil(SectionMap.size()+1)));
+    // Don't bother emitting vis + thread local.
+    SimpleGVarAbbrev = Stream.EmitAbbrev(Abbv);
+  }
+
+  // Emit the global variable information.
+  SmallVector<unsigned, 64> Vals;
+  for (const GlobalVariable &GV : M->globals()) {
+    unsigned AbbrevToUse = 0;
+
+    // GLOBALVAR: [type, isconst, initid,
+    //             linkage, alignment, section, visibility, threadlocal,
+    //             unnamed_addr]
+    Vals.push_back(VE.getTypeID(GV.getType()));
+    Vals.push_back(GV.isConstant());
+    Vals.push_back(GV.isDeclaration() ? 0 :
+                   (VE.getValueID(GV.getInitializer()) + 1));
+    Vals.push_back(getEncodedLinkage(GV));
+    Vals.push_back(Log2_32(GV.getAlignment())+1);
+    Vals.push_back(GV.hasSection() ? SectionMap[GV.getSection()] : 0);
+    if (GV.isThreadLocal() ||
+        GV.getVisibility() != GlobalValue::DefaultVisibility ||
+        GV.hasUnnamedAddr()) {
+      Vals.push_back(getEncodedVisibility(GV));
+      Vals.push_back(GV.isThreadLocal());
+      Vals.push_back(GV.hasUnnamedAddr());
+    } else {
+      AbbrevToUse = SimpleGVarAbbrev;
+    }
+
+    Stream.EmitRecord(bitc::MODULE_CODE_GLOBALVAR, Vals, AbbrevToUse);
+    Vals.clear();
+  }
+
+  // Emit the function proto information.
+  for (const Function &F : *M) {
+    // FUNCTION:  [type, callingconv, isproto, paramattr,
+    //             linkage, alignment, section, visibility, gc, unnamed_addr]
+    Vals.push_back(VE.getTypeID(F.getType()));
+    Vals.push_back(F.getCallingConv());
+    Vals.push_back(F.isDeclaration());
+    Vals.push_back(getEncodedLinkage(F));
+    Vals.push_back(VE.getAttributeID(F.getAttributes()));
+    Vals.push_back(Log2_32(F.getAlignment())+1);
+    Vals.push_back(F.hasSection() ? SectionMap[F.getSection()] : 0);
+    Vals.push_back(getEncodedVisibility(F));
+    Vals.push_back(F.hasGC() ? GCMap[F.getGC()] : 0);
+    Vals.push_back(F.hasUnnamedAddr());
+
+    unsigned AbbrevToUse = 0;
+    Stream.EmitRecord(bitc::MODULE_CODE_FUNCTION, Vals, AbbrevToUse);
+    Vals.clear();
+  }
+
+  // Emit the alias information.
+  for (const GlobalAlias &A : M->aliases()) {
+    Vals.push_back(VE.getTypeID(A.getType()));
+    Vals.push_back(VE.getValueID(A.getAliasee()));
+    Vals.push_back(getEncodedLinkage(A));
+    Vals.push_back(getEncodedVisibility(A));
+    unsigned AbbrevToUse = 0;
+    Stream.EmitRecord(bitc::MODULE_CODE_ALIAS_OLD, Vals, AbbrevToUse);
+    Vals.clear();
+  }
+}
+
+static uint64_t GetOptimizationFlags(const Value *V) {
+  uint64_t Flags = 0;
+
+  if (const auto *OBO = dyn_cast<OverflowingBinaryOperator>(V)) {
+    if (OBO->hasNoSignedWrap())
+      Flags |= 1 << bitc::OBO_NO_SIGNED_WRAP;
+    if (OBO->hasNoUnsignedWrap())
+      Flags |= 1 << bitc::OBO_NO_UNSIGNED_WRAP;
+  } else if (const auto *PEO = dyn_cast<PossiblyExactOperator>(V)) {
+    if (PEO->isExact())
+      Flags |= 1 << bitc::PEO_EXACT;
+  }
+
+  return Flags;
+}
+
+static void WriteValueAsMetadata(const ValueAsMetadata *MD,
+                                 const llvm_2_9::ValueEnumerator &VE,
+                                 BitstreamWriter &Stream,
+                                 SmallVectorImpl<uint64_t> &Record) {
+  // Mimic an MDNode with a value as one operand.
+  Value *V = MD->getValue();
+  Record.push_back(VE.getTypeID(V->getType()));
+  Record.push_back(VE.getValueID(V));
+  Stream.EmitRecord(METADATA_NODE_2_7, Record, 0);
+  Record.clear();
+}
+
+static void WriteMDTuple(const MDTuple *N, const llvm_2_9::ValueEnumerator &VE,
+                         BitstreamWriter &Stream,
+                         SmallVectorImpl<uint64_t> &Record, unsigned Abbrev) {
+  for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) {
+    Metadata *MD = N->getOperand(i);
+    assert(!(MD && isa<LocalAsMetadata>(MD)) &&
+           "Unexpected function-local metadata");
+    if (!MD) {
+      // TODO(srhines): I don't believe this case can exist for RS.
+      Record.push_back(VE.getTypeID(llvm::Type::getVoidTy(N->getContext())));
+      Record.push_back(0);
+    } else if (const auto *MDC = dyn_cast<ConstantAsMetadata>(MD)) {
+      Record.push_back(VE.getTypeID(MDC->getType()));
+      Record.push_back(VE.getValueID(MDC->getValue()));
+    } else {
+      Record.push_back(VE.getTypeID(
+          llvm::Type::getMetadataTy(N->getContext())));
+      Record.push_back(VE.getMetadataID(MD));
+    }
+  }
+  Stream.EmitRecord(METADATA_NODE_2_7, Record, Abbrev);
+  Record.clear();
+}
+
+/*static void WriteMDLocation(const MDLocation *N, const llvm_2_9::ValueEnumerator &VE,
+                            BitstreamWriter &Stream,
+                            SmallVectorImpl<uint64_t> &Record,
+                            unsigned Abbrev) {
+  Record.push_back(N->isDistinct());
+  Record.push_back(N->getLine());
+  Record.push_back(N->getColumn());
+  Record.push_back(VE.getMetadataID(N->getScope()));
+  Record.push_back(VE.getMetadataOrNullID(N->getInlinedAt()));
+
+  Stream.EmitRecord(bitc::METADATA_LOCATION, Record, Abbrev);
+  Record.clear();
+}
+
+static void WriteGenericDebugNode(const GenericDebugNode *,
+                                  const llvm_2_9::ValueEnumerator &, BitstreamWriter &,
+                                  SmallVectorImpl<uint64_t> &, unsigned) {
+  llvm_unreachable("unimplemented");
+}*/
+
+static void WriteModuleMetadata(const Module *M,
+                                const llvm_2_9::ValueEnumerator &VE,
+                                BitstreamWriter &Stream) {
+  const auto &MDs = VE.getMDs();
+  if (MDs.empty() && M->named_metadata_empty())
+    return;
+
+  // RenderScript files *ALWAYS* have metadata!
+  Stream.EnterSubblock(bitc::METADATA_BLOCK_ID, 3);
+
+  unsigned MDSAbbrev = 0;
+  if (VE.hasMDString()) {
+    // Abbrev for METADATA_STRING.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::METADATA_STRING));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8));
+    MDSAbbrev = Stream.EmitAbbrev(Abbv);
+  }
+
+  unsigned MDLocationAbbrev = 0;
+  if (VE.hasDILocation()) {
+    // TODO(srhines): Should be unreachable for RenderScript.
+    // Abbrev for METADATA_LOCATION.
+    //
+    // Assume the column is usually under 128, and always output the inlined-at
+    // location (it's never more expensive than building an array size 1).
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::METADATA_LOCATION));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
+    MDLocationAbbrev = Stream.EmitAbbrev(Abbv);
+  }
+
+  unsigned NameAbbrev = 0;
+  if (!M->named_metadata_empty()) {
+    // Abbrev for METADATA_NAME.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::METADATA_NAME));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8));
+    NameAbbrev = Stream.EmitAbbrev(Abbv);
+  }
+
+  unsigned MDTupleAbbrev = 0;
+  //unsigned GenericDebugNodeAbbrev = 0;
+  SmallVector<uint64_t, 64> Record;
+  for (const Metadata *MD : MDs) {
+    if (const MDNode *N = dyn_cast<MDNode>(MD)) {
+      switch (N->getMetadataID()) {
+      default:
+        llvm_unreachable("Invalid MDNode subclass");
+#define HANDLE_SPECIALIZED_MDNODE_LEAF(CLASS)
+#define HANDLE_MDNODE_LEAF(CLASS)                                              \
+  case Metadata::CLASS##Kind:                                                  \
+    Write##CLASS(cast<CLASS>(N), VE, Stream, Record, CLASS##Abbrev);           \
+    continue;
+#include "llvm/IR/Metadata.def"
+      }
+    }
+    if (const auto *MDC = dyn_cast<ConstantAsMetadata>(MD)) {
+      WriteValueAsMetadata(MDC, VE, Stream, Record);
+      continue;
+    }
+    const MDString *MDS = cast<MDString>(MD);
+    // Code: [strchar x N]
+    Record.append(MDS->bytes_begin(), MDS->bytes_end());
+
+    // Emit the finished record.
+    Stream.EmitRecord(bitc::METADATA_STRING, Record, MDSAbbrev);
+    Record.clear();
+  }
+
+  // Write named metadata.
+  for (const NamedMDNode &NMD : M->named_metadata()) {
+    // Write name.
+    StringRef Str = NMD.getName();
+    Record.append(Str.bytes_begin(), Str.bytes_end());
+    Stream.EmitRecord(bitc::METADATA_NAME, Record, NameAbbrev);
+    Record.clear();
+
+    // Write named metadata operands.
+    for (const MDNode *N : NMD.operands())
+      Record.push_back(VE.getMetadataID(N));
+    Stream.EmitRecord(METADATA_NAMED_NODE_2_7, Record, 0);
+    Record.clear();
+  }
+
+  Stream.ExitBlock();
+}
+
+static void WriteFunctionLocalMetadata(const Function &F,
+                                       const llvm_2_9::ValueEnumerator &VE,
+                                       BitstreamWriter &Stream) {
+  bool StartedMetadataBlock = false;
+  SmallVector<uint64_t, 64> Record;
+  const SmallVectorImpl<const LocalAsMetadata *> &MDs =
+      VE.getFunctionLocalMDs();
+  for (unsigned i = 0, e = MDs.size(); i != e; ++i) {
+    assert(MDs[i] && "Expected valid function-local metadata");
+    if (!StartedMetadataBlock) {
+      Stream.EnterSubblock(bitc::METADATA_BLOCK_ID, 3);
+      StartedMetadataBlock = true;
+    }
+    WriteValueAsMetadata(MDs[i], VE, Stream, Record);
+  }
+
+  if (StartedMetadataBlock)
+    Stream.ExitBlock();
+}
+
+static void WriteMetadataAttachment(const Function &F,
+                                    const llvm_2_9::ValueEnumerator &VE,
+                                    BitstreamWriter &Stream) {
+  Stream.EnterSubblock(bitc::METADATA_ATTACHMENT_ID, 3);
+
+  SmallVector<uint64_t, 64> Record;
+
+  // Write metadata attachments
+  // METADATA_ATTACHMENT - [m x [value, [n x [id, mdnode]]]
+  SmallVector<std::pair<unsigned, MDNode *>, 4> MDs;
+
+  for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB)
+    for (BasicBlock::const_iterator I = BB->begin(), E = BB->end();
+         I != E; ++I) {
+      MDs.clear();
+      I->getAllMetadataOtherThanDebugLoc(MDs);
+
+      // If no metadata, ignore instruction.
+      if (MDs.empty()) continue;
+
+      Record.push_back(VE.getInstructionID(&*I));
+
+      for (unsigned i = 0, e = MDs.size(); i != e; ++i) {
+        Record.push_back(MDs[i].first);
+        Record.push_back(VE.getMetadataID(MDs[i].second));
+      }
+      Stream.EmitRecord(METADATA_ATTACHMENT_2_7, Record, 0);
+      Record.clear();
+    }
+
+  Stream.ExitBlock();
+}
+
+static void WriteModuleMetadataStore(const Module *M, BitstreamWriter &Stream) {
+  SmallVector<uint64_t, 64> Record;
+
+  // Write metadata kinds
+  // METADATA_KIND - [n x [id, name]]
+  SmallVector<StringRef, 4> Names;
+  M->getMDKindNames(Names);
+
+  if (Names.empty()) return;
+
+  Stream.EnterSubblock(bitc::METADATA_BLOCK_ID, 3);
+
+  for (unsigned MDKindID = 0, e = Names.size(); MDKindID != e; ++MDKindID) {
+    Record.push_back(MDKindID);
+    StringRef KName = Names[MDKindID];
+    Record.append(KName.begin(), KName.end());
+
+    Stream.EmitRecord(bitc::METADATA_KIND, Record, 0);
+    Record.clear();
+  }
+
+  Stream.ExitBlock();
+}
+
+static void WriteConstants(unsigned FirstVal, unsigned LastVal,
+                           const llvm_2_9::ValueEnumerator &VE,
+                           BitstreamWriter &Stream, bool isGlobal) {
+  if (FirstVal == LastVal) return;
+
+  Stream.EnterSubblock(bitc::CONSTANTS_BLOCK_ID, 4);
+
+  unsigned AggregateAbbrev = 0;
+  unsigned String8Abbrev = 0;
+  unsigned CString7Abbrev = 0;
+  unsigned CString6Abbrev = 0;
+  // If this is a constant pool for the module, emit module-specific abbrevs.
+  if (isGlobal) {
+    // Abbrev for CST_CODE_AGGREGATE.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_AGGREGATE));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, Log2_32_Ceil(LastVal+1)));
+    AggregateAbbrev = Stream.EmitAbbrev(Abbv);
+
+    // Abbrev for CST_CODE_STRING.
+    Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_STRING));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8));
+    String8Abbrev = Stream.EmitAbbrev(Abbv);
+    // Abbrev for CST_CODE_CSTRING.
+    Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_CSTRING));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 7));
+    CString7Abbrev = Stream.EmitAbbrev(Abbv);
+    // Abbrev for CST_CODE_CSTRING.
+    Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_CSTRING));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6));
+    CString6Abbrev = Stream.EmitAbbrev(Abbv);
+  }
+
+  SmallVector<uint64_t, 64> Record;
+
+  const llvm_2_9::ValueEnumerator::ValueList &Vals = VE.getValues();
+  Type *LastTy = nullptr;
+  for (unsigned i = FirstVal; i != LastVal; ++i) {
+    const Value *V = Vals[i].first;
+    // If we need to switch types, do so now.
+    if (V->getType() != LastTy) {
+      LastTy = V->getType();
+      Record.push_back(VE.getTypeID(LastTy));
+      Stream.EmitRecord(bitc::CST_CODE_SETTYPE, Record,
+                        CONSTANTS_SETTYPE_ABBREV);
+      Record.clear();
+    }
+
+    if (const InlineAsm *IA = dyn_cast<InlineAsm>(V)) {
+      Record.push_back(unsigned(IA->hasSideEffects()) |
+                       unsigned(IA->isAlignStack()) << 1);
+
+      // Add the asm string.
+      const std::string &AsmStr = IA->getAsmString();
+      Record.push_back(AsmStr.size());
+      for (unsigned i = 0, e = AsmStr.size(); i != e; ++i)
+        Record.push_back(AsmStr[i]);
+
+      // Add the constraint string.
+      const std::string &ConstraintStr = IA->getConstraintString();
+      Record.push_back(ConstraintStr.size());
+      for (unsigned i = 0, e = ConstraintStr.size(); i != e; ++i)
+        Record.push_back(ConstraintStr[i]);
+      Stream.EmitRecord(bitc::CST_CODE_INLINEASM, Record);
+      Record.clear();
+      continue;
+    }
+    const Constant *C = cast<Constant>(V);
+    unsigned Code = -1U;
+    unsigned AbbrevToUse = 0;
+    if (C->isNullValue()) {
+      Code = bitc::CST_CODE_NULL;
+    } else if (isa<UndefValue>(C)) {
+      Code = bitc::CST_CODE_UNDEF;
+    } else if (const ConstantInt *IV = dyn_cast<ConstantInt>(C)) {
+      if (IV->getBitWidth() <= 64) {
+        uint64_t V = IV->getSExtValue();
+        if ((int64_t)V >= 0)
+          Record.push_back(V << 1);
+        else
+          Record.push_back((-V << 1) | 1);
+        Code = bitc::CST_CODE_INTEGER;
+        AbbrevToUse = CONSTANTS_INTEGER_ABBREV;
+      } else {                             // Wide integers, > 64 bits in size.
+        // We have an arbitrary precision integer value to write whose
+        // bit width is > 64. However, in canonical unsigned integer
+        // format it is likely that the high bits are going to be zero.
+        // So, we only write the number of active words.
+        unsigned NWords = IV->getValue().getActiveWords();
+        const uint64_t *RawWords = IV->getValue().getRawData();
+        for (unsigned i = 0; i != NWords; ++i) {
+          int64_t V = RawWords[i];
+          if (V >= 0)
+            Record.push_back(V << 1);
+          else
+            Record.push_back((-V << 1) | 1);
+        }
+        Code = bitc::CST_CODE_WIDE_INTEGER;
+      }
+    } else if (const ConstantFP *CFP = dyn_cast<ConstantFP>(C)) {
+      Code = bitc::CST_CODE_FLOAT;
+      Type *Ty = CFP->getType();
+      if (Ty->isFloatTy() || Ty->isDoubleTy()) {
+        Record.push_back(CFP->getValueAPF().bitcastToAPInt().getZExtValue());
+      } else if (Ty->isX86_FP80Ty()) {
+        // api needed to prevent premature destruction
+        // bits are not in the same order as a normal i80 APInt, compensate.
+        APInt api = CFP->getValueAPF().bitcastToAPInt();
+        const uint64_t *p = api.getRawData();
+        Record.push_back((p[1] << 48) | (p[0] >> 16));
+        Record.push_back(p[0] & 0xffffLL);
+      } else if (Ty->isFP128Ty() || Ty->isPPC_FP128Ty()) {
+        APInt api = CFP->getValueAPF().bitcastToAPInt();
+        const uint64_t *p = api.getRawData();
+        Record.push_back(p[0]);
+        Record.push_back(p[1]);
+      } else {
+        assert (0 && "Unknown FP type!");
+      }
+    } else if (isa<ConstantDataSequential>(C) &&
+               cast<ConstantDataSequential>(C)->isString()) {
+      const ConstantDataSequential *Str = cast<ConstantDataSequential>(C);
+      // Emit constant strings specially.
+      unsigned NumElts = Str->getNumElements();
+      // If this is a null-terminated string, use the denser CSTRING encoding.
+      if (Str->isCString()) {
+        Code = bitc::CST_CODE_CSTRING;
+        --NumElts;  // Don't encode the null, which isn't allowed by char6.
+      } else {
+        Code = bitc::CST_CODE_STRING;
+        AbbrevToUse = String8Abbrev;
+      }
+      bool isCStr7 = Code == bitc::CST_CODE_CSTRING;
+      bool isCStrChar6 = Code == bitc::CST_CODE_CSTRING;
+      for (unsigned i = 0; i != NumElts; ++i) {
+        unsigned char V = Str->getElementAsInteger(i);
+        Record.push_back(V);
+        isCStr7 &= (V & 128) == 0;
+        if (isCStrChar6)
+          isCStrChar6 = BitCodeAbbrevOp::isChar6(V);
+      }
+
+      if (isCStrChar6)
+        AbbrevToUse = CString6Abbrev;
+      else if (isCStr7)
+        AbbrevToUse = CString7Abbrev;
+    } else if (const ConstantDataSequential *CDS =
+                  dyn_cast<ConstantDataSequential>(C)) {
+      // We must replace ConstantDataSequential's representation with the
+      // legacy ConstantArray/ConstantVector/ConstantStruct version.
+      // ValueEnumerator is similarly modified to mark the appropriate
+      // Constants as used (so they are emitted).
+      Code = bitc::CST_CODE_AGGREGATE;
+      for (unsigned i = 0, e = CDS->getNumElements(); i != e; ++i)
+        Record.push_back(VE.getValueID(CDS->getElementAsConstant(i)));
+      AbbrevToUse = AggregateAbbrev;
+    } else if (isa<ConstantArray>(C) || isa<ConstantStruct>(C) ||
+               isa<ConstantVector>(C)) {
+      Code = bitc::CST_CODE_AGGREGATE;
+      for (unsigned i = 0, e = C->getNumOperands(); i != e; ++i)
+        Record.push_back(VE.getValueID(C->getOperand(i)));
+      AbbrevToUse = AggregateAbbrev;
+    } else if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(C)) {
+      switch (CE->getOpcode()) {
+      default:
+        if (Instruction::isCast(CE->getOpcode())) {
+          Code = bitc::CST_CODE_CE_CAST;
+          Record.push_back(GetEncodedCastOpcode(CE->getOpcode()));
+          Record.push_back(VE.getTypeID(C->getOperand(0)->getType()));
+          Record.push_back(VE.getValueID(C->getOperand(0)));
+          AbbrevToUse = CONSTANTS_CE_CAST_Abbrev;
+        } else {
+          assert(CE->getNumOperands() == 2 && "Unknown constant expr!");
+          Code = bitc::CST_CODE_CE_BINOP;
+          Record.push_back(GetEncodedBinaryOpcode(CE->getOpcode()));
+          Record.push_back(VE.getValueID(C->getOperand(0)));
+          Record.push_back(VE.getValueID(C->getOperand(1)));
+          uint64_t Flags = GetOptimizationFlags(CE);
+          if (Flags != 0)
+            Record.push_back(Flags);
+        }
+        break;
+      case Instruction::GetElementPtr:
+        Code = bitc::CST_CODE_CE_GEP;
+        if (cast<GEPOperator>(C)->isInBounds())
+          Code = bitc::CST_CODE_CE_INBOUNDS_GEP;
+        for (unsigned i = 0, e = CE->getNumOperands(); i != e; ++i) {
+          Record.push_back(VE.getTypeID(C->getOperand(i)->getType()));
+          Record.push_back(VE.getValueID(C->getOperand(i)));
+        }
+        break;
+      case Instruction::Select:
+        Code = bitc::CST_CODE_CE_SELECT;
+        Record.push_back(VE.getValueID(C->getOperand(0)));
+        Record.push_back(VE.getValueID(C->getOperand(1)));
+        Record.push_back(VE.getValueID(C->getOperand(2)));
+        break;
+      case Instruction::ExtractElement:
+        Code = bitc::CST_CODE_CE_EXTRACTELT;
+        Record.push_back(VE.getTypeID(C->getOperand(0)->getType()));
+        Record.push_back(VE.getValueID(C->getOperand(0)));
+        Record.push_back(VE.getValueID(C->getOperand(1)));
+        break;
+      case Instruction::InsertElement:
+        Code = bitc::CST_CODE_CE_INSERTELT;
+        Record.push_back(VE.getValueID(C->getOperand(0)));
+        Record.push_back(VE.getValueID(C->getOperand(1)));
+        Record.push_back(VE.getValueID(C->getOperand(2)));
+        break;
+      case Instruction::ShuffleVector:
+        // If the return type and argument types are the same, this is a
+        // standard shufflevector instruction.  If the types are different,
+        // then the shuffle is widening or truncating the input vectors, and
+        // the argument type must also be encoded.
+        if (C->getType() == C->getOperand(0)->getType()) {
+          Code = bitc::CST_CODE_CE_SHUFFLEVEC;
+        } else {
+          Code = bitc::CST_CODE_CE_SHUFVEC_EX;
+          Record.push_back(VE.getTypeID(C->getOperand(0)->getType()));
+        }
+        Record.push_back(VE.getValueID(C->getOperand(0)));
+        Record.push_back(VE.getValueID(C->getOperand(1)));
+        Record.push_back(VE.getValueID(C->getOperand(2)));
+        break;
+      case Instruction::ICmp:
+      case Instruction::FCmp:
+        Code = bitc::CST_CODE_CE_CMP;
+        Record.push_back(VE.getTypeID(C->getOperand(0)->getType()));
+        Record.push_back(VE.getValueID(C->getOperand(0)));
+        Record.push_back(VE.getValueID(C->getOperand(1)));
+        Record.push_back(CE->getPredicate());
+        break;
+      }
+    } else if (const BlockAddress *BA = dyn_cast<BlockAddress>(C)) {
+      Code = bitc::CST_CODE_BLOCKADDRESS;
+      Record.push_back(VE.getTypeID(BA->getFunction()->getType()));
+      Record.push_back(VE.getValueID(BA->getFunction()));
+      Record.push_back(VE.getGlobalBasicBlockID(BA->getBasicBlock()));
+    } else {
+#ifndef NDEBUG
+      C->dump();
+#endif
+      llvm_unreachable("Unknown constant!");
+    }
+    Stream.EmitRecord(Code, Record, AbbrevToUse);
+    Record.clear();
+  }
+
+  Stream.ExitBlock();
+}
+
+static void WriteModuleConstants(const llvm_2_9::ValueEnumerator &VE,
+                                 BitstreamWriter &Stream) {
+  const llvm_2_9::ValueEnumerator::ValueList &Vals = VE.getValues();
+
+  // Find the first constant to emit, which is the first non-globalvalue value.
+  // We know globalvalues have been emitted by WriteModuleInfo.
+  for (unsigned i = 0, e = Vals.size(); i != e; ++i) {
+    if (!isa<GlobalValue>(Vals[i].first)) {
+      WriteConstants(i, Vals.size(), VE, Stream, true);
+      return;
+    }
+  }
+}
+
+/// PushValueAndType - The file has to encode both the value and type id for
+/// many values, because we need to know what type to create for forward
+/// references.  However, most operands are not forward references, so this type
+/// field is not needed.
+///
+/// This function adds V's value ID to Vals.  If the value ID is higher than the
+/// instruction ID, then it is a forward reference, and it also includes the
+/// type ID.
+static bool PushValueAndType(const Value *V, unsigned InstID,
+                             SmallVector<unsigned, 64> &Vals,
+                             llvm_2_9::ValueEnumerator &VE) {
+  unsigned ValID = VE.getValueID(V);
+  Vals.push_back(ValID);
+  if (ValID >= InstID) {
+    Vals.push_back(VE.getTypeID(V->getType()));
+    return true;
+  }
+  return false;
+}
+
+/// WriteInstruction - Emit an instruction to the specified stream.
+static void WriteInstruction(const Instruction &I, unsigned InstID,
+                             llvm_2_9::ValueEnumerator &VE,
+                             BitstreamWriter &Stream,
+                             SmallVector<unsigned, 64> &Vals) {
+  unsigned Code = 0;
+  unsigned AbbrevToUse = 0;
+  VE.setInstructionID(&I);
+  switch (I.getOpcode()) {
+  default:
+    if (Instruction::isCast(I.getOpcode())) {
+      Code = bitc::FUNC_CODE_INST_CAST;
+      if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE))
+        AbbrevToUse = FUNCTION_INST_CAST_ABBREV;
+      Vals.push_back(VE.getTypeID(I.getType()));
+      Vals.push_back(GetEncodedCastOpcode(I.getOpcode()));
+    } else {
+      assert(isa<BinaryOperator>(I) && "Unknown instruction!");
+      Code = bitc::FUNC_CODE_INST_BINOP;
+      if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE))
+        AbbrevToUse = FUNCTION_INST_BINOP_ABBREV;
+      Vals.push_back(VE.getValueID(I.getOperand(1)));
+      Vals.push_back(GetEncodedBinaryOpcode(I.getOpcode()));
+      uint64_t Flags = GetOptimizationFlags(&I);
+      if (Flags != 0) {
+        if (AbbrevToUse == FUNCTION_INST_BINOP_ABBREV)
+          AbbrevToUse = FUNCTION_INST_BINOP_FLAGS_ABBREV;
+        Vals.push_back(Flags);
+      }
+    }
+    break;
+
+  case Instruction::GetElementPtr:
+    Code = bitc::FUNC_CODE_INST_GEP_OLD;
+    if (cast<GEPOperator>(&I)->isInBounds())
+      Code = bitc::FUNC_CODE_INST_INBOUNDS_GEP_OLD;
+    for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i)
+      PushValueAndType(I.getOperand(i), InstID, Vals, VE);
+    break;
+  case Instruction::ExtractValue: {
+    Code = bitc::FUNC_CODE_INST_EXTRACTVAL;
+    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
+    const ExtractValueInst *EVI = cast<ExtractValueInst>(&I);
+    for (const unsigned *i = EVI->idx_begin(), *e = EVI->idx_end(); i != e; ++i)
+      Vals.push_back(*i);
+    break;
+  }
+  case Instruction::InsertValue: {
+    Code = bitc::FUNC_CODE_INST_INSERTVAL;
+    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
+    PushValueAndType(I.getOperand(1), InstID, Vals, VE);
+    const InsertValueInst *IVI = cast<InsertValueInst>(&I);
+    for (const unsigned *i = IVI->idx_begin(), *e = IVI->idx_end(); i != e; ++i)
+      Vals.push_back(*i);
+    break;
+  }
+  case Instruction::Select:
+    Code = bitc::FUNC_CODE_INST_VSELECT;
+    PushValueAndType(I.getOperand(1), InstID, Vals, VE);
+    Vals.push_back(VE.getValueID(I.getOperand(2)));
+    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
+    break;
+  case Instruction::ExtractElement:
+    Code = bitc::FUNC_CODE_INST_EXTRACTELT;
+    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
+    Vals.push_back(VE.getValueID(I.getOperand(1)));
+    break;
+  case Instruction::InsertElement:
+    Code = bitc::FUNC_CODE_INST_INSERTELT;
+    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
+    Vals.push_back(VE.getValueID(I.getOperand(1)));
+    Vals.push_back(VE.getValueID(I.getOperand(2)));
+    break;
+  case Instruction::ShuffleVector:
+    Code = bitc::FUNC_CODE_INST_SHUFFLEVEC;
+    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
+    Vals.push_back(VE.getValueID(I.getOperand(1)));
+    Vals.push_back(VE.getValueID(I.getOperand(2)));
+    break;
+  case Instruction::ICmp:
+  case Instruction::FCmp:
+    // compare returning Int1Ty or vector of Int1Ty
+    Code = bitc::FUNC_CODE_INST_CMP2;
+    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
+    Vals.push_back(VE.getValueID(I.getOperand(1)));
+    Vals.push_back(cast<CmpInst>(I).getPredicate());
+    break;
+
+  case Instruction::Ret:
+    {
+      Code = bitc::FUNC_CODE_INST_RET;
+      unsigned NumOperands = I.getNumOperands();
+      if (NumOperands == 0)
+        AbbrevToUse = FUNCTION_INST_RET_VOID_ABBREV;
+      else if (NumOperands == 1) {
+        if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE))
+          AbbrevToUse = FUNCTION_INST_RET_VAL_ABBREV;
+      } else {
+        for (unsigned i = 0, e = NumOperands; i != e; ++i)
+          PushValueAndType(I.getOperand(i), InstID, Vals, VE);
+      }
+    }
+    break;
+  case Instruction::Br:
+    {
+      Code = bitc::FUNC_CODE_INST_BR;
+      const BranchInst &II = cast<BranchInst>(I);
+      Vals.push_back(VE.getValueID(II.getSuccessor(0)));
+      if (II.isConditional()) {
+        Vals.push_back(VE.getValueID(II.getSuccessor(1)));
+        Vals.push_back(VE.getValueID(II.getCondition()));
+      }
+    }
+    break;
+  case Instruction::Switch:
+    {
+      Code = bitc::FUNC_CODE_INST_SWITCH;
+      const SwitchInst &SI = cast<SwitchInst>(I);
+      Vals.push_back(VE.getTypeID(SI.getCondition()->getType()));
+      Vals.push_back(VE.getValueID(SI.getCondition()));
+      Vals.push_back(VE.getValueID(SI.getDefaultDest()));
+      for (SwitchInst::ConstCaseIt i = SI.case_begin(), e = SI.case_end();
+           i != e; ++i) {
+        Vals.push_back(VE.getValueID(i.getCaseValue()));
+        Vals.push_back(VE.getValueID(i.getCaseSuccessor()));
+      }
+    }
+    break;
+  case Instruction::IndirectBr:
+    Code = bitc::FUNC_CODE_INST_INDIRECTBR;
+    Vals.push_back(VE.getTypeID(I.getOperand(0)->getType()));
+    for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i)
+      Vals.push_back(VE.getValueID(I.getOperand(i)));
+    break;
+
+  case Instruction::Invoke: {
+    const InvokeInst *II = cast<InvokeInst>(&I);
+    const Value *Callee(II->getCalledValue());
+    PointerType *PTy = cast<PointerType>(Callee->getType());
+    FunctionType *FTy = cast<FunctionType>(PTy->getElementType());
+    Code = bitc::FUNC_CODE_INST_INVOKE;
+
+    Vals.push_back(VE.getAttributeID(II->getAttributes()));
+    Vals.push_back(II->getCallingConv());
+    Vals.push_back(VE.getValueID(II->getNormalDest()));
+    Vals.push_back(VE.getValueID(II->getUnwindDest()));
+    PushValueAndType(Callee, InstID, Vals, VE);
+
+    // Emit value #'s for the fixed parameters.
+    for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i)
+      Vals.push_back(VE.getValueID(I.getOperand(i)));  // fixed param.
+
+    // Emit type/value pairs for varargs params.
+    if (FTy->isVarArg()) {
+      for (unsigned i = FTy->getNumParams(), e = I.getNumOperands()-3;
+           i != e; ++i)
+        PushValueAndType(I.getOperand(i), InstID, Vals, VE); // vararg
+    }
+    break;
+  }
+  case Instruction::Unreachable:
+    Code = bitc::FUNC_CODE_INST_UNREACHABLE;
+    AbbrevToUse = FUNCTION_INST_UNREACHABLE_ABBREV;
+    break;
+
+  case Instruction::PHI: {
+    const PHINode &PN = cast<PHINode>(I);
+    Code = bitc::FUNC_CODE_INST_PHI;
+    Vals.push_back(VE.getTypeID(PN.getType()));
+    for (unsigned i = 0, e = PN.getNumIncomingValues(); i != e; ++i) {
+      Vals.push_back(VE.getValueID(PN.getIncomingValue(i)));
+      Vals.push_back(VE.getValueID(PN.getIncomingBlock(i)));
+    }
+    break;
+  }
+
+  case Instruction::Alloca:
+    Code = bitc::FUNC_CODE_INST_ALLOCA;
+    Vals.push_back(VE.getTypeID(I.getType()));
+    Vals.push_back(VE.getTypeID(I.getOperand(0)->getType()));
+    Vals.push_back(VE.getValueID(I.getOperand(0))); // size.
+    Vals.push_back(Log2_32(cast<AllocaInst>(I).getAlignment())+1);
+    break;
+
+  case Instruction::Load:
+    Code = bitc::FUNC_CODE_INST_LOAD;
+    if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE))  // ptr
+      AbbrevToUse = FUNCTION_INST_LOAD_ABBREV;
+
+    Vals.push_back(Log2_32(cast<LoadInst>(I).getAlignment())+1);
+    Vals.push_back(cast<LoadInst>(I).isVolatile());
+    break;
+  case Instruction::Store:
+    Code = bitc::FUNC_CODE_INST_STORE_OLD;
+    PushValueAndType(I.getOperand(1), InstID, Vals, VE);  // ptrty + ptr
+    Vals.push_back(VE.getValueID(I.getOperand(0)));       // val.
+    Vals.push_back(Log2_32(cast<StoreInst>(I).getAlignment())+1);
+    Vals.push_back(cast<StoreInst>(I).isVolatile());
+    break;
+  case Instruction::Call: {
+    const CallInst &CI = cast<CallInst>(I);
+    PointerType *PTy = cast<PointerType>(CI.getCalledValue()->getType());
+    FunctionType *FTy = cast<FunctionType>(PTy->getElementType());
+
+    Code = FUNC_CODE_INST_CALL_2_7;
+
+    Vals.push_back(VE.getAttributeID(CI.getAttributes()));
+    Vals.push_back((CI.getCallingConv() << 1) | unsigned(CI.isTailCall()));
+    PushValueAndType(CI.getCalledValue(), InstID, Vals, VE);  // Callee
+
+    // Emit value #'s for the fixed parameters.
+    for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i)
+      Vals.push_back(VE.getValueID(CI.getArgOperand(i)));  // fixed param.
+
+    // Emit type/value pairs for varargs params.
+    if (FTy->isVarArg()) {
+      for (unsigned i = FTy->getNumParams(), e = CI.getNumArgOperands();
+           i != e; ++i)
+        PushValueAndType(CI.getArgOperand(i), InstID, Vals, VE);  // varargs
+    }
+    break;
+  }
+  case Instruction::VAArg:
+    Code = bitc::FUNC_CODE_INST_VAARG;
+    Vals.push_back(VE.getTypeID(I.getOperand(0)->getType()));   // valistty
+    Vals.push_back(VE.getValueID(I.getOperand(0))); // valist.
+    Vals.push_back(VE.getTypeID(I.getType())); // restype.
+    break;
+  }
+
+  Stream.EmitRecord(Code, Vals, AbbrevToUse);
+  Vals.clear();
+}
+
+// Emit names for globals/functions etc.
+static void WriteValueSymbolTable(const ValueSymbolTable &VST,
+                                  const llvm_2_9::ValueEnumerator &VE,
+                                  BitstreamWriter &Stream) {
+  if (VST.empty()) return;
+  Stream.EnterSubblock(bitc::VALUE_SYMTAB_BLOCK_ID, 4);
+
+  // FIXME: Set up the abbrev, we know how many values there are!
+  // FIXME: We know if the type names can use 7-bit ascii.
+  SmallVector<unsigned, 64> NameVals;
+
+  for (ValueSymbolTable::const_iterator SI = VST.begin(), SE = VST.end();
+       SI != SE; ++SI) {
+
+    const ValueName &Name = *SI;
+
+    // Figure out the encoding to use for the name.
+    bool is7Bit = true;
+    bool isChar6 = true;
+    for (const char *C = Name.getKeyData(), *E = C+Name.getKeyLength();
+         C != E; ++C) {
+      if (isChar6)
+        isChar6 = BitCodeAbbrevOp::isChar6(*C);
+      if ((unsigned char)*C & 128) {
+        is7Bit = false;
+        break;  // don't bother scanning the rest.
+      }
+    }
+
+    unsigned AbbrevToUse = VST_ENTRY_8_ABBREV;
+
+    // VST_ENTRY:   [valueid, namechar x N]
+    // VST_BBENTRY: [bbid, namechar x N]
+    unsigned Code;
+    if (isa<BasicBlock>(SI->getValue())) {
+      Code = bitc::VST_CODE_BBENTRY;
+      if (isChar6)
+        AbbrevToUse = VST_BBENTRY_6_ABBREV;
+    } else {
+      Code = bitc::VST_CODE_ENTRY;
+      if (isChar6)
+        AbbrevToUse = VST_ENTRY_6_ABBREV;
+      else if (is7Bit)
+        AbbrevToUse = VST_ENTRY_7_ABBREV;
+    }
+
+    NameVals.push_back(VE.getValueID(SI->getValue()));
+    for (const char *P = Name.getKeyData(),
+         *E = Name.getKeyData()+Name.getKeyLength(); P != E; ++P)
+      NameVals.push_back((unsigned char)*P);
+
+    // Emit the finished record.
+    Stream.EmitRecord(Code, NameVals, AbbrevToUse);
+    NameVals.clear();
+  }
+  Stream.ExitBlock();
+}
+
+/// WriteFunction - Emit a function body to the module stream.
+static void WriteFunction(const Function &F, llvm_2_9::ValueEnumerator &VE,
+                          BitstreamWriter &Stream) {
+  Stream.EnterSubblock(bitc::FUNCTION_BLOCK_ID, 4);
+  VE.incorporateFunction(F);
+
+  SmallVector<unsigned, 64> Vals;
+
+  // Emit the number of basic blocks, so the reader can create them ahead of
+  // time.
+  Vals.push_back(VE.getBasicBlocks().size());
+  Stream.EmitRecord(bitc::FUNC_CODE_DECLAREBLOCKS, Vals);
+  Vals.clear();
+
+  // If there are function-local constants, emit them now.
+  unsigned CstStart, CstEnd;
+  VE.getFunctionConstantRange(CstStart, CstEnd);
+  WriteConstants(CstStart, CstEnd, VE, Stream, false);
+
+  // If there is function-local metadata, emit it now.
+  WriteFunctionLocalMetadata(F, VE, Stream);
+
+  // Keep a running idea of what the instruction ID is.
+  unsigned InstID = CstEnd;
+
+  bool NeedsMetadataAttachment = false;
+
+  DILocation *LastDL = nullptr;;
+
+  // Finally, emit all the instructions, in order.
+  for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB)
+    for (BasicBlock::const_iterator I = BB->begin(), E = BB->end();
+         I != E; ++I) {
+      WriteInstruction(*I, InstID, VE, Stream, Vals);
+
+      if (!I->getType()->isVoidTy())
+        ++InstID;
+
+      // If the instruction has metadata, write a metadata attachment later.
+      NeedsMetadataAttachment |= I->hasMetadataOtherThanDebugLoc();
+
+      // If the instruction has a debug location, emit it.
+      DILocation *DL = I->getDebugLoc();
+      if (!DL)
+        continue;
+
+      if (DL == LastDL) {
+        // Just repeat the same debug loc as last time.
+        Stream.EmitRecord(bitc::FUNC_CODE_DEBUG_LOC_AGAIN, Vals);
+        continue;
+      }
+
+      Vals.push_back(DL->getLine());
+      Vals.push_back(DL->getColumn());
+      Vals.push_back(VE.getMetadataOrNullID(DL->getScope()));
+      Vals.push_back(VE.getMetadataOrNullID(DL->getInlinedAt()));
+      Stream.EmitRecord(FUNC_CODE_DEBUG_LOC_2_7, Vals);
+      Vals.clear();
+
+      LastDL = DL;
+    }
+
+  // Emit names for all the instructions etc.
+  WriteValueSymbolTable(F.getValueSymbolTable(), VE, Stream);
+
+  if (NeedsMetadataAttachment)
+    WriteMetadataAttachment(F, VE, Stream);
+  VE.purgeFunction();
+  Stream.ExitBlock();
+}
+
+// Emit blockinfo, which defines the standard abbreviations etc.
+static void WriteBlockInfo(const llvm_2_9::ValueEnumerator &VE,
+                           BitstreamWriter &Stream) {
+  // We only want to emit block info records for blocks that have multiple
+  // instances: CONSTANTS_BLOCK, FUNCTION_BLOCK and VALUE_SYMTAB_BLOCK.  Other
+  // blocks can defined their abbrevs inline.
+  Stream.EnterBlockInfoBlock(2);
+
+  { // 8-bit fixed-width VST_ENTRY/VST_BBENTRY strings.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8));
+    if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID,
+                                   Abbv) != VST_ENTRY_8_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+
+  { // 7-bit fixed width VST_ENTRY strings.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_ENTRY));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 7));
+    if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID,
+                                   Abbv) != VST_ENTRY_7_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+  { // 6-bit char6 VST_ENTRY strings.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_ENTRY));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6));
+    if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID,
+                                   Abbv) != VST_ENTRY_6_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+  { // 6-bit char6 VST_BBENTRY strings.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_BBENTRY));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6));
+    if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID,
+                                   Abbv) != VST_BBENTRY_6_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+
+
+
+  { // SETTYPE abbrev for CONSTANTS_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_SETTYPE));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
+                              Log2_32_Ceil(VE.getTypes().size()+1)));
+    if (Stream.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID,
+                                   Abbv) != CONSTANTS_SETTYPE_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+
+  { // INTEGER abbrev for CONSTANTS_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_INTEGER));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
+    if (Stream.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID,
+                                   Abbv) != CONSTANTS_INTEGER_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+
+  { // CE_CAST abbrev for CONSTANTS_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_CE_CAST));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4));  // cast opc
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,       // typeid
+                              Log2_32_Ceil(VE.getTypes().size()+1)));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));    // value id
+
+    if (Stream.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID,
+                                   Abbv) != CONSTANTS_CE_CAST_Abbrev)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+  { // NULL abbrev for CONSTANTS_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_NULL));
+    if (Stream.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID,
+                                   Abbv) != CONSTANTS_NULL_Abbrev)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+
+  // FIXME: This should only use space for first class types!
+
+  { // INST_LOAD abbrev for FUNCTION_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_LOAD));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Ptr
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 4)); // Align
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // volatile
+    if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
+                                   Abbv) != FUNCTION_INST_LOAD_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+  { // INST_BINOP abbrev for FUNCTION_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_BINOP));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // LHS
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // RHS
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4)); // opc
+    if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
+                                   Abbv) != FUNCTION_INST_BINOP_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+  { // INST_BINOP_FLAGS abbrev for FUNCTION_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_BINOP));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // LHS
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // RHS
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4)); // opc
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 7)); // flags
+    if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
+                                   Abbv) != FUNCTION_INST_BINOP_FLAGS_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+  { // INST_CAST abbrev for FUNCTION_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_CAST));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));    // OpVal
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,       // dest ty
+                              Log2_32_Ceil(VE.getTypes().size()+1)));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4));  // opc
+    if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
+                                   Abbv) != FUNCTION_INST_CAST_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+
+  { // INST_RET abbrev for FUNCTION_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_RET));
+    if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
+                                   Abbv) != FUNCTION_INST_RET_VOID_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+  { // INST_RET abbrev for FUNCTION_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_RET));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // ValID
+    if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
+                                   Abbv) != FUNCTION_INST_RET_VAL_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+  { // INST_UNREACHABLE abbrev for FUNCTION_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_UNREACHABLE));
+    if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
+                                   Abbv) != FUNCTION_INST_UNREACHABLE_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+
+  Stream.ExitBlock();
+}
+
+/// WriteModule - Emit the specified module to the bitstream.
+static void WriteModule(const Module *M, BitstreamWriter &Stream) {
+  Stream.EnterSubblock(bitc::MODULE_BLOCK_ID, 3);
+
+  // Emit the version number if it is non-zero.
+  if (CurVersion) {
+    SmallVector<unsigned, 1> Vals;
+    Vals.push_back(CurVersion);
+    Stream.EmitRecord(bitc::MODULE_CODE_VERSION, Vals);
+  }
+
+  // Analyze the module, enumerating globals, functions, etc.
+  llvm_2_9::ValueEnumerator VE(*M);
+
+  // Emit blockinfo, which defines the standard abbreviations etc.
+  WriteBlockInfo(VE, Stream);
+
+  // Emit information about parameter attributes.
+  WriteAttributeTable(VE, Stream);
+
+  // Emit information describing all of the types in the module.
+  WriteTypeTable(VE, Stream);
+
+  // Emit top-level description of module, including target triple, inline asm,
+  // descriptors for global variables, and function prototype info.
+  WriteModuleInfo(M, VE, Stream);
+
+  // Emit constants.
+  WriteModuleConstants(VE, Stream);
+
+  // Emit metadata.
+  WriteModuleMetadata(M, VE, Stream);
+
+  // Emit function bodies.
+  for (Module::const_iterator F = M->begin(), E = M->end(); F != E; ++F)
+    if (!F->isDeclaration())
+      WriteFunction(*F, VE, Stream);
+
+  // Emit metadata.
+  WriteModuleMetadataStore(M, Stream);
+
+  // Emit names for globals/functions etc.
+  WriteValueSymbolTable(M->getValueSymbolTable(), VE, Stream);
+
+  Stream.ExitBlock();
+}
+
+/// EmitDarwinBCHeader - If generating a bc file on darwin, we have to emit a
+/// header and trailer to make it compatible with the system archiver.  To do
+/// this we emit the following header, and then emit a trailer that pads the
+/// file out to be a multiple of 16 bytes.
+///
+/// struct bc_header {
+///   uint32_t Magic;         // 0x0B17C0DE
+///   uint32_t Version;       // Version, currently always 0.
+///   uint32_t BitcodeOffset; // Offset to traditional bitcode file.
+///   uint32_t BitcodeSize;   // Size of traditional bitcode file.
+///   uint32_t CPUType;       // CPU specifier.
+///   ... potentially more later ...
+/// };
+enum {
+  DarwinBCSizeFieldOffset = 3*4, // Offset to bitcode_size.
+  DarwinBCHeaderSize = 5*4
+};
+
+static void WriteInt32ToBuffer(uint32_t Value, SmallVectorImpl<char> &Buffer,
+                               uint32_t &Position) {
+  Buffer[Position + 0] = (unsigned char) (Value >>  0);
+  Buffer[Position + 1] = (unsigned char) (Value >>  8);
+  Buffer[Position + 2] = (unsigned char) (Value >> 16);
+  Buffer[Position + 3] = (unsigned char) (Value >> 24);
+  Position += 4;
+}
+
+static void EmitDarwinBCHeaderAndTrailer(SmallVectorImpl<char> &Buffer,
+                                         const Triple &TT) {
+  unsigned CPUType = ~0U;
+
+  // Match x86_64-*, i[3-9]86-*, powerpc-*, powerpc64-*, arm-*, thumb-*,
+  // armv[0-9]-*, thumbv[0-9]-*, armv5te-*, or armv6t2-*. The CPUType is a magic
+  // number from /usr/include/mach/machine.h.  It is ok to reproduce the
+  // specific constants here because they are implicitly part of the Darwin ABI.
+  enum {
+    DARWIN_CPU_ARCH_ABI64      = 0x01000000,
+    DARWIN_CPU_TYPE_X86        = 7,
+    DARWIN_CPU_TYPE_ARM        = 12,
+    DARWIN_CPU_TYPE_POWERPC    = 18
+  };
+
+  Triple::ArchType Arch = TT.getArch();
+  if (Arch == Triple::x86_64)
+    CPUType = DARWIN_CPU_TYPE_X86 | DARWIN_CPU_ARCH_ABI64;
+  else if (Arch == Triple::x86)
+    CPUType = DARWIN_CPU_TYPE_X86;
+  else if (Arch == Triple::ppc)
+    CPUType = DARWIN_CPU_TYPE_POWERPC;
+  else if (Arch == Triple::ppc64)
+    CPUType = DARWIN_CPU_TYPE_POWERPC | DARWIN_CPU_ARCH_ABI64;
+  else if (Arch == Triple::arm || Arch == Triple::thumb)
+    CPUType = DARWIN_CPU_TYPE_ARM;
+
+  // Traditional Bitcode starts after header.
+  assert(Buffer.size() >= DarwinBCHeaderSize &&
+         "Expected header size to be reserved");
+  unsigned BCOffset = DarwinBCHeaderSize;
+  unsigned BCSize = Buffer.size()-DarwinBCHeaderSize;
+
+  // Write the magic and version.
+  unsigned Position = 0;
+  WriteInt32ToBuffer(0x0B17C0DE , Buffer, Position);
+  WriteInt32ToBuffer(0          , Buffer, Position); // Version.
+  WriteInt32ToBuffer(BCOffset   , Buffer, Position);
+  WriteInt32ToBuffer(BCSize     , Buffer, Position);
+  WriteInt32ToBuffer(CPUType    , Buffer, Position);
+
+  // If the file is not a multiple of 16 bytes, insert dummy padding.
+  while (Buffer.size() & 15)
+    Buffer.push_back(0);
+}
+
+/// WriteBitcodeToFile - Write the specified module to the specified output
+/// stream.
+void llvm_2_9::WriteBitcodeToFile(const Module *M, raw_ostream &Out) {
+  SmallVector<char, 1024> Buffer;
+  Buffer.reserve(256*1024);
+
+  // If this is darwin or another generic macho target, reserve space for the
+  // header.
+  Triple TT(M->getTargetTriple());
+  if (TT.isOSDarwin())
+    Buffer.insert(Buffer.begin(), DarwinBCHeaderSize, 0);
+
+  // Emit the module into the buffer.
+  {
+    BitstreamWriter Stream(Buffer);
+
+    // Emit the file header.
+    Stream.Emit((unsigned)'B', 8);
+    Stream.Emit((unsigned)'C', 8);
+    Stream.Emit(0x0, 4);
+    Stream.Emit(0xC, 4);
+    Stream.Emit(0xE, 4);
+    Stream.Emit(0xD, 4);
+
+    // Emit the module.
+    WriteModule(M, Stream);
+  }
+
+  if (TT.isOSDarwin())
+    EmitDarwinBCHeaderAndTrailer(Buffer, TT);
+
+  // Write the generated bitstream to "Out".
+  Out.write((char*)&Buffer.front(), Buffer.size());
+}
diff --git a/slang/BitWriter_2_9/BitcodeWriterPass.cpp b/slang/BitWriter_2_9/BitcodeWriterPass.cpp
new file mode 100644
index 0000000..d43d690
--- /dev/null
+++ b/slang/BitWriter_2_9/BitcodeWriterPass.cpp
@@ -0,0 +1,46 @@
+//===--- Bitcode/Writer/BitcodeWriterPass.cpp - Bitcode Writer ------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// BitcodeWriterPass implementation.
+//
+//===----------------------------------------------------------------------===//
+
+#include "ReaderWriter_2_9.h"
+#include "llvm/IR/Function.h"
+#include "llvm/IR/Instructions.h"
+#include "llvm/IR/Module.h"
+#include "llvm/Pass.h"
+using namespace llvm;
+
+namespace {
+  class WriteBitcodePass : public ModulePass {
+    raw_ostream &OS; // raw_ostream to print on
+
+  public:
+    static char ID; // Pass identification, replacement for typeid
+    explicit WriteBitcodePass(raw_ostream &o)
+      : ModulePass(ID), OS(o) {}
+
+    const char *getPassName() const { return "Bitcode Writer"; }
+
+    bool runOnModule(Module &M) {
+      bool Changed = false;
+      llvm_2_9::WriteBitcodeToFile(&M, OS);
+      return Changed;
+    }
+  };
+}
+
+char WriteBitcodePass::ID = 0;
+
+/// createBitcodeWriterPass - Create and return a pass that writes the module
+/// to the specified ostream.
+llvm::ModulePass *llvm_2_9::createBitcodeWriterPass(llvm::raw_ostream &Str) {
+  return new WriteBitcodePass(Str);
+}
diff --git a/slang/BitWriter_2_9/CMakeLists.txt b/slang/BitWriter_2_9/CMakeLists.txt
new file mode 100644
index 0000000..f097b09
--- /dev/null
+++ b/slang/BitWriter_2_9/CMakeLists.txt
@@ -0,0 +1,6 @@
+add_llvm_library(LLVMBitWriter
+  BitWriter.cpp
+  BitcodeWriter.cpp
+  BitcodeWriterPass.cpp
+  ValueEnumerator.cpp
+  )
diff --git a/slang/BitWriter_2_9/Makefile b/slang/BitWriter_2_9/Makefile
new file mode 100644
index 0000000..7b0bd72
--- /dev/null
+++ b/slang/BitWriter_2_9/Makefile
@@ -0,0 +1,15 @@
+##===- lib/Bitcode/Reader/Makefile -------------------------*- Makefile -*-===##
+#
+#                     The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open Source
+# License. See LICENSE.TXT for details.
+#
+##===----------------------------------------------------------------------===##
+
+LEVEL = ../../..
+LIBRARYNAME = LLVMBitWriter
+BUILD_ARCHIVE = 1
+
+include $(LEVEL)/Makefile.common
+
diff --git a/slang/BitWriter_2_9/ReaderWriter_2_9.h b/slang/BitWriter_2_9/ReaderWriter_2_9.h
new file mode 100644
index 0000000..997e9c7
--- /dev/null
+++ b/slang/BitWriter_2_9/ReaderWriter_2_9.h
@@ -0,0 +1,143 @@
+//===-- llvm/Bitcode/ReaderWriter.h - Bitcode reader/writers ----*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This header defines interfaces to read and write LLVM bitcode files/streams.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_BITCODE_2_9_H
+#define LLVM_BITCODE_2_9_H
+
+#include <string>
+
+namespace llvm {
+  class Module;
+  class MemoryBuffer;
+  class ModulePass;
+  class BitstreamWriter;
+  class LLVMContext;
+  class raw_ostream;
+} // End llvm namespace
+
+namespace llvm_2_9 {
+  /// getLazyBitcodeModule - Read the header of the specified bitcode buffer
+  /// and prepare for lazy deserialization of function bodies.  If successful,
+  /// this takes ownership of 'buffer' and returns a non-null pointer.  On
+  /// error, this returns null, *does not* take ownership of Buffer, and fills
+  /// in *ErrMsg with an error description if ErrMsg is non-null.
+  llvm::Module *getLazyBitcodeModule(llvm::MemoryBuffer *Buffer,
+                               llvm::LLVMContext& Context,
+                               std::string *ErrMsg = 0);
+
+  /// getBitcodeTargetTriple - Read the header of the specified bitcode
+  /// buffer and extract just the triple information. If successful,
+  /// this returns a string and *does not* take ownership
+  /// of 'buffer'. On error, this returns "", and fills in *ErrMsg
+  /// if ErrMsg is non-null.
+  std::string getBitcodeTargetTriple(llvm::MemoryBuffer *Buffer,
+                                     llvm::LLVMContext& Context,
+                                     std::string *ErrMsg = 0);
+
+  /// ParseBitcodeFile - Read the specified bitcode file, returning the module.
+  /// If an error occurs, this returns null and fills in *ErrMsg if it is
+  /// non-null.  This method *never* takes ownership of Buffer.
+  llvm::Module *ParseBitcodeFile(llvm::MemoryBuffer *Buffer, llvm::LLVMContext& Context,
+                           std::string *ErrMsg = 0);
+
+  /// WriteBitcodeToFile - Write the specified module to the specified
+  /// raw output stream.  For streams where it matters, the given stream
+  /// should be in "binary" mode.
+  void WriteBitcodeToFile(const llvm::Module *M, llvm::raw_ostream &Out);
+
+  /// createBitcodeWriterPass - Create and return a pass that writes the module
+  /// to the specified ostream.
+  llvm::ModulePass *createBitcodeWriterPass(llvm::raw_ostream &Str);
+
+
+  /// isBitcodeWrapper - Return true if the given bytes are the magic bytes
+  /// for an LLVM IR bitcode wrapper.
+  ///
+  static inline bool isBitcodeWrapper(const unsigned char *BufPtr,
+                                      const unsigned char *BufEnd) {
+    // See if you can find the hidden message in the magic bytes :-).
+    // (Hint: it's a little-endian encoding.)
+    return BufPtr != BufEnd &&
+           BufPtr[0] == 0xDE &&
+           BufPtr[1] == 0xC0 &&
+           BufPtr[2] == 0x17 &&
+           BufPtr[3] == 0x0B;
+  }
+
+  /// isRawBitcode - Return true if the given bytes are the magic bytes for
+  /// raw LLVM IR bitcode (without a wrapper).
+  ///
+  static inline bool isRawBitcode(const unsigned char *BufPtr,
+                                  const unsigned char *BufEnd) {
+    // These bytes sort of have a hidden message, but it's not in
+    // little-endian this time, and it's a little redundant.
+    return BufPtr != BufEnd &&
+           BufPtr[0] == 'B' &&
+           BufPtr[1] == 'C' &&
+           BufPtr[2] == 0xc0 &&
+           BufPtr[3] == 0xde;
+  }
+
+  /// isBitcode - Return true if the given bytes are the magic bytes for
+  /// LLVM IR bitcode, either with or without a wrapper.
+  ///
+  static bool inline isBitcode(const unsigned char *BufPtr,
+                               const unsigned char *BufEnd) {
+    return isBitcodeWrapper(BufPtr, BufEnd) ||
+           isRawBitcode(BufPtr, BufEnd);
+  }
+
+  /// SkipBitcodeWrapperHeader - Some systems wrap bc files with a special
+  /// header for padding or other reasons.  The format of this header is:
+  ///
+  /// struct bc_header {
+  ///   uint32_t Magic;         // 0x0B17C0DE
+  ///   uint32_t Version;       // Version, currently always 0.
+  ///   uint32_t BitcodeOffset; // Offset to traditional bitcode file.
+  ///   uint32_t BitcodeSize;   // Size of traditional bitcode file.
+  ///   ... potentially other gunk ...
+  /// };
+  ///
+  /// This function is called when we find a file with a matching magic number.
+  /// In this case, skip down to the subsection of the file that is actually a
+  /// BC file.
+  static inline bool SkipBitcodeWrapperHeader(unsigned char *&BufPtr,
+                                              unsigned char *&BufEnd) {
+    enum {
+      KnownHeaderSize = 4*4,  // Size of header we read.
+      OffsetField = 2*4,      // Offset in bytes to Offset field.
+      SizeField = 3*4         // Offset in bytes to Size field.
+    };
+
+    // Must contain the header!
+    if (BufEnd-BufPtr < KnownHeaderSize) return true;
+
+    unsigned Offset = ( BufPtr[OffsetField  ]        |
+                       (BufPtr[OffsetField+1] << 8)  |
+                       (BufPtr[OffsetField+2] << 16) |
+                       (BufPtr[OffsetField+3] << 24));
+    unsigned Size   = ( BufPtr[SizeField    ]        |
+                       (BufPtr[SizeField  +1] << 8)  |
+                       (BufPtr[SizeField  +2] << 16) |
+                       (BufPtr[SizeField  +3] << 24));
+
+    // Verify that Offset+Size fits in the file.
+    if (Offset+Size > unsigned(BufEnd-BufPtr))
+      return true;
+    BufPtr += Offset;
+    BufEnd = BufPtr+Size;
+    return false;
+  }
+} // End llvm_2_9 namespace
+
+#endif
diff --git a/slang/BitWriter_2_9/ValueEnumerator.cpp b/slang/BitWriter_2_9/ValueEnumerator.cpp
new file mode 100644
index 0000000..dedbedd
--- /dev/null
+++ b/slang/BitWriter_2_9/ValueEnumerator.cpp
@@ -0,0 +1,546 @@
+//===-- ValueEnumerator.cpp - Number values and types for bitcode writer --===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file implements the ValueEnumerator class.
+//
+//===----------------------------------------------------------------------===//
+
+#include "ValueEnumerator.h"
+#include "llvm/ADT/STLExtras.h"
+#include "llvm/ADT/SmallPtrSet.h"
+#include "llvm/IR/Constants.h"
+#include "llvm/IR/DebugInfoMetadata.h"
+#include "llvm/IR/DerivedTypes.h"
+#include "llvm/IR/Instructions.h"
+#include "llvm/IR/Module.h"
+#include "llvm/IR/ValueSymbolTable.h"
+#include "llvm/Support/Debug.h"
+#include "llvm/Support/raw_ostream.h"
+#include <algorithm>
+using namespace llvm;
+
+namespace llvm_2_9 {
+
+static bool isIntOrIntVectorValue(const std::pair<const Value*, unsigned> &V) {
+  return V.first->getType()->isIntOrIntVectorTy();
+}
+
+/// ValueEnumerator - Enumerate module-level information.
+ValueEnumerator::ValueEnumerator(const llvm::Module &M)
+    : HasMDString(false), HasDILocation(false) {
+  // Enumerate the global variables.
+  for (llvm::Module::const_global_iterator I = M.global_begin(), E = M.global_end();
+       I != E; ++I)
+    EnumerateValue(&*I);
+
+  // Enumerate the functions.
+  for (llvm::Module::const_iterator I = M.begin(), E = M.end(); I != E; ++I) {
+    EnumerateValue(&*I);
+    EnumerateAttributes(cast<Function>(I)->getAttributes());
+  }
+
+  // Enumerate the aliases.
+  for (llvm::Module::const_alias_iterator I = M.alias_begin(), E = M.alias_end();
+       I != E; ++I)
+    EnumerateValue(&*I);
+
+  // Remember what is the cutoff between globalvalue's and other constants.
+  unsigned FirstConstant = Values.size();
+
+  // Enumerate the global variable initializers.
+  for (llvm::Module::const_global_iterator I = M.global_begin(), E = M.global_end();
+       I != E; ++I)
+    if (I->hasInitializer())
+      EnumerateValue(I->getInitializer());
+
+  // Enumerate the aliasees.
+  for (llvm::Module::const_alias_iterator I = M.alias_begin(), E = M.alias_end();
+       I != E; ++I)
+    EnumerateValue(I->getAliasee());
+
+  // Enumerate the metadata type.
+  //
+  // TODO: Move this to ValueEnumerator::EnumerateOperandType() once bitcode
+  // only encodes the metadata type when it's used as a value.
+  EnumerateType(Type::getMetadataTy(M.getContext()));
+
+  // Insert constants and metadata that are named at module level into the slot
+  // pool so that the module symbol table can refer to them...
+  EnumerateValueSymbolTable(M.getValueSymbolTable());
+  EnumerateNamedMetadata(M);
+
+  SmallVector<std::pair<unsigned, MDNode *>, 8> MDs;
+
+  // Enumerate types used by function bodies and argument lists.
+  for (const Function &F : M) {
+    for (const Argument &A : F.args())
+      EnumerateType(A.getType());
+
+    for (const BasicBlock &BB : F)
+      for (const Instruction &I : BB) {
+        for (const Use &Op : I.operands()) {
+          auto *MD = dyn_cast<MetadataAsValue>(&Op);
+          if (!MD) {
+            EnumerateOperandType(Op);
+            continue;
+          }
+
+          // Local metadata is enumerated during function-incorporation.
+          if (isa<LocalAsMetadata>(MD->getMetadata()))
+            continue;
+
+          EnumerateMetadata(MD->getMetadata());
+        }
+        EnumerateType(I.getType());
+        if (const CallInst *CI = dyn_cast<CallInst>(&I))
+          EnumerateAttributes(CI->getAttributes());
+        else if (const InvokeInst *II = dyn_cast<InvokeInst>(&I))
+          EnumerateAttributes(II->getAttributes());
+
+        // Enumerate metadata attached with this instruction.
+        MDs.clear();
+        I.getAllMetadataOtherThanDebugLoc(MDs);
+        for (unsigned i = 0, e = MDs.size(); i != e; ++i)
+          EnumerateMetadata(MDs[i].second);
+
+        // Don't enumerate the location directly -- it has a special record
+        // type -- but enumerate its operands.
+        if (DILocation *L = I.getDebugLoc())
+          EnumerateMDNodeOperands(L);
+      }
+  }
+
+  // Optimize constant ordering.
+  OptimizeConstants(FirstConstant, Values.size());
+}
+
+unsigned ValueEnumerator::getInstructionID(const Instruction *Inst) const {
+  InstructionMapType::const_iterator I = InstructionMap.find(Inst);
+  assert(I != InstructionMap.end() && "Instruction is not mapped!");
+  return I->second;
+}
+
+void ValueEnumerator::setInstructionID(const Instruction *I) {
+  InstructionMap[I] = InstructionCount++;
+}
+
+unsigned ValueEnumerator::getValueID(const Value *V) const {
+  if (auto *MD = dyn_cast<MetadataAsValue>(V))
+    return getMetadataID(MD->getMetadata());
+
+  ValueMapType::const_iterator I = ValueMap.find(V);
+  assert(I != ValueMap.end() && "Value not in slotcalculator!");
+  return I->second-1;
+}
+
+void ValueEnumerator::dump() const {
+  print(dbgs(), ValueMap, "Default");
+  dbgs() << '\n';
+  print(dbgs(), MDValueMap, "MetaData");
+  dbgs() << '\n';
+}
+
+void ValueEnumerator::print(raw_ostream &OS, const ValueMapType &Map,
+                            const char *Name) const {
+
+  OS << "Map Name: " << Name << "\n";
+  OS << "Size: " << Map.size() << "\n";
+  for (ValueMapType::const_iterator I = Map.begin(),
+         E = Map.end(); I != E; ++I) {
+
+    const Value *V = I->first;
+    if (V->hasName())
+      OS << "Value: " << V->getName();
+    else
+      OS << "Value: [null]\n";
+    V->dump();
+
+    OS << " Uses(" << std::distance(V->use_begin(),V->use_end()) << "):";
+    for (const Use &U : V->uses()) {
+      if (&U != &*V->use_begin())
+        OS << ",";
+      if(U->hasName())
+        OS << " " << U->getName();
+      else
+        OS << " [null]";
+
+    }
+    OS <<  "\n\n";
+  }
+}
+
+void ValueEnumerator::print(llvm::raw_ostream &OS, const MetadataMapType &Map,
+                            const char *Name) const {
+
+  OS << "Map Name: " << Name << "\n";
+  OS << "Size: " << Map.size() << "\n";
+  for (auto I = Map.begin(), E = Map.end(); I != E; ++I) {
+    const llvm::Metadata *MD = I->first;
+    OS << "Metadata: slot = " << I->second << "\n";
+    MD->print(OS);
+  }
+}
+
+
+// Optimize constant ordering.
+namespace {
+  struct CstSortPredicate {
+    ValueEnumerator &VE;
+    explicit CstSortPredicate(ValueEnumerator &ve) : VE(ve) {}
+    bool operator()(const std::pair<const Value*, unsigned> &LHS,
+                    const std::pair<const Value*, unsigned> &RHS) {
+      // Sort by plane.
+      if (LHS.first->getType() != RHS.first->getType())
+        return VE.getTypeID(LHS.first->getType()) <
+               VE.getTypeID(RHS.first->getType());
+      // Then by frequency.
+      return LHS.second > RHS.second;
+    }
+  };
+}
+
+/// OptimizeConstants - Reorder constant pool for denser encoding.
+void ValueEnumerator::OptimizeConstants(unsigned CstStart, unsigned CstEnd) {
+  if (CstStart == CstEnd || CstStart+1 == CstEnd) return;
+
+  CstSortPredicate P(*this);
+  std::stable_sort(Values.begin()+CstStart, Values.begin()+CstEnd, P);
+
+  // Ensure that integer and vector of integer constants are at the start of the
+  // constant pool.  This is important so that GEP structure indices come before
+  // gep constant exprs.
+  std::partition(Values.begin()+CstStart, Values.begin()+CstEnd,
+                 isIntOrIntVectorValue);
+
+  // Rebuild the modified portion of ValueMap.
+  for (; CstStart != CstEnd; ++CstStart)
+    ValueMap[Values[CstStart].first] = CstStart+1;
+}
+
+
+/// EnumerateValueSymbolTable - Insert all of the values in the specified symbol
+/// table into the values table.
+void ValueEnumerator::EnumerateValueSymbolTable(const ValueSymbolTable &VST) {
+  for (ValueSymbolTable::const_iterator VI = VST.begin(), VE = VST.end();
+       VI != VE; ++VI)
+    EnumerateValue(VI->getValue());
+}
+
+/// EnumerateNamedMetadata - Insert all of the values referenced by
+/// named metadata in the specified module.
+void ValueEnumerator::EnumerateNamedMetadata(const llvm::Module &M) {
+  for (llvm::Module::const_named_metadata_iterator I = M.named_metadata_begin(),
+                                             E = M.named_metadata_end();
+       I != E; ++I)
+    EnumerateNamedMDNode(&*I);
+}
+
+void ValueEnumerator::EnumerateNamedMDNode(const NamedMDNode *MD) {
+  for (unsigned i = 0, e = MD->getNumOperands(); i != e; ++i)
+    EnumerateMetadata(MD->getOperand(i));
+}
+
+/// EnumerateMDNodeOperands - Enumerate all non-function-local values
+/// and types referenced by the given MDNode.
+void ValueEnumerator::EnumerateMDNodeOperands(const MDNode *N) {
+  for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) {
+    Metadata *MD = N->getOperand(i);
+    if (!MD)
+      continue;
+    assert(!isa<LocalAsMetadata>(MD) && "MDNodes cannot be function-local");
+    EnumerateMetadata(MD);
+  }
+}
+
+void ValueEnumerator::EnumerateMetadata(const llvm::Metadata *MD) {
+  assert(
+      (isa<MDNode>(MD) || isa<MDString>(MD) || isa<ConstantAsMetadata>(MD)) &&
+      "Invalid metadata kind");
+
+  // Insert a dummy ID to block the co-recursive call to
+  // EnumerateMDNodeOperands() from re-visiting MD in a cyclic graph.
+  //
+  // Return early if there's already an ID.
+  if (!MDValueMap.insert(std::make_pair(MD, 0)).second)
+    return;
+
+  // Visit operands first to minimize RAUW.
+  if (auto *N = dyn_cast<MDNode>(MD))
+    EnumerateMDNodeOperands(N);
+  else if (auto *C = dyn_cast<ConstantAsMetadata>(MD))
+    EnumerateValue(C->getValue());
+
+  HasMDString |= isa<MDString>(MD);
+  HasDILocation |= isa<DILocation>(MD);
+
+  // Replace the dummy ID inserted above with the correct one.  MDValueMap may
+  // have changed by inserting operands, so we need a fresh lookup here.
+  MDs.push_back(MD);
+  MDValueMap[MD] = MDs.size();
+}
+
+/// EnumerateFunctionLocalMetadataa - Incorporate function-local metadata
+/// information reachable from the metadata.
+void ValueEnumerator::EnumerateFunctionLocalMetadata(
+    const llvm::LocalAsMetadata *Local) {
+  // Check to see if it's already in!
+  unsigned &MDValueID = MDValueMap[Local];
+  if (MDValueID)
+    return;
+
+  MDs.push_back(Local);
+  MDValueID = MDs.size();
+
+  EnumerateValue(Local->getValue());
+
+  // Also, collect all function-local metadata for easy access.
+  FunctionLocalMDs.push_back(Local);
+}
+
+void ValueEnumerator::EnumerateValue(const Value *V) {
+  assert(!V->getType()->isVoidTy() && "Can't insert void values!");
+  assert(!isa<MetadataAsValue>(V) && "EnumerateValue doesn't handle Metadata!");
+
+  // Check to see if it's already in!
+  unsigned &ValueID = ValueMap[V];
+  if (ValueID) {
+    // Increment use count.
+    Values[ValueID-1].second++;
+    return;
+  }
+
+  // Enumerate the type of this value.
+  EnumerateType(V->getType());
+
+  if (const Constant *C = dyn_cast<Constant>(V)) {
+    if (isa<GlobalValue>(C)) {
+      // Initializers for globals are handled explicitly elsewhere.
+    } else if (C->getNumOperands()) {
+      // If a constant has operands, enumerate them.  This makes sure that if a
+      // constant has uses (for example an array of const ints), that they are
+      // inserted also.
+
+      // We prefer to enumerate them with values before we enumerate the user
+      // itself.  This makes it more likely that we can avoid forward references
+      // in the reader.  We know that there can be no cycles in the constants
+      // graph that don't go through a global variable.
+      for (User::const_op_iterator I = C->op_begin(), E = C->op_end();
+           I != E; ++I)
+        if (!isa<BasicBlock>(*I)) // Don't enumerate BB operand to BlockAddress.
+          EnumerateValue(*I);
+
+      // Finally, add the value.  Doing this could make the ValueID reference be
+      // dangling, don't reuse it.
+      Values.push_back(std::make_pair(V, 1U));
+      ValueMap[V] = Values.size();
+      return;
+    } else if (const ConstantDataSequential *CDS =
+               dyn_cast<ConstantDataSequential>(C)) {
+      // For our legacy handling of the new ConstantDataSequential type, we
+      // need to enumerate the individual elements, as well as mark the
+      // outer constant as used.
+      for (unsigned i = 0, e = CDS->getNumElements(); i != e; ++i)
+        EnumerateValue(CDS->getElementAsConstant(i));
+      Values.push_back(std::make_pair(V, 1U));
+      ValueMap[V] = Values.size();
+      return;
+    }
+  }
+
+  // Add the value.
+  Values.push_back(std::make_pair(V, 1U));
+  ValueID = Values.size();
+}
+
+
+void ValueEnumerator::EnumerateType(Type *Ty) {
+  unsigned *TypeID = &TypeMap[Ty];
+
+  // We've already seen this type.
+  if (*TypeID)
+    return;
+
+  // If it is a non-anonymous struct, mark the type as being visited so that we
+  // don't recursively visit it.  This is safe because we allow forward
+  // references of these in the bitcode reader.
+  if (StructType *STy = dyn_cast<StructType>(Ty))
+    if (!STy->isLiteral())
+      *TypeID = ~0U;
+
+  // Enumerate all of the subtypes before we enumerate this type.  This ensures
+  // that the type will be enumerated in an order that can be directly built.
+  for (Type *SubTy : Ty->subtypes())
+    EnumerateType(SubTy);
+
+  // Refresh the TypeID pointer in case the table rehashed.
+  TypeID = &TypeMap[Ty];
+
+  // Check to see if we got the pointer another way.  This can happen when
+  // enumerating recursive types that hit the base case deeper than they start.
+  //
+  // If this is actually a struct that we are treating as forward ref'able,
+  // then emit the definition now that all of its contents are available.
+  if (*TypeID && *TypeID != ~0U)
+    return;
+
+  // Add this type now that its contents are all happily enumerated.
+  Types.push_back(Ty);
+
+  *TypeID = Types.size();
+}
+
+// Enumerate the types for the specified value.  If the value is a constant,
+// walk through it, enumerating the types of the constant.
+void ValueEnumerator::EnumerateOperandType(const Value *V) {
+  EnumerateType(V->getType());
+
+  if (auto *MD = dyn_cast<MetadataAsValue>(V)) {
+    assert(!isa<LocalAsMetadata>(MD->getMetadata()) &&
+           "Function-local metadata should be left for later");
+
+    EnumerateMetadata(MD->getMetadata());
+    return;
+  }
+
+  const Constant *C = dyn_cast<Constant>(V);
+  if (!C)
+    return;
+
+  // If this constant is already enumerated, ignore it, we know its type must
+  // be enumerated.
+  if (ValueMap.count(C))
+    return;
+
+  // This constant may have operands, make sure to enumerate the types in
+  // them.
+  for (unsigned i = 0, e = C->getNumOperands(); i != e; ++i) {
+    const Value *Op = C->getOperand(i);
+
+    // Don't enumerate basic blocks here, this happens as operands to
+    // blockaddress.
+    if (isa<BasicBlock>(Op))
+      continue;
+
+    EnumerateOperandType(Op);
+  }
+}
+
+void ValueEnumerator::EnumerateAttributes(AttributeSet PAL) {
+  if (PAL.isEmpty()) return;  // null is always 0.
+
+  // Do a lookup.
+  unsigned &Entry = AttributeMap[PAL];
+  if (Entry == 0) {
+    // Never saw this before, add it.
+    Attribute.push_back(PAL);
+    Entry = Attribute.size();
+  }
+
+  // Do lookups for all attribute groups.
+  for (unsigned i = 0, e = PAL.getNumSlots(); i != e; ++i) {
+    AttributeSet AS = PAL.getSlotAttributes(i);
+    unsigned &Entry = AttributeGroupMap[AS];
+    if (Entry == 0) {
+      AttributeGroups.push_back(AS);
+      Entry = AttributeGroups.size();
+    }
+  }
+}
+
+void ValueEnumerator::incorporateFunction(const Function &F) {
+  InstructionCount = 0;
+  NumModuleValues = Values.size();
+  NumModuleMDs = MDs.size();
+
+  // Adding function arguments to the value table.
+  for (Function::const_arg_iterator I = F.arg_begin(), E = F.arg_end();
+       I != E; ++I)
+    EnumerateValue(&*I);
+
+  FirstFuncConstantID = Values.size();
+
+  // Add all function-level constants to the value table.
+  for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB) {
+    for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I!=E; ++I)
+      for (User::const_op_iterator OI = I->op_begin(), E = I->op_end();
+           OI != E; ++OI) {
+        if ((isa<Constant>(*OI) && !isa<GlobalValue>(*OI)) ||
+            isa<InlineAsm>(*OI))
+          EnumerateValue(*OI);
+      }
+    BasicBlocks.push_back(&*BB);
+    ValueMap[&*BB] = BasicBlocks.size();
+  }
+
+  // Optimize the constant layout.
+  OptimizeConstants(FirstFuncConstantID, Values.size());
+
+  // Add the function's parameter attributes so they are available for use in
+  // the function's instruction.
+  EnumerateAttributes(F.getAttributes());
+
+  FirstInstID = Values.size();
+
+  SmallVector<llvm::LocalAsMetadata *, 8> FnLocalMDVector;
+  // Add all of the instructions.
+  for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB) {
+    for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I!=E; ++I) {
+      for (User::const_op_iterator OI = I->op_begin(), E = I->op_end();
+           OI != E; ++OI) {
+        if (auto *MD = dyn_cast<llvm::MetadataAsValue>(&*OI))
+          if (auto *Local = dyn_cast<LocalAsMetadata>(MD->getMetadata()))
+            // Enumerate metadata after the instructions they might refer to.
+            FnLocalMDVector.push_back(Local);
+      }
+
+      if (!I->getType()->isVoidTy())
+        EnumerateValue(&*I);
+    }
+  }
+
+  // Add all of the function-local metadata.
+  for (unsigned i = 0, e = FnLocalMDVector.size(); i != e; ++i)
+    EnumerateFunctionLocalMetadata(FnLocalMDVector[i]);
+}
+
+void ValueEnumerator::purgeFunction() {
+  /// Remove purged values from the ValueMap.
+  for (unsigned i = NumModuleValues, e = Values.size(); i != e; ++i)
+    ValueMap.erase(Values[i].first);
+  for (unsigned i = NumModuleMDs, e = MDs.size(); i != e; ++i)
+    MDValueMap.erase(MDs[i]);
+  for (unsigned i = 0, e = BasicBlocks.size(); i != e; ++i)
+    ValueMap.erase(BasicBlocks[i]);
+
+  Values.resize(NumModuleValues);
+  MDs.resize(NumModuleMDs);
+  BasicBlocks.clear();
+  FunctionLocalMDs.clear();
+}
+
+static void IncorporateFunctionInfoGlobalBBIDs(const Function *F,
+                                 DenseMap<const BasicBlock*, unsigned> &IDMap) {
+  unsigned Counter = 0;
+  for (Function::const_iterator BB = F->begin(), E = F->end(); BB != E; ++BB)
+    IDMap[&*BB] = ++Counter;
+}
+
+/// getGlobalBasicBlockID - This returns the function-specific ID for the
+/// specified basic block.  This is relatively expensive information, so it
+/// should only be used by rare constructs such as address-of-label.
+unsigned ValueEnumerator::getGlobalBasicBlockID(const BasicBlock *BB) const {
+  unsigned &Idx = GlobalBasicBlockIDs[BB];
+  if (Idx != 0)
+    return Idx-1;
+
+  IncorporateFunctionInfoGlobalBBIDs(BB->getParent(), GlobalBasicBlockIDs);
+  return getGlobalBasicBlockID(BB);
+}
+
+} // end llvm_2_9 namespace
diff --git a/slang/BitWriter_2_9/ValueEnumerator.h b/slang/BitWriter_2_9/ValueEnumerator.h
new file mode 100644
index 0000000..1812cd8
--- /dev/null
+++ b/slang/BitWriter_2_9/ValueEnumerator.h
@@ -0,0 +1,195 @@
+//===-- Bitcode/Writer/ValueEnumerator.h - Number values --------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This class gives values and types Unique ID's.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef VALUE_ENUMERATOR_H
+#define VALUE_ENUMERATOR_H
+
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/IR/Attributes.h"
+#include <vector>
+
+namespace llvm {
+
+class Type;
+class Value;
+class Instruction;
+class BasicBlock;
+class Function;
+class Module;
+class Metadata;
+class LocalAsMetadata;
+class MDNode;
+class NamedMDNode;
+class AttributeSet;
+class ValueSymbolTable;
+class MDSymbolTable;
+class raw_ostream;
+
+}  // end llvm namespace
+
+namespace llvm_2_9 {
+
+class ValueEnumerator {
+public:
+  typedef std::vector<llvm::Type*> TypeList;
+
+  // For each value, we remember its Value* and occurrence frequency.
+  typedef std::vector<std::pair<const llvm::Value*, unsigned> > ValueList;
+private:
+  typedef llvm::DenseMap<llvm::Type*, unsigned> TypeMapType;
+  TypeMapType TypeMap;
+  TypeList Types;
+
+  typedef llvm::DenseMap<const llvm::Value*, unsigned> ValueMapType;
+  ValueMapType ValueMap;
+  ValueList Values;
+
+
+  std::vector<const llvm::Metadata *> MDs;
+  llvm::SmallVector<const llvm::LocalAsMetadata *, 8> FunctionLocalMDs;
+  typedef llvm::DenseMap<const llvm::Metadata *, unsigned> MetadataMapType;
+  MetadataMapType MDValueMap;
+  bool HasMDString;
+  bool HasDILocation;
+
+  typedef llvm::DenseMap<llvm::AttributeSet, unsigned> AttributeGroupMapType;
+  AttributeGroupMapType AttributeGroupMap;
+  std::vector<llvm::AttributeSet> AttributeGroups;
+
+  typedef llvm::DenseMap<llvm::AttributeSet, unsigned> AttributeMapType;
+  AttributeMapType AttributeMap;
+  std::vector<llvm::AttributeSet> Attribute;
+
+  /// GlobalBasicBlockIDs - This map memoizes the basic block ID's referenced by
+  /// the "getGlobalBasicBlockID" method.
+  mutable llvm::DenseMap<const llvm::BasicBlock*, unsigned> GlobalBasicBlockIDs;
+
+  typedef llvm::DenseMap<const llvm::Instruction*, unsigned> InstructionMapType;
+  InstructionMapType InstructionMap;
+  unsigned InstructionCount;
+
+  /// BasicBlocks - This contains all the basic blocks for the currently
+  /// incorporated function.  Their reverse mapping is stored in ValueMap.
+  std::vector<const llvm::BasicBlock*> BasicBlocks;
+
+  /// When a function is incorporated, this is the size of the Values list
+  /// before incorporation.
+  unsigned NumModuleValues;
+
+  /// When a function is incorporated, this is the size of the MDValues list
+  /// before incorporation.
+  unsigned NumModuleMDs;
+
+  unsigned FirstFuncConstantID;
+  unsigned FirstInstID;
+
+  ValueEnumerator(const ValueEnumerator &) = delete;
+  void operator=(const ValueEnumerator &) = delete;
+public:
+  explicit ValueEnumerator(const llvm::Module &M);
+
+  void dump() const;
+  void print(llvm::raw_ostream &OS, const ValueMapType &Map, const char *Name) const;
+  void print(llvm::raw_ostream &OS, const MetadataMapType &Map,
+             const char *Name) const;
+
+  unsigned getValueID(const llvm::Value *V) const;
+  unsigned getMetadataID(const llvm::Metadata *MD) const {
+    auto ID = getMetadataOrNullID(MD);
+    assert(ID != 0 && "Metadata not in slotcalculator!");
+    return ID - 1;
+  }
+  unsigned getMetadataOrNullID(const llvm::Metadata *MD) const {
+    return MDValueMap.lookup(MD);
+  }
+
+  bool hasMDString() const { return HasMDString; }
+  bool hasDILocation() const { return HasDILocation; }
+
+  unsigned getTypeID(llvm::Type *T) const {
+    TypeMapType::const_iterator I = TypeMap.find(T);
+    assert(I != TypeMap.end() && "Type not in ValueEnumerator!");
+    return I->second-1;
+  }
+
+  unsigned getInstructionID(const llvm::Instruction *I) const;
+  void setInstructionID(const llvm::Instruction *I);
+
+  unsigned getAttributeID(llvm::AttributeSet PAL) const {
+    if (PAL.isEmpty()) return 0;  // Null maps to zero.
+    AttributeMapType::const_iterator I = AttributeMap.find(PAL);
+    assert(I != AttributeMap.end() && "Attribute not in ValueEnumerator!");
+    return I->second;
+  }
+
+  unsigned getAttributeGroupID(llvm::AttributeSet PAL) const {
+    if (PAL.isEmpty()) return 0;  // Null maps to zero.
+    AttributeGroupMapType::const_iterator I = AttributeGroupMap.find(PAL);
+    assert(I != AttributeGroupMap.end() && "Attribute not in ValueEnumerator!");
+    return I->second;
+  }
+
+  /// getFunctionConstantRange - Return the range of values that corresponds to
+  /// function-local constants.
+  void getFunctionConstantRange(unsigned &Start, unsigned &End) const {
+    Start = FirstFuncConstantID;
+    End = FirstInstID;
+  }
+
+  const ValueList &getValues() const { return Values; }
+  const std::vector<const llvm::Metadata *> &getMDs() const { return MDs; }
+  const llvm::SmallVectorImpl<const llvm::LocalAsMetadata *> &getFunctionLocalMDs() const {
+    return FunctionLocalMDs;
+  }
+  const TypeList &getTypes() const { return Types; }
+  const std::vector<const llvm::BasicBlock*> &getBasicBlocks() const {
+    return BasicBlocks;
+  }
+  const std::vector<llvm::AttributeSet> &getAttributes() const {
+    return Attribute;
+  }
+  const std::vector<llvm::AttributeSet> &getAttributeGroups() const {
+    return AttributeGroups;
+  }
+
+  /// getGlobalBasicBlockID - This returns the function-specific ID for the
+  /// specified basic block.  This is relatively expensive information, so it
+  /// should only be used by rare constructs such as address-of-label.
+  unsigned getGlobalBasicBlockID(const llvm::BasicBlock *BB) const;
+
+  /// incorporateFunction/purgeFunction - If you'd like to deal with a function,
+  /// use these two methods to get its data into the ValueEnumerator!
+  ///
+  void incorporateFunction(const llvm::Function &F);
+  void purgeFunction();
+
+private:
+  void OptimizeConstants(unsigned CstStart, unsigned CstEnd);
+
+  void EnumerateMDNodeOperands(const llvm::MDNode *N);
+  void EnumerateMetadata(const llvm::Metadata *MD);
+  void EnumerateFunctionLocalMetadata(const llvm::LocalAsMetadata *Local);
+  void EnumerateNamedMDNode(const llvm::NamedMDNode *NMD);
+  void EnumerateValue(const llvm::Value *V);
+  void EnumerateType(llvm::Type *T);
+  void EnumerateOperandType(const llvm::Value *V);
+  void EnumerateAttributes(llvm::AttributeSet PAL);
+
+  void EnumerateValueSymbolTable(const llvm::ValueSymbolTable &ST);
+  void EnumerateNamedMetadata(const llvm::Module &M);
+};
+
+}  // end llvm_2_9 namespace
+
+#endif
diff --git a/slang/BitWriter_2_9_func/Android.mk b/slang/BitWriter_2_9_func/Android.mk
new file mode 100644
index 0000000..a33313a
--- /dev/null
+++ b/slang/BitWriter_2_9_func/Android.mk
@@ -0,0 +1,28 @@
+LOCAL_PATH:= $(call my-dir)
+
+LLVM_ROOT_PATH := $(LOCAL_PATH)/../../../../external/llvm
+include $(LLVM_ROOT_PATH)/llvm.mk
+
+bitcode_writer_2_9_func_SRC_FILES :=	\
+	BitcodeWriter.cpp	\
+	BitcodeWriterPass.cpp	\
+	ValueEnumerator.cpp
+
+# For the host
+# =====================================================
+include $(CLEAR_VARS)
+
+LOCAL_CFLAGS += $(local_cflags_for_slang)
+LOCAL_C_INCLUDES += frameworks/compile/slang
+
+LOCAL_SRC_FILES := $(bitcode_writer_2_9_func_SRC_FILES)
+
+LOCAL_MODULE:= libLLVMBitWriter_2_9_func
+
+LOCAL_MODULE_HOST_OS := darwin linux windows
+
+include $(LLVM_HOST_BUILD_MK)
+include $(LLVM_GEN_ATTRIBUTES_MK)
+include $(LLVM_GEN_INTRINSICS_MK)
+include $(BUILD_HOST_STATIC_LIBRARY)
+
diff --git a/slang/BitWriter_2_9_func/BitcodeWriter.cpp b/slang/BitWriter_2_9_func/BitcodeWriter.cpp
new file mode 100644
index 0000000..4ef7ac2
--- /dev/null
+++ b/slang/BitWriter_2_9_func/BitcodeWriter.cpp
@@ -0,0 +1,1803 @@
+//===--- Bitcode/Writer/BitcodeWriter.cpp - Bitcode Writer ----------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Bitcode writer implementation.
+//
+//===----------------------------------------------------------------------===//
+
+#include "ReaderWriter_2_9_func.h"
+#include "legacy_bitcode.h"
+#include "ValueEnumerator.h"
+#include "llvm/ADT/Triple.h"
+#include "llvm/Bitcode/BitstreamWriter.h"
+#include "llvm/Bitcode/LLVMBitCodes.h"
+#include "llvm/IR/Constants.h"
+#include "llvm/IR/DebugInfoMetadata.h"
+#include "llvm/IR/DerivedTypes.h"
+#include "llvm/IR/InlineAsm.h"
+#include "llvm/IR/Instructions.h"
+#include "llvm/IR/Module.h"
+#include "llvm/IR/Operator.h"
+#include "llvm/IR/ValueSymbolTable.h"
+#include "llvm/Support/ErrorHandling.h"
+#include "llvm/Support/MathExtras.h"
+#include "llvm/Support/Program.h"
+#include "llvm/Support/raw_ostream.h"
+#include <cctype>
+#include <map>
+using namespace llvm;
+
+/// These are manifest constants used by the bitcode writer. They do not need to
+/// be kept in sync with the reader, but need to be consistent within this file.
+enum {
+  CurVersion = 0,
+
+  // VALUE_SYMTAB_BLOCK abbrev id's.
+  VST_ENTRY_8_ABBREV = bitc::FIRST_APPLICATION_ABBREV,
+  VST_ENTRY_7_ABBREV,
+  VST_ENTRY_6_ABBREV,
+  VST_BBENTRY_6_ABBREV,
+
+  // CONSTANTS_BLOCK abbrev id's.
+  CONSTANTS_SETTYPE_ABBREV = bitc::FIRST_APPLICATION_ABBREV,
+  CONSTANTS_INTEGER_ABBREV,
+  CONSTANTS_CE_CAST_Abbrev,
+  CONSTANTS_NULL_Abbrev,
+
+  // FUNCTION_BLOCK abbrev id's.
+  FUNCTION_INST_LOAD_ABBREV = bitc::FIRST_APPLICATION_ABBREV,
+  FUNCTION_INST_BINOP_ABBREV,
+  FUNCTION_INST_BINOP_FLAGS_ABBREV,
+  FUNCTION_INST_CAST_ABBREV,
+  FUNCTION_INST_RET_VOID_ABBREV,
+  FUNCTION_INST_RET_VAL_ABBREV,
+  FUNCTION_INST_UNREACHABLE_ABBREV
+};
+
+static unsigned GetEncodedCastOpcode(unsigned Opcode) {
+  switch (Opcode) {
+  default: llvm_unreachable("Unknown cast instruction!");
+  case Instruction::Trunc   : return bitc::CAST_TRUNC;
+  case Instruction::ZExt    : return bitc::CAST_ZEXT;
+  case Instruction::SExt    : return bitc::CAST_SEXT;
+  case Instruction::FPToUI  : return bitc::CAST_FPTOUI;
+  case Instruction::FPToSI  : return bitc::CAST_FPTOSI;
+  case Instruction::UIToFP  : return bitc::CAST_UITOFP;
+  case Instruction::SIToFP  : return bitc::CAST_SITOFP;
+  case Instruction::FPTrunc : return bitc::CAST_FPTRUNC;
+  case Instruction::FPExt   : return bitc::CAST_FPEXT;
+  case Instruction::PtrToInt: return bitc::CAST_PTRTOINT;
+  case Instruction::IntToPtr: return bitc::CAST_INTTOPTR;
+  case Instruction::BitCast : return bitc::CAST_BITCAST;
+  }
+}
+
+static unsigned GetEncodedBinaryOpcode(unsigned Opcode) {
+  switch (Opcode) {
+  default: llvm_unreachable("Unknown binary instruction!");
+  case Instruction::Add:
+  case Instruction::FAdd: return bitc::BINOP_ADD;
+  case Instruction::Sub:
+  case Instruction::FSub: return bitc::BINOP_SUB;
+  case Instruction::Mul:
+  case Instruction::FMul: return bitc::BINOP_MUL;
+  case Instruction::UDiv: return bitc::BINOP_UDIV;
+  case Instruction::FDiv:
+  case Instruction::SDiv: return bitc::BINOP_SDIV;
+  case Instruction::URem: return bitc::BINOP_UREM;
+  case Instruction::FRem:
+  case Instruction::SRem: return bitc::BINOP_SREM;
+  case Instruction::Shl:  return bitc::BINOP_SHL;
+  case Instruction::LShr: return bitc::BINOP_LSHR;
+  case Instruction::AShr: return bitc::BINOP_ASHR;
+  case Instruction::And:  return bitc::BINOP_AND;
+  case Instruction::Or:   return bitc::BINOP_OR;
+  case Instruction::Xor:  return bitc::BINOP_XOR;
+  }
+}
+
+static unsigned GetEncodedRMWOperation(AtomicRMWInst::BinOp Op) {
+  switch (Op) {
+  default: llvm_unreachable("Unknown RMW operation!");
+  case AtomicRMWInst::Xchg: return bitc::RMW_XCHG;
+  case AtomicRMWInst::Add: return bitc::RMW_ADD;
+  case AtomicRMWInst::Sub: return bitc::RMW_SUB;
+  case AtomicRMWInst::And: return bitc::RMW_AND;
+  case AtomicRMWInst::Nand: return bitc::RMW_NAND;
+  case AtomicRMWInst::Or: return bitc::RMW_OR;
+  case AtomicRMWInst::Xor: return bitc::RMW_XOR;
+  case AtomicRMWInst::Max: return bitc::RMW_MAX;
+  case AtomicRMWInst::Min: return bitc::RMW_MIN;
+  case AtomicRMWInst::UMax: return bitc::RMW_UMAX;
+  case AtomicRMWInst::UMin: return bitc::RMW_UMIN;
+  }
+}
+
+static unsigned GetEncodedOrdering(AtomicOrdering Ordering) {
+  switch (Ordering) {
+  default: llvm_unreachable("Unknown atomic ordering");
+  case NotAtomic: return bitc::ORDERING_NOTATOMIC;
+  case Unordered: return bitc::ORDERING_UNORDERED;
+  case Monotonic: return bitc::ORDERING_MONOTONIC;
+  case Acquire: return bitc::ORDERING_ACQUIRE;
+  case Release: return bitc::ORDERING_RELEASE;
+  case AcquireRelease: return bitc::ORDERING_ACQREL;
+  case SequentiallyConsistent: return bitc::ORDERING_SEQCST;
+  }
+}
+
+static unsigned GetEncodedSynchScope(SynchronizationScope SynchScope) {
+  switch (SynchScope) {
+  default: llvm_unreachable("Unknown synchronization scope");
+  case SingleThread: return bitc::SYNCHSCOPE_SINGLETHREAD;
+  case CrossThread: return bitc::SYNCHSCOPE_CROSSTHREAD;
+  }
+}
+
+static void WriteStringRecord(unsigned Code, StringRef Str,
+                              unsigned AbbrevToUse, BitstreamWriter &Stream) {
+  SmallVector<unsigned, 64> Vals;
+
+  // Code: [strchar x N]
+  for (unsigned i = 0, e = Str.size(); i != e; ++i) {
+    if (AbbrevToUse && !BitCodeAbbrevOp::isChar6(Str[i]))
+      AbbrevToUse = 0;
+    Vals.push_back(Str[i]);
+  }
+
+  // Emit the finished record.
+  Stream.EmitRecord(Code, Vals, AbbrevToUse);
+}
+
+// Emit information about parameter attributes.
+static void WriteAttributeTable(const llvm_2_9_func::ValueEnumerator &VE,
+                                BitstreamWriter &Stream) {
+  const std::vector<AttributeSet> &Attrs = VE.getAttributes();
+  if (Attrs.empty()) return;
+
+  Stream.EnterSubblock(bitc::PARAMATTR_BLOCK_ID, 3);
+
+  SmallVector<uint64_t, 64> Record;
+  for (unsigned i = 0, e = Attrs.size(); i != e; ++i) {
+    const AttributeSet &A = Attrs[i];
+    for (unsigned i = 0, e = A.getNumSlots(); i != e; ++i) {
+      Record.push_back(A.getSlotIndex(i));
+      Record.push_back(encodeLLVMAttributesForBitcode(A, A.getSlotIndex(i)));
+    }
+
+    // This needs to use the 3.2 entry type
+    Stream.EmitRecord(bitc::PARAMATTR_CODE_ENTRY_OLD, Record);
+    Record.clear();
+  }
+
+  Stream.ExitBlock();
+}
+
+/// WriteTypeTable - Write out the type table for a module.
+static void WriteTypeTable(const llvm_2_9_func::ValueEnumerator &VE,
+                           BitstreamWriter &Stream) {
+  const llvm_2_9_func::ValueEnumerator::TypeList &TypeList = VE.getTypes();
+
+  Stream.EnterSubblock(bitc::TYPE_BLOCK_ID_NEW, 4 /*count from # abbrevs */);
+  SmallVector<uint64_t, 64> TypeVals;
+
+  uint64_t NumBits = Log2_32_Ceil(VE.getTypes().size()+1);
+
+  // Abbrev for TYPE_CODE_POINTER.
+  BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+  Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_POINTER));
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, NumBits));
+  Abbv->Add(BitCodeAbbrevOp(0));  // Addrspace = 0
+  unsigned PtrAbbrev = Stream.EmitAbbrev(Abbv);
+
+  // Abbrev for TYPE_CODE_FUNCTION.
+  Abbv = new BitCodeAbbrev();
+  Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_FUNCTION_OLD));
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));  // isvararg
+  Abbv->Add(BitCodeAbbrevOp(0));  // FIXME: DEAD value, remove in LLVM 3.0
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, NumBits));
+  unsigned FunctionAbbrev = Stream.EmitAbbrev(Abbv);
+
+  // Abbrev for TYPE_CODE_STRUCT_ANON.
+  Abbv = new BitCodeAbbrev();
+  Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_STRUCT_ANON));
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));  // ispacked
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, NumBits));
+  unsigned StructAnonAbbrev = Stream.EmitAbbrev(Abbv);
+
+  // Abbrev for TYPE_CODE_STRUCT_NAME.
+  Abbv = new BitCodeAbbrev();
+  Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_STRUCT_NAME));
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6));
+  unsigned StructNameAbbrev = Stream.EmitAbbrev(Abbv);
+
+  // Abbrev for TYPE_CODE_STRUCT_NAMED.
+  Abbv = new BitCodeAbbrev();
+  Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_STRUCT_NAMED));
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));  // ispacked
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, NumBits));
+  unsigned StructNamedAbbrev = Stream.EmitAbbrev(Abbv);
+
+  // Abbrev for TYPE_CODE_ARRAY.
+  Abbv = new BitCodeAbbrev();
+  Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_ARRAY));
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));   // size
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, NumBits));
+
+  unsigned ArrayAbbrev = Stream.EmitAbbrev(Abbv);
+
+  // Emit an entry count so the reader can reserve space.
+  TypeVals.push_back(TypeList.size());
+  Stream.EmitRecord(bitc::TYPE_CODE_NUMENTRY, TypeVals);
+  TypeVals.clear();
+
+  // Loop over all of the types, emitting each in turn.
+  for (unsigned i = 0, e = TypeList.size(); i != e; ++i) {
+    Type *T = TypeList[i];
+    int AbbrevToUse = 0;
+    unsigned Code = 0;
+
+    switch (T->getTypeID()) {
+    default: llvm_unreachable("Unknown type!");
+    case Type::VoidTyID:      Code = bitc::TYPE_CODE_VOID;   break;
+    case Type::FloatTyID:     Code = bitc::TYPE_CODE_FLOAT;  break;
+    case Type::DoubleTyID:    Code = bitc::TYPE_CODE_DOUBLE; break;
+    case Type::X86_FP80TyID:  Code = bitc::TYPE_CODE_X86_FP80; break;
+    case Type::FP128TyID:     Code = bitc::TYPE_CODE_FP128; break;
+    case Type::PPC_FP128TyID: Code = bitc::TYPE_CODE_PPC_FP128; break;
+    case Type::LabelTyID:     Code = bitc::TYPE_CODE_LABEL;  break;
+    case Type::MetadataTyID:  Code = bitc::TYPE_CODE_METADATA; break;
+    case Type::X86_MMXTyID:   Code = bitc::TYPE_CODE_X86_MMX; break;
+    case Type::IntegerTyID:
+      // INTEGER: [width]
+      Code = bitc::TYPE_CODE_INTEGER;
+      TypeVals.push_back(cast<IntegerType>(T)->getBitWidth());
+      break;
+    case Type::PointerTyID: {
+      PointerType *PTy = cast<PointerType>(T);
+      // POINTER: [pointee type, address space]
+      Code = bitc::TYPE_CODE_POINTER;
+      TypeVals.push_back(VE.getTypeID(PTy->getElementType()));
+      unsigned AddressSpace = PTy->getAddressSpace();
+      TypeVals.push_back(AddressSpace);
+      if (AddressSpace == 0) AbbrevToUse = PtrAbbrev;
+      break;
+    }
+    case Type::FunctionTyID: {
+      FunctionType *FT = cast<FunctionType>(T);
+      // FUNCTION: [isvararg, attrid, retty, paramty x N]
+      Code = bitc::TYPE_CODE_FUNCTION_OLD;
+      TypeVals.push_back(FT->isVarArg());
+      TypeVals.push_back(0);  // FIXME: DEAD: remove in llvm 3.0
+      TypeVals.push_back(VE.getTypeID(FT->getReturnType()));
+      for (unsigned i = 0, e = FT->getNumParams(); i != e; ++i)
+        TypeVals.push_back(VE.getTypeID(FT->getParamType(i)));
+      AbbrevToUse = FunctionAbbrev;
+      break;
+    }
+    case Type::StructTyID: {
+      StructType *ST = cast<StructType>(T);
+      // STRUCT: [ispacked, eltty x N]
+      TypeVals.push_back(ST->isPacked());
+      // Output all of the element types.
+      for (StructType::element_iterator I = ST->element_begin(),
+           E = ST->element_end(); I != E; ++I)
+        TypeVals.push_back(VE.getTypeID(*I));
+
+      if (ST->isLiteral()) {
+        Code = bitc::TYPE_CODE_STRUCT_ANON;
+        AbbrevToUse = StructAnonAbbrev;
+      } else {
+        if (ST->isOpaque()) {
+          Code = bitc::TYPE_CODE_OPAQUE;
+        } else {
+          Code = bitc::TYPE_CODE_STRUCT_NAMED;
+          AbbrevToUse = StructNamedAbbrev;
+        }
+
+        // Emit the name if it is present.
+        if (!ST->getName().empty())
+          WriteStringRecord(bitc::TYPE_CODE_STRUCT_NAME, ST->getName(),
+                            StructNameAbbrev, Stream);
+      }
+      break;
+    }
+    case Type::ArrayTyID: {
+      ArrayType *AT = cast<ArrayType>(T);
+      // ARRAY: [numelts, eltty]
+      Code = bitc::TYPE_CODE_ARRAY;
+      TypeVals.push_back(AT->getNumElements());
+      TypeVals.push_back(VE.getTypeID(AT->getElementType()));
+      AbbrevToUse = ArrayAbbrev;
+      break;
+    }
+    case Type::VectorTyID: {
+      VectorType *VT = cast<VectorType>(T);
+      // VECTOR [numelts, eltty]
+      Code = bitc::TYPE_CODE_VECTOR;
+      TypeVals.push_back(VT->getNumElements());
+      TypeVals.push_back(VE.getTypeID(VT->getElementType()));
+      break;
+    }
+    }
+
+    // Emit the finished record.
+    Stream.EmitRecord(Code, TypeVals, AbbrevToUse);
+    TypeVals.clear();
+  }
+
+  Stream.ExitBlock();
+}
+
+static unsigned getEncodedLinkage(const GlobalValue &GV) {
+  switch (GV.getLinkage()) {
+  case GlobalValue::ExternalLinkage:
+    return 0;
+  case GlobalValue::WeakAnyLinkage:
+    return 1;
+  case GlobalValue::AppendingLinkage:
+    return 2;
+  case GlobalValue::InternalLinkage:
+    return 3;
+  case GlobalValue::LinkOnceAnyLinkage:
+    return 4;
+  case GlobalValue::ExternalWeakLinkage:
+    return 7;
+  case GlobalValue::CommonLinkage:
+    return 8;
+  case GlobalValue::PrivateLinkage:
+    return 9;
+  case GlobalValue::WeakODRLinkage:
+    return 10;
+  case GlobalValue::LinkOnceODRLinkage:
+    return 11;
+  case GlobalValue::AvailableExternallyLinkage:
+    return 12;
+  }
+  llvm_unreachable("Invalid linkage");
+}
+
+static unsigned getEncodedVisibility(const GlobalValue &GV) {
+  switch (GV.getVisibility()) {
+  case GlobalValue::DefaultVisibility:   return 0;
+  case GlobalValue::HiddenVisibility:    return 1;
+  case GlobalValue::ProtectedVisibility: return 2;
+  }
+  llvm_unreachable("Invalid visibility");
+}
+
+// Emit top-level description of module, including target triple, inline asm,
+// descriptors for global variables, and function prototype info.
+static void WriteModuleInfo(const Module *M,
+                            const llvm_2_9_func::ValueEnumerator &VE,
+                            BitstreamWriter &Stream) {
+  // Emit various pieces of data attached to a module.
+  if (!M->getTargetTriple().empty())
+    WriteStringRecord(bitc::MODULE_CODE_TRIPLE, M->getTargetTriple(),
+                      0/*TODO*/, Stream);
+  const std::string &DL = M->getDataLayoutStr();
+  if (!DL.empty())
+    WriteStringRecord(bitc::MODULE_CODE_DATALAYOUT, DL, 0 /*TODO*/, Stream);
+  if (!M->getModuleInlineAsm().empty())
+    WriteStringRecord(bitc::MODULE_CODE_ASM, M->getModuleInlineAsm(),
+                      0/*TODO*/, Stream);
+
+  // Emit information about sections and GC, computing how many there are. Also
+  // compute the maximum alignment value.
+  std::map<std::string, unsigned> SectionMap;
+  std::map<std::string, unsigned> GCMap;
+  unsigned MaxAlignment = 0;
+  unsigned MaxGlobalType = 0;
+  for (const GlobalValue &GV : M->globals()) {
+    MaxAlignment = std::max(MaxAlignment, GV.getAlignment());
+    MaxGlobalType = std::max(MaxGlobalType, VE.getTypeID(GV.getType()));
+    if (GV.hasSection()) {
+      // Give section names unique ID's.
+      unsigned &Entry = SectionMap[GV.getSection()];
+      if (!Entry) {
+        WriteStringRecord(bitc::MODULE_CODE_SECTIONNAME, GV.getSection(),
+                          0/*TODO*/, Stream);
+        Entry = SectionMap.size();
+      }
+    }
+  }
+  for (const Function &F : *M) {
+    MaxAlignment = std::max(MaxAlignment, F.getAlignment());
+    if (F.hasSection()) {
+      // Give section names unique ID's.
+      unsigned &Entry = SectionMap[F.getSection()];
+      if (!Entry) {
+        WriteStringRecord(bitc::MODULE_CODE_SECTIONNAME, F.getSection(),
+                          0/*TODO*/, Stream);
+        Entry = SectionMap.size();
+      }
+    }
+    if (F.hasGC()) {
+      // Same for GC names.
+      unsigned &Entry = GCMap[F.getGC()];
+      if (!Entry) {
+        WriteStringRecord(bitc::MODULE_CODE_GCNAME, F.getGC(),
+                          0/*TODO*/, Stream);
+        Entry = GCMap.size();
+      }
+    }
+  }
+
+  // Emit abbrev for globals, now that we know # sections and max alignment.
+  unsigned SimpleGVarAbbrev = 0;
+  if (!M->global_empty()) {
+    // Add an abbrev for common globals with no visibility or thread localness.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::MODULE_CODE_GLOBALVAR));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
+                              Log2_32_Ceil(MaxGlobalType+1)));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));      // Constant.
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));        // Initializer.
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4));      // Linkage.
+    if (MaxAlignment == 0)                                      // Alignment.
+      Abbv->Add(BitCodeAbbrevOp(0));
+    else {
+      unsigned MaxEncAlignment = Log2_32(MaxAlignment)+1;
+      Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
+                               Log2_32_Ceil(MaxEncAlignment+1)));
+    }
+    if (SectionMap.empty())                                    // Section.
+      Abbv->Add(BitCodeAbbrevOp(0));
+    else
+      Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
+                               Log2_32_Ceil(SectionMap.size()+1)));
+    // Don't bother emitting vis + thread local.
+    SimpleGVarAbbrev = Stream.EmitAbbrev(Abbv);
+  }
+
+  // Emit the global variable information.
+  SmallVector<unsigned, 64> Vals;
+  for (const GlobalVariable &GV : M->globals()) {
+    unsigned AbbrevToUse = 0;
+
+    // GLOBALVAR: [type, isconst, initid,
+    //             linkage, alignment, section, visibility, threadlocal,
+    //             unnamed_addr]
+    Vals.push_back(VE.getTypeID(GV.getType()));
+    Vals.push_back(GV.isConstant());
+    Vals.push_back(GV.isDeclaration() ? 0 :
+                   (VE.getValueID(GV.getInitializer()) + 1));
+    Vals.push_back(getEncodedLinkage(GV));
+    Vals.push_back(Log2_32(GV.getAlignment())+1);
+    Vals.push_back(GV.hasSection() ? SectionMap[GV.getSection()] : 0);
+    if (GV.isThreadLocal() ||
+        GV.getVisibility() != GlobalValue::DefaultVisibility ||
+        GV.hasUnnamedAddr()) {
+      Vals.push_back(getEncodedVisibility(GV));
+      Vals.push_back(GV.isThreadLocal());
+      Vals.push_back(GV.hasUnnamedAddr());
+    } else {
+      AbbrevToUse = SimpleGVarAbbrev;
+    }
+
+    Stream.EmitRecord(bitc::MODULE_CODE_GLOBALVAR, Vals, AbbrevToUse);
+    Vals.clear();
+  }
+
+  // Emit the function proto information.
+  for (const Function &F : *M) {
+    // FUNCTION:  [type, callingconv, isproto, paramattr,
+    //             linkage, alignment, section, visibility, gc, unnamed_addr]
+    Vals.push_back(VE.getTypeID(F.getType()));
+    Vals.push_back(F.getCallingConv());
+    Vals.push_back(F.isDeclaration());
+    Vals.push_back(getEncodedLinkage(F));
+    Vals.push_back(VE.getAttributeID(F.getAttributes()));
+    Vals.push_back(Log2_32(F.getAlignment())+1);
+    Vals.push_back(F.hasSection() ? SectionMap[F.getSection()] : 0);
+    Vals.push_back(getEncodedVisibility(F));
+    Vals.push_back(F.hasGC() ? GCMap[F.getGC()] : 0);
+    Vals.push_back(F.hasUnnamedAddr());
+
+    unsigned AbbrevToUse = 0;
+    Stream.EmitRecord(bitc::MODULE_CODE_FUNCTION, Vals, AbbrevToUse);
+    Vals.clear();
+  }
+
+  // Emit the alias information.
+  for (const GlobalAlias &A : M->aliases()) {
+    Vals.push_back(VE.getTypeID(A.getType()));
+    Vals.push_back(VE.getValueID(A.getAliasee()));
+    Vals.push_back(getEncodedLinkage(A));
+    Vals.push_back(getEncodedVisibility(A));
+    unsigned AbbrevToUse = 0;
+    Stream.EmitRecord(bitc::MODULE_CODE_ALIAS_OLD, Vals, AbbrevToUse);
+    Vals.clear();
+  }
+}
+
+static uint64_t GetOptimizationFlags(const Value *V) {
+  uint64_t Flags = 0;
+
+  if (const auto *OBO = dyn_cast<OverflowingBinaryOperator>(V)) {
+    if (OBO->hasNoSignedWrap())
+      Flags |= 1 << bitc::OBO_NO_SIGNED_WRAP;
+    if (OBO->hasNoUnsignedWrap())
+      Flags |= 1 << bitc::OBO_NO_UNSIGNED_WRAP;
+  } else if (const auto *PEO = dyn_cast<PossiblyExactOperator>(V)) {
+    if (PEO->isExact())
+      Flags |= 1 << bitc::PEO_EXACT;
+  }
+
+  return Flags;
+}
+
+static void WriteValueAsMetadata(const ValueAsMetadata *MD,
+                                 const llvm_2_9_func::ValueEnumerator &VE,
+                                 BitstreamWriter &Stream,
+                                 SmallVectorImpl<uint64_t> &Record) {
+  // Mimic an MDNode with a value as one operand.
+  Value *V = MD->getValue();
+  Record.push_back(VE.getTypeID(V->getType()));
+  Record.push_back(VE.getValueID(V));
+  Stream.EmitRecord(bitc::METADATA_OLD_NODE, Record, 0);
+  Record.clear();
+}
+
+static void WriteMDTuple(const MDTuple *N, const llvm_2_9_func::ValueEnumerator &VE,
+                         BitstreamWriter &Stream,
+                         SmallVectorImpl<uint64_t> &Record, unsigned Abbrev) {
+  for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) {
+    Metadata *MD = N->getOperand(i);
+    assert(!(MD && isa<LocalAsMetadata>(MD)) &&
+           "Unexpected function-local metadata");
+    if (!MD) {
+      // TODO(srhines): I don't believe this case can exist for RS.
+      Record.push_back(VE.getTypeID(llvm::Type::getVoidTy(N->getContext())));
+      Record.push_back(0);
+    } else if (const auto *MDC = dyn_cast<ConstantAsMetadata>(MD)) {
+      Record.push_back(VE.getTypeID(MDC->getType()));
+      Record.push_back(VE.getValueID(MDC->getValue()));
+    } else {
+      Record.push_back(VE.getTypeID(
+          llvm::Type::getMetadataTy(N->getContext())));
+      Record.push_back(VE.getMetadataID(MD));
+    }
+  }
+  Stream.EmitRecord(bitc::METADATA_OLD_NODE, Record, Abbrev);
+  Record.clear();
+}
+
+/*static void WriteMDLocation(const MDLocation *N, const llvm_2_9_func::ValueEnumerator &VE,
+                            BitstreamWriter &Stream,
+                            SmallVectorImpl<uint64_t> &Record,
+                            unsigned Abbrev) {
+  Record.push_back(N->isDistinct());
+  Record.push_back(N->getLine());
+  Record.push_back(N->getColumn());
+  Record.push_back(VE.getMetadataID(N->getScope()));
+  Record.push_back(VE.getMetadataOrNullID(N->getInlinedAt()));
+
+  Stream.EmitRecord(bitc::METADATA_LOCATION, Record, Abbrev);
+  Record.clear();
+}
+
+static void WriteGenericDebugNode(const GenericDebugNode *,
+                                  const llvm_2_9_func::ValueEnumerator &, BitstreamWriter &,
+                                  SmallVectorImpl<uint64_t> &, unsigned) {
+  llvm_unreachable("unimplemented");
+}*/
+
+static void WriteModuleMetadata(const Module *M,
+                                const llvm_2_9_func::ValueEnumerator &VE,
+                                BitstreamWriter &Stream) {
+  const auto &MDs = VE.getMDs();
+  if (MDs.empty() && M->named_metadata_empty())
+    return;
+
+  // RenderScript files *ALWAYS* have metadata!
+  Stream.EnterSubblock(bitc::METADATA_BLOCK_ID, 3);
+
+  unsigned MDSAbbrev = 0;
+  if (VE.hasMDString()) {
+    // Abbrev for METADATA_STRING.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::METADATA_STRING));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8));
+    MDSAbbrev = Stream.EmitAbbrev(Abbv);
+  }
+
+  unsigned MDLocationAbbrev = 0;
+  if (VE.hasDILocation()) {
+    // TODO(srhines): Should be unreachable for RenderScript.
+    // Abbrev for METADATA_LOCATION.
+    //
+    // Assume the column is usually under 128, and always output the inlined-at
+    // location (it's never more expensive than building an array size 1).
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::METADATA_LOCATION));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
+    MDLocationAbbrev = Stream.EmitAbbrev(Abbv);
+  }
+
+  unsigned NameAbbrev = 0;
+  if (!M->named_metadata_empty()) {
+    // Abbrev for METADATA_NAME.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::METADATA_NAME));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8));
+    NameAbbrev = Stream.EmitAbbrev(Abbv);
+  }
+
+  unsigned MDTupleAbbrev = 0;
+  //unsigned GenericDebugNodeAbbrev = 0;
+  SmallVector<uint64_t, 64> Record;
+  for (const Metadata *MD : MDs) {
+    if (const MDNode *N = dyn_cast<MDNode>(MD)) {
+      switch (N->getMetadataID()) {
+      default:
+        llvm_unreachable("Invalid MDNode subclass");
+#define HANDLE_SPECIALIZED_MDNODE_LEAF(CLASS)
+#define HANDLE_MDNODE_LEAF(CLASS)                                              \
+  case Metadata::CLASS##Kind:                                                  \
+    Write##CLASS(cast<CLASS>(N), VE, Stream, Record, CLASS##Abbrev);           \
+    continue;
+#include "llvm/IR/Metadata.def"
+      }
+    }
+    if (const auto *MDC = dyn_cast<ConstantAsMetadata>(MD)) {
+      WriteValueAsMetadata(MDC, VE, Stream, Record);
+      continue;
+    }
+    const MDString *MDS = cast<MDString>(MD);
+    // Code: [strchar x N]
+    Record.append(MDS->bytes_begin(), MDS->bytes_end());
+
+    // Emit the finished record.
+    Stream.EmitRecord(bitc::METADATA_STRING, Record, MDSAbbrev);
+    Record.clear();
+  }
+
+  // Write named metadata.
+  for (const NamedMDNode &NMD : M->named_metadata()) {
+    // Write name.
+    StringRef Str = NMD.getName();
+    Record.append(Str.bytes_begin(), Str.bytes_end());
+    Stream.EmitRecord(bitc::METADATA_NAME, Record, NameAbbrev);
+    Record.clear();
+
+    // Write named metadata operands.
+    for (const MDNode *N : NMD.operands())
+      Record.push_back(VE.getMetadataID(N));
+    Stream.EmitRecord(bitc::METADATA_NAMED_NODE, Record, 0);
+    Record.clear();
+  }
+
+  Stream.ExitBlock();
+}
+
+static void WriteFunctionLocalMetadata(const Function &F,
+                                       const llvm_2_9_func::ValueEnumerator &VE,
+                                       BitstreamWriter &Stream) {
+  bool StartedMetadataBlock = false;
+  SmallVector<uint64_t, 64> Record;
+  const SmallVectorImpl<const LocalAsMetadata *> &MDs =
+      VE.getFunctionLocalMDs();
+  for (unsigned i = 0, e = MDs.size(); i != e; ++i) {
+    assert(MDs[i] && "Expected valid function-local metadata");
+    if (!StartedMetadataBlock) {
+      Stream.EnterSubblock(bitc::METADATA_BLOCK_ID, 3);
+      StartedMetadataBlock = true;
+    }
+    WriteValueAsMetadata(MDs[i], VE, Stream, Record);
+  }
+
+  if (StartedMetadataBlock)
+    Stream.ExitBlock();
+}
+
+static void WriteMetadataAttachment(const Function &F,
+                                    const llvm_2_9_func::ValueEnumerator &VE,
+                                    BitstreamWriter &Stream) {
+  Stream.EnterSubblock(bitc::METADATA_ATTACHMENT_ID, 3);
+
+  SmallVector<uint64_t, 64> Record;
+
+  // Write metadata attachments
+  // METADATA_ATTACHMENT - [m x [value, [n x [id, mdnode]]]
+  SmallVector<std::pair<unsigned, MDNode *>, 4> MDs;
+
+  for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB)
+    for (BasicBlock::const_iterator I = BB->begin(), E = BB->end();
+         I != E; ++I) {
+      MDs.clear();
+      I->getAllMetadataOtherThanDebugLoc(MDs);
+
+      // If no metadata, ignore instruction.
+      if (MDs.empty()) continue;
+
+      Record.push_back(VE.getInstructionID(&*I));
+
+      for (unsigned i = 0, e = MDs.size(); i != e; ++i) {
+        Record.push_back(MDs[i].first);
+        Record.push_back(VE.getMetadataID(MDs[i].second));
+      }
+      Stream.EmitRecord(bitc::METADATA_ATTACHMENT, Record, 0);
+      Record.clear();
+    }
+
+  Stream.ExitBlock();
+}
+
+static void WriteModuleMetadataStore(const Module *M, BitstreamWriter &Stream) {
+  SmallVector<uint64_t, 64> Record;
+
+  // Write metadata kinds
+  // METADATA_KIND - [n x [id, name]]
+  SmallVector<StringRef, 4> Names;
+  M->getMDKindNames(Names);
+
+  if (Names.empty()) return;
+
+  Stream.EnterSubblock(bitc::METADATA_BLOCK_ID, 3);
+
+  for (unsigned MDKindID = 0, e = Names.size(); MDKindID != e; ++MDKindID) {
+    Record.push_back(MDKindID);
+    StringRef KName = Names[MDKindID];
+    Record.append(KName.begin(), KName.end());
+
+    Stream.EmitRecord(bitc::METADATA_KIND, Record, 0);
+    Record.clear();
+  }
+
+  Stream.ExitBlock();
+}
+
+static void WriteConstants(unsigned FirstVal, unsigned LastVal,
+                           const llvm_2_9_func::ValueEnumerator &VE,
+                           BitstreamWriter &Stream, bool isGlobal) {
+  if (FirstVal == LastVal) return;
+
+  Stream.EnterSubblock(bitc::CONSTANTS_BLOCK_ID, 4);
+
+  unsigned AggregateAbbrev = 0;
+  unsigned String8Abbrev = 0;
+  unsigned CString7Abbrev = 0;
+  unsigned CString6Abbrev = 0;
+  // If this is a constant pool for the module, emit module-specific abbrevs.
+  if (isGlobal) {
+    // Abbrev for CST_CODE_AGGREGATE.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_AGGREGATE));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, Log2_32_Ceil(LastVal+1)));
+    AggregateAbbrev = Stream.EmitAbbrev(Abbv);
+
+    // Abbrev for CST_CODE_STRING.
+    Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_STRING));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8));
+    String8Abbrev = Stream.EmitAbbrev(Abbv);
+    // Abbrev for CST_CODE_CSTRING.
+    Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_CSTRING));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 7));
+    CString7Abbrev = Stream.EmitAbbrev(Abbv);
+    // Abbrev for CST_CODE_CSTRING.
+    Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_CSTRING));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6));
+    CString6Abbrev = Stream.EmitAbbrev(Abbv);
+  }
+
+  SmallVector<uint64_t, 64> Record;
+
+  const llvm_2_9_func::ValueEnumerator::ValueList &Vals = VE.getValues();
+  Type *LastTy = nullptr;
+  for (unsigned i = FirstVal; i != LastVal; ++i) {
+    const Value *V = Vals[i].first;
+    // If we need to switch types, do so now.
+    if (V->getType() != LastTy) {
+      LastTy = V->getType();
+      Record.push_back(VE.getTypeID(LastTy));
+      Stream.EmitRecord(bitc::CST_CODE_SETTYPE, Record,
+                        CONSTANTS_SETTYPE_ABBREV);
+      Record.clear();
+    }
+
+    if (const InlineAsm *IA = dyn_cast<InlineAsm>(V)) {
+      Record.push_back(unsigned(IA->hasSideEffects()) |
+                       unsigned(IA->isAlignStack()) << 1);
+
+      // Add the asm string.
+      const std::string &AsmStr = IA->getAsmString();
+      Record.push_back(AsmStr.size());
+      for (unsigned i = 0, e = AsmStr.size(); i != e; ++i)
+        Record.push_back(AsmStr[i]);
+
+      // Add the constraint string.
+      const std::string &ConstraintStr = IA->getConstraintString();
+      Record.push_back(ConstraintStr.size());
+      for (unsigned i = 0, e = ConstraintStr.size(); i != e; ++i)
+        Record.push_back(ConstraintStr[i]);
+      Stream.EmitRecord(bitc::CST_CODE_INLINEASM, Record);
+      Record.clear();
+      continue;
+    }
+    const Constant *C = cast<Constant>(V);
+    unsigned Code = -1U;
+    unsigned AbbrevToUse = 0;
+    if (C->isNullValue()) {
+      Code = bitc::CST_CODE_NULL;
+    } else if (isa<UndefValue>(C)) {
+      Code = bitc::CST_CODE_UNDEF;
+    } else if (const ConstantInt *IV = dyn_cast<ConstantInt>(C)) {
+      if (IV->getBitWidth() <= 64) {
+        uint64_t V = IV->getSExtValue();
+        if ((int64_t)V >= 0)
+          Record.push_back(V << 1);
+        else
+          Record.push_back((-V << 1) | 1);
+        Code = bitc::CST_CODE_INTEGER;
+        AbbrevToUse = CONSTANTS_INTEGER_ABBREV;
+      } else {                             // Wide integers, > 64 bits in size.
+        // We have an arbitrary precision integer value to write whose
+        // bit width is > 64. However, in canonical unsigned integer
+        // format it is likely that the high bits are going to be zero.
+        // So, we only write the number of active words.
+        unsigned NWords = IV->getValue().getActiveWords();
+        const uint64_t *RawWords = IV->getValue().getRawData();
+        for (unsigned i = 0; i != NWords; ++i) {
+          int64_t V = RawWords[i];
+          if (V >= 0)
+            Record.push_back(V << 1);
+          else
+            Record.push_back((-V << 1) | 1);
+        }
+        Code = bitc::CST_CODE_WIDE_INTEGER;
+      }
+    } else if (const ConstantFP *CFP = dyn_cast<ConstantFP>(C)) {
+      Code = bitc::CST_CODE_FLOAT;
+      Type *Ty = CFP->getType();
+      if (Ty->isFloatTy() || Ty->isDoubleTy()) {
+        Record.push_back(CFP->getValueAPF().bitcastToAPInt().getZExtValue());
+      } else if (Ty->isX86_FP80Ty()) {
+        // api needed to prevent premature destruction
+        // bits are not in the same order as a normal i80 APInt, compensate.
+        APInt api = CFP->getValueAPF().bitcastToAPInt();
+        const uint64_t *p = api.getRawData();
+        Record.push_back((p[1] << 48) | (p[0] >> 16));
+        Record.push_back(p[0] & 0xffffLL);
+      } else if (Ty->isFP128Ty() || Ty->isPPC_FP128Ty()) {
+        APInt api = CFP->getValueAPF().bitcastToAPInt();
+        const uint64_t *p = api.getRawData();
+        Record.push_back(p[0]);
+        Record.push_back(p[1]);
+      } else {
+        assert (0 && "Unknown FP type!");
+      }
+    } else if (isa<ConstantDataSequential>(C) &&
+               cast<ConstantDataSequential>(C)->isString()) {
+      const ConstantDataSequential *Str = cast<ConstantDataSequential>(C);
+      // Emit constant strings specially.
+      unsigned NumElts = Str->getNumElements();
+      // If this is a null-terminated string, use the denser CSTRING encoding.
+      if (Str->isCString()) {
+        Code = bitc::CST_CODE_CSTRING;
+        --NumElts;  // Don't encode the null, which isn't allowed by char6.
+      } else {
+        Code = bitc::CST_CODE_STRING;
+        AbbrevToUse = String8Abbrev;
+      }
+      bool isCStr7 = Code == bitc::CST_CODE_CSTRING;
+      bool isCStrChar6 = Code == bitc::CST_CODE_CSTRING;
+      for (unsigned i = 0; i != NumElts; ++i) {
+        unsigned char V = Str->getElementAsInteger(i);
+        Record.push_back(V);
+        isCStr7 &= (V & 128) == 0;
+        if (isCStrChar6)
+          isCStrChar6 = BitCodeAbbrevOp::isChar6(V);
+      }
+
+      if (isCStrChar6)
+        AbbrevToUse = CString6Abbrev;
+      else if (isCStr7)
+        AbbrevToUse = CString7Abbrev;
+    } else if (const ConstantDataSequential *CDS =
+                  dyn_cast<ConstantDataSequential>(C)) {
+      // We must replace ConstantDataSequential's representation with the
+      // legacy ConstantArray/ConstantVector/ConstantStruct version.
+      // ValueEnumerator is similarly modified to mark the appropriate
+      // Constants as used (so they are emitted).
+      Code = bitc::CST_CODE_AGGREGATE;
+      for (unsigned i = 0, e = CDS->getNumElements(); i != e; ++i)
+        Record.push_back(VE.getValueID(CDS->getElementAsConstant(i)));
+      AbbrevToUse = AggregateAbbrev;
+    } else if (isa<ConstantArray>(C) || isa<ConstantStruct>(C) ||
+               isa<ConstantVector>(C)) {
+      Code = bitc::CST_CODE_AGGREGATE;
+      for (unsigned i = 0, e = C->getNumOperands(); i != e; ++i)
+        Record.push_back(VE.getValueID(C->getOperand(i)));
+      AbbrevToUse = AggregateAbbrev;
+    } else if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(C)) {
+      switch (CE->getOpcode()) {
+      default:
+        if (Instruction::isCast(CE->getOpcode())) {
+          Code = bitc::CST_CODE_CE_CAST;
+          Record.push_back(GetEncodedCastOpcode(CE->getOpcode()));
+          Record.push_back(VE.getTypeID(C->getOperand(0)->getType()));
+          Record.push_back(VE.getValueID(C->getOperand(0)));
+          AbbrevToUse = CONSTANTS_CE_CAST_Abbrev;
+        } else {
+          assert(CE->getNumOperands() == 2 && "Unknown constant expr!");
+          Code = bitc::CST_CODE_CE_BINOP;
+          Record.push_back(GetEncodedBinaryOpcode(CE->getOpcode()));
+          Record.push_back(VE.getValueID(C->getOperand(0)));
+          Record.push_back(VE.getValueID(C->getOperand(1)));
+          uint64_t Flags = GetOptimizationFlags(CE);
+          if (Flags != 0)
+            Record.push_back(Flags);
+        }
+        break;
+      case Instruction::GetElementPtr:
+        Code = bitc::CST_CODE_CE_GEP;
+        if (cast<GEPOperator>(C)->isInBounds())
+          Code = bitc::CST_CODE_CE_INBOUNDS_GEP;
+        for (unsigned i = 0, e = CE->getNumOperands(); i != e; ++i) {
+          Record.push_back(VE.getTypeID(C->getOperand(i)->getType()));
+          Record.push_back(VE.getValueID(C->getOperand(i)));
+        }
+        break;
+      case Instruction::Select:
+        Code = bitc::CST_CODE_CE_SELECT;
+        Record.push_back(VE.getValueID(C->getOperand(0)));
+        Record.push_back(VE.getValueID(C->getOperand(1)));
+        Record.push_back(VE.getValueID(C->getOperand(2)));
+        break;
+      case Instruction::ExtractElement:
+        Code = bitc::CST_CODE_CE_EXTRACTELT;
+        Record.push_back(VE.getTypeID(C->getOperand(0)->getType()));
+        Record.push_back(VE.getValueID(C->getOperand(0)));
+        Record.push_back(VE.getValueID(C->getOperand(1)));
+        break;
+      case Instruction::InsertElement:
+        Code = bitc::CST_CODE_CE_INSERTELT;
+        Record.push_back(VE.getValueID(C->getOperand(0)));
+        Record.push_back(VE.getValueID(C->getOperand(1)));
+        Record.push_back(VE.getValueID(C->getOperand(2)));
+        break;
+      case Instruction::ShuffleVector:
+        // If the return type and argument types are the same, this is a
+        // standard shufflevector instruction.  If the types are different,
+        // then the shuffle is widening or truncating the input vectors, and
+        // the argument type must also be encoded.
+        if (C->getType() == C->getOperand(0)->getType()) {
+          Code = bitc::CST_CODE_CE_SHUFFLEVEC;
+        } else {
+          Code = bitc::CST_CODE_CE_SHUFVEC_EX;
+          Record.push_back(VE.getTypeID(C->getOperand(0)->getType()));
+        }
+        Record.push_back(VE.getValueID(C->getOperand(0)));
+        Record.push_back(VE.getValueID(C->getOperand(1)));
+        Record.push_back(VE.getValueID(C->getOperand(2)));
+        break;
+      case Instruction::ICmp:
+      case Instruction::FCmp:
+        Code = bitc::CST_CODE_CE_CMP;
+        Record.push_back(VE.getTypeID(C->getOperand(0)->getType()));
+        Record.push_back(VE.getValueID(C->getOperand(0)));
+        Record.push_back(VE.getValueID(C->getOperand(1)));
+        Record.push_back(CE->getPredicate());
+        break;
+      }
+    } else if (const BlockAddress *BA = dyn_cast<BlockAddress>(C)) {
+      Code = bitc::CST_CODE_BLOCKADDRESS;
+      Record.push_back(VE.getTypeID(BA->getFunction()->getType()));
+      Record.push_back(VE.getValueID(BA->getFunction()));
+      Record.push_back(VE.getGlobalBasicBlockID(BA->getBasicBlock()));
+    } else {
+#ifndef NDEBUG
+      C->dump();
+#endif
+      llvm_unreachable("Unknown constant!");
+    }
+    Stream.EmitRecord(Code, Record, AbbrevToUse);
+    Record.clear();
+  }
+
+  Stream.ExitBlock();
+}
+
+static void WriteModuleConstants(const llvm_2_9_func::ValueEnumerator &VE,
+                                 BitstreamWriter &Stream) {
+  const llvm_2_9_func::ValueEnumerator::ValueList &Vals = VE.getValues();
+
+  // Find the first constant to emit, which is the first non-globalvalue value.
+  // We know globalvalues have been emitted by WriteModuleInfo.
+  for (unsigned i = 0, e = Vals.size(); i != e; ++i) {
+    if (!isa<GlobalValue>(Vals[i].first)) {
+      WriteConstants(i, Vals.size(), VE, Stream, true);
+      return;
+    }
+  }
+}
+
+/// PushValueAndType - The file has to encode both the value and type id for
+/// many values, because we need to know what type to create for forward
+/// references.  However, most operands are not forward references, so this type
+/// field is not needed.
+///
+/// This function adds V's value ID to Vals.  If the value ID is higher than the
+/// instruction ID, then it is a forward reference, and it also includes the
+/// type ID.
+static bool PushValueAndType(const Value *V, unsigned InstID,
+                             SmallVector<unsigned, 64> &Vals,
+                             llvm_2_9_func::ValueEnumerator &VE) {
+  unsigned ValID = VE.getValueID(V);
+  Vals.push_back(ValID);
+  if (ValID >= InstID) {
+    Vals.push_back(VE.getTypeID(V->getType()));
+    return true;
+  }
+  return false;
+}
+
+/// WriteInstruction - Emit an instruction to the specified stream.
+static void WriteInstruction(const Instruction &I, unsigned InstID,
+                             llvm_2_9_func::ValueEnumerator &VE,
+                             BitstreamWriter &Stream,
+                             SmallVector<unsigned, 64> &Vals) {
+  unsigned Code = 0;
+  unsigned AbbrevToUse = 0;
+  VE.setInstructionID(&I);
+  switch (I.getOpcode()) {
+  default:
+    if (Instruction::isCast(I.getOpcode())) {
+      Code = bitc::FUNC_CODE_INST_CAST;
+      if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE))
+        AbbrevToUse = FUNCTION_INST_CAST_ABBREV;
+      Vals.push_back(VE.getTypeID(I.getType()));
+      Vals.push_back(GetEncodedCastOpcode(I.getOpcode()));
+    } else {
+      assert(isa<BinaryOperator>(I) && "Unknown instruction!");
+      Code = bitc::FUNC_CODE_INST_BINOP;
+      if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE))
+        AbbrevToUse = FUNCTION_INST_BINOP_ABBREV;
+      Vals.push_back(VE.getValueID(I.getOperand(1)));
+      Vals.push_back(GetEncodedBinaryOpcode(I.getOpcode()));
+      uint64_t Flags = GetOptimizationFlags(&I);
+      if (Flags != 0) {
+        if (AbbrevToUse == FUNCTION_INST_BINOP_ABBREV)
+          AbbrevToUse = FUNCTION_INST_BINOP_FLAGS_ABBREV;
+        Vals.push_back(Flags);
+      }
+    }
+    break;
+
+  case Instruction::GetElementPtr:
+    Code = bitc::FUNC_CODE_INST_GEP_OLD;
+    if (cast<GEPOperator>(&I)->isInBounds())
+      Code = bitc::FUNC_CODE_INST_INBOUNDS_GEP_OLD;
+    for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i)
+      PushValueAndType(I.getOperand(i), InstID, Vals, VE);
+    break;
+  case Instruction::ExtractValue: {
+    Code = bitc::FUNC_CODE_INST_EXTRACTVAL;
+    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
+    const ExtractValueInst *EVI = cast<ExtractValueInst>(&I);
+    for (const unsigned *i = EVI->idx_begin(), *e = EVI->idx_end(); i != e; ++i)
+      Vals.push_back(*i);
+    break;
+  }
+  case Instruction::InsertValue: {
+    Code = bitc::FUNC_CODE_INST_INSERTVAL;
+    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
+    PushValueAndType(I.getOperand(1), InstID, Vals, VE);
+    const InsertValueInst *IVI = cast<InsertValueInst>(&I);
+    for (const unsigned *i = IVI->idx_begin(), *e = IVI->idx_end(); i != e; ++i)
+      Vals.push_back(*i);
+    break;
+  }
+  case Instruction::Select:
+    Code = bitc::FUNC_CODE_INST_VSELECT;
+    PushValueAndType(I.getOperand(1), InstID, Vals, VE);
+    Vals.push_back(VE.getValueID(I.getOperand(2)));
+    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
+    break;
+  case Instruction::ExtractElement:
+    Code = bitc::FUNC_CODE_INST_EXTRACTELT;
+    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
+    Vals.push_back(VE.getValueID(I.getOperand(1)));
+    break;
+  case Instruction::InsertElement:
+    Code = bitc::FUNC_CODE_INST_INSERTELT;
+    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
+    Vals.push_back(VE.getValueID(I.getOperand(1)));
+    Vals.push_back(VE.getValueID(I.getOperand(2)));
+    break;
+  case Instruction::ShuffleVector:
+    Code = bitc::FUNC_CODE_INST_SHUFFLEVEC;
+    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
+    Vals.push_back(VE.getValueID(I.getOperand(1)));
+    Vals.push_back(VE.getValueID(I.getOperand(2)));
+    break;
+  case Instruction::ICmp:
+  case Instruction::FCmp:
+    // compare returning Int1Ty or vector of Int1Ty
+    Code = bitc::FUNC_CODE_INST_CMP2;
+    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
+    Vals.push_back(VE.getValueID(I.getOperand(1)));
+    Vals.push_back(cast<CmpInst>(I).getPredicate());
+    break;
+
+  case Instruction::Ret:
+    {
+      Code = bitc::FUNC_CODE_INST_RET;
+      unsigned NumOperands = I.getNumOperands();
+      if (NumOperands == 0)
+        AbbrevToUse = FUNCTION_INST_RET_VOID_ABBREV;
+      else if (NumOperands == 1) {
+        if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE))
+          AbbrevToUse = FUNCTION_INST_RET_VAL_ABBREV;
+      } else {
+        for (unsigned i = 0, e = NumOperands; i != e; ++i)
+          PushValueAndType(I.getOperand(i), InstID, Vals, VE);
+      }
+    }
+    break;
+  case Instruction::Br:
+    {
+      Code = bitc::FUNC_CODE_INST_BR;
+      const BranchInst &II = cast<BranchInst>(I);
+      Vals.push_back(VE.getValueID(II.getSuccessor(0)));
+      if (II.isConditional()) {
+        Vals.push_back(VE.getValueID(II.getSuccessor(1)));
+        Vals.push_back(VE.getValueID(II.getCondition()));
+      }
+    }
+    break;
+  case Instruction::Switch:
+    {
+      Code = bitc::FUNC_CODE_INST_SWITCH;
+      const SwitchInst &SI = cast<SwitchInst>(I);
+      Vals.push_back(VE.getTypeID(SI.getCondition()->getType()));
+      Vals.push_back(VE.getValueID(SI.getCondition()));
+      Vals.push_back(VE.getValueID(SI.getDefaultDest()));
+      for (SwitchInst::ConstCaseIt i = SI.case_begin(), e = SI.case_end();
+           i != e; ++i) {
+        Vals.push_back(VE.getValueID(i.getCaseValue()));
+        Vals.push_back(VE.getValueID(i.getCaseSuccessor()));
+      }
+    }
+    break;
+  case Instruction::IndirectBr:
+    Code = bitc::FUNC_CODE_INST_INDIRECTBR;
+    Vals.push_back(VE.getTypeID(I.getOperand(0)->getType()));
+    for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i)
+      Vals.push_back(VE.getValueID(I.getOperand(i)));
+    break;
+
+  case Instruction::Invoke: {
+    const InvokeInst *II = cast<InvokeInst>(&I);
+    const Value *Callee(II->getCalledValue());
+    PointerType *PTy = cast<PointerType>(Callee->getType());
+    FunctionType *FTy = cast<FunctionType>(PTy->getElementType());
+    Code = bitc::FUNC_CODE_INST_INVOKE;
+
+    Vals.push_back(VE.getAttributeID(II->getAttributes()));
+    Vals.push_back(II->getCallingConv());
+    Vals.push_back(VE.getValueID(II->getNormalDest()));
+    Vals.push_back(VE.getValueID(II->getUnwindDest()));
+    PushValueAndType(Callee, InstID, Vals, VE);
+
+    // Emit value #'s for the fixed parameters.
+    for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i)
+      Vals.push_back(VE.getValueID(I.getOperand(i)));  // fixed param.
+
+    // Emit type/value pairs for varargs params.
+    if (FTy->isVarArg()) {
+      for (unsigned i = FTy->getNumParams(), e = I.getNumOperands()-3;
+           i != e; ++i)
+        PushValueAndType(I.getOperand(i), InstID, Vals, VE); // vararg
+    }
+    break;
+  }
+  case Instruction::Resume:
+    Code = bitc::FUNC_CODE_INST_RESUME;
+    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
+    break;
+  case Instruction::Unreachable:
+    Code = bitc::FUNC_CODE_INST_UNREACHABLE;
+    AbbrevToUse = FUNCTION_INST_UNREACHABLE_ABBREV;
+    break;
+
+  case Instruction::PHI: {
+    const PHINode &PN = cast<PHINode>(I);
+    Code = bitc::FUNC_CODE_INST_PHI;
+    Vals.push_back(VE.getTypeID(PN.getType()));
+    for (unsigned i = 0, e = PN.getNumIncomingValues(); i != e; ++i) {
+      Vals.push_back(VE.getValueID(PN.getIncomingValue(i)));
+      Vals.push_back(VE.getValueID(PN.getIncomingBlock(i)));
+    }
+    break;
+  }
+
+  case Instruction::LandingPad: {
+    const LandingPadInst &LP = cast<LandingPadInst>(I);
+    Code = bitc::FUNC_CODE_INST_LANDINGPAD_OLD;
+    Vals.push_back(VE.getTypeID(LP.getType()));
+    // TODO (rebase): is this fix enough?
+    // PushValueAndType(LP.getPersonalityFn(), InstID, Vals, VE);
+    Vals.push_back(LP.isCleanup());
+    Vals.push_back(LP.getNumClauses());
+    for (unsigned I = 0, E = LP.getNumClauses(); I != E; ++I) {
+      if (LP.isCatch(I))
+        Vals.push_back(LandingPadInst::Catch);
+      else
+        Vals.push_back(LandingPadInst::Filter);
+      PushValueAndType(LP.getClause(I), InstID, Vals, VE);
+    }
+    break;
+  }
+
+  case Instruction::Alloca:
+    Code = bitc::FUNC_CODE_INST_ALLOCA;
+    Vals.push_back(VE.getTypeID(I.getType()));
+    Vals.push_back(VE.getTypeID(I.getOperand(0)->getType()));
+    Vals.push_back(VE.getValueID(I.getOperand(0))); // size.
+    Vals.push_back(Log2_32(cast<AllocaInst>(I).getAlignment())+1);
+    break;
+
+  case Instruction::Load:
+    if (cast<LoadInst>(I).isAtomic()) {
+      Code = bitc::FUNC_CODE_INST_LOADATOMIC;
+      PushValueAndType(I.getOperand(0), InstID, Vals, VE);
+    } else {
+      Code = bitc::FUNC_CODE_INST_LOAD;
+      if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE))  // ptr
+        AbbrevToUse = FUNCTION_INST_LOAD_ABBREV;
+    }
+    Vals.push_back(Log2_32(cast<LoadInst>(I).getAlignment())+1);
+    Vals.push_back(cast<LoadInst>(I).isVolatile());
+    if (cast<LoadInst>(I).isAtomic()) {
+      Vals.push_back(GetEncodedOrdering(cast<LoadInst>(I).getOrdering()));
+      Vals.push_back(GetEncodedSynchScope(cast<LoadInst>(I).getSynchScope()));
+    }
+    break;
+  case Instruction::Store:
+    if (cast<StoreInst>(I).isAtomic())
+      Code = bitc::FUNC_CODE_INST_STOREATOMIC;
+    else
+      Code = bitc::FUNC_CODE_INST_STORE_OLD;
+    PushValueAndType(I.getOperand(1), InstID, Vals, VE);  // ptrty + ptr
+    Vals.push_back(VE.getValueID(I.getOperand(0)));       // val.
+    Vals.push_back(Log2_32(cast<StoreInst>(I).getAlignment())+1);
+    Vals.push_back(cast<StoreInst>(I).isVolatile());
+    if (cast<StoreInst>(I).isAtomic()) {
+      Vals.push_back(GetEncodedOrdering(cast<StoreInst>(I).getOrdering()));
+      Vals.push_back(GetEncodedSynchScope(cast<StoreInst>(I).getSynchScope()));
+    }
+    break;
+  case Instruction::AtomicCmpXchg:
+    Code = bitc::FUNC_CODE_INST_CMPXCHG;
+    PushValueAndType(I.getOperand(0), InstID, Vals, VE);  // ptrty + ptr
+    Vals.push_back(VE.getValueID(I.getOperand(1)));       // cmp.
+    Vals.push_back(VE.getValueID(I.getOperand(2)));       // newval.
+    Vals.push_back(cast<AtomicCmpXchgInst>(I).isVolatile());
+    Vals.push_back(GetEncodedOrdering(
+                     cast<AtomicCmpXchgInst>(I).getSuccessOrdering()));
+    Vals.push_back(GetEncodedSynchScope(
+                     cast<AtomicCmpXchgInst>(I).getSynchScope()));
+    break;
+  case Instruction::AtomicRMW:
+    Code = bitc::FUNC_CODE_INST_ATOMICRMW;
+    PushValueAndType(I.getOperand(0), InstID, Vals, VE);  // ptrty + ptr
+    Vals.push_back(VE.getValueID(I.getOperand(1)));       // val.
+    Vals.push_back(GetEncodedRMWOperation(
+                     cast<AtomicRMWInst>(I).getOperation()));
+    Vals.push_back(cast<AtomicRMWInst>(I).isVolatile());
+    Vals.push_back(GetEncodedOrdering(cast<AtomicRMWInst>(I).getOrdering()));
+    Vals.push_back(GetEncodedSynchScope(
+                     cast<AtomicRMWInst>(I).getSynchScope()));
+    break;
+  case Instruction::Fence:
+    Code = bitc::FUNC_CODE_INST_FENCE;
+    Vals.push_back(GetEncodedOrdering(cast<FenceInst>(I).getOrdering()));
+    Vals.push_back(GetEncodedSynchScope(cast<FenceInst>(I).getSynchScope()));
+    break;
+  case Instruction::Call: {
+    const CallInst &CI = cast<CallInst>(I);
+    PointerType *PTy = cast<PointerType>(CI.getCalledValue()->getType());
+    FunctionType *FTy = cast<FunctionType>(PTy->getElementType());
+
+    Code = bitc::FUNC_CODE_INST_CALL;
+
+    Vals.push_back(VE.getAttributeID(CI.getAttributes()));
+    Vals.push_back((CI.getCallingConv() << 1) | unsigned(CI.isTailCall()));
+    PushValueAndType(CI.getCalledValue(), InstID, Vals, VE);  // Callee
+
+    // Emit value #'s for the fixed parameters.
+    for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i)
+      Vals.push_back(VE.getValueID(CI.getArgOperand(i)));  // fixed param.
+
+    // Emit type/value pairs for varargs params.
+    if (FTy->isVarArg()) {
+      for (unsigned i = FTy->getNumParams(), e = CI.getNumArgOperands();
+           i != e; ++i)
+        PushValueAndType(CI.getArgOperand(i), InstID, Vals, VE);  // varargs
+    }
+    break;
+  }
+  case Instruction::VAArg:
+    Code = bitc::FUNC_CODE_INST_VAARG;
+    Vals.push_back(VE.getTypeID(I.getOperand(0)->getType()));   // valistty
+    Vals.push_back(VE.getValueID(I.getOperand(0))); // valist.
+    Vals.push_back(VE.getTypeID(I.getType())); // restype.
+    break;
+  }
+
+  Stream.EmitRecord(Code, Vals, AbbrevToUse);
+  Vals.clear();
+}
+
+// Emit names for globals/functions etc.
+static void WriteValueSymbolTable(const ValueSymbolTable &VST,
+                                  const llvm_2_9_func::ValueEnumerator &VE,
+                                  BitstreamWriter &Stream) {
+  if (VST.empty()) return;
+  Stream.EnterSubblock(bitc::VALUE_SYMTAB_BLOCK_ID, 4);
+
+  // FIXME: Set up the abbrev, we know how many values there are!
+  // FIXME: We know if the type names can use 7-bit ascii.
+  SmallVector<unsigned, 64> NameVals;
+
+  for (ValueSymbolTable::const_iterator SI = VST.begin(), SE = VST.end();
+       SI != SE; ++SI) {
+
+    const ValueName &Name = *SI;
+
+    // Figure out the encoding to use for the name.
+    bool is7Bit = true;
+    bool isChar6 = true;
+    for (const char *C = Name.getKeyData(), *E = C+Name.getKeyLength();
+         C != E; ++C) {
+      if (isChar6)
+        isChar6 = BitCodeAbbrevOp::isChar6(*C);
+      if ((unsigned char)*C & 128) {
+        is7Bit = false;
+        break;  // don't bother scanning the rest.
+      }
+    }
+
+    unsigned AbbrevToUse = VST_ENTRY_8_ABBREV;
+
+    // VST_ENTRY:   [valueid, namechar x N]
+    // VST_BBENTRY: [bbid, namechar x N]
+    unsigned Code;
+    if (isa<BasicBlock>(SI->getValue())) {
+      Code = bitc::VST_CODE_BBENTRY;
+      if (isChar6)
+        AbbrevToUse = VST_BBENTRY_6_ABBREV;
+    } else {
+      Code = bitc::VST_CODE_ENTRY;
+      if (isChar6)
+        AbbrevToUse = VST_ENTRY_6_ABBREV;
+      else if (is7Bit)
+        AbbrevToUse = VST_ENTRY_7_ABBREV;
+    }
+
+    NameVals.push_back(VE.getValueID(SI->getValue()));
+    for (const char *P = Name.getKeyData(),
+         *E = Name.getKeyData()+Name.getKeyLength(); P != E; ++P)
+      NameVals.push_back((unsigned char)*P);
+
+    // Emit the finished record.
+    Stream.EmitRecord(Code, NameVals, AbbrevToUse);
+    NameVals.clear();
+  }
+  Stream.ExitBlock();
+}
+
+/// WriteFunction - Emit a function body to the module stream.
+static void WriteFunction(const Function &F, llvm_2_9_func::ValueEnumerator &VE,
+                          BitstreamWriter &Stream) {
+  Stream.EnterSubblock(bitc::FUNCTION_BLOCK_ID, 4);
+  VE.incorporateFunction(F);
+
+  SmallVector<unsigned, 64> Vals;
+
+  // Emit the number of basic blocks, so the reader can create them ahead of
+  // time.
+  Vals.push_back(VE.getBasicBlocks().size());
+  Stream.EmitRecord(bitc::FUNC_CODE_DECLAREBLOCKS, Vals);
+  Vals.clear();
+
+  // If there are function-local constants, emit them now.
+  unsigned CstStart, CstEnd;
+  VE.getFunctionConstantRange(CstStart, CstEnd);
+  WriteConstants(CstStart, CstEnd, VE, Stream, false);
+
+  // If there is function-local metadata, emit it now.
+  WriteFunctionLocalMetadata(F, VE, Stream);
+
+  // Keep a running idea of what the instruction ID is.
+  unsigned InstID = CstEnd;
+
+  bool NeedsMetadataAttachment = false;
+
+  DILocation *LastDL = nullptr;
+
+  // Finally, emit all the instructions, in order.
+  for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB)
+    for (BasicBlock::const_iterator I = BB->begin(), E = BB->end();
+         I != E; ++I) {
+      WriteInstruction(*I, InstID, VE, Stream, Vals);
+
+      if (!I->getType()->isVoidTy())
+        ++InstID;
+
+      // If the instruction has metadata, write a metadata attachment later.
+      NeedsMetadataAttachment |= I->hasMetadataOtherThanDebugLoc();
+
+      // If the instruction has a debug location, emit it.
+      DILocation *DL = I->getDebugLoc();
+      if (!DL)
+        continue;
+
+      if (DL == LastDL) {
+        // Just repeat the same debug loc as last time.
+        Stream.EmitRecord(bitc::FUNC_CODE_DEBUG_LOC_AGAIN, Vals);
+        continue;
+      }
+
+      Vals.push_back(DL->getLine());
+      Vals.push_back(DL->getColumn());
+      Vals.push_back(VE.getMetadataOrNullID(DL->getScope()));
+      Vals.push_back(VE.getMetadataOrNullID(DL->getInlinedAt()));
+      Stream.EmitRecord(bitc::FUNC_CODE_DEBUG_LOC, Vals);
+      Vals.clear();
+
+      // Fixme(pirama): The following line is missing from upstream
+      // https://llvm.org/bugs/show_bug.cgi?id=23436
+      LastDL = DL;
+    }
+
+  // Emit names for all the instructions etc.
+  WriteValueSymbolTable(F.getValueSymbolTable(), VE, Stream);
+
+  if (NeedsMetadataAttachment)
+    WriteMetadataAttachment(F, VE, Stream);
+  VE.purgeFunction();
+  Stream.ExitBlock();
+}
+
+// Emit blockinfo, which defines the standard abbreviations etc.
+static void WriteBlockInfo(const llvm_2_9_func::ValueEnumerator &VE,
+                           BitstreamWriter &Stream) {
+  // We only want to emit block info records for blocks that have multiple
+  // instances: CONSTANTS_BLOCK, FUNCTION_BLOCK and VALUE_SYMTAB_BLOCK.  Other
+  // blocks can defined their abbrevs inline.
+  Stream.EnterBlockInfoBlock(2);
+
+  { // 8-bit fixed-width VST_ENTRY/VST_BBENTRY strings.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8));
+    if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID,
+                                   Abbv) != VST_ENTRY_8_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+
+  { // 7-bit fixed width VST_ENTRY strings.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_ENTRY));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 7));
+    if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID,
+                                   Abbv) != VST_ENTRY_7_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+  { // 6-bit char6 VST_ENTRY strings.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_ENTRY));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6));
+    if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID,
+                                   Abbv) != VST_ENTRY_6_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+  { // 6-bit char6 VST_BBENTRY strings.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_BBENTRY));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6));
+    if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID,
+                                   Abbv) != VST_BBENTRY_6_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+
+
+
+  { // SETTYPE abbrev for CONSTANTS_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_SETTYPE));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
+                              Log2_32_Ceil(VE.getTypes().size()+1)));
+    if (Stream.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID,
+                                   Abbv) != CONSTANTS_SETTYPE_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+
+  { // INTEGER abbrev for CONSTANTS_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_INTEGER));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
+    if (Stream.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID,
+                                   Abbv) != CONSTANTS_INTEGER_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+
+  { // CE_CAST abbrev for CONSTANTS_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_CE_CAST));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4));  // cast opc
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,       // typeid
+                              Log2_32_Ceil(VE.getTypes().size()+1)));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));    // value id
+
+    if (Stream.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID,
+                                   Abbv) != CONSTANTS_CE_CAST_Abbrev)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+  { // NULL abbrev for CONSTANTS_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_NULL));
+    if (Stream.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID,
+                                   Abbv) != CONSTANTS_NULL_Abbrev)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+
+  // FIXME: This should only use space for first class types!
+
+  { // INST_LOAD abbrev for FUNCTION_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_LOAD));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Ptr
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 4)); // Align
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // volatile
+    if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
+                                   Abbv) != FUNCTION_INST_LOAD_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+  { // INST_BINOP abbrev for FUNCTION_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_BINOP));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // LHS
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // RHS
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4)); // opc
+    if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
+                                   Abbv) != FUNCTION_INST_BINOP_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+  { // INST_BINOP_FLAGS abbrev for FUNCTION_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_BINOP));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // LHS
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // RHS
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4)); // opc
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 7)); // flags
+    if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
+                                   Abbv) != FUNCTION_INST_BINOP_FLAGS_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+  { // INST_CAST abbrev for FUNCTION_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_CAST));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));    // OpVal
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,       // dest ty
+                              Log2_32_Ceil(VE.getTypes().size()+1)));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4));  // opc
+    if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
+                                   Abbv) != FUNCTION_INST_CAST_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+
+  { // INST_RET abbrev for FUNCTION_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_RET));
+    if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
+                                   Abbv) != FUNCTION_INST_RET_VOID_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+  { // INST_RET abbrev for FUNCTION_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_RET));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // ValID
+    if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
+                                   Abbv) != FUNCTION_INST_RET_VAL_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+  { // INST_UNREACHABLE abbrev for FUNCTION_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_UNREACHABLE));
+    if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
+                                   Abbv) != FUNCTION_INST_UNREACHABLE_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+
+  Stream.ExitBlock();
+}
+
+/// WriteModule - Emit the specified module to the bitstream.
+static void WriteModule(const Module *M, BitstreamWriter &Stream) {
+  Stream.EnterSubblock(bitc::MODULE_BLOCK_ID, 3);
+
+  // Emit the version number if it is non-zero.
+  if (CurVersion) {
+    SmallVector<unsigned, 1> Vals;
+    Vals.push_back(CurVersion);
+    Stream.EmitRecord(bitc::MODULE_CODE_VERSION, Vals);
+  }
+
+  // Analyze the module, enumerating globals, functions, etc.
+  llvm_2_9_func::ValueEnumerator VE(*M);
+
+  // Emit blockinfo, which defines the standard abbreviations etc.
+  WriteBlockInfo(VE, Stream);
+
+  // Emit information about parameter attributes.
+  WriteAttributeTable(VE, Stream);
+
+  // Emit information describing all of the types in the module.
+  WriteTypeTable(VE, Stream);
+
+  // Emit top-level description of module, including target triple, inline asm,
+  // descriptors for global variables, and function prototype info.
+  WriteModuleInfo(M, VE, Stream);
+
+  // Emit constants.
+  WriteModuleConstants(VE, Stream);
+
+  // Emit metadata.
+  WriteModuleMetadata(M, VE, Stream);
+
+  // Emit function bodies.
+  for (Module::const_iterator F = M->begin(), E = M->end(); F != E; ++F)
+    if (!F->isDeclaration())
+      WriteFunction(*F, VE, Stream);
+
+  // Emit metadata.
+  WriteModuleMetadataStore(M, Stream);
+
+  // Emit names for globals/functions etc.
+  WriteValueSymbolTable(M->getValueSymbolTable(), VE, Stream);
+
+  Stream.ExitBlock();
+}
+
+/// EmitDarwinBCHeader - If generating a bc file on darwin, we have to emit a
+/// header and trailer to make it compatible with the system archiver.  To do
+/// this we emit the following header, and then emit a trailer that pads the
+/// file out to be a multiple of 16 bytes.
+///
+/// struct bc_header {
+///   uint32_t Magic;         // 0x0B17C0DE
+///   uint32_t Version;       // Version, currently always 0.
+///   uint32_t BitcodeOffset; // Offset to traditional bitcode file.
+///   uint32_t BitcodeSize;   // Size of traditional bitcode file.
+///   uint32_t CPUType;       // CPU specifier.
+///   ... potentially more later ...
+/// };
+enum {
+  DarwinBCSizeFieldOffset = 3*4, // Offset to bitcode_size.
+  DarwinBCHeaderSize = 5*4
+};
+
+static void WriteInt32ToBuffer(uint32_t Value, SmallVectorImpl<char> &Buffer,
+                               uint32_t &Position) {
+  Buffer[Position + 0] = (unsigned char) (Value >>  0);
+  Buffer[Position + 1] = (unsigned char) (Value >>  8);
+  Buffer[Position + 2] = (unsigned char) (Value >> 16);
+  Buffer[Position + 3] = (unsigned char) (Value >> 24);
+  Position += 4;
+}
+
+static void EmitDarwinBCHeaderAndTrailer(SmallVectorImpl<char> &Buffer,
+                                         const Triple &TT) {
+  unsigned CPUType = ~0U;
+
+  // Match x86_64-*, i[3-9]86-*, powerpc-*, powerpc64-*, arm-*, thumb-*,
+  // armv[0-9]-*, thumbv[0-9]-*, armv5te-*, or armv6t2-*. The CPUType is a magic
+  // number from /usr/include/mach/machine.h.  It is ok to reproduce the
+  // specific constants here because they are implicitly part of the Darwin ABI.
+  enum {
+    DARWIN_CPU_ARCH_ABI64      = 0x01000000,
+    DARWIN_CPU_TYPE_X86        = 7,
+    DARWIN_CPU_TYPE_ARM        = 12,
+    DARWIN_CPU_TYPE_POWERPC    = 18
+  };
+
+  Triple::ArchType Arch = TT.getArch();
+  if (Arch == Triple::x86_64)
+    CPUType = DARWIN_CPU_TYPE_X86 | DARWIN_CPU_ARCH_ABI64;
+  else if (Arch == Triple::x86)
+    CPUType = DARWIN_CPU_TYPE_X86;
+  else if (Arch == Triple::ppc)
+    CPUType = DARWIN_CPU_TYPE_POWERPC;
+  else if (Arch == Triple::ppc64)
+    CPUType = DARWIN_CPU_TYPE_POWERPC | DARWIN_CPU_ARCH_ABI64;
+  else if (Arch == Triple::arm || Arch == Triple::thumb)
+    CPUType = DARWIN_CPU_TYPE_ARM;
+
+  // Traditional Bitcode starts after header.
+  assert(Buffer.size() >= DarwinBCHeaderSize &&
+         "Expected header size to be reserved");
+  unsigned BCOffset = DarwinBCHeaderSize;
+  unsigned BCSize = Buffer.size()-DarwinBCHeaderSize;
+
+  // Write the magic and version.
+  unsigned Position = 0;
+  WriteInt32ToBuffer(0x0B17C0DE , Buffer, Position);
+  WriteInt32ToBuffer(0          , Buffer, Position); // Version.
+  WriteInt32ToBuffer(BCOffset   , Buffer, Position);
+  WriteInt32ToBuffer(BCSize     , Buffer, Position);
+  WriteInt32ToBuffer(CPUType    , Buffer, Position);
+
+  // If the file is not a multiple of 16 bytes, insert dummy padding.
+  while (Buffer.size() & 15)
+    Buffer.push_back(0);
+}
+
+/// WriteBitcodeToFile - Write the specified module to the specified output
+/// stream.
+void llvm_2_9_func::WriteBitcodeToFile(const Module *M, raw_ostream &Out) {
+  SmallVector<char, 1024> Buffer;
+  Buffer.reserve(256*1024);
+
+  // If this is darwin or another generic macho target, reserve space for the
+  // header.
+  Triple TT(M->getTargetTriple());
+  if (TT.isOSDarwin())
+    Buffer.insert(Buffer.begin(), DarwinBCHeaderSize, 0);
+
+  // Emit the module into the buffer.
+  {
+    BitstreamWriter Stream(Buffer);
+
+    // Emit the file header.
+    Stream.Emit((unsigned)'B', 8);
+    Stream.Emit((unsigned)'C', 8);
+    Stream.Emit(0x0, 4);
+    Stream.Emit(0xC, 4);
+    Stream.Emit(0xE, 4);
+    Stream.Emit(0xD, 4);
+
+    // Emit the module.
+    WriteModule(M, Stream);
+  }
+
+  if (TT.isOSDarwin())
+    EmitDarwinBCHeaderAndTrailer(Buffer, TT);
+
+  // Write the generated bitstream to "Out".
+  Out.write((char*)&Buffer.front(), Buffer.size());
+}
diff --git a/slang/BitWriter_2_9_func/BitcodeWriterPass.cpp b/slang/BitWriter_2_9_func/BitcodeWriterPass.cpp
new file mode 100644
index 0000000..fe807d3
--- /dev/null
+++ b/slang/BitWriter_2_9_func/BitcodeWriterPass.cpp
@@ -0,0 +1,46 @@
+//===--- Bitcode/Writer/BitcodeWriterPass.cpp - Bitcode Writer ------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// BitcodeWriterPass implementation.
+//
+//===----------------------------------------------------------------------===//
+
+#include "ReaderWriter_2_9_func.h"
+#include "llvm/IR/Function.h"
+#include "llvm/IR/Instructions.h"
+#include "llvm/IR/Module.h"
+#include "llvm/Pass.h"
+using namespace llvm;
+
+namespace {
+  class WriteBitcodePass : public ModulePass {
+    raw_ostream &OS; // raw_ostream to print on
+
+  public:
+    static char ID; // Pass identification, replacement for typeid
+    explicit WriteBitcodePass(raw_ostream &o)
+      : ModulePass(ID), OS(o) {}
+
+    const char *getPassName() const { return "Bitcode Writer"; }
+
+    bool runOnModule(Module &M) {
+      bool Changed = false;
+      llvm_2_9_func::WriteBitcodeToFile(&M, OS);
+      return Changed;
+    }
+  };
+}
+
+char WriteBitcodePass::ID = 0;
+
+/// createBitcodeWriterPass - Create and return a pass that writes the module
+/// to the specified ostream.
+llvm::ModulePass *llvm_2_9_func::createBitcodeWriterPass(llvm::raw_ostream &Str) {
+  return new WriteBitcodePass(Str);
+}
diff --git a/slang/BitWriter_2_9_func/ReaderWriter_2_9_func.h b/slang/BitWriter_2_9_func/ReaderWriter_2_9_func.h
new file mode 100644
index 0000000..24ecc49
--- /dev/null
+++ b/slang/BitWriter_2_9_func/ReaderWriter_2_9_func.h
@@ -0,0 +1,143 @@
+//===-- llvm/Bitcode/ReaderWriter.h - Bitcode reader/writers ----*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This header defines interfaces to read and write LLVM bitcode files/streams.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_BITCODE_2_9_FUNC_H
+#define LLVM_BITCODE_2_9_FUNC_H
+
+#include <string>
+
+namespace llvm {
+  class Module;
+  class MemoryBuffer;
+  class ModulePass;
+  class BitstreamWriter;
+  class LLVMContext;
+  class raw_ostream;
+}  // End llvm namespace
+
+namespace llvm_2_9_func {
+  /// getLazyBitcodeModule - Read the header of the specified bitcode buffer
+  /// and prepare for lazy deserialization of function bodies.  If successful,
+  /// this takes ownership of 'buffer' and returns a non-null pointer.  On
+  /// error, this returns null, *does not* take ownership of Buffer, and fills
+  /// in *ErrMsg with an error description if ErrMsg is non-null.
+  llvm::Module *getLazyBitcodeModule(llvm::MemoryBuffer *Buffer,
+                               llvm::LLVMContext& Context,
+                               std::string *ErrMsg = 0);
+
+  /// getBitcodeTargetTriple - Read the header of the specified bitcode
+  /// buffer and extract just the triple information. If successful,
+  /// this returns a string and *does not* take ownership
+  /// of 'buffer'. On error, this returns "", and fills in *ErrMsg
+  /// if ErrMsg is non-null.
+  std::string getBitcodeTargetTriple(llvm::MemoryBuffer *Buffer,
+                                     llvm::LLVMContext& Context,
+                                     std::string *ErrMsg = 0);
+
+  /// ParseBitcodeFile - Read the specified bitcode file, returning the module.
+  /// If an error occurs, this returns null and fills in *ErrMsg if it is
+  /// non-null.  This method *never* takes ownership of Buffer.
+  llvm::Module *ParseBitcodeFile(llvm::MemoryBuffer *Buffer, llvm::LLVMContext& Context,
+                           std::string *ErrMsg = 0);
+
+  /// WriteBitcodeToFile - Write the specified module to the specified
+  /// raw output stream.  For streams where it matters, the given stream
+  /// should be in "binary" mode.
+  void WriteBitcodeToFile(const llvm::Module *M, llvm::raw_ostream &Out);
+
+  /// createBitcodeWriterPass - Create and return a pass that writes the module
+  /// to the specified ostream.
+  llvm::ModulePass *createBitcodeWriterPass(llvm::raw_ostream &Str);
+
+
+  /// isBitcodeWrapper - Return true if the given bytes are the magic bytes
+  /// for an LLVM IR bitcode wrapper.
+  ///
+  static inline bool isBitcodeWrapper(const unsigned char *BufPtr,
+                                      const unsigned char *BufEnd) {
+    // See if you can find the hidden message in the magic bytes :-).
+    // (Hint: it's a little-endian encoding.)
+    return BufPtr != BufEnd &&
+           BufPtr[0] == 0xDE &&
+           BufPtr[1] == 0xC0 &&
+           BufPtr[2] == 0x17 &&
+           BufPtr[3] == 0x0B;
+  }
+
+  /// isRawBitcode - Return true if the given bytes are the magic bytes for
+  /// raw LLVM IR bitcode (without a wrapper).
+  ///
+  static inline bool isRawBitcode(const unsigned char *BufPtr,
+                                  const unsigned char *BufEnd) {
+    // These bytes sort of have a hidden message, but it's not in
+    // little-endian this time, and it's a little redundant.
+    return BufPtr != BufEnd &&
+           BufPtr[0] == 'B' &&
+           BufPtr[1] == 'C' &&
+           BufPtr[2] == 0xc0 &&
+           BufPtr[3] == 0xde;
+  }
+
+  /// isBitcode - Return true if the given bytes are the magic bytes for
+  /// LLVM IR bitcode, either with or without a wrapper.
+  ///
+  static bool inline isBitcode(const unsigned char *BufPtr,
+                               const unsigned char *BufEnd) {
+    return isBitcodeWrapper(BufPtr, BufEnd) ||
+           isRawBitcode(BufPtr, BufEnd);
+  }
+
+  /// SkipBitcodeWrapperHeader - Some systems wrap bc files with a special
+  /// header for padding or other reasons.  The format of this header is:
+  ///
+  /// struct bc_header {
+  ///   uint32_t Magic;         // 0x0B17C0DE
+  ///   uint32_t Version;       // Version, currently always 0.
+  ///   uint32_t BitcodeOffset; // Offset to traditional bitcode file.
+  ///   uint32_t BitcodeSize;   // Size of traditional bitcode file.
+  ///   ... potentially other gunk ...
+  /// };
+  ///
+  /// This function is called when we find a file with a matching magic number.
+  /// In this case, skip down to the subsection of the file that is actually a
+  /// BC file.
+  static inline bool SkipBitcodeWrapperHeader(unsigned char *&BufPtr,
+                                              unsigned char *&BufEnd) {
+    enum {
+      KnownHeaderSize = 4*4,  // Size of header we read.
+      OffsetField = 2*4,      // Offset in bytes to Offset field.
+      SizeField = 3*4         // Offset in bytes to Size field.
+    };
+
+    // Must contain the header!
+    if (BufEnd-BufPtr < KnownHeaderSize) return true;
+
+    unsigned Offset = ( BufPtr[OffsetField  ]        |
+                       (BufPtr[OffsetField+1] << 8)  |
+                       (BufPtr[OffsetField+2] << 16) |
+                       (BufPtr[OffsetField+3] << 24));
+    unsigned Size   = ( BufPtr[SizeField    ]        |
+                       (BufPtr[SizeField  +1] << 8)  |
+                       (BufPtr[SizeField  +2] << 16) |
+                       (BufPtr[SizeField  +3] << 24));
+
+    // Verify that Offset+Size fits in the file.
+    if (Offset+Size > unsigned(BufEnd-BufPtr))
+      return true;
+    BufPtr += Offset;
+    BufEnd = BufPtr+Size;
+    return false;
+  }
+}  // End llvm_2_9_func namespace
+
+#endif
diff --git a/slang/BitWriter_2_9_func/ValueEnumerator.cpp b/slang/BitWriter_2_9_func/ValueEnumerator.cpp
new file mode 100644
index 0000000..ce785da
--- /dev/null
+++ b/slang/BitWriter_2_9_func/ValueEnumerator.cpp
@@ -0,0 +1,546 @@
+//===-- ValueEnumerator.cpp - Number values and types for bitcode writer --===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file implements the ValueEnumerator class.
+//
+//===----------------------------------------------------------------------===//
+
+#include "ValueEnumerator.h"
+#include "llvm/ADT/STLExtras.h"
+#include "llvm/ADT/SmallPtrSet.h"
+#include "llvm/IR/Constants.h"
+#include "llvm/IR/DebugInfoMetadata.h"
+#include "llvm/IR/DerivedTypes.h"
+#include "llvm/IR/Instructions.h"
+#include "llvm/IR/Module.h"
+#include "llvm/IR/ValueSymbolTable.h"
+#include "llvm/Support/Debug.h"
+#include "llvm/Support/raw_ostream.h"
+#include <algorithm>
+using namespace llvm;
+
+namespace llvm_2_9_func {
+
+static bool isIntOrIntVectorValue(const std::pair<const Value*, unsigned> &V) {
+  return V.first->getType()->isIntOrIntVectorTy();
+}
+
+/// ValueEnumerator - Enumerate module-level information.
+ValueEnumerator::ValueEnumerator(const llvm::Module &M)
+    : HasMDString(false), HasDILocation(false) {
+  // Enumerate the global variables.
+  for (llvm::Module::const_global_iterator I = M.global_begin(), E = M.global_end();
+       I != E; ++I)
+    EnumerateValue(&*I);
+
+  // Enumerate the functions.
+  for (llvm::Module::const_iterator I = M.begin(), E = M.end(); I != E; ++I) {
+    EnumerateValue(&*I);
+    EnumerateAttributes(cast<Function>(I)->getAttributes());
+  }
+
+  // Enumerate the aliases.
+  for (llvm::Module::const_alias_iterator I = M.alias_begin(), E = M.alias_end();
+       I != E; ++I)
+    EnumerateValue(&*I);
+
+  // Remember what is the cutoff between globalvalue's and other constants.
+  unsigned FirstConstant = Values.size();
+
+  // Enumerate the global variable initializers.
+  for (llvm::Module::const_global_iterator I = M.global_begin(), E = M.global_end();
+       I != E; ++I)
+    if (I->hasInitializer())
+      EnumerateValue(I->getInitializer());
+
+  // Enumerate the aliasees.
+  for (llvm::Module::const_alias_iterator I = M.alias_begin(), E = M.alias_end();
+       I != E; ++I)
+    EnumerateValue(I->getAliasee());
+
+  // Enumerate the metadata type.
+  //
+  // TODO: Move this to ValueEnumerator::EnumerateOperandType() once bitcode
+  // only encodes the metadata type when it's used as a value.
+  EnumerateType(Type::getMetadataTy(M.getContext()));
+
+  // Insert constants and metadata that are named at module level into the slot
+  // pool so that the module symbol table can refer to them...
+  EnumerateValueSymbolTable(M.getValueSymbolTable());
+  EnumerateNamedMetadata(M);
+
+  SmallVector<std::pair<unsigned, MDNode *>, 8> MDs;
+
+  // Enumerate types used by function bodies and argument lists.
+  for (const Function &F : M) {
+    for (const Argument &A : F.args())
+      EnumerateType(A.getType());
+
+    for (const BasicBlock &BB : F)
+      for (const Instruction &I : BB) {
+        for (const Use &Op : I.operands()) {
+          auto *MD = dyn_cast<MetadataAsValue>(&Op);
+          if (!MD) {
+            EnumerateOperandType(Op);
+            continue;
+          }
+
+          // Local metadata is enumerated during function-incorporation.
+          if (isa<LocalAsMetadata>(MD->getMetadata()))
+            continue;
+
+          EnumerateMetadata(MD->getMetadata());
+        }
+        EnumerateType(I.getType());
+        if (const CallInst *CI = dyn_cast<CallInst>(&I))
+          EnumerateAttributes(CI->getAttributes());
+        else if (const InvokeInst *II = dyn_cast<InvokeInst>(&I))
+          EnumerateAttributes(II->getAttributes());
+
+        // Enumerate metadata attached with this instruction.
+        MDs.clear();
+        I.getAllMetadataOtherThanDebugLoc(MDs);
+        for (unsigned i = 0, e = MDs.size(); i != e; ++i)
+          EnumerateMetadata(MDs[i].second);
+
+        // Don't enumerate the location directly -- it has a special record
+        // type -- but enumerate its operands.
+        if (DILocation *L = I.getDebugLoc())
+          EnumerateMDNodeOperands(L);
+      }
+  }
+
+  // Optimize constant ordering.
+  OptimizeConstants(FirstConstant, Values.size());
+}
+
+unsigned ValueEnumerator::getInstructionID(const Instruction *Inst) const {
+  InstructionMapType::const_iterator I = InstructionMap.find(Inst);
+  assert(I != InstructionMap.end() && "Instruction is not mapped!");
+  return I->second;
+}
+
+void ValueEnumerator::setInstructionID(const Instruction *I) {
+  InstructionMap[I] = InstructionCount++;
+}
+
+unsigned ValueEnumerator::getValueID(const Value *V) const {
+  if (auto *MD = dyn_cast<MetadataAsValue>(V))
+    return getMetadataID(MD->getMetadata());
+
+  ValueMapType::const_iterator I = ValueMap.find(V);
+  assert(I != ValueMap.end() && "Value not in slotcalculator!");
+  return I->second-1;
+}
+
+void ValueEnumerator::dump() const {
+  print(dbgs(), ValueMap, "Default");
+  dbgs() << '\n';
+  print(dbgs(), MDValueMap, "MetaData");
+  dbgs() << '\n';
+}
+
+void ValueEnumerator::print(raw_ostream &OS, const ValueMapType &Map,
+                            const char *Name) const {
+
+  OS << "Map Name: " << Name << "\n";
+  OS << "Size: " << Map.size() << "\n";
+  for (ValueMapType::const_iterator I = Map.begin(),
+         E = Map.end(); I != E; ++I) {
+
+    const Value *V = I->first;
+    if (V->hasName())
+      OS << "Value: " << V->getName();
+    else
+      OS << "Value: [null]\n";
+    V->dump();
+
+    OS << " Uses(" << std::distance(V->use_begin(),V->use_end()) << "):";
+    for (const Use &U : V->uses()) {
+      if (&U != &*V->use_begin())
+        OS << ",";
+      if(U->hasName())
+        OS << " " << U->getName();
+      else
+        OS << " [null]";
+
+    }
+    OS <<  "\n\n";
+  }
+}
+
+void ValueEnumerator::print(llvm::raw_ostream &OS, const MetadataMapType &Map,
+                            const char *Name) const {
+
+  OS << "Map Name: " << Name << "\n";
+  OS << "Size: " << Map.size() << "\n";
+  for (auto I = Map.begin(), E = Map.end(); I != E; ++I) {
+    const llvm::Metadata *MD = I->first;
+    OS << "Metadata: slot = " << I->second << "\n";
+    MD->print(OS);
+  }
+}
+
+
+// Optimize constant ordering.
+namespace {
+  struct CstSortPredicate {
+    ValueEnumerator &VE;
+    explicit CstSortPredicate(ValueEnumerator &ve) : VE(ve) {}
+    bool operator()(const std::pair<const Value*, unsigned> &LHS,
+                    const std::pair<const Value*, unsigned> &RHS) {
+      // Sort by plane.
+      if (LHS.first->getType() != RHS.first->getType())
+        return VE.getTypeID(LHS.first->getType()) <
+               VE.getTypeID(RHS.first->getType());
+      // Then by frequency.
+      return LHS.second > RHS.second;
+    }
+  };
+}
+
+/// OptimizeConstants - Reorder constant pool for denser encoding.
+void ValueEnumerator::OptimizeConstants(unsigned CstStart, unsigned CstEnd) {
+  if (CstStart == CstEnd || CstStart+1 == CstEnd) return;
+
+  CstSortPredicate P(*this);
+  std::stable_sort(Values.begin()+CstStart, Values.begin()+CstEnd, P);
+
+  // Ensure that integer and vector of integer constants are at the start of the
+  // constant pool.  This is important so that GEP structure indices come before
+  // gep constant exprs.
+  std::partition(Values.begin()+CstStart, Values.begin()+CstEnd,
+                 isIntOrIntVectorValue);
+
+  // Rebuild the modified portion of ValueMap.
+  for (; CstStart != CstEnd; ++CstStart)
+    ValueMap[Values[CstStart].first] = CstStart+1;
+}
+
+
+/// EnumerateValueSymbolTable - Insert all of the values in the specified symbol
+/// table into the values table.
+void ValueEnumerator::EnumerateValueSymbolTable(const ValueSymbolTable &VST) {
+  for (ValueSymbolTable::const_iterator VI = VST.begin(), VE = VST.end();
+       VI != VE; ++VI)
+    EnumerateValue(VI->getValue());
+}
+
+/// EnumerateNamedMetadata - Insert all of the values referenced by
+/// named metadata in the specified module.
+void ValueEnumerator::EnumerateNamedMetadata(const llvm::Module &M) {
+  for (llvm::Module::const_named_metadata_iterator I = M.named_metadata_begin(),
+                                             E = M.named_metadata_end();
+       I != E; ++I)
+    EnumerateNamedMDNode(&*I);
+}
+
+void ValueEnumerator::EnumerateNamedMDNode(const NamedMDNode *MD) {
+  for (unsigned i = 0, e = MD->getNumOperands(); i != e; ++i)
+    EnumerateMetadata(MD->getOperand(i));
+}
+
+/// EnumerateMDNodeOperands - Enumerate all non-function-local values
+/// and types referenced by the given MDNode.
+void ValueEnumerator::EnumerateMDNodeOperands(const MDNode *N) {
+  for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) {
+    Metadata *MD = N->getOperand(i);
+    if (!MD)
+      continue;
+    assert(!isa<LocalAsMetadata>(MD) && "MDNodes cannot be function-local");
+    EnumerateMetadata(MD);
+  }
+}
+
+void ValueEnumerator::EnumerateMetadata(const llvm::Metadata *MD) {
+  assert(
+      (isa<MDNode>(MD) || isa<MDString>(MD) || isa<ConstantAsMetadata>(MD)) &&
+      "Invalid metadata kind");
+
+  // Insert a dummy ID to block the co-recursive call to
+  // EnumerateMDNodeOperands() from re-visiting MD in a cyclic graph.
+  //
+  // Return early if there's already an ID.
+  if (!MDValueMap.insert(std::make_pair(MD, 0)).second)
+    return;
+
+  // Visit operands first to minimize RAUW.
+  if (auto *N = dyn_cast<MDNode>(MD))
+    EnumerateMDNodeOperands(N);
+  else if (auto *C = dyn_cast<ConstantAsMetadata>(MD))
+    EnumerateValue(C->getValue());
+
+  HasMDString |= isa<MDString>(MD);
+  HasDILocation |= isa<DILocation>(MD);
+
+  // Replace the dummy ID inserted above with the correct one.  MDValueMap may
+  // have changed by inserting operands, so we need a fresh lookup here.
+  MDs.push_back(MD);
+  MDValueMap[MD] = MDs.size();
+}
+
+/// EnumerateFunctionLocalMetadataa - Incorporate function-local metadata
+/// information reachable from the metadata.
+void ValueEnumerator::EnumerateFunctionLocalMetadata(
+    const llvm::LocalAsMetadata *Local) {
+  // Check to see if it's already in!
+  unsigned &MDValueID = MDValueMap[Local];
+  if (MDValueID)
+    return;
+
+  MDs.push_back(Local);
+  MDValueID = MDs.size();
+
+  EnumerateValue(Local->getValue());
+
+  // Also, collect all function-local metadata for easy access.
+  FunctionLocalMDs.push_back(Local);
+}
+
+void ValueEnumerator::EnumerateValue(const Value *V) {
+  assert(!V->getType()->isVoidTy() && "Can't insert void values!");
+  assert(!isa<MetadataAsValue>(V) && "EnumerateValue doesn't handle Metadata!");
+
+  // Check to see if it's already in!
+  unsigned &ValueID = ValueMap[V];
+  if (ValueID) {
+    // Increment use count.
+    Values[ValueID-1].second++;
+    return;
+  }
+
+  // Enumerate the type of this value.
+  EnumerateType(V->getType());
+
+  if (const Constant *C = dyn_cast<Constant>(V)) {
+    if (isa<GlobalValue>(C)) {
+      // Initializers for globals are handled explicitly elsewhere.
+    } else if (C->getNumOperands()) {
+      // If a constant has operands, enumerate them.  This makes sure that if a
+      // constant has uses (for example an array of const ints), that they are
+      // inserted also.
+
+      // We prefer to enumerate them with values before we enumerate the user
+      // itself.  This makes it more likely that we can avoid forward references
+      // in the reader.  We know that there can be no cycles in the constants
+      // graph that don't go through a global variable.
+      for (User::const_op_iterator I = C->op_begin(), E = C->op_end();
+           I != E; ++I)
+        if (!isa<BasicBlock>(*I)) // Don't enumerate BB operand to BlockAddress.
+          EnumerateValue(*I);
+
+      // Finally, add the value.  Doing this could make the ValueID reference be
+      // dangling, don't reuse it.
+      Values.push_back(std::make_pair(V, 1U));
+      ValueMap[V] = Values.size();
+      return;
+    } else if (const ConstantDataSequential *CDS =
+               dyn_cast<ConstantDataSequential>(C)) {
+      // For our legacy handling of the new ConstantDataSequential type, we
+      // need to enumerate the individual elements, as well as mark the
+      // outer constant as used.
+      for (unsigned i = 0, e = CDS->getNumElements(); i != e; ++i)
+        EnumerateValue(CDS->getElementAsConstant(i));
+      Values.push_back(std::make_pair(V, 1U));
+      ValueMap[V] = Values.size();
+      return;
+    }
+  }
+
+  // Add the value.
+  Values.push_back(std::make_pair(V, 1U));
+  ValueID = Values.size();
+}
+
+
+void ValueEnumerator::EnumerateType(Type *Ty) {
+  unsigned *TypeID = &TypeMap[Ty];
+
+  // We've already seen this type.
+  if (*TypeID)
+    return;
+
+  // If it is a non-anonymous struct, mark the type as being visited so that we
+  // don't recursively visit it.  This is safe because we allow forward
+  // references of these in the bitcode reader.
+  if (StructType *STy = dyn_cast<StructType>(Ty))
+    if (!STy->isLiteral())
+      *TypeID = ~0U;
+
+  // Enumerate all of the subtypes before we enumerate this type.  This ensures
+  // that the type will be enumerated in an order that can be directly built.
+  for (Type *SubTy : Ty->subtypes())
+    EnumerateType(SubTy);
+
+  // Refresh the TypeID pointer in case the table rehashed.
+  TypeID = &TypeMap[Ty];
+
+  // Check to see if we got the pointer another way.  This can happen when
+  // enumerating recursive types that hit the base case deeper than they start.
+  //
+  // If this is actually a struct that we are treating as forward ref'able,
+  // then emit the definition now that all of its contents are available.
+  if (*TypeID && *TypeID != ~0U)
+    return;
+
+  // Add this type now that its contents are all happily enumerated.
+  Types.push_back(Ty);
+
+  *TypeID = Types.size();
+}
+
+// Enumerate the types for the specified value.  If the value is a constant,
+// walk through it, enumerating the types of the constant.
+void ValueEnumerator::EnumerateOperandType(const Value *V) {
+  EnumerateType(V->getType());
+
+  if (auto *MD = dyn_cast<MetadataAsValue>(V)) {
+    assert(!isa<LocalAsMetadata>(MD->getMetadata()) &&
+           "Function-local metadata should be left for later");
+
+    EnumerateMetadata(MD->getMetadata());
+    return;
+  }
+
+  const Constant *C = dyn_cast<Constant>(V);
+  if (!C)
+    return;
+
+  // If this constant is already enumerated, ignore it, we know its type must
+  // be enumerated.
+  if (ValueMap.count(C))
+    return;
+
+  // This constant may have operands, make sure to enumerate the types in
+  // them.
+  for (unsigned i = 0, e = C->getNumOperands(); i != e; ++i) {
+    const Value *Op = C->getOperand(i);
+
+    // Don't enumerate basic blocks here, this happens as operands to
+    // blockaddress.
+    if (isa<BasicBlock>(Op))
+      continue;
+
+    EnumerateOperandType(Op);
+  }
+}
+
+void ValueEnumerator::EnumerateAttributes(AttributeSet PAL) {
+  if (PAL.isEmpty()) return;  // null is always 0.
+
+  // Do a lookup.
+  unsigned &Entry = AttributeMap[PAL];
+  if (Entry == 0) {
+    // Never saw this before, add it.
+    Attribute.push_back(PAL);
+    Entry = Attribute.size();
+  }
+
+  // Do lookups for all attribute groups.
+  for (unsigned i = 0, e = PAL.getNumSlots(); i != e; ++i) {
+    AttributeSet AS = PAL.getSlotAttributes(i);
+    unsigned &Entry = AttributeGroupMap[AS];
+    if (Entry == 0) {
+      AttributeGroups.push_back(AS);
+      Entry = AttributeGroups.size();
+    }
+  }
+}
+
+void ValueEnumerator::incorporateFunction(const Function &F) {
+  InstructionCount = 0;
+  NumModuleValues = Values.size();
+  NumModuleMDs = MDs.size();
+
+  // Adding function arguments to the value table.
+  for (Function::const_arg_iterator I = F.arg_begin(), E = F.arg_end();
+       I != E; ++I)
+    EnumerateValue(&*I);
+
+  FirstFuncConstantID = Values.size();
+
+  // Add all function-level constants to the value table.
+  for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB) {
+    for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I!=E; ++I)
+      for (User::const_op_iterator OI = I->op_begin(), E = I->op_end();
+           OI != E; ++OI) {
+        if ((isa<Constant>(*OI) && !isa<GlobalValue>(*OI)) ||
+            isa<InlineAsm>(*OI))
+          EnumerateValue(*OI);
+      }
+    BasicBlocks.push_back(&*BB);
+    ValueMap[&*BB] = BasicBlocks.size();
+  }
+
+  // Optimize the constant layout.
+  OptimizeConstants(FirstFuncConstantID, Values.size());
+
+  // Add the function's parameter attributes so they are available for use in
+  // the function's instruction.
+  EnumerateAttributes(F.getAttributes());
+
+  FirstInstID = Values.size();
+
+  SmallVector<llvm::LocalAsMetadata *, 8> FnLocalMDVector;
+  // Add all of the instructions.
+  for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB) {
+    for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I!=E; ++I) {
+      for (User::const_op_iterator OI = I->op_begin(), E = I->op_end();
+           OI != E; ++OI) {
+        if (auto *MD = dyn_cast<llvm::MetadataAsValue>(&*OI))
+          if (auto *Local = dyn_cast<LocalAsMetadata>(MD->getMetadata()))
+            // Enumerate metadata after the instructions they might refer to.
+            FnLocalMDVector.push_back(Local);
+      }
+
+      if (!I->getType()->isVoidTy())
+        EnumerateValue(&*I);
+    }
+  }
+
+  // Add all of the function-local metadata.
+  for (unsigned i = 0, e = FnLocalMDVector.size(); i != e; ++i)
+    EnumerateFunctionLocalMetadata(FnLocalMDVector[i]);
+}
+
+void ValueEnumerator::purgeFunction() {
+  /// Remove purged values from the ValueMap.
+  for (unsigned i = NumModuleValues, e = Values.size(); i != e; ++i)
+    ValueMap.erase(Values[i].first);
+  for (unsigned i = NumModuleMDs, e = MDs.size(); i != e; ++i)
+    MDValueMap.erase(MDs[i]);
+  for (unsigned i = 0, e = BasicBlocks.size(); i != e; ++i)
+    ValueMap.erase(BasicBlocks[i]);
+
+  Values.resize(NumModuleValues);
+  MDs.resize(NumModuleMDs);
+  BasicBlocks.clear();
+  FunctionLocalMDs.clear();
+}
+
+static void IncorporateFunctionInfoGlobalBBIDs(const Function *F,
+                                 DenseMap<const BasicBlock*, unsigned> &IDMap) {
+  unsigned Counter = 0;
+  for (Function::const_iterator BB = F->begin(), E = F->end(); BB != E; ++BB)
+    IDMap[&*BB] = ++Counter;
+}
+
+/// getGlobalBasicBlockID - This returns the function-specific ID for the
+/// specified basic block.  This is relatively expensive information, so it
+/// should only be used by rare constructs such as address-of-label.
+unsigned ValueEnumerator::getGlobalBasicBlockID(const BasicBlock *BB) const {
+  unsigned &Idx = GlobalBasicBlockIDs[BB];
+  if (Idx != 0)
+    return Idx-1;
+
+  IncorporateFunctionInfoGlobalBBIDs(BB->getParent(), GlobalBasicBlockIDs);
+  return getGlobalBasicBlockID(BB);
+}
+
+}  // end llvm_2_9_func namespace
diff --git a/slang/BitWriter_2_9_func/ValueEnumerator.h b/slang/BitWriter_2_9_func/ValueEnumerator.h
new file mode 100644
index 0000000..f26b986
--- /dev/null
+++ b/slang/BitWriter_2_9_func/ValueEnumerator.h
@@ -0,0 +1,195 @@
+//===-- Bitcode/Writer/ValueEnumerator.h - Number values --------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This class gives values and types Unique ID's.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef VALUE_ENUMERATOR_H
+#define VALUE_ENUMERATOR_H
+
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/IR/Attributes.h"
+#include <vector>
+
+namespace llvm {
+
+class Type;
+class Value;
+class Instruction;
+class BasicBlock;
+class Function;
+class Module;
+class Metadata;
+class LocalAsMetadata;
+class MDNode;
+class NamedMDNode;
+class AttributeSet;
+class ValueSymbolTable;
+class MDSymbolTable;
+class raw_ostream;
+
+}  // end llvm namespace
+
+namespace llvm_2_9_func {
+
+class ValueEnumerator {
+public:
+  typedef std::vector<llvm::Type*> TypeList;
+
+  // For each value, we remember its Value* and occurrence frequency.
+  typedef std::vector<std::pair<const llvm::Value*, unsigned> > ValueList;
+private:
+  typedef llvm::DenseMap<llvm::Type*, unsigned> TypeMapType;
+  TypeMapType TypeMap;
+  TypeList Types;
+
+  typedef llvm::DenseMap<const llvm::Value*, unsigned> ValueMapType;
+  ValueMapType ValueMap;
+  ValueList Values;
+
+
+  std::vector<const llvm::Metadata *> MDs;
+  llvm::SmallVector<const llvm::LocalAsMetadata *, 8> FunctionLocalMDs;
+  typedef llvm::DenseMap<const llvm::Metadata *, unsigned> MetadataMapType;
+  MetadataMapType MDValueMap;
+  bool HasMDString;
+  bool HasDILocation;
+
+  typedef llvm::DenseMap<llvm::AttributeSet, unsigned> AttributeGroupMapType;
+  AttributeGroupMapType AttributeGroupMap;
+  std::vector<llvm::AttributeSet> AttributeGroups;
+
+  typedef llvm::DenseMap<llvm::AttributeSet, unsigned> AttributeMapType;
+  AttributeMapType AttributeMap;
+  std::vector<llvm::AttributeSet> Attribute;
+
+  /// GlobalBasicBlockIDs - This map memoizes the basic block ID's referenced by
+  /// the "getGlobalBasicBlockID" method.
+  mutable llvm::DenseMap<const llvm::BasicBlock*, unsigned> GlobalBasicBlockIDs;
+
+  typedef llvm::DenseMap<const llvm::Instruction*, unsigned> InstructionMapType;
+  InstructionMapType InstructionMap;
+  unsigned InstructionCount;
+
+  /// BasicBlocks - This contains all the basic blocks for the currently
+  /// incorporated function.  Their reverse mapping is stored in ValueMap.
+  std::vector<const llvm::BasicBlock*> BasicBlocks;
+
+  /// When a function is incorporated, this is the size of the Values list
+  /// before incorporation.
+  unsigned NumModuleValues;
+
+  /// When a function is incorporated, this is the size of the MDValues list
+  /// before incorporation.
+  unsigned NumModuleMDs;
+
+  unsigned FirstFuncConstantID;
+  unsigned FirstInstID;
+
+  ValueEnumerator(const ValueEnumerator &) = delete;
+  void operator=(const ValueEnumerator &) = delete;
+public:
+  explicit ValueEnumerator(const llvm::Module &M);
+
+  void dump() const;
+  void print(llvm::raw_ostream &OS, const ValueMapType &Map, const char *Name) const;
+  void print(llvm::raw_ostream &OS, const MetadataMapType &Map,
+             const char *Name) const;
+
+  unsigned getValueID(const llvm::Value *V) const;
+  unsigned getMetadataID(const llvm::Metadata *MD) const {
+    auto ID = getMetadataOrNullID(MD);
+    assert(ID != 0 && "Metadata not in slotcalculator!");
+    return ID - 1;
+  }
+  unsigned getMetadataOrNullID(const llvm::Metadata *MD) const {
+    return MDValueMap.lookup(MD);
+  }
+
+  bool hasMDString() const { return HasMDString; }
+  bool hasDILocation() const { return HasDILocation; }
+
+  unsigned getTypeID(llvm::Type *T) const {
+    TypeMapType::const_iterator I = TypeMap.find(T);
+    assert(I != TypeMap.end() && "Type not in ValueEnumerator!");
+    return I->second-1;
+  }
+
+  unsigned getInstructionID(const llvm::Instruction *I) const;
+  void setInstructionID(const llvm::Instruction *I);
+
+  unsigned getAttributeID(llvm::AttributeSet PAL) const {
+    if (PAL.isEmpty()) return 0;  // Null maps to zero.
+    AttributeMapType::const_iterator I = AttributeMap.find(PAL);
+    assert(I != AttributeMap.end() && "Attribute not in ValueEnumerator!");
+    return I->second;
+  }
+
+  unsigned getAttributeGroupID(llvm::AttributeSet PAL) const {
+    if (PAL.isEmpty()) return 0;  // Null maps to zero.
+    AttributeGroupMapType::const_iterator I = AttributeGroupMap.find(PAL);
+    assert(I != AttributeGroupMap.end() && "Attribute not in ValueEnumerator!");
+    return I->second;
+  }
+
+  /// getFunctionConstantRange - Return the range of values that corresponds to
+  /// function-local constants.
+  void getFunctionConstantRange(unsigned &Start, unsigned &End) const {
+    Start = FirstFuncConstantID;
+    End = FirstInstID;
+  }
+
+  const ValueList &getValues() const { return Values; }
+  const std::vector<const llvm::Metadata *> &getMDs() const { return MDs; }
+  const llvm::SmallVectorImpl<const llvm::LocalAsMetadata *> &getFunctionLocalMDs() const {
+    return FunctionLocalMDs;
+  }
+  const TypeList &getTypes() const { return Types; }
+  const std::vector<const llvm::BasicBlock*> &getBasicBlocks() const {
+    return BasicBlocks;
+  }
+  const std::vector<llvm::AttributeSet> &getAttributes() const {
+    return Attribute;
+  }
+  const std::vector<llvm::AttributeSet> &getAttributeGroups() const {
+    return AttributeGroups;
+  }
+
+  /// getGlobalBasicBlockID - This returns the function-specific ID for the
+  /// specified basic block.  This is relatively expensive information, so it
+  /// should only be used by rare constructs such as address-of-label.
+  unsigned getGlobalBasicBlockID(const llvm::BasicBlock *BB) const;
+
+  /// incorporateFunction/purgeFunction - If you'd like to deal with a function,
+  /// use these two methods to get its data into the ValueEnumerator!
+  ///
+  void incorporateFunction(const llvm::Function &F);
+  void purgeFunction();
+
+private:
+  void OptimizeConstants(unsigned CstStart, unsigned CstEnd);
+
+  void EnumerateMDNodeOperands(const llvm::MDNode *N);
+  void EnumerateMetadata(const llvm::Metadata *MD);
+  void EnumerateFunctionLocalMetadata(const llvm::LocalAsMetadata *Local);
+  void EnumerateNamedMDNode(const llvm::NamedMDNode *NMD);
+  void EnumerateValue(const llvm::Value *V);
+  void EnumerateType(llvm::Type *T);
+  void EnumerateOperandType(const llvm::Value *V);
+  void EnumerateAttributes(llvm::AttributeSet PAL);
+
+  void EnumerateValueSymbolTable(const llvm::ValueSymbolTable &ST);
+  void EnumerateNamedMetadata(const llvm::Module &M);
+};
+
+}  // End llvm_2_9_func namespace
+
+#endif
diff --git a/slang/BitWriter_3_2/Android.mk b/slang/BitWriter_3_2/Android.mk
new file mode 100644
index 0000000..743aeaf
--- /dev/null
+++ b/slang/BitWriter_3_2/Android.mk
@@ -0,0 +1,45 @@
+LOCAL_PATH:= $(call my-dir)
+
+LLVM_ROOT_PATH := $(LOCAL_PATH)/../../../../external/llvm
+include $(LLVM_ROOT_PATH)/llvm.mk
+
+bitcode_writer_3_2_SRC_FILES :=	\
+	BitcodeWriter.cpp	\
+	BitcodeWriterPass.cpp	\
+	ValueEnumerator.cpp
+
+# For the host
+# =====================================================
+include $(CLEAR_VARS)
+
+LOCAL_CFLAGS += $(local_cflags_for_slang)
+LOCAL_C_INCLUDES += frameworks/compile/slang
+
+LOCAL_SRC_FILES := $(bitcode_writer_3_2_SRC_FILES)
+
+LOCAL_MODULE:= libLLVMBitWriter_3_2
+
+LOCAL_MODULE_HOST_OS := darwin linux windows
+
+include $(LLVM_HOST_BUILD_MK)
+include $(LLVM_GEN_ATTRIBUTES_MK)
+include $(LLVM_GEN_INTRINSICS_MK)
+include $(BUILD_HOST_STATIC_LIBRARY)
+
+# For the device
+# =====================================================
+include $(CLEAR_VARS)
+
+LOCAL_CFLAGS += $(local_cflags_for_slang)
+LOCAL_C_INCLUDES += frameworks/compile/slang
+
+LOCAL_SRC_FILES := $(bitcode_writer_3_2_SRC_FILES)
+
+LOCAL_MODULE:= libLLVMBitWriter_3_2
+
+include $(LLVM_DEVICE_BUILD_MK)
+include $(LLVM_GEN_ATTRIBUTES_MK)
+include $(LLVM_GEN_INTRINSICS_MK)
+include $(BUILD_STATIC_LIBRARY)
+
+
diff --git a/slang/BitWriter_3_2/BitcodeWriter.cpp b/slang/BitWriter_3_2/BitcodeWriter.cpp
new file mode 100644
index 0000000..7618198
--- /dev/null
+++ b/slang/BitWriter_3_2/BitcodeWriter.cpp
@@ -0,0 +1,1876 @@
+//===--- Bitcode/Writer/BitcodeWriter.cpp - Bitcode Writer ----------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Bitcode writer implementation.
+//
+//===----------------------------------------------------------------------===//
+
+#include "ReaderWriter_3_2.h"
+#include "legacy_bitcode.h"
+#include "ValueEnumerator.h"
+#include "llvm/ADT/Triple.h"
+#include "llvm/Bitcode/BitstreamWriter.h"
+#include "llvm/Bitcode/LLVMBitCodes.h"
+#include "llvm/IR/Constants.h"
+#include "llvm/IR/DebugInfoMetadata.h"
+#include "llvm/IR/DerivedTypes.h"
+#include "llvm/IR/InlineAsm.h"
+#include "llvm/IR/Instructions.h"
+#include "llvm/IR/Module.h"
+#include "llvm/IR/Operator.h"
+#include "llvm/IR/UseListOrder.h"
+#include "llvm/IR/ValueSymbolTable.h"
+#include "llvm/Support/CommandLine.h"
+#include "llvm/Support/ErrorHandling.h"
+#include "llvm/Support/MathExtras.h"
+#include "llvm/Support/Program.h"
+#include "llvm/Support/raw_ostream.h"
+#include <cctype>
+#include <map>
+using namespace llvm;
+
+/// These are manifest constants used by the bitcode writer. They do not need to
+/// be kept in sync with the reader, but need to be consistent within this file.
+enum {
+  // VALUE_SYMTAB_BLOCK abbrev id's.
+  VST_ENTRY_8_ABBREV = bitc::FIRST_APPLICATION_ABBREV,
+  VST_ENTRY_7_ABBREV,
+  VST_ENTRY_6_ABBREV,
+  VST_BBENTRY_6_ABBREV,
+
+  // CONSTANTS_BLOCK abbrev id's.
+  CONSTANTS_SETTYPE_ABBREV = bitc::FIRST_APPLICATION_ABBREV,
+  CONSTANTS_INTEGER_ABBREV,
+  CONSTANTS_CE_CAST_Abbrev,
+  CONSTANTS_NULL_Abbrev,
+
+  // FUNCTION_BLOCK abbrev id's.
+  FUNCTION_INST_LOAD_ABBREV = bitc::FIRST_APPLICATION_ABBREV,
+  FUNCTION_INST_BINOP_ABBREV,
+  FUNCTION_INST_BINOP_FLAGS_ABBREV,
+  FUNCTION_INST_CAST_ABBREV,
+  FUNCTION_INST_RET_VOID_ABBREV,
+  FUNCTION_INST_RET_VAL_ABBREV,
+  FUNCTION_INST_UNREACHABLE_ABBREV
+};
+
+static unsigned GetEncodedCastOpcode(unsigned Opcode) {
+  switch (Opcode) {
+  default: llvm_unreachable("Unknown cast instruction!");
+  case Instruction::Trunc   : return bitc::CAST_TRUNC;
+  case Instruction::ZExt    : return bitc::CAST_ZEXT;
+  case Instruction::SExt    : return bitc::CAST_SEXT;
+  case Instruction::FPToUI  : return bitc::CAST_FPTOUI;
+  case Instruction::FPToSI  : return bitc::CAST_FPTOSI;
+  case Instruction::UIToFP  : return bitc::CAST_UITOFP;
+  case Instruction::SIToFP  : return bitc::CAST_SITOFP;
+  case Instruction::FPTrunc : return bitc::CAST_FPTRUNC;
+  case Instruction::FPExt   : return bitc::CAST_FPEXT;
+  case Instruction::PtrToInt: return bitc::CAST_PTRTOINT;
+  case Instruction::IntToPtr: return bitc::CAST_INTTOPTR;
+  case Instruction::BitCast : return bitc::CAST_BITCAST;
+  }
+}
+
+static unsigned GetEncodedBinaryOpcode(unsigned Opcode) {
+  switch (Opcode) {
+  default: llvm_unreachable("Unknown binary instruction!");
+  case Instruction::Add:
+  case Instruction::FAdd: return bitc::BINOP_ADD;
+  case Instruction::Sub:
+  case Instruction::FSub: return bitc::BINOP_SUB;
+  case Instruction::Mul:
+  case Instruction::FMul: return bitc::BINOP_MUL;
+  case Instruction::UDiv: return bitc::BINOP_UDIV;
+  case Instruction::FDiv:
+  case Instruction::SDiv: return bitc::BINOP_SDIV;
+  case Instruction::URem: return bitc::BINOP_UREM;
+  case Instruction::FRem:
+  case Instruction::SRem: return bitc::BINOP_SREM;
+  case Instruction::Shl:  return bitc::BINOP_SHL;
+  case Instruction::LShr: return bitc::BINOP_LSHR;
+  case Instruction::AShr: return bitc::BINOP_ASHR;
+  case Instruction::And:  return bitc::BINOP_AND;
+  case Instruction::Or:   return bitc::BINOP_OR;
+  case Instruction::Xor:  return bitc::BINOP_XOR;
+  }
+}
+
+static unsigned GetEncodedRMWOperation(AtomicRMWInst::BinOp Op) {
+  switch (Op) {
+  default: llvm_unreachable("Unknown RMW operation!");
+  case AtomicRMWInst::Xchg: return bitc::RMW_XCHG;
+  case AtomicRMWInst::Add: return bitc::RMW_ADD;
+  case AtomicRMWInst::Sub: return bitc::RMW_SUB;
+  case AtomicRMWInst::And: return bitc::RMW_AND;
+  case AtomicRMWInst::Nand: return bitc::RMW_NAND;
+  case AtomicRMWInst::Or: return bitc::RMW_OR;
+  case AtomicRMWInst::Xor: return bitc::RMW_XOR;
+  case AtomicRMWInst::Max: return bitc::RMW_MAX;
+  case AtomicRMWInst::Min: return bitc::RMW_MIN;
+  case AtomicRMWInst::UMax: return bitc::RMW_UMAX;
+  case AtomicRMWInst::UMin: return bitc::RMW_UMIN;
+  }
+}
+
+static unsigned GetEncodedOrdering(AtomicOrdering Ordering) {
+  switch (Ordering) {
+  case NotAtomic: return bitc::ORDERING_NOTATOMIC;
+  case Unordered: return bitc::ORDERING_UNORDERED;
+  case Monotonic: return bitc::ORDERING_MONOTONIC;
+  case Acquire: return bitc::ORDERING_ACQUIRE;
+  case Release: return bitc::ORDERING_RELEASE;
+  case AcquireRelease: return bitc::ORDERING_ACQREL;
+  case SequentiallyConsistent: return bitc::ORDERING_SEQCST;
+  }
+  llvm_unreachable("Invalid ordering");
+}
+
+static unsigned GetEncodedSynchScope(SynchronizationScope SynchScope) {
+  switch (SynchScope) {
+  case SingleThread: return bitc::SYNCHSCOPE_SINGLETHREAD;
+  case CrossThread: return bitc::SYNCHSCOPE_CROSSTHREAD;
+  }
+  llvm_unreachable("Invalid synch scope");
+}
+
+static void WriteStringRecord(unsigned Code, StringRef Str,
+                              unsigned AbbrevToUse, BitstreamWriter &Stream) {
+  SmallVector<unsigned, 64> Vals;
+
+  // Code: [strchar x N]
+  for (unsigned i = 0, e = Str.size(); i != e; ++i) {
+    if (AbbrevToUse && !BitCodeAbbrevOp::isChar6(Str[i]))
+      AbbrevToUse = 0;
+    Vals.push_back(Str[i]);
+  }
+
+  // Emit the finished record.
+  Stream.EmitRecord(Code, Vals, AbbrevToUse);
+}
+
+// Emit information about parameter attributes.
+static void WriteAttributeTable(const llvm_3_2::ValueEnumerator &VE,
+                                BitstreamWriter &Stream) {
+  const std::vector<AttributeSet> &Attrs = VE.getAttributes();
+  if (Attrs.empty()) return;
+
+  Stream.EnterSubblock(bitc::PARAMATTR_BLOCK_ID, 3);
+
+  SmallVector<uint64_t, 64> Record;
+  for (unsigned i = 0, e = Attrs.size(); i != e; ++i) {
+    const AttributeSet &A = Attrs[i];
+    for (unsigned i = 0, e = A.getNumSlots(); i != e; ++i) {
+      Record.push_back(A.getSlotIndex(i));
+      Record.push_back(encodeLLVMAttributesForBitcode(A, A.getSlotIndex(i)));
+    }
+
+    // This needs to use the 3.2 entry type
+    Stream.EmitRecord(bitc::PARAMATTR_CODE_ENTRY_OLD, Record);
+    Record.clear();
+  }
+
+  Stream.ExitBlock();
+}
+
+/// WriteTypeTable - Write out the type table for a module.
+static void WriteTypeTable(const llvm_3_2::ValueEnumerator &VE,
+                           BitstreamWriter &Stream) {
+  const llvm_3_2::ValueEnumerator::TypeList &TypeList = VE.getTypes();
+
+  Stream.EnterSubblock(bitc::TYPE_BLOCK_ID_NEW, 4 /*count from # abbrevs */);
+  SmallVector<uint64_t, 64> TypeVals;
+
+  uint64_t NumBits = Log2_32_Ceil(VE.getTypes().size()+1);
+
+  // Abbrev for TYPE_CODE_POINTER.
+  BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+  Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_POINTER));
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, NumBits));
+  Abbv->Add(BitCodeAbbrevOp(0));  // Addrspace = 0
+  unsigned PtrAbbrev = Stream.EmitAbbrev(Abbv);
+
+  // Abbrev for TYPE_CODE_FUNCTION.
+  Abbv = new BitCodeAbbrev();
+  Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_FUNCTION));
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));  // isvararg
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, NumBits));
+
+  unsigned FunctionAbbrev = Stream.EmitAbbrev(Abbv);
+
+  // Abbrev for TYPE_CODE_STRUCT_ANON.
+  Abbv = new BitCodeAbbrev();
+  Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_STRUCT_ANON));
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));  // ispacked
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, NumBits));
+
+  unsigned StructAnonAbbrev = Stream.EmitAbbrev(Abbv);
+
+  // Abbrev for TYPE_CODE_STRUCT_NAME.
+  Abbv = new BitCodeAbbrev();
+  Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_STRUCT_NAME));
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6));
+  unsigned StructNameAbbrev = Stream.EmitAbbrev(Abbv);
+
+  // Abbrev for TYPE_CODE_STRUCT_NAMED.
+  Abbv = new BitCodeAbbrev();
+  Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_STRUCT_NAMED));
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));  // ispacked
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, NumBits));
+
+  unsigned StructNamedAbbrev = Stream.EmitAbbrev(Abbv);
+
+  // Abbrev for TYPE_CODE_ARRAY.
+  Abbv = new BitCodeAbbrev();
+  Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_ARRAY));
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));   // size
+  Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, NumBits));
+
+  unsigned ArrayAbbrev = Stream.EmitAbbrev(Abbv);
+
+  // Emit an entry count so the reader can reserve space.
+  TypeVals.push_back(TypeList.size());
+  Stream.EmitRecord(bitc::TYPE_CODE_NUMENTRY, TypeVals);
+  TypeVals.clear();
+
+  // Loop over all of the types, emitting each in turn.
+  for (unsigned i = 0, e = TypeList.size(); i != e; ++i) {
+    Type *T = TypeList[i];
+    int AbbrevToUse = 0;
+    unsigned Code = 0;
+
+    switch (T->getTypeID()) {
+    default: llvm_unreachable("Unknown type!");
+    case Type::VoidTyID:      Code = bitc::TYPE_CODE_VOID;      break;
+    case Type::HalfTyID:      Code = bitc::TYPE_CODE_HALF;      break;
+    case Type::FloatTyID:     Code = bitc::TYPE_CODE_FLOAT;     break;
+    case Type::DoubleTyID:    Code = bitc::TYPE_CODE_DOUBLE;    break;
+    case Type::X86_FP80TyID:  Code = bitc::TYPE_CODE_X86_FP80;  break;
+    case Type::FP128TyID:     Code = bitc::TYPE_CODE_FP128;     break;
+    case Type::PPC_FP128TyID: Code = bitc::TYPE_CODE_PPC_FP128; break;
+    case Type::LabelTyID:     Code = bitc::TYPE_CODE_LABEL;     break;
+    case Type::MetadataTyID:  Code = bitc::TYPE_CODE_METADATA;  break;
+    case Type::X86_MMXTyID:   Code = bitc::TYPE_CODE_X86_MMX;   break;
+    case Type::IntegerTyID:
+      // INTEGER: [width]
+      Code = bitc::TYPE_CODE_INTEGER;
+      TypeVals.push_back(cast<IntegerType>(T)->getBitWidth());
+      break;
+    case Type::PointerTyID: {
+      PointerType *PTy = cast<PointerType>(T);
+      // POINTER: [pointee type, address space]
+      Code = bitc::TYPE_CODE_POINTER;
+      TypeVals.push_back(VE.getTypeID(PTy->getElementType()));
+      unsigned AddressSpace = PTy->getAddressSpace();
+      TypeVals.push_back(AddressSpace);
+      if (AddressSpace == 0) AbbrevToUse = PtrAbbrev;
+      break;
+    }
+    case Type::FunctionTyID: {
+      FunctionType *FT = cast<FunctionType>(T);
+      // FUNCTION: [isvararg, retty, paramty x N]
+      Code = bitc::TYPE_CODE_FUNCTION;
+      TypeVals.push_back(FT->isVarArg());
+      TypeVals.push_back(VE.getTypeID(FT->getReturnType()));
+      for (unsigned i = 0, e = FT->getNumParams(); i != e; ++i)
+        TypeVals.push_back(VE.getTypeID(FT->getParamType(i)));
+      AbbrevToUse = FunctionAbbrev;
+      break;
+    }
+    case Type::StructTyID: {
+      StructType *ST = cast<StructType>(T);
+      // STRUCT: [ispacked, eltty x N]
+      TypeVals.push_back(ST->isPacked());
+      // Output all of the element types.
+      for (StructType::element_iterator I = ST->element_begin(),
+           E = ST->element_end(); I != E; ++I)
+        TypeVals.push_back(VE.getTypeID(*I));
+
+      if (ST->isLiteral()) {
+        Code = bitc::TYPE_CODE_STRUCT_ANON;
+        AbbrevToUse = StructAnonAbbrev;
+      } else {
+        if (ST->isOpaque()) {
+          Code = bitc::TYPE_CODE_OPAQUE;
+        } else {
+          Code = bitc::TYPE_CODE_STRUCT_NAMED;
+          AbbrevToUse = StructNamedAbbrev;
+        }
+
+        // Emit the name if it is present.
+        if (!ST->getName().empty())
+          WriteStringRecord(bitc::TYPE_CODE_STRUCT_NAME, ST->getName(),
+                            StructNameAbbrev, Stream);
+      }
+      break;
+    }
+    case Type::ArrayTyID: {
+      ArrayType *AT = cast<ArrayType>(T);
+      // ARRAY: [numelts, eltty]
+      Code = bitc::TYPE_CODE_ARRAY;
+      TypeVals.push_back(AT->getNumElements());
+      TypeVals.push_back(VE.getTypeID(AT->getElementType()));
+      AbbrevToUse = ArrayAbbrev;
+      break;
+    }
+    case Type::VectorTyID: {
+      VectorType *VT = cast<VectorType>(T);
+      // VECTOR [numelts, eltty]
+      Code = bitc::TYPE_CODE_VECTOR;
+      TypeVals.push_back(VT->getNumElements());
+      TypeVals.push_back(VE.getTypeID(VT->getElementType()));
+      break;
+    }
+    }
+
+    // Emit the finished record.
+    Stream.EmitRecord(Code, TypeVals, AbbrevToUse);
+    TypeVals.clear();
+  }
+
+  Stream.ExitBlock();
+}
+
+static unsigned getEncodedLinkage(const GlobalValue &GV) {
+  switch (GV.getLinkage()) {
+  case GlobalValue::ExternalLinkage:
+    return 0;
+  case GlobalValue::WeakAnyLinkage:
+    return 1;
+  case GlobalValue::AppendingLinkage:
+    return 2;
+  case GlobalValue::InternalLinkage:
+    return 3;
+  case GlobalValue::LinkOnceAnyLinkage:
+    return 4;
+  case GlobalValue::ExternalWeakLinkage:
+    return 7;
+  case GlobalValue::CommonLinkage:
+    return 8;
+  case GlobalValue::PrivateLinkage:
+    return 9;
+  case GlobalValue::WeakODRLinkage:
+    return 10;
+  case GlobalValue::LinkOnceODRLinkage:
+    return 11;
+  case GlobalValue::AvailableExternallyLinkage:
+    return 12;
+  }
+  llvm_unreachable("Invalid linkage");
+}
+
+static unsigned getEncodedVisibility(const GlobalValue &GV) {
+  switch (GV.getVisibility()) {
+  case GlobalValue::DefaultVisibility:   return 0;
+  case GlobalValue::HiddenVisibility:    return 1;
+  case GlobalValue::ProtectedVisibility: return 2;
+  }
+  llvm_unreachable("Invalid visibility");
+}
+
+static unsigned getEncodedThreadLocalMode(const GlobalVariable &GV) {
+  switch (GV.getThreadLocalMode()) {
+    case GlobalVariable::NotThreadLocal:         return 0;
+    case GlobalVariable::GeneralDynamicTLSModel: return 1;
+    case GlobalVariable::LocalDynamicTLSModel:   return 2;
+    case GlobalVariable::InitialExecTLSModel:    return 3;
+    case GlobalVariable::LocalExecTLSModel:      return 4;
+  }
+  llvm_unreachable("Invalid TLS model");
+}
+
+// Emit top-level description of module, including target triple, inline asm,
+// descriptors for global variables, and function prototype info.
+static void WriteModuleInfo(const Module *M,
+                            const llvm_3_2::ValueEnumerator &VE,
+                            BitstreamWriter &Stream) {
+  // Emit various pieces of data attached to a module.
+  if (!M->getTargetTriple().empty())
+    WriteStringRecord(bitc::MODULE_CODE_TRIPLE, M->getTargetTriple(),
+                      0/*TODO*/, Stream);
+  const std::string &DL = M->getDataLayoutStr();
+  if (!DL.empty())
+    WriteStringRecord(bitc::MODULE_CODE_DATALAYOUT, DL, 0 /*TODO*/, Stream);
+  if (!M->getModuleInlineAsm().empty())
+    WriteStringRecord(bitc::MODULE_CODE_ASM, M->getModuleInlineAsm(),
+                      0/*TODO*/, Stream);
+
+  // Emit information about sections and GC, computing how many there are. Also
+  // compute the maximum alignment value.
+  std::map<std::string, unsigned> SectionMap;
+  std::map<std::string, unsigned> GCMap;
+  unsigned MaxAlignment = 0;
+  unsigned MaxGlobalType = 0;
+  for (const GlobalValue &GV : M->globals()) {
+    MaxAlignment = std::max(MaxAlignment, GV.getAlignment());
+    MaxGlobalType = std::max(MaxGlobalType, VE.getTypeID(GV.getType()));
+    if (GV.hasSection()) {
+      // Give section names unique ID's.
+      unsigned &Entry = SectionMap[GV.getSection()];
+      if (!Entry) {
+        WriteStringRecord(bitc::MODULE_CODE_SECTIONNAME, GV.getSection(),
+                          0/*TODO*/, Stream);
+        Entry = SectionMap.size();
+      }
+    }
+  }
+  for (const Function &F : *M) {
+    MaxAlignment = std::max(MaxAlignment, F.getAlignment());
+    if (F.hasSection()) {
+      // Give section names unique ID's.
+      unsigned &Entry = SectionMap[F.getSection()];
+      if (!Entry) {
+        WriteStringRecord(bitc::MODULE_CODE_SECTIONNAME, F.getSection(),
+                          0/*TODO*/, Stream);
+        Entry = SectionMap.size();
+      }
+    }
+    if (F.hasGC()) {
+      // Same for GC names.
+      unsigned &Entry = GCMap[F.getGC()];
+      if (!Entry) {
+        WriteStringRecord(bitc::MODULE_CODE_GCNAME, F.getGC(),
+                          0/*TODO*/, Stream);
+        Entry = GCMap.size();
+      }
+    }
+  }
+
+  // Emit abbrev for globals, now that we know # sections and max alignment.
+  unsigned SimpleGVarAbbrev = 0;
+  if (!M->global_empty()) {
+    // Add an abbrev for common globals with no visibility or thread localness.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::MODULE_CODE_GLOBALVAR));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
+                              Log2_32_Ceil(MaxGlobalType+1)));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));      // Constant.
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));        // Initializer.
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4));      // Linkage.
+    if (MaxAlignment == 0)                                      // Alignment.
+      Abbv->Add(BitCodeAbbrevOp(0));
+    else {
+      unsigned MaxEncAlignment = Log2_32(MaxAlignment)+1;
+      Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
+                               Log2_32_Ceil(MaxEncAlignment+1)));
+    }
+    if (SectionMap.empty())                                    // Section.
+      Abbv->Add(BitCodeAbbrevOp(0));
+    else
+      Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
+                               Log2_32_Ceil(SectionMap.size()+1)));
+    // Don't bother emitting vis + thread local.
+    SimpleGVarAbbrev = Stream.EmitAbbrev(Abbv);
+  }
+
+  // Emit the global variable information.
+  SmallVector<unsigned, 64> Vals;
+  for (const GlobalVariable &GV : M->globals()) {
+    unsigned AbbrevToUse = 0;
+
+    // GLOBALVAR: [type, isconst, initid,
+    //             linkage, alignment, section, visibility, threadlocal,
+    //             unnamed_addr]
+    Vals.push_back(VE.getTypeID(GV.getType()));
+    Vals.push_back(GV.isConstant());
+    Vals.push_back(GV.isDeclaration() ? 0 :
+                   (VE.getValueID(GV.getInitializer()) + 1));
+    Vals.push_back(getEncodedLinkage(GV));
+    Vals.push_back(Log2_32(GV.getAlignment())+1);
+    Vals.push_back(GV.hasSection() ? SectionMap[GV.getSection()] : 0);
+    if (GV.isThreadLocal() ||
+        GV.getVisibility() != GlobalValue::DefaultVisibility ||
+        GV.hasUnnamedAddr() || GV.isExternallyInitialized()) {
+      Vals.push_back(getEncodedVisibility(GV));
+      Vals.push_back(getEncodedThreadLocalMode(GV));
+      Vals.push_back(GV.hasUnnamedAddr());
+      Vals.push_back(GV.isExternallyInitialized());
+    } else {
+      AbbrevToUse = SimpleGVarAbbrev;
+    }
+
+    Stream.EmitRecord(bitc::MODULE_CODE_GLOBALVAR, Vals, AbbrevToUse);
+    Vals.clear();
+  }
+
+  // Emit the function proto information.
+  for (const Function &F : *M) {
+    // FUNCTION:  [type, callingconv, isproto, linkage, paramattrs, alignment,
+    //             section, visibility, gc, unnamed_addr]
+    Vals.push_back(VE.getTypeID(F.getType()));
+    Vals.push_back(F.getCallingConv());
+    Vals.push_back(F.isDeclaration());
+    Vals.push_back(getEncodedLinkage(F));
+    Vals.push_back(VE.getAttributeID(F.getAttributes()));
+    Vals.push_back(Log2_32(F.getAlignment())+1);
+    Vals.push_back(F.hasSection() ? SectionMap[F.getSection()] : 0);
+    Vals.push_back(getEncodedVisibility(F));
+    Vals.push_back(F.hasGC() ? GCMap[F.getGC()] : 0);
+    Vals.push_back(F.hasUnnamedAddr());
+
+    unsigned AbbrevToUse = 0;
+    Stream.EmitRecord(bitc::MODULE_CODE_FUNCTION, Vals, AbbrevToUse);
+    Vals.clear();
+  }
+
+  // Emit the alias information.
+  for (const GlobalAlias &A : M->aliases()) {
+    // ALIAS: [alias type, aliasee val#, linkage, visibility]
+    Vals.push_back(VE.getTypeID(A.getType()));
+    Vals.push_back(VE.getValueID(A.getAliasee()));
+    Vals.push_back(getEncodedLinkage(A));
+    Vals.push_back(getEncodedVisibility(A));
+    unsigned AbbrevToUse = 0;
+    Stream.EmitRecord(bitc::MODULE_CODE_ALIAS_OLD, Vals, AbbrevToUse);
+    Vals.clear();
+  }
+}
+
+static uint64_t GetOptimizationFlags(const Value *V) {
+  uint64_t Flags = 0;
+
+  if (const auto *OBO = dyn_cast<OverflowingBinaryOperator>(V)) {
+    if (OBO->hasNoSignedWrap())
+      Flags |= 1 << bitc::OBO_NO_SIGNED_WRAP;
+    if (OBO->hasNoUnsignedWrap())
+      Flags |= 1 << bitc::OBO_NO_UNSIGNED_WRAP;
+  } else if (const auto *PEO = dyn_cast<PossiblyExactOperator>(V)) {
+    if (PEO->isExact())
+      Flags |= 1 << bitc::PEO_EXACT;
+  } else if (const auto *FPMO = dyn_cast<FPMathOperator>(V)) {
+    // FIXME(srhines): We don't handle fast math in llvm-rs-cc today.
+    if (false) {
+      if (FPMO->hasUnsafeAlgebra())
+        Flags |= FastMathFlags::UnsafeAlgebra;
+      if (FPMO->hasNoNaNs())
+        Flags |= FastMathFlags::NoNaNs;
+      if (FPMO->hasNoInfs())
+        Flags |= FastMathFlags::NoInfs;
+      if (FPMO->hasNoSignedZeros())
+        Flags |= FastMathFlags::NoSignedZeros;
+      if (FPMO->hasAllowReciprocal())
+        Flags |= FastMathFlags::AllowReciprocal;
+    }
+  }
+
+  return Flags;
+}
+
+static void WriteValueAsMetadata(const ValueAsMetadata *MD,
+                                 const llvm_3_2::ValueEnumerator &VE,
+                                 BitstreamWriter &Stream,
+                                 SmallVectorImpl<uint64_t> &Record) {
+  // Mimic an MDNode with a value as one operand.
+  Value *V = MD->getValue();
+  Record.push_back(VE.getTypeID(V->getType()));
+  Record.push_back(VE.getValueID(V));
+  Stream.EmitRecord(bitc::METADATA_OLD_NODE, Record, 0);
+  Record.clear();
+}
+
+static void WriteMDTuple(const MDTuple *N, const llvm_3_2::ValueEnumerator &VE,
+                         BitstreamWriter &Stream,
+                         SmallVectorImpl<uint64_t> &Record, unsigned Abbrev) {
+  for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) {
+    Metadata *MD = N->getOperand(i);
+    assert(!(MD && isa<LocalAsMetadata>(MD)) &&
+           "Unexpected function-local metadata");
+    if (!MD) {
+      // TODO(srhines): I don't believe this case can exist for RS.
+      Record.push_back(VE.getTypeID(llvm::Type::getVoidTy(N->getContext())));
+      Record.push_back(0);
+    } else if (const auto *MDC = dyn_cast<ConstantAsMetadata>(MD)) {
+      Record.push_back(VE.getTypeID(MDC->getType()));
+      Record.push_back(VE.getValueID(MDC->getValue()));
+    } else {
+      Record.push_back(VE.getTypeID(
+          llvm::Type::getMetadataTy(N->getContext())));
+      Record.push_back(VE.getMetadataID(MD));
+    }
+  }
+  Stream.EmitRecord(bitc::METADATA_OLD_NODE, Record, Abbrev);
+  Record.clear();
+}
+
+/*static void WriteMDLocation(const MDLocation *N, const llvm_3_2::ValueEnumerator &VE,
+                            BitstreamWriter &Stream,
+                            SmallVectorImpl<uint64_t> &Record,
+                            unsigned Abbrev) {
+  Record.push_back(N->isDistinct());
+  Record.push_back(N->getLine());
+  Record.push_back(N->getColumn());
+  Record.push_back(VE.getMetadataID(N->getScope()));
+  Record.push_back(VE.getMetadataOrNullID(N->getInlinedAt()));
+
+  Stream.EmitRecord(bitc::METADATA_LOCATION, Record, Abbrev);
+  Record.clear();
+}
+
+static void WriteGenericDebugNode(const GenericDebugNode *,
+                                  const llvm_3_2::ValueEnumerator &, BitstreamWriter &,
+                                  SmallVectorImpl<uint64_t> &, unsigned) {
+  llvm_unreachable("unimplemented");
+}*/
+
+static void WriteModuleMetadata(const Module *M,
+                                const llvm_3_2::ValueEnumerator &VE,
+                                BitstreamWriter &Stream) {
+  const auto &MDs = VE.getMDs();
+  if (MDs.empty() && M->named_metadata_empty())
+    return;
+
+  // RenderScript files *ALWAYS* have metadata!
+  Stream.EnterSubblock(bitc::METADATA_BLOCK_ID, 3);
+
+  unsigned MDSAbbrev = 0;
+  if (VE.hasMDString()) {
+    // Abbrev for METADATA_STRING.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::METADATA_STRING));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8));
+    MDSAbbrev = Stream.EmitAbbrev(Abbv);
+  }
+
+  unsigned MDLocationAbbrev = 0;
+  if (VE.hasDILocation()) {
+    // TODO(srhines): Should be unreachable for RenderScript.
+    // Abbrev for METADATA_LOCATION.
+    //
+    // Assume the column is usually under 128, and always output the inlined-at
+    // location (it's never more expensive than building an array size 1).
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::METADATA_LOCATION));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));
+    MDLocationAbbrev = Stream.EmitAbbrev(Abbv);
+  }
+
+  unsigned NameAbbrev = 0;
+  if (!M->named_metadata_empty()) {
+    // Abbrev for METADATA_NAME.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::METADATA_NAME));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8));
+    NameAbbrev = Stream.EmitAbbrev(Abbv);
+  }
+
+  unsigned MDTupleAbbrev = 0;
+  //unsigned GenericDebugNodeAbbrev = 0;
+  SmallVector<uint64_t, 64> Record;
+  for (const Metadata *MD : MDs) {
+    if (const MDNode *N = dyn_cast<MDNode>(MD)) {
+      switch (N->getMetadataID()) {
+      default:
+        llvm_unreachable("Invalid MDNode subclass");
+#define HANDLE_SPECIALIZED_MDNODE_LEAF(CLASS)
+#define HANDLE_MDNODE_LEAF(CLASS)                                              \
+  case Metadata::CLASS##Kind:                                                  \
+    Write##CLASS(cast<CLASS>(N), VE, Stream, Record, CLASS##Abbrev);           \
+    continue;
+#include "llvm/IR/Metadata.def"
+      }
+    }
+    if (const auto *MDC = dyn_cast<ConstantAsMetadata>(MD)) {
+      WriteValueAsMetadata(MDC, VE, Stream, Record);
+      continue;
+    }
+    const MDString *MDS = cast<MDString>(MD);
+    // Code: [strchar x N]
+    Record.append(MDS->bytes_begin(), MDS->bytes_end());
+
+    // Emit the finished record.
+    Stream.EmitRecord(bitc::METADATA_STRING, Record, MDSAbbrev);
+    Record.clear();
+  }
+
+  // Write named metadata.
+  for (const NamedMDNode &NMD : M->named_metadata()) {
+    // Write name.
+    StringRef Str = NMD.getName();
+    Record.append(Str.bytes_begin(), Str.bytes_end());
+    Stream.EmitRecord(bitc::METADATA_NAME, Record, NameAbbrev);
+    Record.clear();
+
+    // Write named metadata operands.
+    for (const MDNode *N : NMD.operands())
+      Record.push_back(VE.getMetadataID(N));
+    Stream.EmitRecord(bitc::METADATA_NAMED_NODE, Record, 0);
+    Record.clear();
+  }
+
+  Stream.ExitBlock();
+}
+
+static void WriteFunctionLocalMetadata(const Function &F,
+                                       const llvm_3_2::ValueEnumerator &VE,
+                                       BitstreamWriter &Stream) {
+  bool StartedMetadataBlock = false;
+  SmallVector<uint64_t, 64> Record;
+  const SmallVectorImpl<const LocalAsMetadata *> &MDs =
+      VE.getFunctionLocalMDs();
+  for (unsigned i = 0, e = MDs.size(); i != e; ++i) {
+    assert(MDs[i] && "Expected valid function-local metadata");
+    if (!StartedMetadataBlock) {
+      Stream.EnterSubblock(bitc::METADATA_BLOCK_ID, 3);
+      StartedMetadataBlock = true;
+    }
+    WriteValueAsMetadata(MDs[i], VE, Stream, Record);
+  }
+
+  if (StartedMetadataBlock)
+    Stream.ExitBlock();
+}
+
+static void WriteMetadataAttachment(const Function &F,
+                                    const llvm_3_2::ValueEnumerator &VE,
+                                    BitstreamWriter &Stream) {
+  Stream.EnterSubblock(bitc::METADATA_ATTACHMENT_ID, 3);
+
+  SmallVector<uint64_t, 64> Record;
+
+  // Write metadata attachments
+  // METADATA_ATTACHMENT - [m x [value, [n x [id, mdnode]]]
+  SmallVector<std::pair<unsigned, MDNode *>, 4> MDs;
+
+  for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB)
+    for (BasicBlock::const_iterator I = BB->begin(), E = BB->end();
+         I != E; ++I) {
+      MDs.clear();
+      I->getAllMetadataOtherThanDebugLoc(MDs);
+
+      // If no metadata, ignore instruction.
+      if (MDs.empty()) continue;
+
+      Record.push_back(VE.getInstructionID(&*I));
+
+      for (unsigned i = 0, e = MDs.size(); i != e; ++i) {
+        Record.push_back(MDs[i].first);
+        Record.push_back(VE.getMetadataID(MDs[i].second));
+      }
+      Stream.EmitRecord(bitc::METADATA_ATTACHMENT, Record, 0);
+      Record.clear();
+    }
+
+  Stream.ExitBlock();
+}
+
+static void WriteModuleMetadataStore(const Module *M, BitstreamWriter &Stream) {
+  SmallVector<uint64_t, 64> Record;
+
+  // Write metadata kinds
+  // METADATA_KIND - [n x [id, name]]
+  SmallVector<StringRef, 4> Names;
+  M->getMDKindNames(Names);
+
+  if (Names.empty()) return;
+
+  Stream.EnterSubblock(bitc::METADATA_BLOCK_ID, 3);
+
+  for (unsigned MDKindID = 0, e = Names.size(); MDKindID != e; ++MDKindID) {
+    Record.push_back(MDKindID);
+    StringRef KName = Names[MDKindID];
+    Record.append(KName.begin(), KName.end());
+
+    Stream.EmitRecord(bitc::METADATA_KIND, Record, 0);
+    Record.clear();
+  }
+
+  Stream.ExitBlock();
+}
+
+static void emitSignedInt64(SmallVectorImpl<uint64_t> &Vals, uint64_t V) {
+  if ((int64_t)V >= 0)
+    Vals.push_back(V << 1);
+  else
+    Vals.push_back((-V << 1) | 1);
+}
+
+static void WriteConstants(unsigned FirstVal, unsigned LastVal,
+                           const llvm_3_2::ValueEnumerator &VE,
+                           BitstreamWriter &Stream, bool isGlobal) {
+  if (FirstVal == LastVal) return;
+
+  Stream.EnterSubblock(bitc::CONSTANTS_BLOCK_ID, 4);
+
+  unsigned AggregateAbbrev = 0;
+  unsigned String8Abbrev = 0;
+  unsigned CString7Abbrev = 0;
+  unsigned CString6Abbrev = 0;
+  // If this is a constant pool for the module, emit module-specific abbrevs.
+  if (isGlobal) {
+    // Abbrev for CST_CODE_AGGREGATE.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_AGGREGATE));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, Log2_32_Ceil(LastVal+1)));
+    AggregateAbbrev = Stream.EmitAbbrev(Abbv);
+
+    // Abbrev for CST_CODE_STRING.
+    Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_STRING));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8));
+    String8Abbrev = Stream.EmitAbbrev(Abbv);
+    // Abbrev for CST_CODE_CSTRING.
+    Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_CSTRING));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 7));
+    CString7Abbrev = Stream.EmitAbbrev(Abbv);
+    // Abbrev for CST_CODE_CSTRING.
+    Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_CSTRING));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6));
+    CString6Abbrev = Stream.EmitAbbrev(Abbv);
+  }
+
+  SmallVector<uint64_t, 64> Record;
+
+  const llvm_3_2::ValueEnumerator::ValueList &Vals = VE.getValues();
+  Type *LastTy = nullptr;
+  for (unsigned i = FirstVal; i != LastVal; ++i) {
+    const Value *V = Vals[i].first;
+    // If we need to switch types, do so now.
+    if (V->getType() != LastTy) {
+      LastTy = V->getType();
+      Record.push_back(VE.getTypeID(LastTy));
+      Stream.EmitRecord(bitc::CST_CODE_SETTYPE, Record,
+                        CONSTANTS_SETTYPE_ABBREV);
+      Record.clear();
+    }
+
+    if (const InlineAsm *IA = dyn_cast<InlineAsm>(V)) {
+      Record.push_back(unsigned(IA->hasSideEffects()) |
+                       unsigned(IA->isAlignStack()) << 1 |
+                       unsigned(IA->getDialect()&1) << 2);
+
+      // Add the asm string.
+      const std::string &AsmStr = IA->getAsmString();
+      Record.push_back(AsmStr.size());
+      for (unsigned i = 0, e = AsmStr.size(); i != e; ++i)
+        Record.push_back(AsmStr[i]);
+
+      // Add the constraint string.
+      const std::string &ConstraintStr = IA->getConstraintString();
+      Record.push_back(ConstraintStr.size());
+      for (unsigned i = 0, e = ConstraintStr.size(); i != e; ++i)
+        Record.push_back(ConstraintStr[i]);
+      Stream.EmitRecord(bitc::CST_CODE_INLINEASM, Record);
+      Record.clear();
+      continue;
+    }
+    const Constant *C = cast<Constant>(V);
+    unsigned Code = -1U;
+    unsigned AbbrevToUse = 0;
+    if (C->isNullValue()) {
+      Code = bitc::CST_CODE_NULL;
+    } else if (isa<UndefValue>(C)) {
+      Code = bitc::CST_CODE_UNDEF;
+    } else if (const ConstantInt *IV = dyn_cast<ConstantInt>(C)) {
+      if (IV->getBitWidth() <= 64) {
+        uint64_t V = IV->getSExtValue();
+        emitSignedInt64(Record, V);
+        Code = bitc::CST_CODE_INTEGER;
+        AbbrevToUse = CONSTANTS_INTEGER_ABBREV;
+      } else {                             // Wide integers, > 64 bits in size.
+        // We have an arbitrary precision integer value to write whose
+        // bit width is > 64. However, in canonical unsigned integer
+        // format it is likely that the high bits are going to be zero.
+        // So, we only write the number of active words.
+        unsigned NWords = IV->getValue().getActiveWords();
+        const uint64_t *RawWords = IV->getValue().getRawData();
+        for (unsigned i = 0; i != NWords; ++i) {
+          emitSignedInt64(Record, RawWords[i]);
+        }
+        Code = bitc::CST_CODE_WIDE_INTEGER;
+      }
+    } else if (const ConstantFP *CFP = dyn_cast<ConstantFP>(C)) {
+      Code = bitc::CST_CODE_FLOAT;
+      Type *Ty = CFP->getType();
+      if (Ty->isHalfTy() || Ty->isFloatTy() || Ty->isDoubleTy()) {
+        Record.push_back(CFP->getValueAPF().bitcastToAPInt().getZExtValue());
+      } else if (Ty->isX86_FP80Ty()) {
+        // api needed to prevent premature destruction
+        // bits are not in the same order as a normal i80 APInt, compensate.
+        APInt api = CFP->getValueAPF().bitcastToAPInt();
+        const uint64_t *p = api.getRawData();
+        Record.push_back((p[1] << 48) | (p[0] >> 16));
+        Record.push_back(p[0] & 0xffffLL);
+      } else if (Ty->isFP128Ty() || Ty->isPPC_FP128Ty()) {
+        APInt api = CFP->getValueAPF().bitcastToAPInt();
+        const uint64_t *p = api.getRawData();
+        Record.push_back(p[0]);
+        Record.push_back(p[1]);
+      } else {
+        assert (0 && "Unknown FP type!");
+      }
+    } else if (isa<ConstantDataSequential>(C) &&
+               cast<ConstantDataSequential>(C)->isString()) {
+      const ConstantDataSequential *Str = cast<ConstantDataSequential>(C);
+      // Emit constant strings specially.
+      unsigned NumElts = Str->getNumElements();
+      // If this is a null-terminated string, use the denser CSTRING encoding.
+      if (Str->isCString()) {
+        Code = bitc::CST_CODE_CSTRING;
+        --NumElts;  // Don't encode the null, which isn't allowed by char6.
+      } else {
+        Code = bitc::CST_CODE_STRING;
+        AbbrevToUse = String8Abbrev;
+      }
+      bool isCStr7 = Code == bitc::CST_CODE_CSTRING;
+      bool isCStrChar6 = Code == bitc::CST_CODE_CSTRING;
+      for (unsigned i = 0; i != NumElts; ++i) {
+        unsigned char V = Str->getElementAsInteger(i);
+        Record.push_back(V);
+        isCStr7 &= (V & 128) == 0;
+        if (isCStrChar6)
+          isCStrChar6 = BitCodeAbbrevOp::isChar6(V);
+      }
+
+      if (isCStrChar6)
+        AbbrevToUse = CString6Abbrev;
+      else if (isCStr7)
+        AbbrevToUse = CString7Abbrev;
+    } else if (const ConstantDataSequential *CDS =
+                  dyn_cast<ConstantDataSequential>(C)) {
+      Code = bitc::CST_CODE_DATA;
+      Type *EltTy = CDS->getType()->getElementType();
+      if (isa<IntegerType>(EltTy)) {
+        for (unsigned i = 0, e = CDS->getNumElements(); i != e; ++i)
+          Record.push_back(CDS->getElementAsInteger(i));
+      } else {
+        for (unsigned i = 0, e = CDS->getNumElements(); i != e; ++i)
+          Record.push_back(
+              CDS->getElementAsAPFloat(i).bitcastToAPInt().getLimitedValue());
+      }
+    } else if (isa<ConstantArray>(C) || isa<ConstantStruct>(C) ||
+               isa<ConstantVector>(C)) {
+      Code = bitc::CST_CODE_AGGREGATE;
+      for (unsigned i = 0, e = C->getNumOperands(); i != e; ++i)
+        Record.push_back(VE.getValueID(C->getOperand(i)));
+      AbbrevToUse = AggregateAbbrev;
+    } else if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(C)) {
+      switch (CE->getOpcode()) {
+      default:
+        if (Instruction::isCast(CE->getOpcode())) {
+          Code = bitc::CST_CODE_CE_CAST;
+          Record.push_back(GetEncodedCastOpcode(CE->getOpcode()));
+          Record.push_back(VE.getTypeID(C->getOperand(0)->getType()));
+          Record.push_back(VE.getValueID(C->getOperand(0)));
+          AbbrevToUse = CONSTANTS_CE_CAST_Abbrev;
+        } else {
+          assert(CE->getNumOperands() == 2 && "Unknown constant expr!");
+          Code = bitc::CST_CODE_CE_BINOP;
+          Record.push_back(GetEncodedBinaryOpcode(CE->getOpcode()));
+          Record.push_back(VE.getValueID(C->getOperand(0)));
+          Record.push_back(VE.getValueID(C->getOperand(1)));
+          uint64_t Flags = GetOptimizationFlags(CE);
+          if (Flags != 0)
+            Record.push_back(Flags);
+        }
+        break;
+      case Instruction::GetElementPtr:
+        Code = bitc::CST_CODE_CE_GEP;
+        if (cast<GEPOperator>(C)->isInBounds())
+          Code = bitc::CST_CODE_CE_INBOUNDS_GEP;
+        for (unsigned i = 0, e = CE->getNumOperands(); i != e; ++i) {
+          Record.push_back(VE.getTypeID(C->getOperand(i)->getType()));
+          Record.push_back(VE.getValueID(C->getOperand(i)));
+        }
+        break;
+      case Instruction::Select:
+        Code = bitc::CST_CODE_CE_SELECT;
+        Record.push_back(VE.getValueID(C->getOperand(0)));
+        Record.push_back(VE.getValueID(C->getOperand(1)));
+        Record.push_back(VE.getValueID(C->getOperand(2)));
+        break;
+      case Instruction::ExtractElement:
+        Code = bitc::CST_CODE_CE_EXTRACTELT;
+        Record.push_back(VE.getTypeID(C->getOperand(0)->getType()));
+        Record.push_back(VE.getValueID(C->getOperand(0)));
+        Record.push_back(VE.getValueID(C->getOperand(1)));
+        break;
+      case Instruction::InsertElement:
+        Code = bitc::CST_CODE_CE_INSERTELT;
+        Record.push_back(VE.getValueID(C->getOperand(0)));
+        Record.push_back(VE.getValueID(C->getOperand(1)));
+        Record.push_back(VE.getValueID(C->getOperand(2)));
+        break;
+      case Instruction::ShuffleVector:
+        // If the return type and argument types are the same, this is a
+        // standard shufflevector instruction.  If the types are different,
+        // then the shuffle is widening or truncating the input vectors, and
+        // the argument type must also be encoded.
+        if (C->getType() == C->getOperand(0)->getType()) {
+          Code = bitc::CST_CODE_CE_SHUFFLEVEC;
+        } else {
+          Code = bitc::CST_CODE_CE_SHUFVEC_EX;
+          Record.push_back(VE.getTypeID(C->getOperand(0)->getType()));
+        }
+        Record.push_back(VE.getValueID(C->getOperand(0)));
+        Record.push_back(VE.getValueID(C->getOperand(1)));
+        Record.push_back(VE.getValueID(C->getOperand(2)));
+        break;
+      case Instruction::ICmp:
+      case Instruction::FCmp:
+        Code = bitc::CST_CODE_CE_CMP;
+        Record.push_back(VE.getTypeID(C->getOperand(0)->getType()));
+        Record.push_back(VE.getValueID(C->getOperand(0)));
+        Record.push_back(VE.getValueID(C->getOperand(1)));
+        Record.push_back(CE->getPredicate());
+        break;
+      }
+    } else if (const BlockAddress *BA = dyn_cast<BlockAddress>(C)) {
+      Code = bitc::CST_CODE_BLOCKADDRESS;
+      Record.push_back(VE.getTypeID(BA->getFunction()->getType()));
+      Record.push_back(VE.getValueID(BA->getFunction()));
+      Record.push_back(VE.getGlobalBasicBlockID(BA->getBasicBlock()));
+    } else {
+#ifndef NDEBUG
+      C->dump();
+#endif
+      llvm_unreachable("Unknown constant!");
+    }
+    Stream.EmitRecord(Code, Record, AbbrevToUse);
+    Record.clear();
+  }
+
+  Stream.ExitBlock();
+}
+
+static void WriteModuleConstants(const llvm_3_2::ValueEnumerator &VE,
+                                 BitstreamWriter &Stream) {
+  const llvm_3_2::ValueEnumerator::ValueList &Vals = VE.getValues();
+
+  // Find the first constant to emit, which is the first non-globalvalue value.
+  // We know globalvalues have been emitted by WriteModuleInfo.
+  for (unsigned i = 0, e = Vals.size(); i != e; ++i) {
+    if (!isa<GlobalValue>(Vals[i].first)) {
+      WriteConstants(i, Vals.size(), VE, Stream, true);
+      return;
+    }
+  }
+}
+
+/// PushValueAndType - The file has to encode both the value and type id for
+/// many values, because we need to know what type to create for forward
+/// references.  However, most operands are not forward references, so this type
+/// field is not needed.
+///
+/// This function adds V's value ID to Vals.  If the value ID is higher than the
+/// instruction ID, then it is a forward reference, and it also includes the
+/// type ID.
+static bool PushValueAndType(const Value *V, unsigned InstID,
+                             SmallVector<unsigned, 64> &Vals,
+                             llvm_3_2::ValueEnumerator &VE) {
+  unsigned ValID = VE.getValueID(V);
+  Vals.push_back(ValID);
+  if (ValID >= InstID) {
+    Vals.push_back(VE.getTypeID(V->getType()));
+    return true;
+  }
+  return false;
+}
+
+/// WriteInstruction - Emit an instruction to the specified stream.
+static void WriteInstruction(const Instruction &I, unsigned InstID,
+                             llvm_3_2::ValueEnumerator &VE,
+                             BitstreamWriter &Stream,
+                             SmallVector<unsigned, 64> &Vals) {
+  unsigned Code = 0;
+  unsigned AbbrevToUse = 0;
+  VE.setInstructionID(&I);
+  switch (I.getOpcode()) {
+  default:
+    if (Instruction::isCast(I.getOpcode())) {
+      Code = bitc::FUNC_CODE_INST_CAST;
+      if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE))
+        AbbrevToUse = FUNCTION_INST_CAST_ABBREV;
+      Vals.push_back(VE.getTypeID(I.getType()));
+      Vals.push_back(GetEncodedCastOpcode(I.getOpcode()));
+    } else {
+      assert(isa<BinaryOperator>(I) && "Unknown instruction!");
+      Code = bitc::FUNC_CODE_INST_BINOP;
+      if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE))
+        AbbrevToUse = FUNCTION_INST_BINOP_ABBREV;
+      Vals.push_back(VE.getValueID(I.getOperand(1)));
+      Vals.push_back(GetEncodedBinaryOpcode(I.getOpcode()));
+      uint64_t Flags = GetOptimizationFlags(&I);
+      if (Flags != 0) {
+        if (AbbrevToUse == FUNCTION_INST_BINOP_ABBREV)
+          AbbrevToUse = FUNCTION_INST_BINOP_FLAGS_ABBREV;
+        Vals.push_back(Flags);
+      }
+    }
+    break;
+
+  case Instruction::GetElementPtr:
+    Code = bitc::FUNC_CODE_INST_GEP_OLD;
+    if (cast<GEPOperator>(&I)->isInBounds())
+      Code = bitc::FUNC_CODE_INST_INBOUNDS_GEP_OLD;
+    for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i)
+      PushValueAndType(I.getOperand(i), InstID, Vals, VE);
+    break;
+  case Instruction::ExtractValue: {
+    Code = bitc::FUNC_CODE_INST_EXTRACTVAL;
+    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
+    const ExtractValueInst *EVI = cast<ExtractValueInst>(&I);
+    for (const unsigned *i = EVI->idx_begin(), *e = EVI->idx_end(); i != e; ++i)
+      Vals.push_back(*i);
+    break;
+  }
+  case Instruction::InsertValue: {
+    Code = bitc::FUNC_CODE_INST_INSERTVAL;
+    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
+    PushValueAndType(I.getOperand(1), InstID, Vals, VE);
+    const InsertValueInst *IVI = cast<InsertValueInst>(&I);
+    for (const unsigned *i = IVI->idx_begin(), *e = IVI->idx_end(); i != e; ++i)
+      Vals.push_back(*i);
+    break;
+  }
+  case Instruction::Select:
+    Code = bitc::FUNC_CODE_INST_VSELECT;
+    PushValueAndType(I.getOperand(1), InstID, Vals, VE);
+    Vals.push_back(VE.getValueID(I.getOperand(2)));
+    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
+    break;
+  case Instruction::ExtractElement:
+    Code = bitc::FUNC_CODE_INST_EXTRACTELT;
+    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
+    Vals.push_back(VE.getValueID(I.getOperand(1)));
+    break;
+  case Instruction::InsertElement:
+    Code = bitc::FUNC_CODE_INST_INSERTELT;
+    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
+    Vals.push_back(VE.getValueID(I.getOperand(1)));
+    Vals.push_back(VE.getValueID(I.getOperand(2)));
+    break;
+  case Instruction::ShuffleVector:
+    Code = bitc::FUNC_CODE_INST_SHUFFLEVEC;
+    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
+    Vals.push_back(VE.getValueID(I.getOperand(1)));
+    Vals.push_back(VE.getValueID(I.getOperand(2)));
+    break;
+  case Instruction::ICmp:
+  case Instruction::FCmp:
+    // compare returning Int1Ty or vector of Int1Ty
+    Code = bitc::FUNC_CODE_INST_CMP2;
+    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
+    Vals.push_back(VE.getValueID(I.getOperand(1)));
+    Vals.push_back(cast<CmpInst>(I).getPredicate());
+    break;
+
+  case Instruction::Ret:
+    {
+      Code = bitc::FUNC_CODE_INST_RET;
+      unsigned NumOperands = I.getNumOperands();
+      if (NumOperands == 0)
+        AbbrevToUse = FUNCTION_INST_RET_VOID_ABBREV;
+      else if (NumOperands == 1) {
+        if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE))
+          AbbrevToUse = FUNCTION_INST_RET_VAL_ABBREV;
+      } else {
+        for (unsigned i = 0, e = NumOperands; i != e; ++i)
+          PushValueAndType(I.getOperand(i), InstID, Vals, VE);
+      }
+    }
+    break;
+  case Instruction::Br:
+    {
+      Code = bitc::FUNC_CODE_INST_BR;
+      const BranchInst &II = cast<BranchInst>(I);
+      Vals.push_back(VE.getValueID(II.getSuccessor(0)));
+      if (II.isConditional()) {
+        Vals.push_back(VE.getValueID(II.getSuccessor(1)));
+        Vals.push_back(VE.getValueID(II.getCondition()));
+      }
+    }
+    break;
+  case Instruction::Switch:
+    {
+      Code = bitc::FUNC_CODE_INST_SWITCH;
+      const SwitchInst &SI = cast<SwitchInst>(I);
+      Vals.push_back(VE.getTypeID(SI.getCondition()->getType()));
+      Vals.push_back(VE.getValueID(SI.getCondition()));
+      Vals.push_back(VE.getValueID(SI.getDefaultDest()));
+      for (SwitchInst::ConstCaseIt i = SI.case_begin(), e = SI.case_end();
+           i != e; ++i) {
+        Vals.push_back(VE.getValueID(i.getCaseValue()));
+        Vals.push_back(VE.getValueID(i.getCaseSuccessor()));
+      }
+    }
+    break;
+  case Instruction::IndirectBr:
+    Code = bitc::FUNC_CODE_INST_INDIRECTBR;
+    Vals.push_back(VE.getTypeID(I.getOperand(0)->getType()));
+    for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i)
+      Vals.push_back(VE.getValueID(I.getOperand(i)));
+    break;
+
+  case Instruction::Invoke: {
+    const InvokeInst *II = cast<InvokeInst>(&I);
+    const Value *Callee(II->getCalledValue());
+    PointerType *PTy = cast<PointerType>(Callee->getType());
+    FunctionType *FTy = cast<FunctionType>(PTy->getElementType());
+    Code = bitc::FUNC_CODE_INST_INVOKE;
+
+    Vals.push_back(VE.getAttributeID(II->getAttributes()));
+    Vals.push_back(II->getCallingConv());
+    Vals.push_back(VE.getValueID(II->getNormalDest()));
+    Vals.push_back(VE.getValueID(II->getUnwindDest()));
+    PushValueAndType(Callee, InstID, Vals, VE);
+
+    // Emit value #'s for the fixed parameters.
+    for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i)
+      Vals.push_back(VE.getValueID(I.getOperand(i)));  // fixed param.
+
+    // Emit type/value pairs for varargs params.
+    if (FTy->isVarArg()) {
+      for (unsigned i = FTy->getNumParams(), e = I.getNumOperands()-3;
+           i != e; ++i)
+        PushValueAndType(I.getOperand(i), InstID, Vals, VE); // vararg
+    }
+    break;
+  }
+  case Instruction::Resume:
+    Code = bitc::FUNC_CODE_INST_RESUME;
+    PushValueAndType(I.getOperand(0), InstID, Vals, VE);
+    break;
+  case Instruction::Unreachable:
+    Code = bitc::FUNC_CODE_INST_UNREACHABLE;
+    AbbrevToUse = FUNCTION_INST_UNREACHABLE_ABBREV;
+    break;
+
+  case Instruction::PHI: {
+    const PHINode &PN = cast<PHINode>(I);
+    Code = bitc::FUNC_CODE_INST_PHI;
+    Vals.push_back(VE.getTypeID(PN.getType()));
+    for (unsigned i = 0, e = PN.getNumIncomingValues(); i != e; ++i) {
+      Vals.push_back(VE.getValueID(PN.getIncomingValue(i)));
+      Vals.push_back(VE.getValueID(PN.getIncomingBlock(i)));
+    }
+    break;
+  }
+
+  case Instruction::LandingPad: {
+    const LandingPadInst &LP = cast<LandingPadInst>(I);
+    Code = bitc::FUNC_CODE_INST_LANDINGPAD_OLD;
+    Vals.push_back(VE.getTypeID(LP.getType()));
+    // TODO (rebase): is this fix enough?
+    // PushValueAndType(LP.getPersonalityFn(), InstID, Vals, VE);
+    Vals.push_back(LP.isCleanup());
+    Vals.push_back(LP.getNumClauses());
+    for (unsigned I = 0, E = LP.getNumClauses(); I != E; ++I) {
+      if (LP.isCatch(I))
+        Vals.push_back(LandingPadInst::Catch);
+      else
+        Vals.push_back(LandingPadInst::Filter);
+      PushValueAndType(LP.getClause(I), InstID, Vals, VE);
+    }
+    break;
+  }
+
+  case Instruction::Alloca: {
+    Code = bitc::FUNC_CODE_INST_ALLOCA;
+    Vals.push_back(VE.getTypeID(I.getType()));
+    Vals.push_back(VE.getTypeID(I.getOperand(0)->getType()));
+    Vals.push_back(VE.getValueID(I.getOperand(0))); // size.
+    Vals.push_back(Log2_32(cast<AllocaInst>(I).getAlignment())+1);
+    break;
+  }
+
+  case Instruction::Load:
+    if (cast<LoadInst>(I).isAtomic()) {
+      Code = bitc::FUNC_CODE_INST_LOADATOMIC;
+      PushValueAndType(I.getOperand(0), InstID, Vals, VE);
+    } else {
+      Code = bitc::FUNC_CODE_INST_LOAD;
+      if (!PushValueAndType(I.getOperand(0), InstID, Vals, VE))  // ptr
+        AbbrevToUse = FUNCTION_INST_LOAD_ABBREV;
+    }
+    Vals.push_back(Log2_32(cast<LoadInst>(I).getAlignment())+1);
+    Vals.push_back(cast<LoadInst>(I).isVolatile());
+    if (cast<LoadInst>(I).isAtomic()) {
+      Vals.push_back(GetEncodedOrdering(cast<LoadInst>(I).getOrdering()));
+      Vals.push_back(GetEncodedSynchScope(cast<LoadInst>(I).getSynchScope()));
+    }
+    break;
+  case Instruction::Store:
+    if (cast<StoreInst>(I).isAtomic())
+      Code = bitc::FUNC_CODE_INST_STOREATOMIC;
+    else
+      Code = bitc::FUNC_CODE_INST_STORE_OLD;
+    PushValueAndType(I.getOperand(1), InstID, Vals, VE);  // ptrty + ptr
+    Vals.push_back(VE.getValueID(I.getOperand(0)));       // val.
+    Vals.push_back(Log2_32(cast<StoreInst>(I).getAlignment())+1);
+    Vals.push_back(cast<StoreInst>(I).isVolatile());
+    if (cast<StoreInst>(I).isAtomic()) {
+      Vals.push_back(GetEncodedOrdering(cast<StoreInst>(I).getOrdering()));
+      Vals.push_back(GetEncodedSynchScope(cast<StoreInst>(I).getSynchScope()));
+    }
+    break;
+  case Instruction::AtomicCmpXchg:
+    Code = bitc::FUNC_CODE_INST_CMPXCHG;
+    PushValueAndType(I.getOperand(0), InstID, Vals, VE);  // ptrty + ptr
+    Vals.push_back(VE.getValueID(I.getOperand(1)));       // cmp.
+    Vals.push_back(VE.getValueID(I.getOperand(2)));       // newval.
+    Vals.push_back(cast<AtomicCmpXchgInst>(I).isVolatile());
+    Vals.push_back(GetEncodedOrdering(
+                     cast<AtomicCmpXchgInst>(I).getSuccessOrdering()));
+    Vals.push_back(GetEncodedSynchScope(
+                     cast<AtomicCmpXchgInst>(I).getSynchScope()));
+    break;
+  case Instruction::AtomicRMW:
+    Code = bitc::FUNC_CODE_INST_ATOMICRMW;
+    PushValueAndType(I.getOperand(0), InstID, Vals, VE);  // ptrty + ptr
+    Vals.push_back(VE.getValueID(I.getOperand(1)));       // val.
+    Vals.push_back(GetEncodedRMWOperation(
+                     cast<AtomicRMWInst>(I).getOperation()));
+    Vals.push_back(cast<AtomicRMWInst>(I).isVolatile());
+    Vals.push_back(GetEncodedOrdering(cast<AtomicRMWInst>(I).getOrdering()));
+    Vals.push_back(GetEncodedSynchScope(
+                     cast<AtomicRMWInst>(I).getSynchScope()));
+    break;
+  case Instruction::Fence:
+    Code = bitc::FUNC_CODE_INST_FENCE;
+    Vals.push_back(GetEncodedOrdering(cast<FenceInst>(I).getOrdering()));
+    Vals.push_back(GetEncodedSynchScope(cast<FenceInst>(I).getSynchScope()));
+    break;
+  case Instruction::Call: {
+    const CallInst &CI = cast<CallInst>(I);
+    PointerType *PTy = cast<PointerType>(CI.getCalledValue()->getType());
+    FunctionType *FTy = cast<FunctionType>(PTy->getElementType());
+
+    Code = bitc::FUNC_CODE_INST_CALL;
+
+    Vals.push_back(VE.getAttributeID(CI.getAttributes()));
+    Vals.push_back((CI.getCallingConv() << 1) | unsigned(CI.isTailCall()));
+    PushValueAndType(CI.getCalledValue(), InstID, Vals, VE);  // Callee
+
+    // Emit value #'s for the fixed parameters.
+    for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i)
+      Vals.push_back(VE.getValueID(CI.getArgOperand(i)));  // fixed param.
+
+    // Emit type/value pairs for varargs params.
+    if (FTy->isVarArg()) {
+      for (unsigned i = FTy->getNumParams(), e = CI.getNumArgOperands();
+           i != e; ++i)
+        PushValueAndType(CI.getArgOperand(i), InstID, Vals, VE);  // varargs
+    }
+    break;
+  }
+  case Instruction::VAArg:
+    Code = bitc::FUNC_CODE_INST_VAARG;
+    Vals.push_back(VE.getTypeID(I.getOperand(0)->getType()));   // valistty
+    Vals.push_back(VE.getValueID(I.getOperand(0))); // valist.
+    Vals.push_back(VE.getTypeID(I.getType())); // restype.
+    break;
+  }
+
+  Stream.EmitRecord(Code, Vals, AbbrevToUse);
+  Vals.clear();
+}
+
+// Emit names for globals/functions etc.
+static void WriteValueSymbolTable(const ValueSymbolTable &VST,
+                                  const llvm_3_2::ValueEnumerator &VE,
+                                  BitstreamWriter &Stream) {
+  if (VST.empty()) return;
+  Stream.EnterSubblock(bitc::VALUE_SYMTAB_BLOCK_ID, 4);
+
+  // FIXME: Set up the abbrev, we know how many values there are!
+  // FIXME: We know if the type names can use 7-bit ascii.
+  SmallVector<unsigned, 64> NameVals;
+
+  for (ValueSymbolTable::const_iterator SI = VST.begin(), SE = VST.end();
+       SI != SE; ++SI) {
+
+    const ValueName &Name = *SI;
+
+    // Figure out the encoding to use for the name.
+    bool is7Bit = true;
+    bool isChar6 = true;
+    for (const char *C = Name.getKeyData(), *E = C+Name.getKeyLength();
+         C != E; ++C) {
+      if (isChar6)
+        isChar6 = BitCodeAbbrevOp::isChar6(*C);
+      if ((unsigned char)*C & 128) {
+        is7Bit = false;
+        break;  // don't bother scanning the rest.
+      }
+    }
+
+    unsigned AbbrevToUse = VST_ENTRY_8_ABBREV;
+
+    // VST_ENTRY:   [valueid, namechar x N]
+    // VST_BBENTRY: [bbid, namechar x N]
+    unsigned Code;
+    if (isa<BasicBlock>(SI->getValue())) {
+      Code = bitc::VST_CODE_BBENTRY;
+      if (isChar6)
+        AbbrevToUse = VST_BBENTRY_6_ABBREV;
+    } else {
+      Code = bitc::VST_CODE_ENTRY;
+      if (isChar6)
+        AbbrevToUse = VST_ENTRY_6_ABBREV;
+      else if (is7Bit)
+        AbbrevToUse = VST_ENTRY_7_ABBREV;
+    }
+
+    NameVals.push_back(VE.getValueID(SI->getValue()));
+    for (const char *P = Name.getKeyData(),
+         *E = Name.getKeyData()+Name.getKeyLength(); P != E; ++P)
+      NameVals.push_back((unsigned char)*P);
+
+    // Emit the finished record.
+    Stream.EmitRecord(Code, NameVals, AbbrevToUse);
+    NameVals.clear();
+  }
+  Stream.ExitBlock();
+}
+
+static void WriteUseList(llvm_3_2::ValueEnumerator &VE, UseListOrder &&Order,
+                         BitstreamWriter &Stream) {
+  assert(Order.Shuffle.size() >= 2 && "Shuffle too small");
+  unsigned Code;
+  if (isa<BasicBlock>(Order.V))
+    Code = bitc::USELIST_CODE_BB;
+  else
+    Code = bitc::USELIST_CODE_DEFAULT;
+
+  SmallVector<uint64_t, 64> Record;
+  for (unsigned I : Order.Shuffle)
+    Record.push_back(I);
+  Record.push_back(VE.getValueID(Order.V));
+  Stream.EmitRecord(Code, Record);
+}
+
+static void WriteUseListBlock(const Function *F, llvm_3_2::ValueEnumerator &VE,
+                              BitstreamWriter &Stream) {
+  auto hasMore = [&]() {
+    return !VE.UseListOrders.empty() && VE.UseListOrders.back().F == F;
+  };
+  if (!hasMore())
+    // Nothing to do.
+    return;
+
+  Stream.EnterSubblock(bitc::USELIST_BLOCK_ID, 3);
+  while (hasMore()) {
+    WriteUseList(VE, std::move(VE.UseListOrders.back()), Stream);
+    VE.UseListOrders.pop_back();
+  }
+  Stream.ExitBlock();
+}
+
+/// WriteFunction - Emit a function body to the module stream.
+static void WriteFunction(const Function &F, llvm_3_2::ValueEnumerator &VE,
+                          BitstreamWriter &Stream) {
+  Stream.EnterSubblock(bitc::FUNCTION_BLOCK_ID, 4);
+  VE.incorporateFunction(F);
+
+  SmallVector<unsigned, 64> Vals;
+
+  // Emit the number of basic blocks, so the reader can create them ahead of
+  // time.
+  Vals.push_back(VE.getBasicBlocks().size());
+  Stream.EmitRecord(bitc::FUNC_CODE_DECLAREBLOCKS, Vals);
+  Vals.clear();
+
+  // If there are function-local constants, emit them now.
+  unsigned CstStart, CstEnd;
+  VE.getFunctionConstantRange(CstStart, CstEnd);
+  WriteConstants(CstStart, CstEnd, VE, Stream, false);
+
+  // If there is function-local metadata, emit it now.
+  WriteFunctionLocalMetadata(F, VE, Stream);
+
+  // Keep a running idea of what the instruction ID is.
+  unsigned InstID = CstEnd;
+
+  bool NeedsMetadataAttachment = false;
+
+  DILocation *LastDL = nullptr;
+
+  // Finally, emit all the instructions, in order.
+  for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB)
+    for (BasicBlock::const_iterator I = BB->begin(), E = BB->end();
+         I != E; ++I) {
+      WriteInstruction(*I, InstID, VE, Stream, Vals);
+
+      if (!I->getType()->isVoidTy())
+        ++InstID;
+
+      // If the instruction has metadata, write a metadata attachment later.
+      NeedsMetadataAttachment |= I->hasMetadataOtherThanDebugLoc();
+
+      // If the instruction has a debug location, emit it.
+      DILocation *DL = I->getDebugLoc();
+      if (!DL)
+        continue;
+
+      if (DL == LastDL) {
+        // Just repeat the same debug loc as last time.
+        Stream.EmitRecord(bitc::FUNC_CODE_DEBUG_LOC_AGAIN, Vals);
+        continue;
+      }
+
+      Vals.push_back(DL->getLine());
+      Vals.push_back(DL->getColumn());
+      Vals.push_back(VE.getMetadataOrNullID(DL->getScope()));
+      Vals.push_back(VE.getMetadataOrNullID(DL->getInlinedAt()));
+      Stream.EmitRecord(bitc::FUNC_CODE_DEBUG_LOC, Vals);
+      Vals.clear();
+
+      // Fixme(pirama): The following line is missing from upstream
+      // https://llvm.org/bugs/show_bug.cgi?id=23436
+      LastDL = DL;
+    }
+
+  // Emit names for all the instructions etc.
+  WriteValueSymbolTable(F.getValueSymbolTable(), VE, Stream);
+
+  if (NeedsMetadataAttachment)
+    WriteMetadataAttachment(F, VE, Stream);
+  if (false)
+    WriteUseListBlock(&F, VE, Stream);
+  VE.purgeFunction();
+  Stream.ExitBlock();
+}
+
+// Emit blockinfo, which defines the standard abbreviations etc.
+static void WriteBlockInfo(const llvm_3_2::ValueEnumerator &VE,
+                           BitstreamWriter &Stream) {
+  // We only want to emit block info records for blocks that have multiple
+  // instances: CONSTANTS_BLOCK, FUNCTION_BLOCK and VALUE_SYMTAB_BLOCK.  Other
+  // blocks can defined their abbrevs inline.
+  Stream.EnterBlockInfoBlock(2);
+
+  { // 8-bit fixed-width VST_ENTRY/VST_BBENTRY strings.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 3));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 8));
+    if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID,
+                                   Abbv) != VST_ENTRY_8_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+
+  { // 7-bit fixed width VST_ENTRY strings.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_ENTRY));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 7));
+    if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID,
+                                   Abbv) != VST_ENTRY_7_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+  { // 6-bit char6 VST_ENTRY strings.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_ENTRY));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6));
+    if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID,
+                                   Abbv) != VST_ENTRY_6_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+  { // 6-bit char6 VST_BBENTRY strings.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::VST_CODE_BBENTRY));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Array));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Char6));
+    if (Stream.EmitBlockInfoAbbrev(bitc::VALUE_SYMTAB_BLOCK_ID,
+                                   Abbv) != VST_BBENTRY_6_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+
+
+
+  { // SETTYPE abbrev for CONSTANTS_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_SETTYPE));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
+                              Log2_32_Ceil(VE.getTypes().size()+1)));
+    if (Stream.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID,
+                                   Abbv) != CONSTANTS_SETTYPE_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+
+  { // INTEGER abbrev for CONSTANTS_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_INTEGER));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));
+    if (Stream.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID,
+                                   Abbv) != CONSTANTS_INTEGER_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+
+  { // CE_CAST abbrev for CONSTANTS_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_CE_CAST));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4));  // cast opc
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,       // typeid
+                              Log2_32_Ceil(VE.getTypes().size()+1)));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 8));    // value id
+
+    if (Stream.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID,
+                                   Abbv) != CONSTANTS_CE_CAST_Abbrev)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+  { // NULL abbrev for CONSTANTS_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::CST_CODE_NULL));
+    if (Stream.EmitBlockInfoAbbrev(bitc::CONSTANTS_BLOCK_ID,
+                                   Abbv) != CONSTANTS_NULL_Abbrev)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+
+  // FIXME: This should only use space for first class types!
+
+  { // INST_LOAD abbrev for FUNCTION_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_LOAD));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // Ptr
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 4)); // Align
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1)); // volatile
+    if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
+                                   Abbv) != FUNCTION_INST_LOAD_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+  { // INST_BINOP abbrev for FUNCTION_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_BINOP));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // LHS
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // RHS
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4)); // opc
+    if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
+                                   Abbv) != FUNCTION_INST_BINOP_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+  { // INST_BINOP_FLAGS abbrev for FUNCTION_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_BINOP));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // LHS
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // RHS
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4)); // opc
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 7)); // flags
+    if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
+                                   Abbv) != FUNCTION_INST_BINOP_FLAGS_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+  { // INST_CAST abbrev for FUNCTION_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_CAST));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));    // OpVal
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,       // dest ty
+                              Log2_32_Ceil(VE.getTypes().size()+1)));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4));  // opc
+    if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
+                                   Abbv) != FUNCTION_INST_CAST_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+
+  { // INST_RET abbrev for FUNCTION_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_RET));
+    if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
+                                   Abbv) != FUNCTION_INST_RET_VOID_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+  { // INST_RET abbrev for FUNCTION_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_RET));
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6)); // ValID
+    if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
+                                   Abbv) != FUNCTION_INST_RET_VAL_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+  { // INST_UNREACHABLE abbrev for FUNCTION_BLOCK.
+    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
+    Abbv->Add(BitCodeAbbrevOp(bitc::FUNC_CODE_INST_UNREACHABLE));
+    if (Stream.EmitBlockInfoAbbrev(bitc::FUNCTION_BLOCK_ID,
+                                   Abbv) != FUNCTION_INST_UNREACHABLE_ABBREV)
+      llvm_unreachable("Unexpected abbrev ordering!");
+  }
+
+  Stream.ExitBlock();
+}
+
+/// WriteModule - Emit the specified module to the bitstream.
+static void WriteModule(const Module *M, BitstreamWriter &Stream) {
+  Stream.EnterSubblock(bitc::MODULE_BLOCK_ID, 3);
+
+  SmallVector<unsigned, 1> Vals;
+  // TODO(srhines): RenderScript is always version 0 for now.
+  unsigned CurVersion = 0;
+  if (CurVersion) {
+    Vals.push_back(CurVersion);
+    Stream.EmitRecord(bitc::MODULE_CODE_VERSION, Vals);
+  }
+
+  // Analyze the module, enumerating globals, functions, etc.
+  llvm_3_2::ValueEnumerator VE(*M);
+
+  // Emit blockinfo, which defines the standard abbreviations etc.
+  WriteBlockInfo(VE, Stream);
+
+  // Emit information about parameter attributes.
+  WriteAttributeTable(VE, Stream);
+
+  // Emit information describing all of the types in the module.
+  WriteTypeTable(VE, Stream);
+
+  // Emit top-level description of module, including target triple, inline asm,
+  // descriptors for global variables, and function prototype info.
+  WriteModuleInfo(M, VE, Stream);
+
+  // Emit constants.
+  WriteModuleConstants(VE, Stream);
+
+  // Emit metadata.
+  WriteModuleMetadata(M, VE, Stream);
+
+  // Emit metadata.
+  WriteModuleMetadataStore(M, Stream);
+
+  // Emit names for globals/functions etc.
+  WriteValueSymbolTable(M->getValueSymbolTable(), VE, Stream);
+
+  // Emit module-level use-lists.
+  if (false)
+    WriteUseListBlock(nullptr, VE, Stream);
+
+  // Emit function bodies.
+  for (Module::const_iterator F = M->begin(), E = M->end(); F != E; ++F)
+    if (!F->isDeclaration())
+      WriteFunction(*F, VE, Stream);
+
+  Stream.ExitBlock();
+}
+
+/// EmitDarwinBCHeader - If generating a bc file on darwin, we have to emit a
+/// header and trailer to make it compatible with the system archiver.  To do
+/// this we emit the following header, and then emit a trailer that pads the
+/// file out to be a multiple of 16 bytes.
+///
+/// struct bc_header {
+///   uint32_t Magic;         // 0x0B17C0DE
+///   uint32_t Version;       // Version, currently always 0.
+///   uint32_t BitcodeOffset; // Offset to traditional bitcode file.
+///   uint32_t BitcodeSize;   // Size of traditional bitcode file.
+///   uint32_t CPUType;       // CPU specifier.
+///   ... potentially more later ...
+/// };
+enum {
+  DarwinBCSizeFieldOffset = 3*4, // Offset to bitcode_size.
+  DarwinBCHeaderSize = 5*4
+};
+
+static void WriteInt32ToBuffer(uint32_t Value, SmallVectorImpl<char> &Buffer,
+                               uint32_t &Position) {
+  Buffer[Position + 0] = (unsigned char) (Value >>  0);
+  Buffer[Position + 1] = (unsigned char) (Value >>  8);
+  Buffer[Position + 2] = (unsigned char) (Value >> 16);
+  Buffer[Position + 3] = (unsigned char) (Value >> 24);
+  Position += 4;
+}
+
+static void EmitDarwinBCHeaderAndTrailer(SmallVectorImpl<char> &Buffer,
+                                         const Triple &TT) {
+  unsigned CPUType = ~0U;
+
+  // Match x86_64-*, i[3-9]86-*, powerpc-*, powerpc64-*, arm-*, thumb-*,
+  // armv[0-9]-*, thumbv[0-9]-*, armv5te-*, or armv6t2-*. The CPUType is a magic
+  // number from /usr/include/mach/machine.h.  It is ok to reproduce the
+  // specific constants here because they are implicitly part of the Darwin ABI.
+  enum {
+    DARWIN_CPU_ARCH_ABI64      = 0x01000000,
+    DARWIN_CPU_TYPE_X86        = 7,
+    DARWIN_CPU_TYPE_ARM        = 12,
+    DARWIN_CPU_TYPE_POWERPC    = 18
+  };
+
+  Triple::ArchType Arch = TT.getArch();
+  if (Arch == Triple::x86_64)
+    CPUType = DARWIN_CPU_TYPE_X86 | DARWIN_CPU_ARCH_ABI64;
+  else if (Arch == Triple::x86)
+    CPUType = DARWIN_CPU_TYPE_X86;
+  else if (Arch == Triple::ppc)
+    CPUType = DARWIN_CPU_TYPE_POWERPC;
+  else if (Arch == Triple::ppc64)
+    CPUType = DARWIN_CPU_TYPE_POWERPC | DARWIN_CPU_ARCH_ABI64;
+  else if (Arch == Triple::arm || Arch == Triple::thumb)
+    CPUType = DARWIN_CPU_TYPE_ARM;
+
+  // Traditional Bitcode starts after header.
+  assert(Buffer.size() >= DarwinBCHeaderSize &&
+         "Expected header size to be reserved");
+  unsigned BCOffset = DarwinBCHeaderSize;
+  unsigned BCSize = Buffer.size()-DarwinBCHeaderSize;
+
+  // Write the magic and version.
+  unsigned Position = 0;
+  WriteInt32ToBuffer(0x0B17C0DE , Buffer, Position);
+  WriteInt32ToBuffer(0          , Buffer, Position); // Version.
+  WriteInt32ToBuffer(BCOffset   , Buffer, Position);
+  WriteInt32ToBuffer(BCSize     , Buffer, Position);
+  WriteInt32ToBuffer(CPUType    , Buffer, Position);
+
+  // If the file is not a multiple of 16 bytes, insert dummy padding.
+  while (Buffer.size() & 15)
+    Buffer.push_back(0);
+}
+
+/// WriteBitcodeToFile - Write the specified module to the specified output
+/// stream.
+void llvm_3_2::WriteBitcodeToFile(const Module *M, raw_ostream &Out) {
+  SmallVector<char, 0> Buffer;
+  Buffer.reserve(256*1024);
+
+  // If this is darwin or another generic macho target, reserve space for the
+  // header.
+  Triple TT(M->getTargetTriple());
+  if (TT.isOSDarwin())
+    Buffer.insert(Buffer.begin(), DarwinBCHeaderSize, 0);
+
+  // Emit the module into the buffer.
+  {
+    BitstreamWriter Stream(Buffer);
+
+    // Emit the file header.
+    Stream.Emit((unsigned)'B', 8);
+    Stream.Emit((unsigned)'C', 8);
+    Stream.Emit(0x0, 4);
+    Stream.Emit(0xC, 4);
+    Stream.Emit(0xE, 4);
+    Stream.Emit(0xD, 4);
+
+    // Emit the module.
+    WriteModule(M, Stream);
+  }
+
+  if (TT.isOSDarwin())
+    EmitDarwinBCHeaderAndTrailer(Buffer, TT);
+
+  // Write the generated bitstream to "Out".
+  Out.write((char*)&Buffer.front(), Buffer.size());
+}
diff --git a/slang/BitWriter_3_2/BitcodeWriterPass.cpp b/slang/BitWriter_3_2/BitcodeWriterPass.cpp
new file mode 100644
index 0000000..cc105c9
--- /dev/null
+++ b/slang/BitWriter_3_2/BitcodeWriterPass.cpp
@@ -0,0 +1,46 @@
+//===--- Bitcode/Writer/BitcodeWriterPass.cpp - Bitcode Writer ------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// BitcodeWriterPass implementation.
+//
+//===----------------------------------------------------------------------===//
+
+#include "ReaderWriter_3_2.h"
+#include "llvm/IR/Function.h"
+#include "llvm/IR/Instructions.h"
+#include "llvm/IR/Module.h"
+#include "llvm/Pass.h"
+using namespace llvm;
+
+namespace {
+  class WriteBitcodePass : public ModulePass {
+    raw_ostream &OS; // raw_ostream to print on
+
+  public:
+    static char ID; // Pass identification, replacement for typeid
+    explicit WriteBitcodePass(raw_ostream &o)
+      : ModulePass(ID), OS(o) {}
+    
+    const char *getPassName() const { return "Bitcode Writer"; }
+    
+    bool runOnModule(Module &M) {
+      bool Changed = false;
+      llvm_3_2::WriteBitcodeToFile(&M, OS);
+      return Changed;
+    }
+  };
+}
+
+char WriteBitcodePass::ID = 0;
+
+/// createBitcodeWriterPass - Create and return a pass that writes the module
+/// to the specified ostream.
+ModulePass *llvm_3_2::createBitcodeWriterPass(raw_ostream &Str) {
+  return new WriteBitcodePass(Str);
+}
diff --git a/slang/BitWriter_3_2/ReaderWriter_3_2.h b/slang/BitWriter_3_2/ReaderWriter_3_2.h
new file mode 100644
index 0000000..d192ad6
--- /dev/null
+++ b/slang/BitWriter_3_2/ReaderWriter_3_2.h
@@ -0,0 +1,143 @@
+//===-- llvm/Bitcode/ReaderWriter.h - Bitcode reader/writers ----*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This header defines interfaces to read and write LLVM bitcode files/streams.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_BITCODE_3_2_H
+#define LLVM_BITCODE_3_2_H
+
+#include <string>
+
+namespace llvm {
+  class Module;
+  class MemoryBuffer;
+  class ModulePass;
+  class BitstreamWriter;
+  class LLVMContext;
+  class raw_ostream;
+}  // End llvm namespace
+
+namespace llvm_3_2 {
+  /// getLazyBitcodeModule - Read the header of the specified bitcode buffer
+  /// and prepare for lazy deserialization of function bodies.  If successful,
+  /// this takes ownership of 'buffer' and returns a non-null pointer.  On
+  /// error, this returns null, *does not* take ownership of Buffer, and fills
+  /// in *ErrMsg with an error description if ErrMsg is non-null.
+  llvm::Module *getLazyBitcodeModule(llvm::MemoryBuffer *Buffer,
+                               llvm::LLVMContext& Context,
+                               std::string *ErrMsg = 0);
+
+  /// getBitcodeTargetTriple - Read the header of the specified bitcode
+  /// buffer and extract just the triple information. If successful,
+  /// this returns a string and *does not* take ownership
+  /// of 'buffer'. On error, this returns "", and fills in *ErrMsg
+  /// if ErrMsg is non-null.
+  std::string getBitcodeTargetTriple(llvm::MemoryBuffer *Buffer,
+                                     llvm::LLVMContext& Context,
+                                     std::string *ErrMsg = 0);
+
+  /// ParseBitcodeFile - Read the specified bitcode file, returning the module.
+  /// If an error occurs, this returns null and fills in *ErrMsg if it is
+  /// non-null.  This method *never* takes ownership of Buffer.
+  llvm::Module *ParseBitcodeFile(llvm::MemoryBuffer *Buffer, llvm::LLVMContext& Context,
+                           std::string *ErrMsg = 0);
+
+  /// WriteBitcodeToFile - Write the specified module to the specified
+  /// raw output stream.  For streams where it matters, the given stream
+  /// should be in "binary" mode.
+  void WriteBitcodeToFile(const llvm::Module *M, llvm::raw_ostream &Out);
+
+  /// createBitcodeWriterPass - Create and return a pass that writes the module
+  /// to the specified ostream.
+  llvm::ModulePass *createBitcodeWriterPass(llvm::raw_ostream &Str);
+
+
+  /// isBitcodeWrapper - Return true if the given bytes are the magic bytes
+  /// for an LLVM IR bitcode wrapper.
+  ///
+  static inline bool isBitcodeWrapper(const unsigned char *BufPtr,
+                                      const unsigned char *BufEnd) {
+    // See if you can find the hidden message in the magic bytes :-).
+    // (Hint: it's a little-endian encoding.)
+    return BufPtr != BufEnd &&
+           BufPtr[0] == 0xDE &&
+           BufPtr[1] == 0xC0 &&
+           BufPtr[2] == 0x17 &&
+           BufPtr[3] == 0x0B;
+  }
+
+  /// isRawBitcode - Return true if the given bytes are the magic bytes for
+  /// raw LLVM IR bitcode (without a wrapper).
+  ///
+  static inline bool isRawBitcode(const unsigned char *BufPtr,
+                                  const unsigned char *BufEnd) {
+    // These bytes sort of have a hidden message, but it's not in
+    // little-endian this time, and it's a little redundant.
+    return BufPtr != BufEnd &&
+           BufPtr[0] == 'B' &&
+           BufPtr[1] == 'C' &&
+           BufPtr[2] == 0xc0 &&
+           BufPtr[3] == 0xde;
+  }
+
+  /// isBitcode - Return true if the given bytes are the magic bytes for
+  /// LLVM IR bitcode, either with or without a wrapper.
+  ///
+  static bool inline isBitcode(const unsigned char *BufPtr,
+                               const unsigned char *BufEnd) {
+    return isBitcodeWrapper(BufPtr, BufEnd) ||
+           isRawBitcode(BufPtr, BufEnd);
+  }
+
+  /// SkipBitcodeWrapperHeader - Some systems wrap bc files with a special
+  /// header for padding or other reasons.  The format of this header is:
+  ///
+  /// struct bc_header {
+  ///   uint32_t Magic;         // 0x0B17C0DE
+  ///   uint32_t Version;       // Version, currently always 0.
+  ///   uint32_t BitcodeOffset; // Offset to traditional bitcode file.
+  ///   uint32_t BitcodeSize;   // Size of traditional bitcode file.
+  ///   ... potentially other gunk ...
+  /// };
+  ///
+  /// This function is called when we find a file with a matching magic number.
+  /// In this case, skip down to the subsection of the file that is actually a
+  /// BC file.
+  static inline bool SkipBitcodeWrapperHeader(unsigned char *&BufPtr,
+                                              unsigned char *&BufEnd) {
+    enum {
+      KnownHeaderSize = 4*4,  // Size of header we read.
+      OffsetField = 2*4,      // Offset in bytes to Offset field.
+      SizeField = 3*4         // Offset in bytes to Size field.
+    };
+
+    // Must contain the header!
+    if (BufEnd-BufPtr < KnownHeaderSize) return true;
+
+    unsigned Offset = ( BufPtr[OffsetField  ]        |
+                       (BufPtr[OffsetField+1] << 8)  |
+                       (BufPtr[OffsetField+2] << 16) |
+                       (BufPtr[OffsetField+3] << 24));
+    unsigned Size   = ( BufPtr[SizeField    ]        |
+                       (BufPtr[SizeField  +1] << 8)  |
+                       (BufPtr[SizeField  +2] << 16) |
+                       (BufPtr[SizeField  +3] << 24));
+
+    // Verify that Offset+Size fits in the file.
+    if (Offset+Size > unsigned(BufEnd-BufPtr))
+      return true;
+    BufPtr += Offset;
+    BufEnd = BufPtr+Size;
+    return false;
+  }
+}  // End llvm_3_2 namespace
+
+#endif
diff --git a/slang/BitWriter_3_2/ValueEnumerator.cpp b/slang/BitWriter_3_2/ValueEnumerator.cpp
new file mode 100644
index 0000000..4ce2ec6
--- /dev/null
+++ b/slang/BitWriter_3_2/ValueEnumerator.cpp
@@ -0,0 +1,546 @@
+//===-- ValueEnumerator.cpp - Number values and types for bitcode writer --===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file implements the ValueEnumerator class.
+//
+//===----------------------------------------------------------------------===//
+
+#include "ValueEnumerator.h"
+#include "llvm/ADT/STLExtras.h"
+#include "llvm/ADT/SmallPtrSet.h"
+#include "llvm/IR/Constants.h"
+#include "llvm/IR/DebugInfoMetadata.h"
+#include "llvm/IR/DerivedTypes.h"
+#include "llvm/IR/Instructions.h"
+#include "llvm/IR/Module.h"
+#include "llvm/IR/ValueSymbolTable.h"
+#include "llvm/Support/Debug.h"
+#include "llvm/Support/raw_ostream.h"
+#include <algorithm>
+using namespace llvm;
+
+namespace llvm_3_2 {
+
+static bool isIntOrIntVectorValue(const std::pair<const Value*, unsigned> &V) {
+  return V.first->getType()->isIntOrIntVectorTy();
+}
+
+/// ValueEnumerator - Enumerate module-level information.
+ValueEnumerator::ValueEnumerator(const llvm::Module &M)
+    : HasMDString(false), HasDILocation(false) {
+  // Enumerate the global variables.
+  for (llvm::Module::const_global_iterator I = M.global_begin(), E = M.global_end();
+       I != E; ++I)
+    EnumerateValue(&*I);
+
+  // Enumerate the functions.
+  for (llvm::Module::const_iterator I = M.begin(), E = M.end(); I != E; ++I) {
+    EnumerateValue(&*I);
+    EnumerateAttributes(cast<Function>(I)->getAttributes());
+  }
+
+  // Enumerate the aliases.
+  for (llvm::Module::const_alias_iterator I = M.alias_begin(), E = M.alias_end();
+       I != E; ++I)
+    EnumerateValue(&*I);
+
+  // Remember what is the cutoff between globalvalue's and other constants.
+  unsigned FirstConstant = Values.size();
+
+  // Enumerate the global variable initializers.
+  for (llvm::Module::const_global_iterator I = M.global_begin(), E = M.global_end();
+       I != E; ++I)
+    if (I->hasInitializer())
+      EnumerateValue(I->getInitializer());
+
+  // Enumerate the aliasees.
+  for (llvm::Module::const_alias_iterator I = M.alias_begin(), E = M.alias_end();
+       I != E; ++I)
+    EnumerateValue(I->getAliasee());
+
+  // Enumerate the metadata type.
+  //
+  // TODO: Move this to ValueEnumerator::EnumerateOperandType() once bitcode
+  // only encodes the metadata type when it's used as a value.
+  EnumerateType(Type::getMetadataTy(M.getContext()));
+
+  // Insert constants and metadata that are named at module level into the slot
+  // pool so that the module symbol table can refer to them...
+  EnumerateValueSymbolTable(M.getValueSymbolTable());
+  EnumerateNamedMetadata(M);
+
+  SmallVector<std::pair<unsigned, MDNode *>, 8> MDs;
+
+  // Enumerate types used by function bodies and argument lists.
+  for (const Function &F : M) {
+    for (const Argument &A : F.args())
+      EnumerateType(A.getType());
+
+    for (const BasicBlock &BB : F)
+      for (const Instruction &I : BB) {
+        for (const Use &Op : I.operands()) {
+          auto *MD = dyn_cast<MetadataAsValue>(&Op);
+          if (!MD) {
+            EnumerateOperandType(Op);
+            continue;
+          }
+
+          // Local metadata is enumerated during function-incorporation.
+          if (isa<LocalAsMetadata>(MD->getMetadata()))
+            continue;
+
+          EnumerateMetadata(MD->getMetadata());
+        }
+        EnumerateType(I.getType());
+        if (const CallInst *CI = dyn_cast<CallInst>(&I))
+          EnumerateAttributes(CI->getAttributes());
+        else if (const InvokeInst *II = dyn_cast<InvokeInst>(&I))
+          EnumerateAttributes(II->getAttributes());
+
+        // Enumerate metadata attached with this instruction.
+        MDs.clear();
+        I.getAllMetadataOtherThanDebugLoc(MDs);
+        for (unsigned i = 0, e = MDs.size(); i != e; ++i)
+          EnumerateMetadata(MDs[i].second);
+
+        // Don't enumerate the location directly -- it has a special record
+        // type -- but enumerate its operands.
+        if (DILocation *L = I.getDebugLoc())
+          EnumerateMDNodeOperands(L);
+      }
+  }
+
+  // Optimize constant ordering.
+  OptimizeConstants(FirstConstant, Values.size());
+}
+
+unsigned ValueEnumerator::getInstructionID(const Instruction *Inst) const {
+  InstructionMapType::const_iterator I = InstructionMap.find(Inst);
+  assert(I != InstructionMap.end() && "Instruction is not mapped!");
+  return I->second;
+}
+
+void ValueEnumerator::setInstructionID(const Instruction *I) {
+  InstructionMap[I] = InstructionCount++;
+}
+
+unsigned ValueEnumerator::getValueID(const Value *V) const {
+  if (auto *MD = dyn_cast<MetadataAsValue>(V))
+    return getMetadataID(MD->getMetadata());
+
+  ValueMapType::const_iterator I = ValueMap.find(V);
+  assert(I != ValueMap.end() && "Value not in slotcalculator!");
+  return I->second-1;
+}
+
+void ValueEnumerator::dump() const {
+  print(dbgs(), ValueMap, "Default");
+  dbgs() << '\n';
+  print(dbgs(), MDValueMap, "MetaData");
+  dbgs() << '\n';
+}
+
+void ValueEnumerator::print(raw_ostream &OS, const ValueMapType &Map,
+                            const char *Name) const {
+
+  OS << "Map Name: " << Name << "\n";
+  OS << "Size: " << Map.size() << "\n";
+  for (ValueMapType::const_iterator I = Map.begin(),
+         E = Map.end(); I != E; ++I) {
+
+    const Value *V = I->first;
+    if (V->hasName())
+      OS << "Value: " << V->getName();
+    else
+      OS << "Value: [null]\n";
+    V->dump();
+
+    OS << " Uses(" << std::distance(V->use_begin(),V->use_end()) << "):";
+    for (const Use &U : V->uses()) {
+      if (&U != &*V->use_begin())
+        OS << ",";
+      if(U->hasName())
+        OS << " " << U->getName();
+      else
+        OS << " [null]";
+
+    }
+    OS <<  "\n\n";
+  }
+}
+
+void ValueEnumerator::print(llvm::raw_ostream &OS, const MetadataMapType &Map,
+                            const char *Name) const {
+
+  OS << "Map Name: " << Name << "\n";
+  OS << "Size: " << Map.size() << "\n";
+  for (auto I = Map.begin(), E = Map.end(); I != E; ++I) {
+    const llvm::Metadata *MD = I->first;
+    OS << "Metadata: slot = " << I->second << "\n";
+    MD->print(OS);
+  }
+}
+
+
+// Optimize constant ordering.
+namespace {
+  struct CstSortPredicate {
+    ValueEnumerator &VE;
+    explicit CstSortPredicate(ValueEnumerator &ve) : VE(ve) {}
+    bool operator()(const std::pair<const Value*, unsigned> &LHS,
+                    const std::pair<const Value*, unsigned> &RHS) {
+      // Sort by plane.
+      if (LHS.first->getType() != RHS.first->getType())
+        return VE.getTypeID(LHS.first->getType()) <
+               VE.getTypeID(RHS.first->getType());
+      // Then by frequency.
+      return LHS.second > RHS.second;
+    }
+  };
+}
+
+/// OptimizeConstants - Reorder constant pool for denser encoding.
+void ValueEnumerator::OptimizeConstants(unsigned CstStart, unsigned CstEnd) {
+  if (CstStart == CstEnd || CstStart+1 == CstEnd) return;
+
+  CstSortPredicate P(*this);
+  std::stable_sort(Values.begin()+CstStart, Values.begin()+CstEnd, P);
+
+  // Ensure that integer and vector of integer constants are at the start of the
+  // constant pool.  This is important so that GEP structure indices come before
+  // gep constant exprs.
+  std::partition(Values.begin()+CstStart, Values.begin()+CstEnd,
+                 isIntOrIntVectorValue);
+
+  // Rebuild the modified portion of ValueMap.
+  for (; CstStart != CstEnd; ++CstStart)
+    ValueMap[Values[CstStart].first] = CstStart+1;
+}
+
+
+/// EnumerateValueSymbolTable - Insert all of the values in the specified symbol
+/// table into the values table.
+void ValueEnumerator::EnumerateValueSymbolTable(const ValueSymbolTable &VST) {
+  for (ValueSymbolTable::const_iterator VI = VST.begin(), VE = VST.end();
+       VI != VE; ++VI)
+    EnumerateValue(VI->getValue());
+}
+
+/// EnumerateNamedMetadata - Insert all of the values referenced by
+/// named metadata in the specified module.
+void ValueEnumerator::EnumerateNamedMetadata(const llvm::Module &M) {
+  for (llvm::Module::const_named_metadata_iterator I = M.named_metadata_begin(),
+                                             E = M.named_metadata_end();
+       I != E; ++I)
+    EnumerateNamedMDNode(&*I);
+}
+
+void ValueEnumerator::EnumerateNamedMDNode(const NamedMDNode *MD) {
+  for (unsigned i = 0, e = MD->getNumOperands(); i != e; ++i)
+    EnumerateMetadata(MD->getOperand(i));
+}
+
+/// EnumerateMDNodeOperands - Enumerate all non-function-local values
+/// and types referenced by the given MDNode.
+void ValueEnumerator::EnumerateMDNodeOperands(const MDNode *N) {
+  for (unsigned i = 0, e = N->getNumOperands(); i != e; ++i) {
+    Metadata *MD = N->getOperand(i);
+    if (!MD)
+      continue;
+    assert(!isa<LocalAsMetadata>(MD) && "MDNodes cannot be function-local");
+    EnumerateMetadata(MD);
+  }
+}
+
+void ValueEnumerator::EnumerateMetadata(const llvm::Metadata *MD) {
+  assert(
+      (isa<MDNode>(MD) || isa<MDString>(MD) || isa<ConstantAsMetadata>(MD)) &&
+      "Invalid metadata kind");
+
+  // Insert a dummy ID to block the co-recursive call to
+  // EnumerateMDNodeOperands() from re-visiting MD in a cyclic graph.
+  //
+  // Return early if there's already an ID.
+  if (!MDValueMap.insert(std::make_pair(MD, 0)).second)
+    return;
+
+  // Visit operands first to minimize RAUW.
+  if (auto *N = dyn_cast<MDNode>(MD))
+    EnumerateMDNodeOperands(N);
+  else if (auto *C = dyn_cast<ConstantAsMetadata>(MD))
+    EnumerateValue(C->getValue());
+
+  HasMDString |= isa<MDString>(MD);
+  HasDILocation |= isa<DILocation>(MD);
+
+  // Replace the dummy ID inserted above with the correct one.  MDValueMap may
+  // have changed by inserting operands, so we need a fresh lookup here.
+  MDs.push_back(MD);
+  MDValueMap[MD] = MDs.size();
+}
+
+/// EnumerateFunctionLocalMetadataa - Incorporate function-local metadata
+/// information reachable from the metadata.
+void ValueEnumerator::EnumerateFunctionLocalMetadata(
+    const llvm::LocalAsMetadata *Local) {
+  // Check to see if it's already in!
+  unsigned &MDValueID = MDValueMap[Local];
+  if (MDValueID)
+    return;
+
+  MDs.push_back(Local);
+  MDValueID = MDs.size();
+
+  EnumerateValue(Local->getValue());
+
+  // Also, collect all function-local metadata for easy access.
+  FunctionLocalMDs.push_back(Local);
+}
+
+void ValueEnumerator::EnumerateValue(const Value *V) {
+  assert(!V->getType()->isVoidTy() && "Can't insert void values!");
+  assert(!isa<MetadataAsValue>(V) && "EnumerateValue doesn't handle Metadata!");
+
+  // Check to see if it's already in!
+  unsigned &ValueID = ValueMap[V];
+  if (ValueID) {
+    // Increment use count.
+    Values[ValueID-1].second++;
+    return;
+  }
+
+  // Enumerate the type of this value.
+  EnumerateType(V->getType());
+
+  if (const Constant *C = dyn_cast<Constant>(V)) {
+    if (isa<GlobalValue>(C)) {
+      // Initializers for globals are handled explicitly elsewhere.
+    } else if (C->getNumOperands()) {
+      // If a constant has operands, enumerate them.  This makes sure that if a
+      // constant has uses (for example an array of const ints), that they are
+      // inserted also.
+
+      // We prefer to enumerate them with values before we enumerate the user
+      // itself.  This makes it more likely that we can avoid forward references
+      // in the reader.  We know that there can be no cycles in the constants
+      // graph that don't go through a global variable.
+      for (User::const_op_iterator I = C->op_begin(), E = C->op_end();
+           I != E; ++I)
+        if (!isa<BasicBlock>(*I)) // Don't enumerate BB operand to BlockAddress.
+          EnumerateValue(*I);
+
+      // Finally, add the value.  Doing this could make the ValueID reference be
+      // dangling, don't reuse it.
+      Values.push_back(std::make_pair(V, 1U));
+      ValueMap[V] = Values.size();
+      return;
+    } else if (const ConstantDataSequential *CDS =
+               dyn_cast<ConstantDataSequential>(C)) {
+      // For our legacy handling of the new ConstantDataSequential type, we
+      // need to enumerate the individual elements, as well as mark the
+      // outer constant as used.
+      for (unsigned i = 0, e = CDS->getNumElements(); i != e; ++i)
+        EnumerateValue(CDS->getElementAsConstant(i));
+      Values.push_back(std::make_pair(V, 1U));
+      ValueMap[V] = Values.size();
+      return;
+    }
+  }
+
+  // Add the value.
+  Values.push_back(std::make_pair(V, 1U));
+  ValueID = Values.size();
+}
+
+
+void ValueEnumerator::EnumerateType(Type *Ty) {
+  unsigned *TypeID = &TypeMap[Ty];
+
+  // We've already seen this type.
+  if (*TypeID)
+    return;
+
+  // If it is a non-anonymous struct, mark the type as being visited so that we
+  // don't recursively visit it.  This is safe because we allow forward
+  // references of these in the bitcode reader.
+  if (StructType *STy = dyn_cast<StructType>(Ty))
+    if (!STy->isLiteral())
+      *TypeID = ~0U;
+
+  // Enumerate all of the subtypes before we enumerate this type.  This ensures
+  // that the type will be enumerated in an order that can be directly built.
+  for (Type *SubTy : Ty->subtypes())
+    EnumerateType(SubTy);
+
+  // Refresh the TypeID pointer in case the table rehashed.
+  TypeID = &TypeMap[Ty];
+
+  // Check to see if we got the pointer another way.  This can happen when
+  // enumerating recursive types that hit the base case deeper than they start.
+  //
+  // If this is actually a struct that we are treating as forward ref'able,
+  // then emit the definition now that all of its contents are available.
+  if (*TypeID && *TypeID != ~0U)
+    return;
+
+  // Add this type now that its contents are all happily enumerated.
+  Types.push_back(Ty);
+
+  *TypeID = Types.size();
+}
+
+// Enumerate the types for the specified value.  If the value is a constant,
+// walk through it, enumerating the types of the constant.
+void ValueEnumerator::EnumerateOperandType(const Value *V) {
+  EnumerateType(V->getType());
+
+  if (auto *MD = dyn_cast<MetadataAsValue>(V)) {
+    assert(!isa<LocalAsMetadata>(MD->getMetadata()) &&
+           "Function-local metadata should be left for later");
+
+    EnumerateMetadata(MD->getMetadata());
+    return;
+  }
+
+  const Constant *C = dyn_cast<Constant>(V);
+  if (!C)
+    return;
+
+  // If this constant is already enumerated, ignore it, we know its type must
+  // be enumerated.
+  if (ValueMap.count(C))
+    return;
+
+  // This constant may have operands, make sure to enumerate the types in
+  // them.
+  for (unsigned i = 0, e = C->getNumOperands(); i != e; ++i) {
+    const Value *Op = C->getOperand(i);
+
+    // Don't enumerate basic blocks here, this happens as operands to
+    // blockaddress.
+    if (isa<BasicBlock>(Op))
+      continue;
+
+    EnumerateOperandType(Op);
+  }
+}
+
+void ValueEnumerator::EnumerateAttributes(AttributeSet PAL) {
+  if (PAL.isEmpty()) return;  // null is always 0.
+
+  // Do a lookup.
+  unsigned &Entry = AttributeMap[PAL];
+  if (Entry == 0) {
+    // Never saw this before, add it.
+    Attribute.push_back(PAL);
+    Entry = Attribute.size();
+  }
+
+  // Do lookups for all attribute groups.
+  for (unsigned i = 0, e = PAL.getNumSlots(); i != e; ++i) {
+    AttributeSet AS = PAL.getSlotAttributes(i);
+    unsigned &Entry = AttributeGroupMap[AS];
+    if (Entry == 0) {
+      AttributeGroups.push_back(AS);
+      Entry = AttributeGroups.size();
+    }
+  }
+}
+
+void ValueEnumerator::incorporateFunction(const Function &F) {
+  InstructionCount = 0;
+  NumModuleValues = Values.size();
+  NumModuleMDs = MDs.size();
+
+  // Adding function arguments to the value table.
+  for (Function::const_arg_iterator I = F.arg_begin(), E = F.arg_end();
+       I != E; ++I)
+    EnumerateValue(&*I);
+
+  FirstFuncConstantID = Values.size();
+
+  // Add all function-level constants to the value table.
+  for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB) {
+    for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I!=E; ++I)
+      for (User::const_op_iterator OI = I->op_begin(), E = I->op_end();
+           OI != E; ++OI) {
+        if ((isa<Constant>(*OI) && !isa<GlobalValue>(*OI)) ||
+            isa<InlineAsm>(*OI))
+          EnumerateValue(*OI);
+      }
+    BasicBlocks.push_back(&*BB);
+    ValueMap[&*BB] = BasicBlocks.size();
+  }
+
+  // Optimize the constant layout.
+  OptimizeConstants(FirstFuncConstantID, Values.size());
+
+  // Add the function's parameter attributes so they are available for use in
+  // the function's instruction.
+  EnumerateAttributes(F.getAttributes());
+
+  FirstInstID = Values.size();
+
+  SmallVector<llvm::LocalAsMetadata *, 8> FnLocalMDVector;
+  // Add all of the instructions.
+  for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB) {
+    for (BasicBlock::const_iterator I = BB->begin(), E = BB->end(); I!=E; ++I) {
+      for (User::const_op_iterator OI = I->op_begin(), E = I->op_end();
+           OI != E; ++OI) {
+        if (auto *MD = dyn_cast<llvm::MetadataAsValue>(&*OI))
+          if (auto *Local = dyn_cast<LocalAsMetadata>(MD->getMetadata()))
+            // Enumerate metadata after the instructions they might refer to.
+            FnLocalMDVector.push_back(Local);
+      }
+
+      if (!I->getType()->isVoidTy())
+        EnumerateValue(&*I);
+    }
+  }
+
+  // Add all of the function-local metadata.
+  for (unsigned i = 0, e = FnLocalMDVector.size(); i != e; ++i)
+    EnumerateFunctionLocalMetadata(FnLocalMDVector[i]);
+}
+
+void ValueEnumerator::purgeFunction() {
+  /// Remove purged values from the ValueMap.
+  for (unsigned i = NumModuleValues, e = Values.size(); i != e; ++i)
+    ValueMap.erase(Values[i].first);
+  for (unsigned i = NumModuleMDs, e = MDs.size(); i != e; ++i)
+    MDValueMap.erase(MDs[i]);
+  for (unsigned i = 0, e = BasicBlocks.size(); i != e; ++i)
+    ValueMap.erase(BasicBlocks[i]);
+
+  Values.resize(NumModuleValues);
+  MDs.resize(NumModuleMDs);
+  BasicBlocks.clear();
+  FunctionLocalMDs.clear();
+}
+
+static void IncorporateFunctionInfoGlobalBBIDs(const Function *F,
+                                 DenseMap<const BasicBlock*, unsigned> &IDMap) {
+  unsigned Counter = 0;
+  for (Function::const_iterator BB = F->begin(), E = F->end(); BB != E; ++BB)
+    IDMap[&*BB] = ++Counter;
+}
+
+/// getGlobalBasicBlockID - This returns the function-specific ID for the
+/// specified basic block.  This is relatively expensive information, so it
+/// should only be used by rare constructs such as address-of-label.
+unsigned ValueEnumerator::getGlobalBasicBlockID(const BasicBlock *BB) const {
+  unsigned &Idx = GlobalBasicBlockIDs[BB];
+  if (Idx != 0)
+    return Idx-1;
+
+  IncorporateFunctionInfoGlobalBBIDs(BB->getParent(), GlobalBasicBlockIDs);
+  return getGlobalBasicBlockID(BB);
+}
+
+}  // end llvm_3_2 namespace
diff --git a/slang/BitWriter_3_2/ValueEnumerator.h b/slang/BitWriter_3_2/ValueEnumerator.h
new file mode 100644
index 0000000..124272f
--- /dev/null
+++ b/slang/BitWriter_3_2/ValueEnumerator.h
@@ -0,0 +1,198 @@
+//===-- Bitcode/Writer/ValueEnumerator.h - Number values --------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This class gives values and types Unique ID's.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef VALUE_ENUMERATOR_H
+#define VALUE_ENUMERATOR_H
+
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/IR/Attributes.h"
+#include "llvm/IR/UseListOrder.h"
+#include <vector>
+
+namespace llvm {
+
+class Type;
+class Value;
+class Instruction;
+class BasicBlock;
+class Function;
+class Module;
+class Metadata;
+class LocalAsMetadata;
+class MDNode;
+class NamedMDNode;
+class AttributeSet;
+class ValueSymbolTable;
+class MDSymbolTable;
+class raw_ostream;
+
+}  // end llvm namespace
+
+namespace llvm_3_2 {
+
+class ValueEnumerator {
+public:
+  typedef std::vector<llvm::Type*> TypeList;
+
+  // For each value, we remember its Value* and occurrence frequency.
+  typedef std::vector<std::pair<const llvm::Value*, unsigned> > ValueList;
+
+  llvm::UseListOrderStack UseListOrders;
+private:
+  typedef llvm::DenseMap<llvm::Type*, unsigned> TypeMapType;
+  TypeMapType TypeMap;
+  TypeList Types;
+
+  typedef llvm::DenseMap<const llvm::Value*, unsigned> ValueMapType;
+  ValueMapType ValueMap;
+  ValueList Values;
+
+
+  std::vector<const llvm::Metadata *> MDs;
+  llvm::SmallVector<const llvm::LocalAsMetadata *, 8> FunctionLocalMDs;
+  typedef llvm::DenseMap<const llvm::Metadata *, unsigned> MetadataMapType;
+  MetadataMapType MDValueMap;
+  bool HasMDString;
+  bool HasDILocation;
+
+  typedef llvm::DenseMap<llvm::AttributeSet, unsigned> AttributeGroupMapType;
+  AttributeGroupMapType AttributeGroupMap;
+  std::vector<llvm::AttributeSet> AttributeGroups;
+
+  typedef llvm::DenseMap<llvm::AttributeSet, unsigned> AttributeMapType;
+  AttributeMapType AttributeMap;
+  std::vector<llvm::AttributeSet> Attribute;
+
+  /// GlobalBasicBlockIDs - This map memoizes the basic block ID's referenced by
+  /// the "getGlobalBasicBlockID" method.
+  mutable llvm::DenseMap<const llvm::BasicBlock*, unsigned> GlobalBasicBlockIDs;
+
+  typedef llvm::DenseMap<const llvm::Instruction*, unsigned> InstructionMapType;
+  InstructionMapType InstructionMap;
+  unsigned InstructionCount;
+
+  /// BasicBlocks - This contains all the basic blocks for the currently
+  /// incorporated function.  Their reverse mapping is stored in ValueMap.
+  std::vector<const llvm::BasicBlock*> BasicBlocks;
+
+  /// When a function is incorporated, this is the size of the Values list
+  /// before incorporation.
+  unsigned NumModuleValues;
+
+  /// When a function is incorporated, this is the size of the MDValues list
+  /// before incorporation.
+  unsigned NumModuleMDs;
+
+  unsigned FirstFuncConstantID;
+  unsigned FirstInstID;
+
+  ValueEnumerator(const ValueEnumerator &) = delete;
+  void operator=(const ValueEnumerator &) = delete;
+public:
+  explicit ValueEnumerator(const llvm::Module &M);
+
+  void dump() const;
+  void print(llvm::raw_ostream &OS, const ValueMapType &Map, const char *Name) const;
+  void print(llvm::raw_ostream &OS, const MetadataMapType &Map,
+             const char *Name) const;
+
+  unsigned getValueID(const llvm::Value *V) const;
+  unsigned getMetadataID(const llvm::Metadata *MD) const {
+    auto ID = getMetadataOrNullID(MD);
+    assert(ID != 0 && "Metadata not in slotcalculator!");
+    return ID - 1;
+  }
+  unsigned getMetadataOrNullID(const llvm::Metadata *MD) const {
+    return MDValueMap.lookup(MD);
+  }
+
+  bool hasMDString() const { return HasMDString; }
+  bool hasDILocation() const { return HasDILocation; }
+
+  unsigned getTypeID(llvm::Type *T) const {
+    TypeMapType::const_iterator I = TypeMap.find(T);
+    assert(I != TypeMap.end() && "Type not in ValueEnumerator!");
+    return I->second-1;
+  }
+
+  unsigned getInstructionID(const llvm::Instruction *I) const;
+  void setInstructionID(const llvm::Instruction *I);
+
+  unsigned getAttributeID(llvm::AttributeSet PAL) const {
+    if (PAL.isEmpty()) return 0;  // Null maps to zero.
+    AttributeMapType::const_iterator I = AttributeMap.find(PAL);
+    assert(I != AttributeMap.end() && "Attribute not in ValueEnumerator!");
+    return I->second;
+  }
+
+  unsigned getAttributeGroupID(llvm::AttributeSet PAL) const {
+    if (PAL.isEmpty()) return 0;  // Null maps to zero.
+    AttributeGroupMapType::const_iterator I = AttributeGroupMap.find(PAL);
+    assert(I != AttributeGroupMap.end() && "Attribute not in ValueEnumerator!");
+    return I->second;
+  }
+
+  /// getFunctionConstantRange - Return the range of values that corresponds to
+  /// function-local constants.
+  void getFunctionConstantRange(unsigned &Start, unsigned &End) const {
+    Start = FirstFuncConstantID;
+    End = FirstInstID;
+  }
+
+  const ValueList &getValues() const { return Values; }
+  const std::vector<const llvm::Metadata *> &getMDs() const { return MDs; }
+  const llvm::SmallVectorImpl<const llvm::LocalAsMetadata *> &getFunctionLocalMDs() const {
+    return FunctionLocalMDs;
+  }
+  const TypeList &getTypes() const { return Types; }
+  const std::vector<const llvm::BasicBlock*> &getBasicBlocks() const {
+    return BasicBlocks;
+  }
+  const std::vector<llvm::AttributeSet> &getAttributes() const {
+    return Attribute;
+  }
+  const std::vector<llvm::AttributeSet> &getAttributeGroups() const {
+    return AttributeGroups;
+  }
+
+  /// getGlobalBasicBlockID - This returns the function-specific ID for the
+  /// specified basic block.  This is relatively expensive information, so it
+  /// should only be used by rare constructs such as address-of-label.
+  unsigned getGlobalBasicBlockID(const llvm::BasicBlock *BB) const;
+
+  /// incorporateFunction/purgeFunction - If you'd like to deal with a function,
+  /// use these two methods to get its data into the ValueEnumerator!
+  ///
+  void incorporateFunction(const llvm::Function &F);
+  void purgeFunction();
+
+private:
+  void OptimizeConstants(unsigned CstStart, unsigned CstEnd);
+
+  void EnumerateMDNodeOperands(const llvm::MDNode *N);
+  void EnumerateMetadata(const llvm::Metadata *MD);
+  void EnumerateFunctionLocalMetadata(const llvm::LocalAsMetadata *Local);
+  void EnumerateNamedMDNode(const llvm::NamedMDNode *NMD);
+  void EnumerateValue(const llvm::Value *V);
+  void EnumerateType(llvm::Type *T);
+  void EnumerateOperandType(const llvm::Value *V);
+  void EnumerateAttributes(llvm::AttributeSet PAL);
+
+  void EnumerateValueSymbolTable(const llvm::ValueSymbolTable &ST);
+  void EnumerateNamedMetadata(const llvm::Module &M);
+};
+
+}  // End llvm_3_2 namespace
+
+#endif
diff --git a/slang/MODULE_LICENSE_APACHE2 b/slang/MODULE_LICENSE_APACHE2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/MODULE_LICENSE_APACHE2
diff --git a/slang/NOTICE b/slang/NOTICE
new file mode 100644
index 0000000..485fde9
--- /dev/null
+++ b/slang/NOTICE
@@ -0,0 +1,339 @@
+=========================
+NOTICE file for slang.git
+=========================
+
+   Copyright (c) 2005-2011, The Android Open Source Project
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+
+
+===========================================
+NOTICE file for external/clang (clang.git).
+Note: libclang*.a are statically linked.
+===========================================
+
+==============================================================================
+LLVM Release License
+==============================================================================
+University of Illinois/NCSA
+Open Source License
+
+Copyright (c) 2007-2011 University of Illinois at Urbana-Champaign.
+All rights reserved.
+
+Developed by:
+
+    LLVM Team
+
+    University of Illinois at Urbana-Champaign
+
+    http://llvm.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal with
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimers.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimers in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the names of the LLVM Team, University of Illinois at
+      Urbana-Champaign, nor the names of its contributors may be used to
+      endorse or promote products derived from this Software without specific
+      prior written permission.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+SOFTWARE.
+
+==============================================================================
+The LLVM software contains code written by third parties.  Such software will
+have its own individual LICENSE.TXT file in the directory in which it appears.
+This file will describe the copyrights, license, and restrictions which apply
+to that code.
+
+The disclaimer of warranty in the University of Illinois Open Source License
+applies to all code in the LLVM Distribution, and nothing in any of the
+other licenses gives permission to use the names of the LLVM Team or the
+University of Illinois to endorse or promote products derived from this
+Software.
+
+The following pieces of software have additional or alternate copyrights,
+licenses, and/or restrictions:
+
+Program             Directory
+-------             ---------
+<none yet>
+
+
+
+=========================================
+NOTICE file for external/llvm (llvm.git).
+Note: libLLVM*.a are statically linked.
+=========================================
+
+==============================================================================
+LLVM Release License
+==============================================================================
+University of Illinois/NCSA
+Open Source License
+
+Copyright (c) 2003-2011 University of Illinois at Urbana-Champaign.
+All rights reserved.
+
+Developed by:
+
+    LLVM Team
+
+    University of Illinois at Urbana-Champaign
+
+    http://llvm.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal with
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimers.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimers in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the names of the LLVM Team, University of Illinois at
+      Urbana-Champaign, nor the names of its contributors may be used to
+      endorse or promote products derived from this Software without specific
+      prior written permission.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+SOFTWARE.
+
+==============================================================================
+Copyrights and Licenses for Third Party Software Distributed with LLVM:
+==============================================================================
+The LLVM software contains code written by third parties.  Such software will
+have its own individual LICENSE.TXT file in the directory in which it appears.
+This file will describe the copyrights, license, and restrictions which apply
+to that code.
+
+The disclaimer of warranty in the University of Illinois Open Source License
+applies to all code in the LLVM Distribution, and nothing in any of the
+other licenses gives permission to use the names of the LLVM Team or the
+University of Illinois to endorse or promote products derived from this
+Software.
+
+The following pieces of software have additional or alternate copyrights,
+licenses, and/or restrictions:
+
+Program             Directory
+-------             ---------
+Autoconf            llvm/autoconf
+                    llvm/projects/ModuleMaker/autoconf
+                    llvm/projects/sample/autoconf
+CellSPU backend     llvm/lib/Target/CellSPU/README.txt
+Google Test         llvm/utils/unittest/googletest
+OpenBSD regex       llvm/lib/Support/{reg*, COPYRIGHT.regex}
diff --git a/slang/README.html b/slang/README.html
new file mode 100644
index 0000000..4ace7c6
--- /dev/null
+++ b/slang/README.html
@@ -0,0 +1,626 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.6: http://docutils.sourceforge.net/" />
+<title>llvm-rs-cc: Compiler for Renderscript language</title>
+<style type="text/css">
+
+/*
+:Author: David Goodger (goodger@python.org)
+:Id: $Id: html4css1.css 5951 2009-05-18 18:03:10Z milde $
+:Copyright: This stylesheet has been placed in the public domain.
+
+Default cascading style sheet for the HTML output of Docutils.
+
+See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
+customize this style sheet.
+*/
+
+/* used to remove borders from tables and images */
+.borderless, table.borderless td, table.borderless th {
+  border: 0 }
+
+table.borderless td, table.borderless th {
+  /* Override padding for "table.docutils td" with "! important".
+     The right padding separates the table cells. */
+  padding: 0 0.5em 0 0 ! important }
+
+.first {
+  /* Override more specific margin styles with "! important". */
+  margin-top: 0 ! important }
+
+.last, .with-subtitle {
+  margin-bottom: 0 ! important }
+
+.hidden {
+  display: none }
+
+a.toc-backref {
+  text-decoration: none ;
+  color: black }
+
+blockquote.epigraph {
+  margin: 2em 5em ; }
+
+dl.docutils dd {
+  margin-bottom: 0.5em }
+
+/* Uncomment (and remove this text!) to get bold-faced definition list terms
+dl.docutils dt {
+  font-weight: bold }
+*/
+
+div.abstract {
+  margin: 2em 5em }
+
+div.abstract p.topic-title {
+  font-weight: bold ;
+  text-align: center }
+
+div.admonition, div.attention, div.caution, div.danger, div.error,
+div.hint, div.important, div.note, div.tip, div.warning {
+  margin: 2em ;
+  border: medium outset ;
+  padding: 1em }
+
+div.admonition p.admonition-title, div.hint p.admonition-title,
+div.important p.admonition-title, div.note p.admonition-title,
+div.tip p.admonition-title {
+  font-weight: bold ;
+  font-family: sans-serif }
+
+div.attention p.admonition-title, div.caution p.admonition-title,
+div.danger p.admonition-title, div.error p.admonition-title,
+div.warning p.admonition-title {
+  color: red ;
+  font-weight: bold ;
+  font-family: sans-serif }
+
+/* Uncomment (and remove this text!) to get reduced vertical space in
+   compound paragraphs.
+div.compound .compound-first, div.compound .compound-middle {
+  margin-bottom: 0.5em }
+
+div.compound .compound-last, div.compound .compound-middle {
+  margin-top: 0.5em }
+*/
+
+div.dedication {
+  margin: 2em 5em ;
+  text-align: center ;
+  font-style: italic }
+
+div.dedication p.topic-title {
+  font-weight: bold ;
+  font-style: normal }
+
+div.figure {
+  margin-left: 2em ;
+  margin-right: 2em }
+
+div.footer, div.header {
+  clear: both;
+  font-size: smaller }
+
+div.line-block {
+  display: block ;
+  margin-top: 1em ;
+  margin-bottom: 1em }
+
+div.line-block div.line-block {
+  margin-top: 0 ;
+  margin-bottom: 0 ;
+  margin-left: 1.5em }
+
+div.sidebar {
+  margin: 0 0 0.5em 1em ;
+  border: medium outset ;
+  padding: 1em ;
+  background-color: #ffffee ;
+  width: 40% ;
+  float: right ;
+  clear: right }
+
+div.sidebar p.rubric {
+  font-family: sans-serif ;
+  font-size: medium }
+
+div.system-messages {
+  margin: 5em }
+
+div.system-messages h1 {
+  color: red }
+
+div.system-message {
+  border: medium outset ;
+  padding: 1em }
+
+div.system-message p.system-message-title {
+  color: red ;
+  font-weight: bold }
+
+div.topic {
+  margin: 2em }
+
+h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
+h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
+  margin-top: 0.4em }
+
+h1.title {
+  text-align: center }
+
+h2.subtitle {
+  text-align: center }
+
+hr.docutils {
+  width: 75% }
+
+img.align-left, .figure.align-left{
+  clear: left ;
+  float: left ;
+  margin-right: 1em }
+
+img.align-right, .figure.align-right {
+  clear: right ;
+  float: right ;
+  margin-left: 1em }
+
+.align-left {
+  text-align: left }
+
+.align-center {
+  clear: both ;
+  text-align: center }
+
+.align-right {
+  text-align: right }
+
+/* reset inner alignment in figures */
+div.align-right {
+  text-align: left }
+
+/* div.align-center * { */
+/*   text-align: left } */
+
+ol.simple, ul.simple {
+  margin-bottom: 1em }
+
+ol.arabic {
+  list-style: decimal }
+
+ol.loweralpha {
+  list-style: lower-alpha }
+
+ol.upperalpha {
+  list-style: upper-alpha }
+
+ol.lowerroman {
+  list-style: lower-roman }
+
+ol.upperroman {
+  list-style: upper-roman }
+
+p.attribution {
+  text-align: right ;
+  margin-left: 50% }
+
+p.caption {
+  font-style: italic }
+
+p.credits {
+  font-style: italic ;
+  font-size: smaller }
+
+p.label {
+  white-space: nowrap }
+
+p.rubric {
+  font-weight: bold ;
+  font-size: larger ;
+  color: maroon ;
+  text-align: center }
+
+p.sidebar-title {
+  font-family: sans-serif ;
+  font-weight: bold ;
+  font-size: larger }
+
+p.sidebar-subtitle {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+p.topic-title {
+  font-weight: bold }
+
+pre.address {
+  margin-bottom: 0 ;
+  margin-top: 0 ;
+  font: inherit }
+
+pre.literal-block, pre.doctest-block {
+  margin-left: 2em ;
+  margin-right: 2em }
+
+span.classifier {
+  font-family: sans-serif ;
+  font-style: oblique }
+
+span.classifier-delimiter {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+span.interpreted {
+  font-family: sans-serif }
+
+span.option {
+  white-space: nowrap }
+
+span.pre {
+  white-space: pre }
+
+span.problematic {
+  color: red }
+
+span.section-subtitle {
+  /* font-size relative to parent (h1..h6 element) */
+  font-size: 80% }
+
+table.citation {
+  border-left: solid 1px gray;
+  margin-left: 1px }
+
+table.docinfo {
+  margin: 2em 4em }
+
+table.docutils {
+  margin-top: 0.5em ;
+  margin-bottom: 0.5em }
+
+table.footnote {
+  border-left: solid 1px black;
+  margin-left: 1px }
+
+table.docutils td, table.docutils th,
+table.docinfo td, table.docinfo th {
+  padding-left: 0.5em ;
+  padding-right: 0.5em ;
+  vertical-align: top }
+
+table.docutils th.field-name, table.docinfo th.docinfo-name {
+  font-weight: bold ;
+  text-align: left ;
+  white-space: nowrap ;
+  padding-left: 0 }
+
+h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
+h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
+  font-size: 100% }
+
+ul.auto-toc {
+  list-style-type: none }
+
+</style>
+</head>
+<body>
+<div class="document" id="llvm-rs-cc-compiler-for-renderscript-language">
+<h1 class="title">llvm-rs-cc: Compiler for Renderscript language</h1>
+
+<div class="section" id="introduction">
+<h1>Introduction</h1>
+<p>llvm-rs-cc compiles a program in the Renderscript language to generate the
+following files:</p>
+<ul class="simple">
+<li>Bitcode file. Note that the bitcode here denotes the LLVM (Low-Level
+Virtual Machine) bitcode representation, which will be consumed on
+an Android device by libbcc (in
+platform/frameworks/compile/libbcc.git) to generate device-specific
+executables.</li>
+<li>Reflected APIs for Java. As a result, Android's Java developers can
+invoke those APIs from their code.</li>
+</ul>
+<p>Note that although Renderscript is C99-like, we enhance it with several
+distinct, effective features for Android programming. We will use
+some examples to illustrate these features.</p>
+<p>llvm-rs-cc is run on the host and performs many aggressive optimizations.
+As a result, libbcc on the device can be lightweight and focus on
+machine-dependent code generation for some input bitcode.</p>
+<p>llvm-rs-cc is a driver on top of libslang. The architecture of
+libslang and libbcc is depicted in the following figure:</p>
+<pre class="literal-block">
+libslang   libbcc
+    |   \   |
+    |    \  |
+ clang     llvm
+</pre>
+</div>
+<div class="section" id="usage">
+<h1>Usage</h1>
+<ul>
+<li><p class="first"><em>-o $(PRIVATE_RS_OUTPUT_DIR)/res/raw</em></p>
+<p>This option specifies the directory for outputting a .bc file.</p>
+</li>
+<li><p class="first"><em>-p $(PRIVATE_RS_OUTPUT_DIR)/src</em></p>
+<p>The option <em>-p</em> denotes the directory for outputting the reflected Java files.</p>
+</li>
+<li><p class="first"><em>-d $(PRIVATE_RS_OUTPUT_DIR)</em></p>
+<p>This option <em>-d</em> sets the directory for writing dependence information.</p>
+</li>
+<li><p class="first"><em>-MD</em></p>
+<p>Note that <em>-MD</em> will tell llvm-rs-cc to output dependence information.</p>
+</li>
+<li><p class="first"><em>-a $(EXTRA_TARGETS)</em></p>
+<p>Specifies additional target dependencies.</p>
+</li>
+</ul>
+</div>
+<div class="section" id="example-command">
+<h1>Example Command</h1>
+<p>First:</p>
+<pre class="literal-block">
+$ cd &lt;Android_Root_Directory&gt;
+</pre>
+<p>Using frameworks/base/tests/RenderScriptTests/Fountain as a simple app in both
+Java and Renderscript, we can find the following command line in the build
+log:</p>
+<pre class="literal-block">
+$ out/host/linux-x86/bin/llvm-rs-cc \
+  -o out/target/common/obj/APPS/Fountain_intermediates/src/renderscript/res/raw \
+  -p out/target/common/obj/APPS/Fountain_intermediates/src/renderscript/src \
+  -d out/target/common/obj/APPS/Fountain_intermediates/src/renderscript \
+  -a out/target/common/obj/APPS/Fountain_intermediates/src/RenderScript.stamp \
+  -MD \
+  -I frameworks/base/libs/rs/scriptc \
+  -I external/clang/lib/Headers \
+  frameworks/base/libs/rs/java/Fountain/src/com/android/fountain/fountain.rs
+</pre>
+<p>This command will generate:</p>
+<ul class="simple">
+<li><strong>fountain.bc</strong></li>
+<li><strong>ScriptC_fountain.java</strong></li>
+<li><strong>ScriptField_Point.java</strong></li>
+</ul>
+<p>The <strong>Script*.java</strong> files above will be documented below.</p>
+</div>
+<div class="section" id="example-program-fountain-rs">
+<h1>Example Program: fountain.rs</h1>
+<p>fountain.rs is in the Renderscript language, which is based on the standard
+C99. However, llvm-rs-cc goes beyond &quot;clang -std=c99&quot; and provides the
+following important features:</p>
+</div>
+<div class="section" id="pragma">
+<h1>1. Pragma</h1>
+<ul>
+<li><p class="first"><em>#pragma rs java_package_name([PACKAGE_NAME])</em></p>
+<p>The ScriptC_[SCRIPT_NAME].java has to be packaged so that Java
+developers can invoke those APIs.</p>
+<p>To do that, a Renderscript programmer should specify the package name, so
+that llvm-rs-cc knows the package expression and hence the directory
+for outputting ScriptC_[SCRIPT_NAME].java.</p>
+<p>In fountain.rs, we have:</p>
+<pre class="literal-block">
+#pragma rs java_package_name(com.android.fountain)
+</pre>
+<p>In ScriptC_fountain.java, we have:</p>
+<pre class="literal-block">
+package com.android.fountain
+</pre>
+<p>Note that the ScriptC_fountain.java will be generated inside
+./com/android/fountain/.</p>
+</li>
+<li><p class="first">#pragma version(1)</p>
+<p>This pragma is for evolving the language. Currently we are at
+version 1 of the language.</p>
+</li>
+</ul>
+</div>
+<div class="section" id="basic-reflection-export-variables-and-functions">
+<h1>2. Basic Reflection: Export Variables and Functions</h1>
+<p>llvm-rs-cc automatically exports the &quot;externalizable and defined&quot; functions and
+variables to Android's Java side. That is, scripts are accessible from
+Java.</p>
+<p>For instance, for:</p>
+<pre class="literal-block">
+int foo = 0;
+</pre>
+<p>In ScriptC_fountain.java, llvm-rs-cc will reflect the following methods:</p>
+<pre class="literal-block">
+void set_foo(int v)...
+
+int get_foo()...
+</pre>
+<p>This access takes the form of generated classes which provide access
+to the functions and global variables within a script. In summary,
+global variables and functions within a script that are not declared
+static will generate get, set, or invoke methods.  This provides a way
+to set the data within a script and call its functions.</p>
+<p>Take the addParticles function in fountain.rs as an example:</p>
+<pre class="literal-block">
+void addParticles(int rate, float x, float y, int index, bool newColor) {
+  ...
+}
+</pre>
+<p>llvm-rs-cc will genearte ScriptC_fountain.java as follows:</p>
+<pre class="literal-block">
+void invoke_addParticles(int rate, float x, float y,
+                         int index, bool newColor) {
+  ...
+}
+</pre>
+</div>
+<div class="section" id="export-user-defined-structs">
+<h1>3. Export User-Defined Structs</h1>
+<p>In fountain.rs, we have:</p>
+<pre class="literal-block">
+typedef struct __attribute__((packed, aligned(4))) Point {
+  float2 delta;
+  float2 position;
+  uchar4 color;
+} Point_t;
+
+Point_t *point;
+</pre>
+<p>llvm-rs-cc generates one ScriptField*.java file for each user-defined
+struct. In this case, llvm-rs-cc will reflect two files,
+ScriptC_fountain.java and ScriptField_Point.java.</p>
+<p>Note that when the type of an exportable variable is a structure, Renderscript
+developers should avoid using anonymous structs. This is because llvm-rs-cc
+uses the struct name to identify the file, instead of the typedef name.</p>
+<p>For the generated Java files, using ScriptC_fountain.java as an
+example we also have:</p>
+<pre class="literal-block">
+void bind_point(ScriptField_Point v)
+</pre>
+<p>This binds your object with the allocated memory.</p>
+<p>You can bind the struct(e.g., Point), using the setter and getter
+methods in ScriptField_Point.java.</p>
+<p>After binding, you can access the object with this method:</p>
+<pre class="literal-block">
+ScriptField_Point get_point()
+</pre>
+<p>In ScriptField_Point_s.java:</p>
+<pre class="literal-block">
+...
+// Copying the Item, which is the object that stores every
+// fields of struct, to the *index*\-th entry of byte array.
+//
+// In general, this method would not be invoked directly
+// but is used to implement the setter.
+void copyToArray(Item i, int index)
+
+// The setter of Item array,
+// index: the index of the Item array
+// copyNow: If true, it will be copied to the *index*\-th entry
+// of byte array.
+void set(Item i, int index, boolean copyNow)
+
+// The getter of Item array, which gets the *index*-th element
+// of byte array.
+Item get(int index)
+
+set_delta(int index, Float2 v, boolean copyNow)
+
+// The following is the individual setters and getters of
+// each field of a struct.
+public void set_delta(int index, Float2 v, boolean copyNow)
+public void set_position(int index, Float2 v, boolean copyNow)
+public void set_color(int index, Short4 v, boolean copyNow)
+public Float2 get_delta(int index)
+public Float2 get_position(int index)
+public Short4 get_color(int index)
+
+// Copying all Item array to byte array (i.e., memory allocation).
+void copyAll()
+...
+</pre>
+</div>
+<div class="section" id="summary-of-the-java-reflection-above">
+<h1>4. Summary of the Java Reflection above</h1>
+<p>This section summarizes the high-level design of Renderscript's reflection.</p>
+<ul>
+<li><p class="first">In terms of a script's global functions, they can be called from Java.
+These calls operate asynchronously and no assumptions should be made
+on whether a function called will have actually completed operation.  If it
+is necessary to wait for a function to complete, the Java application
+may call the runtime finish() method, which will wait for all the script
+threads to complete pending operations.  A few special functions can also
+exist:</p>
+<ul>
+<li><p class="first">The function <strong>init</strong> (if present) will be called once after the script
+is loaded.  This is useful to initialize data or anything else the
+script may need before it can be used.  The init function may not depend
+on globals initialized from Java as it will be called before these
+can be initialized. The function signature for init must be:</p>
+<pre class="literal-block">
+void init(void);
+</pre>
+</li>
+<li><p class="first">The function <strong>root</strong> is a special function for graphics.  This function
+will be called when a script must redraw its contents.  No
+assumptions should be made as to when this function will be
+called.  It will only be called if the script is bound as a graphics root.
+Calls to this function will be synchronized with data updates and
+other invocations from Java.  Thus the script will not change due
+to external influence in the middle of running <strong>root</strong>.  The return value
+indicates to the runtime when the function should be called again to
+redraw in the future.  A return value of 0 indicates that no
+redraw is necessary until something changes on the Java side.  Any
+positive integer indicates a time in milliseconds that the runtime should
+wait before calling root again to render another frame.  The function
+signature for a graphics root functions is as follows:</p>
+<pre class="literal-block">
+int root(void);
+</pre>
+</li>
+<li><p class="first">It is also possible to create a purely compute-based <strong>root</strong> function.
+Such a function has the following signature:</p>
+<pre class="literal-block">
+void root(const T1 *in, T2 *out, const T3 *usrData, uint32_t x, uint32_t y);
+</pre>
+<p>T1, T2, and T3 represent any supported Renderscript type.  Any parameters
+above can be omitted, although at least one of in/out must be present.
+If both in and out are present, root must only be invoked with types of
+the same exact dimensionality (i.e. matching X and Y values for dimension).
+This root function is accessible through the Renderscript language
+construct <strong>forEach</strong>.  We also reflect a Java version to access this
+function as <strong>forEach_root</strong> (for API levels of 14+).  An example of this
+can be seen in the Android SDK sample for HelloCompute.</p>
+</li>
+<li><p class="first">The function <strong>.rs.dtor</strong> is a function that is sometimes generated by
+llvm-rs-cc.  This function cleans up any global variable that contains
+(or is) a reference counted Renderscript object type (such as an
+rs_allocation, rs_font, or rs_script).  This function will be invoked
+implicitly by the Renderscript runtime during script teardown.</p>
+</li>
+</ul>
+</li>
+<li><p class="first">In terms of a script's global data, global variables can be written
+from Java.  The Java instance will cache the value or object set and
+provide return methods to retrieve this value.  If a script updates
+the value, this update will not propagate back to the Java class.
+Initializers, if present, will also initialize the cached Java value.
+This provides a convenient way to declare constants within a script and
+make them accessible to the Java runtime.  If the script declares a
+variable const, only the get methods will be generated.</p>
+<p>Globals within a script are considered local to the script.  They
+cannot be accessed by other scripts and are in effect always 'static'
+in the traditional C sense.  Static here is used to control if
+accessors are generated.  Static continues to mean <em>not
+externally visible</em> and thus prevents the generation of
+accessors.  Globals are persistent across invocations of a script and
+thus may be used to hold data from run to run.</p>
+<p>Globals of two types may be reflected into the Java class.  The first
+type is basic non-pointer types.  Types defined in rs_types.rsh may also be
+used.  For the non-pointer class, get and set methods are generated for
+Java.  Globals of single pointer types behave differently.  These may
+use more complex types.  Simple structures composed of the types in
+rs_types.rsh may also be used.  These globals generate bind points in
+Java.  If the type is a structure they also generate an appropriate
+<strong>Field</strong> class that is used to pack and unpack the contents of the
+structure.  Binding an allocation in Java effectively sets the
+pointer in the script.  Bind points marked const indicate to the
+runtime that the script will not modify the contents of an allocation.
+This may allow the runtime to make more effective use of threads.</p>
+</li>
+</ul>
+</div>
+<div class="section" id="vector-types">
+<h1>5. Vector Types</h1>
+<p>Vector types such as float2, float4, and uint4 are included to support
+vector processing in environments where the processors provide vector
+instructions.</p>
+<p>On non-vector systems the same code will continue to run but without
+the performance advantage.  Function overloading is also supported.
+This allows the runtime to support vector version of the basic math
+routines without the need for special naming.  For instance,</p>
+<ul class="simple">
+<li><em>float sin(float);</em></li>
+<li><em>float2 sin(float2);</em></li>
+<li><em>float3 sin(float3);</em></li>
+<li><em>float4 sin(float4);</em></li>
+</ul>
+</div>
+</div>
+</body>
+</html>
diff --git a/slang/README.rst b/slang/README.rst
new file mode 100644
index 0000000..972292e
--- /dev/null
+++ b/slang/README.rst
@@ -0,0 +1,343 @@
+==============================================
+llvm-rs-cc: Compiler for Renderscript language
+==============================================
+
+
+Introduction
+------------
+
+llvm-rs-cc compiles a program in the Renderscript language to generate the
+following files:
+
+* Bitcode file. Note that the bitcode here denotes the LLVM (Low-Level
+  Virtual Machine) bitcode representation, which will be consumed on
+  an Android device by libbcc (in
+  platform/frameworks/compile/libbcc.git) to generate device-specific
+  executables.
+
+* Reflected APIs for Java. As a result, Android's Java developers can
+  invoke those APIs from their code.
+
+Note that although Renderscript is C99-like, we enhance it with several
+distinct, effective features for Android programming. We will use
+some examples to illustrate these features.
+
+llvm-rs-cc is run on the host and performs many aggressive optimizations.
+As a result, libbcc on the device can be lightweight and focus on
+machine-dependent code generation for some input bitcode.
+
+llvm-rs-cc is a driver on top of libslang. The architecture of
+libslang and libbcc is depicted in the following figure::
+
+    libslang   libbcc
+        |   \   |
+        |    \  |
+     clang     llvm
+
+
+Usage
+-----
+
+* *-o $(PRIVATE_RS_OUTPUT_DIR)/res/raw*
+
+  This option specifies the directory for outputting a .bc file.
+
+* *-p $(PRIVATE_RS_OUTPUT_DIR)/src*
+
+  The option *-p* denotes the directory for outputting the reflected Java files.
+
+* *-d $(PRIVATE_RS_OUTPUT_DIR)*
+
+  This option *-d* sets the directory for writing dependence information.
+
+* *-MD*
+
+  Note that *-MD* will tell llvm-rs-cc to output dependence information.
+
+* *-a $(EXTRA_TARGETS)*
+
+  Specifies additional target dependencies.
+
+Example Command
+---------------
+
+First::
+
+  $ cd <Android_Root_Directory>
+
+Using frameworks/base/tests/RenderScriptTests/Fountain as a simple app in both
+Java and Renderscript, we can find the following command line in the build
+log::
+
+  $ out/host/linux-x86/bin/llvm-rs-cc \
+    -o out/target/common/obj/APPS/Fountain_intermediates/src/renderscript/res/raw \
+    -p out/target/common/obj/APPS/Fountain_intermediates/src/renderscript/src \
+    -d out/target/common/obj/APPS/Fountain_intermediates/src/renderscript \
+    -a out/target/common/obj/APPS/Fountain_intermediates/src/RenderScript.stamp \
+    -MD \
+    -I frameworks/base/libs/rs/scriptc \
+    -I external/clang/lib/Headers \
+    frameworks/base/libs/rs/java/Fountain/src/com/android/fountain/fountain.rs
+
+This command will generate:
+
+* **fountain.bc**
+
+* **ScriptC_fountain.java**
+
+* **ScriptField_Point.java**
+
+The **Script\*.java** files above will be documented below.
+
+
+Example Program: fountain.rs
+----------------------------
+
+fountain.rs is in the Renderscript language, which is based on the standard
+C99. However, llvm-rs-cc goes beyond "clang -std=c99" and provides the
+following important features:
+
+1. Pragma
+---------
+
+* *#pragma rs java_package_name([PACKAGE_NAME])*
+
+  The ScriptC_[SCRIPT_NAME].java has to be packaged so that Java
+  developers can invoke those APIs.
+
+  To do that, a Renderscript programmer should specify the package name, so
+  that llvm-rs-cc knows the package expression and hence the directory
+  for outputting ScriptC_[SCRIPT_NAME].java.
+
+  In fountain.rs, we have::
+
+    #pragma rs java_package_name(com.android.fountain)
+
+  In ScriptC_fountain.java, we have::
+
+    package com.android.fountain
+
+  Note that the ScriptC_fountain.java will be generated inside
+  ./com/android/fountain/.
+
+* #pragma version(1)
+
+  This pragma is for evolving the language. Currently we are at
+  version 1 of the language.
+
+
+2. Basic Reflection: Export Variables and Functions
+---------------------------------------------------
+
+llvm-rs-cc automatically exports the "externalizable and defined" functions and
+variables to Android's Java side. That is, scripts are accessible from
+Java.
+
+For instance, for::
+
+  int foo = 0;
+
+In ScriptC_fountain.java, llvm-rs-cc will reflect the following methods::
+
+  void set_foo(int v)...
+
+  int get_foo()...
+
+This access takes the form of generated classes which provide access
+to the functions and global variables within a script. In summary,
+global variables and functions within a script that are not declared
+static will generate get, set, or invoke methods.  This provides a way
+to set the data within a script and call its functions.
+
+Take the addParticles function in fountain.rs as an example::
+
+  void addParticles(int rate, float x, float y, int index, bool newColor) {
+    ...
+  }
+
+llvm-rs-cc will genearte ScriptC_fountain.java as follows::
+
+  void invoke_addParticles(int rate, float x, float y,
+                           int index, bool newColor) {
+    ...
+  }
+
+
+3. Export User-Defined Structs
+------------------------------
+
+In fountain.rs, we have::
+
+  typedef struct __attribute__((packed, aligned(4))) Point {
+    float2 delta;
+    float2 position;
+    uchar4 color;
+  } Point_t;
+
+  Point_t *point;
+
+llvm-rs-cc generates one ScriptField*.java file for each user-defined
+struct. In this case, llvm-rs-cc will reflect two files,
+ScriptC_fountain.java and ScriptField_Point.java.
+
+Note that when the type of an exportable variable is a structure, Renderscript
+developers should avoid using anonymous structs. This is because llvm-rs-cc
+uses the struct name to identify the file, instead of the typedef name.
+
+For the generated Java files, using ScriptC_fountain.java as an
+example we also have::
+
+  void bind_point(ScriptField_Point v)
+
+This binds your object with the allocated memory.
+
+You can bind the struct(e.g., Point), using the setter and getter
+methods in ScriptField_Point.java.
+
+After binding, you can access the object with this method::
+
+  ScriptField_Point get_point()
+
+In ScriptField_Point_s.java::
+
+    ...
+    // Copying the Item, which is the object that stores every
+    // fields of struct, to the *index*\-th entry of byte array.
+    //
+    // In general, this method would not be invoked directly
+    // but is used to implement the setter.
+    void copyToArray(Item i, int index)
+
+    // The setter of Item array,
+    // index: the index of the Item array
+    // copyNow: If true, it will be copied to the *index*\-th entry
+    // of byte array.
+    void set(Item i, int index, boolean copyNow)
+
+    // The getter of Item array, which gets the *index*-th element
+    // of byte array.
+    Item get(int index)
+
+    set_delta(int index, Float2 v, boolean copyNow)
+
+    // The following is the individual setters and getters of
+    // each field of a struct.
+    public void set_delta(int index, Float2 v, boolean copyNow)
+    public void set_position(int index, Float2 v, boolean copyNow)
+    public void set_color(int index, Short4 v, boolean copyNow)
+    public Float2 get_delta(int index)
+    public Float2 get_position(int index)
+    public Short4 get_color(int index)
+
+    // Copying all Item array to byte array (i.e., memory allocation).
+    void copyAll()
+    ...
+
+
+4. Summary of the Java Reflection above
+---------------------------------------
+
+This section summarizes the high-level design of Renderscript's reflection.
+
+* In terms of a script's global functions, they can be called from Java.
+  These calls operate asynchronously and no assumptions should be made
+  on whether a function called will have actually completed operation.  If it
+  is necessary to wait for a function to complete, the Java application
+  may call the runtime finish() method, which will wait for all the script
+  threads to complete pending operations.  A few special functions can also
+  exist:
+
+  * The function **init** (if present) will be called once after the script
+    is loaded.  This is useful to initialize data or anything else the
+    script may need before it can be used.  The init function may not depend
+    on globals initialized from Java as it will be called before these
+    can be initialized. The function signature for init must be::
+
+      void init(void);
+
+  * The function **root** is a special function for graphics.  This function
+    will be called when a script must redraw its contents.  No
+    assumptions should be made as to when this function will be
+    called.  It will only be called if the script is bound as a graphics root.
+    Calls to this function will be synchronized with data updates and
+    other invocations from Java.  Thus the script will not change due
+    to external influence in the middle of running **root**.  The return value
+    indicates to the runtime when the function should be called again to
+    redraw in the future.  A return value of 0 indicates that no
+    redraw is necessary until something changes on the Java side.  Any
+    positive integer indicates a time in milliseconds that the runtime should
+    wait before calling root again to render another frame.  The function
+    signature for a graphics root functions is as follows::
+
+      int root(void);
+
+  * It is also possible to create a purely compute-based **root** function.
+    Such a function has the following signature::
+
+      void root(const T1 *in, T2 *out, const T3 *usrData, uint32_t x, uint32_t y);
+
+    T1, T2, and T3 represent any supported Renderscript type.  Any parameters
+    above can be omitted, although at least one of in/out must be present.
+    If both in and out are present, root must only be invoked with types of
+    the same exact dimensionality (i.e. matching X and Y values for dimension).
+    This root function is accessible through the Renderscript language
+    construct **forEach**.  We also reflect a Java version to access this
+    function as **forEach_root** (for API levels of 14+).  An example of this
+    can be seen in the Android SDK sample for HelloCompute.
+
+  * The function **.rs.dtor** is a function that is sometimes generated by
+    llvm-rs-cc.  This function cleans up any global variable that contains
+    (or is) a reference counted Renderscript object type (such as an
+    rs_allocation, rs_font, or rs_script).  This function will be invoked
+    implicitly by the Renderscript runtime during script teardown.
+
+* In terms of a script's global data, global variables can be written
+  from Java.  The Java instance will cache the value or object set and
+  provide return methods to retrieve this value.  If a script updates
+  the value, this update will not propagate back to the Java class.
+  Initializers, if present, will also initialize the cached Java value.
+  This provides a convenient way to declare constants within a script and
+  make them accessible to the Java runtime.  If the script declares a
+  variable const, only the get methods will be generated.
+
+  Globals within a script are considered local to the script.  They
+  cannot be accessed by other scripts and are in effect always 'static'
+  in the traditional C sense.  Static here is used to control if
+  accessors are generated.  Static continues to mean *not
+  externally visible* and thus prevents the generation of
+  accessors.  Globals are persistent across invocations of a script and
+  thus may be used to hold data from run to run.
+
+  Globals of two types may be reflected into the Java class.  The first
+  type is basic non-pointer types.  Types defined in rs_types.rsh may also be
+  used.  For the non-pointer class, get and set methods are generated for
+  Java.  Globals of single pointer types behave differently.  These may
+  use more complex types.  Simple structures composed of the types in
+  rs_types.rsh may also be used.  These globals generate bind points in
+  Java.  If the type is a structure they also generate an appropriate
+  **Field** class that is used to pack and unpack the contents of the
+  structure.  Binding an allocation in Java effectively sets the
+  pointer in the script.  Bind points marked const indicate to the
+  runtime that the script will not modify the contents of an allocation.
+  This may allow the runtime to make more effective use of threads.
+
+
+5. Vector Types
+---------------
+
+Vector types such as float2, float4, and uint4 are included to support
+vector processing in environments where the processors provide vector
+instructions.
+
+On non-vector systems the same code will continue to run but without
+the performance advantage.  Function overloading is also supported.
+This allows the runtime to support vector version of the basic math
+routines without the need for special naming.  For instance,
+
+* *float sin(float);*
+
+* *float2 sin(float2);*
+
+* *float3 sin(float3);*
+
+* *float4 sin(float4);*
diff --git a/slang/RSCCOptions.td b/slang/RSCCOptions.td
new file mode 100644
index 0000000..2339cd7
--- /dev/null
+++ b/slang/RSCCOptions.td
@@ -0,0 +1,160 @@
+/*
+ * Copyright 2010-2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+//===----------------------------------------------------------------------===//
+//
+//  This file defines the options accepted by llvm-rs-cc.
+//
+//===----------------------------------------------------------------------===//
+
+// Include the common option parsing interfaces.
+include "llvm/Option/OptParser.td"
+
+//===----------------------------------------------------------------------===//
+// Target Options
+//===----------------------------------------------------------------------===//
+
+def target_api : Separate<["-"], "target-api">,
+  HelpText<"Specify target API level (e.g. 14)">;
+def target_api_EQ : Joined<["-"], "target-api=">, Alias<target_api>;
+
+//===----------------------------------------------------------------------===//
+// Header Search Options
+//===----------------------------------------------------------------------===//
+
+def I : JoinedOrSeparate<["-"], "I">, MetaVarName<"<directory>">,
+  HelpText<"Add directory to include search path">;
+def _I : Separate<["-", "--"], "include-path">, MetaVarName<"<directory>">, Alias<I>;
+
+//===----------------------------------------------------------------------===//
+// Frontend Options
+//===----------------------------------------------------------------------===//
+
+def o : Separate<["-"], "o">, MetaVarName<"<directory>">,
+  HelpText<"Specify output directory">;
+
+def Output_Type_Group : OptionGroup<"<output type group>">;
+let Group = Output_Type_Group in {
+
+def emit_asm : Flag<["-"], "emit-asm">,
+  HelpText<"Emit target assembly files">;
+def _emit_asm : Flag<["-"], "S">, Alias<emit_asm>;
+def emit_llvm : Flag<["-"], "emit-llvm">,
+  HelpText<"Build ASTs then convert to LLVM, emit .ll file">;
+def emit_bc : Flag<["-"], "emit-bc">,
+  HelpText<"Build ASTs then convert to LLVM, emit .bc file">;
+def emit_nothing : Flag<["-"], "emit-nothing">,
+  HelpText<"Build ASTs then convert to LLVM, but emit nothing">;
+}
+
+def m32 : Flag<["-"], "m32">, HelpText<"Emit 32-bit code (only for C++, unless eng build)">;
+def m64 : Flag<["-"], "m64">, HelpText<"Emit 64-bit code (only for C++, unless eng build)">;
+
+def emit_g : Flag<["-"], "g">,
+  HelpText<"Emit LLVM Debug Metadata">;
+
+def optimization_level : JoinedOrSeparate<["-"], "O">, MetaVarName<"<optimization-level>">,
+  HelpText<"<optimization-level> can be one of '0' or '3' (default)">;
+
+def allow_rs_prefix : Flag<["-"], "allow-rs-prefix">,
+  HelpText<"Allow user-defined function prefixed with 'rs'">;
+
+def java_reflection_path_base : Separate<["-"], "java-reflection-path-base">,
+  MetaVarName<"<directory>">,
+  HelpText<"Base directory for output reflected Java files">;
+def _java_reflection_path_base : Separate<["-"], "p">,
+  Alias<java_reflection_path_base>;
+def java_reflection_package_name : Separate<["-"], "java-reflection-package-name">,
+  HelpText<"Specify the package name that reflected Java files belong to">;
+def _java_reflection_package_name : Separate<["-"], "j">,
+  Alias<java_reflection_package_name>;
+
+def bitcode_storage : Separate<["-"], "bitcode-storage">,
+  MetaVarName<"<value>">, HelpText<"<value> should be 'ar' or 'jc'">;
+def _bitcode_storage : Separate<["-"], "s">, Alias<bitcode_storage>;
+
+def rs_package_name : Separate<["-"], "rs-package-name">,
+  MetaVarName<"<package_name>">,
+  HelpText<"package name for referencing RS classes">;
+def rs_package_name_EQ : Joined<["-"], "rs-package-name=">, Alias<rs_package_name>;
+
+def W : Joined<["-"], "W">, HelpText<"Enable the specified warning">;
+def w : Flag<["-"], "w">, HelpText<"Suppress all warnings">;
+
+//===----------------------------------------------------------------------===//
+// Dependency Output Options
+//===----------------------------------------------------------------------===//
+
+def M_Group : OptionGroup<"M group>">;
+let Group = M_Group in {
+
+  def MD : Flag<["-"], "MD">, HelpText<"Emit .d dependency files">;
+  def MP : Flag<["-"], "MP">, HelpText<"Also emit phony target for dependency files">;
+
+  def M : Flag<["-"], "M">;
+  def emit_dep : Flag<["-"], "emit-dep">, Alias<M>;
+}
+
+def output_dep_dir : Separate<["-"], "output-dep-dir">, MetaVarName<"<directory>">,
+  HelpText<"Specify output directory for dependencies output">;
+def _output_dep_dir : Separate<["-"], "d">, Alias<output_dep_dir>;
+
+def additional_dep_target: Separate<["-"], "additional-dep-target">,
+  HelpText<"Additional targets to show up in dependencies output">;
+def _additional_dep_target : Separate<["-"], "a">, Alias<additional_dep_target>;
+
+//===----------------------------------------------------------------------===//
+// Reflection Options
+//===----------------------------------------------------------------------===//
+
+def reflect_cpp : Flag<["-"], "reflect-c++">,
+  HelpText<"Reflect C++ classes">;
+
+//===----------------------------------------------------------------------===//
+// Diagnostic Options
+//===----------------------------------------------------------------------===//
+
+def ast_print : Flag<["-"], "ast-print">,
+  HelpText<"Print clang AST prior to llvm IR generation">;
+
+def debug : Flag<["-"], "debug">,
+  HelpText<"Enable debug output">;
+
+def print_after_all : Flag<["-"], "print-after-all">,
+  HelpText<"Print llvm IR after each pass">;
+def print_before_all : Flag<["-"], "print-before-all">,
+  HelpText<"Print llvm IR before each pass">;
+
+//===----------------------------------------------------------------------===//
+// Misc Options
+//===----------------------------------------------------------------------===//
+
+def verbose : Flag<["-"], "v">,
+  HelpText<"Display verbose information during the compilation">;
+def _verbose : Flag<["-"], "verbose">, Alias<verbose>;
+def __verbose : Flag<["--"], "verbose">, Alias<verbose>;
+
+def help : Flag<["-"], "help">,
+  HelpText<"Print this help text">;
+def _help : Flag<["--"], "help">, Alias<help>;
+def __help : Flag<["-"], "h">, Alias<help>;
+
+def version : Flag<["-"], "version">,
+  HelpText<"Print the assembler version">;
+def _version : Flag<["--"], "version">, Alias<version>;
+
+// Compatible with old slang
+def no_link : Flag<["-"], "no-link">;  // currently no effect
diff --git a/slang/legacy_bitcode.h b/slang/legacy_bitcode.h
new file mode 100644
index 0000000..5d45a1b
--- /dev/null
+++ b/slang/legacy_bitcode.h
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2013, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "llvm/IR/Attributes.h"
+
+// Shared functionality for legacy function attribute encoding.
+static inline uint64_t encodeLLVMAttributesForBitcode(llvm::AttributeSet A,
+                                                      unsigned i) {
+  uint64_t EncodedAttrs = A.Raw(i) & 0xffff;
+  if (A.hasAttribute(i, llvm::Attribute::Alignment)) {
+    // The alignment is stored as an actual power of 2 value (instead of the
+    // compressed log2 form). It occupies bits 31-16 inclusive.
+    EncodedAttrs |= (A.getParamAlignment(i) << 16);
+  }
+  // There are only 12 remaining attributes (bits 21-32), hence our 0xfff mask.
+  EncodedAttrs |= (A.Raw(i) & (0xfffull << 21))  << 11;
+  return EncodedAttrs;
+}
+
diff --git a/slang/lit-tests/P_alloc_in_struct/alloc_in_struct.rs b/slang/lit-tests/P_alloc_in_struct/alloc_in_struct.rs
new file mode 100644
index 0000000..24742fb
--- /dev/null
+++ b/slang/lit-tests/P_alloc_in_struct/alloc_in_struct.rs
@@ -0,0 +1,11 @@
+// RUN: %Slang %s
+// RUN: %rs-filecheck-wrapper %s
+// CHECK: define void @.rs.dtor()
+
+#pragma version(1)
+#pragma rs java_package_name(alloc_in_struct)
+
+struct s {
+    rs_allocation a;
+} myStruct;
+
diff --git a/slang/lit-tests/P_array_init/array_init.rs b/slang/lit-tests/P_array_init/array_init.rs
new file mode 100644
index 0000000..f4465db
--- /dev/null
+++ b/slang/lit-tests/P_array_init/array_init.rs
@@ -0,0 +1,30 @@
+// RUN: %Slang %s
+// RUN: %rs-filecheck-wrapper %s
+// CHECK: @ic = constant i32 99, align 4
+// CHECK: @ica = global [2 x i32] [i32 99, i32 1000], align 4
+// CHECK: @fa = global [4 x float] [float 1.000000e+00, float 0x4023FFF2E0000000, float 0.000000e+00, float 0.000000e+00], align 4
+// CHECK: @da = global [2 x double] [double 7.000000e+00, double 8.888880e+00], align 8
+// CHECK: @ca = global [4 x i8] c"a\07bc", align 1
+// CHECK: @sa = global [4 x i16] [i16 1, i16 1, i16 2, i16 3], align 2
+// CHECK: @ia = global [4 x i32] [i32 5, i32 8, i32 0, i32 0], align 4
+// CHECK: @la = global [2 x i64] [i64 13, i64 21], align 8
+// CHECK: @lla = global [4 x i64] [i64 34, i64 0, i64 0, i64 0], align 8
+// CHECK: @ba = global [3 x i8] c"\01\00\00", align 1
+
+
+#pragma version(1)
+#pragma rs java_package_name(array_init)
+
+const int ic = 99;
+
+int ica[2] = {ic, 1000};
+
+float fa[4] = {1.0, 9.9999f};
+double da[2] = {7.0, 8.88888};
+char ca[4] = {'a', 7, 'b', 'c'};
+short sa[4] = {1, 1, 2, 3};
+int ia[4] = {5, 8};
+long la[2] = {13, 21};
+long long lla[4] = {34};
+bool ba[3] = {true, false};
+
diff --git a/slang/lit-tests/P_compute/compute.rs b/slang/lit-tests/P_compute/compute.rs
new file mode 100644
index 0000000..49405b8
--- /dev/null
+++ b/slang/lit-tests/P_compute/compute.rs
@@ -0,0 +1,18 @@
+// RUN: %Slang %s
+// RUN: %rs-filecheck-wrapper %s
+// CHECK: define void @root(
+// CHECK: define void @foo(
+// CHECK: define void @.helper_bar(
+
+#pragma version(1)
+#pragma rs java_package_name(compute)
+
+void root(const int *ain, int *aout, const void *usrData,
+          uint32_t x, uint32_t y) {
+}
+
+void bar(int i, float f) {
+}
+
+void foo (int *p) {
+}
diff --git a/slang/lit-tests/P_ref_count/ref_count.rs b/slang/lit-tests/P_ref_count/ref_count.rs
new file mode 100644
index 0000000..0f5d612
--- /dev/null
+++ b/slang/lit-tests/P_ref_count/ref_count.rs
@@ -0,0 +1,21 @@
+// RUN: %Slang %s
+// RUN: %rs-filecheck-wrapper %s
+// CHECK: call void @_Z13rsClearObjectP10rs_element(%struct.rs_element{{.*}}* nonnull %.rs.tmp{{[0-9]+}})
+// CHECK: call void @_Z11rsSetObjectP10rs_elementS_(%struct.rs_element{{.*}}* nonnull %.rs.retval{{[0-9]+}}, {{.*}})
+
+#pragma version(1)
+#pragma rs java_package_name(ref_count)
+
+static rs_element bar() {
+  rs_element x = {0};
+  return x;
+}
+
+void entrypoint() {
+  rs_element e = bar();
+  if (rsIsObject(e)) {
+    rsDebug("good object", 0);
+  }
+}
+
+
diff --git a/slang/lit-tests/README b/slang/lit-tests/README
new file mode 100644
index 0000000..78fea67
--- /dev/null
+++ b/slang/lit-tests/README
@@ -0,0 +1,42 @@
+
+Summary
+=======
+This directory contains tests for Slang that use the 'llvm-lit' testing tool.
+Each testcase is a separate .rs file, and comments inside the testcase are
+used to verify certain strings are present in the output bitcode files.
+
+Prerequisites
+=============
+To run the tests, you must have the android build environment variables
+set (i.e. source build/envsetup.sh; lunch). You must also have on your path:
+- Android version of llvm-lit (currently in libbcc/tests/debuginfo)
+- FileCheck (utility from llvm)
+- llvm-rs-cc (slang frontend compiler)
+
+If you are unable to run the tests, try using the "--debug" option to llvm-lit.
+
+When debugging failures, the "-v" option will print to stdout the details of
+the failure. Note that tests marked as "Expected Fail" (XFAIL) will not print
+failure information, even with -v.
+
+Customizing
+===========
+The tools lit and FileCheck are fairly flexible, and could be used to validate
+more than just emitted bitcode. For example, with some changes to the testcases
+and the helper shell-script rs-filecheck-wrapper.sh, it should be possible to
+write tests that verify the emitted Java code.
+
+Running
+=======
+To execute all the tests from this directory, use the Android llvm-lit tool
+from libbcc:
+$ ../../libbcc/tests/debuginfo/llvm-lit .
+
+The tool can be run from any directory.
+-j controls the number of parallel test executions
+-v enables additional verbosity (useful when examining unexpected failures)
+
+Adding new tests
+================
+To add new tests, just add .rs files to a test directory with similar
+RUN/CHECK directives in comments as the existing tests.
diff --git a/slang/lit-tests/bitcode_wrapper/bitcode_wrapper_test.ll b/slang/lit-tests/bitcode_wrapper/bitcode_wrapper_test.ll
new file mode 100644
index 0000000..77e32c0
--- /dev/null
+++ b/slang/lit-tests/bitcode_wrapper/bitcode_wrapper_test.ll
@@ -0,0 +1,51 @@
+; This test assembles this file to bitcode with all supported target
+; API versions, then checks that the bitcode file was generated and
+; has the right magic number.
+
+; RUN: %llvm-rs-as -target-api 11 %s -o %t11
+; RUN: xxd -ps -l 4 %t11 | FileCheck %s
+; RUN: %llvm-rs-as -target-api 12 %s -o %t12
+; RUN: xxd -ps -l 4 %t12 | FileCheck %s
+; RUN: %llvm-rs-as -target-api 13 %s -o %t13
+; RUN: xxd -ps -l 4 %t13 | FileCheck %s
+; RUN: %llvm-rs-as -target-api 14 %s -o %t14
+; RUN: xxd -ps -l 4 %t14 | FileCheck %s
+; RUN: %llvm-rs-as -target-api 15 %s -o %t15
+; RUN: xxd -ps -l 4 %t15 | FileCheck %s
+; RUN: %llvm-rs-as -target-api 16 %s -o %t16
+; RUN: xxd -ps -l 4 %t16 | FileCheck %s
+; RUN: %llvm-rs-as -target-api 17 %s -o %t17
+; RUN: xxd -ps -l 4 %t17 | FileCheck %s
+; RUN: %llvm-rs-as -target-api 18 %s -o %t18
+; RUN: xxd -ps -l 4 %t18 | FileCheck %s
+; RUN: %llvm-rs-as -target-api 19 %s -o %t19
+; RUN: xxd -ps -l 4 %t19 | FileCheck %s
+; RUN: %llvm-rs-as -target-api 20 %s -o %t20
+; RUN: xxd -ps -l 4 %t20 | FileCheck %s
+; RUN: %llvm-rs-as -target-api 21 %s -o %t21
+; RUN: xxd -ps -l 4 %t21 | FileCheck %s
+; RUN: %llvm-rs-as -target-api 22 %s -o %t22
+; RUN: xxd -ps -l 4 %t22 | FileCheck %s
+; RUN: %llvm-rs-as -target-api 23 %s -o %t23
+; RUN: xxd -ps -l 4 %t23 | FileCheck %s
+
+; RUN: %llvm-rs-as -target-api 0 %s -o %t0
+; RUN: xxd -ps -l 4 %t0 | FileCheck %s
+
+; Check for the magic number.
+
+; CHECK: dec0170b
+
+; ModuleID = 'kernel.bc'
+target datalayout = "e-p:32:32-i64:64-v128:64:128-n32-S64"
+target triple = "armv7-none-linux-gnueabi"
+
+!llvm.module.flags = !{!0, !1}
+!llvm.ident = !{!2}
+!\23pragma = !{!3, !4}
+
+!0 = !{i32 1, !"wchar_size", i32 4}
+!1 = !{i32 1, !"min_enum_size", i32 4}
+!2 = !{!"clang version 3.6 "}
+!3 = !{!"version", !"1"}
+!4 = !{!"java_package_name", !"foo"}
diff --git a/slang/lit-tests/debug/debug_disabled.rs b/slang/lit-tests/debug/debug_disabled.rs
new file mode 100644
index 0000000..d3ddd57
--- /dev/null
+++ b/slang/lit-tests/debug/debug_disabled.rs
@@ -0,0 +1,10 @@
+// RUN: %Slang %s
+// RUN: %rs-filecheck-wrapper %s
+// CHECK-NOT: DILocation
+
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void root(const int *ain, int *aout, const void *usrData,
+          uint32_t x, uint32_t y) {
+}
diff --git a/slang/lit-tests/debug/debug_enabled.rs b/slang/lit-tests/debug/debug_enabled.rs
new file mode 100644
index 0000000..7f2856a
--- /dev/null
+++ b/slang/lit-tests/debug/debug_enabled.rs
@@ -0,0 +1,10 @@
+// RUN: %Slang -g %s
+// RUN: %rs-filecheck-wrapper %s
+// CHECK: DILocation
+
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void root(const int *ain, int *aout, const void *usrData,
+          uint32_t x, uint32_t y) {
+}
diff --git a/slang/lit-tests/lit.cfg b/slang/lit-tests/lit.cfg
new file mode 100644
index 0000000..7d14bc8
--- /dev/null
+++ b/slang/lit-tests/lit.cfg
@@ -0,0 +1,74 @@
+# -*- Python -*-
+
+# Configuration file for the 'lit' test runner.
+
+# name: The name of this test suite.
+config.name = 'slang_lit_tests'
+
+# suffixes: A list of file extensions to treat as test files.
+config.suffixes = ['.rs', '.ll']
+
+# testFormat: The test format to use to interpret tests.
+import lit.formats
+config.test_format = lit.formats.ShTest()
+
+# Get the base build directory for the android source tree from environment.
+config.base_path = os.getenv('ANDROID_BUILD_TOP')
+
+# test_source_root: The path where tests are located (default is the test suite
+# root).
+config.test_source_root = None
+
+# test_exec_root: The path where tests are located (default is the test suite
+# root).
+config.test_exec_root = os.path.join(config.base_path, 'out', 'tests', 'slang', 'lit-tests')
+
+# target_triple: Used by ShTest and TclTest formats for XFAIL checks.
+config.target_triple = 'slang'
+
+def inferTool(binary_name, env_var, PATH):
+    # Determine which tool to use.
+    tool = os.getenv(env_var)
+
+    # If the user set the overriding environment variable, use it
+    if tool and os.path.isfile(tool):
+        return tool
+
+    # Otherwise look in the path.
+    import lit.util
+    tool = lit.util.which(binary_name, PATH)
+
+    if not tool:
+        lit_config.fatal("couldn't find " + binary_name + " program in " + PATH + " , try setting "
+                         + env_var + " in your environment")
+
+    return os.path.abspath(tool)
+
+config.slang = inferTool('llvm-rs-cc', 'SLANG', os.path.join(os.getenv('ANDROID_HOST_OUT'), 'bin')).replace('\\', '/')
+config.llvm_rs_as = inferTool('llvm-rs-as', 'LLVM_RS_AS', os.path.join(os.getenv('ANDROID_HOST_OUT'), 'bin')).replace('\\', '/')
+
+config.filecheck = inferTool('FileCheck', 'FILECHECK', config.environment['PATH'])
+config.rs_filecheck_wrapper = inferTool('rs-filecheck-wrapper.sh', 'RS_FILECHECK_WRAPPER', os.path.join(config.base_path, 'frameworks', 'compile', 'slang', 'lit-tests'))
+config.scriptc_filecheck_wrapper = inferTool('scriptc-filecheck-wrapper.sh', 'SCRIPTC_FILECHECK_WRAPPER', os.path.join(config.base_path, 'frameworks', 'compile', 'slang', 'lit-tests'))
+
+# Use most up-to-date headers for includes.
+config.slang_includes = "-I " + os.path.join(config.base_path, 'frameworks', 'rs', 'scriptc') + " " \
+                      + "-I " + os.path.join(config.base_path, 'external', 'clang', 'lib', 'Headers')
+
+config.slang_options = "-emit-llvm -o " + config.test_exec_root \
+                     + " -output-dep-dir " + config.test_exec_root \
+                     + " -java-reflection-path-base " + config.test_exec_root
+
+if not lit_config.quiet:
+    lit_config.note('using slang: %r' % config.slang)
+    lit_config.note('using llvm-rs-as: %r' % config.llvm_rs_as)
+    lit_config.note('using FileCheck: %r' % config.filecheck)
+    lit_config.note('using rs-filecheck-wrapper.sh: %r' % config.rs_filecheck_wrapper)
+    lit_config.note('using output directory: %r' % config.test_exec_root)
+
+# Tools configuration substitutions
+config.substitutions.append( ('%Slang', ' ' + config.slang + ' ' + config.slang_includes + ' ' + config.slang_options ) )
+config.substitutions.append( ('%llvm-rs-as', config.llvm_rs_as) )
+config.substitutions.append( ('%rs-filecheck-wrapper', ' ' + config.rs_filecheck_wrapper + ' ' + config.test_exec_root + ' ' + config.filecheck + ' ') )
+config.substitutions.append( ('%scriptc-filecheck-wrapper', ' ' + config.scriptc_filecheck_wrapper + ' --output=' + config.test_exec_root + ' --filecheck=' + config.filecheck + ' ') )
+lit_config.note(config.substitutions)
diff --git a/slang/lit-tests/opt/locals_opt_0.rs b/slang/lit-tests/opt/locals_opt_0.rs
new file mode 100644
index 0000000..1c1f7de
--- /dev/null
+++ b/slang/lit-tests/opt/locals_opt_0.rs
@@ -0,0 +1,45 @@
+// RUN: %Slang -O 0 %s
+// RUN: %rs-filecheck-wrapper %s
+// CHECK: define internal i32 @main(
+// CHECK: %f = alloca float,
+// CHECK: %pf = alloca float*,
+// CHECK: %ppn = alloca i32**,
+
+struct float_struct {
+  float f;
+  float f2[2];
+} compound_float;
+
+static
+int main(int argc, char* argv[])
+{
+  float f = 0.f;
+  float *pf = &f;
+
+  double d[2][2] = {{0, 1}, {2, 3.0}};
+  struct float_struct s;
+
+  unsigned short us = -1;
+  const unsigned long l = (unsigned long) -1.0e8f;
+
+  {
+    int** ppn = 0;
+    if (ppn) {
+      return -1;
+    }
+  }
+
+  s.f = 10e-4f;
+  s.f2[0] = 1e4f;
+  s.f2[1] = 100.5f;
+
+  double result = pf[0] * d[1][1] * s.f * us * l;
+  return (result == 0 ? 0 : -1);
+}
+
+void the_main() {
+  main(0, 0);
+}
+
+#pragma version(1)
+#pragma rs java_package_name(foo)
diff --git a/slang/lit-tests/opt/locals_opt_3.rs b/slang/lit-tests/opt/locals_opt_3.rs
new file mode 100644
index 0000000..e90a538
--- /dev/null
+++ b/slang/lit-tests/opt/locals_opt_3.rs
@@ -0,0 +1,45 @@
+// RUN: %Slang -O 3 %s
+// RUN: %rs-filecheck-wrapper %s
+// CHECK-NOT: define internal i32 @main(
+// CHECK-NOT: %f = alloca float,
+// CHECK-NOT: %pf = alloca float*,
+// CHECK-NOT: %ppn = alloca i32**,
+
+struct float_struct {
+  float f;
+  float f2[2];
+} compound_float;
+
+static
+int main(int argc, char* argv[])
+{
+  float f = 0.f;
+  float *pf = &f;
+
+  double d[2][2] = {{0, 1}, {2, 3.0}};
+  struct float_struct s;
+
+  unsigned short us = -1;
+  const unsigned long l = (unsigned long) -1.0e8f;
+
+  {
+    int** ppn = 0;
+    if (ppn) {
+      return -1;
+    }
+  }
+
+  s.f = 10e-4f;
+  s.f2[0] = 1e4f;
+  s.f2[1] = 100.5f;
+
+  double result = pf[0] * d[1][1] * s.f * us * l;
+  return (result == 0 ? 0 : -1);
+}
+
+void the_main() {
+  main(0, 0);
+}
+
+#pragma version(1)
+#pragma rs java_package_name(foo)
diff --git a/slang/lit-tests/opt/locals_opt_default.rs b/slang/lit-tests/opt/locals_opt_default.rs
new file mode 100644
index 0000000..f491956
--- /dev/null
+++ b/slang/lit-tests/opt/locals_opt_default.rs
@@ -0,0 +1,48 @@
+// RUN: %Slang %s
+// RUN: %rs-filecheck-wrapper %s
+// CHECK-NOT: define internal i32 @main(
+// CHECK-NOT: %f = alloca float,
+// CHECK-NOT: %pf = alloca float*,
+// CHECK-NOT: %ppn = alloca i32**,
+
+// This test case should behave identically to locals_opt_3.rs.
+
+struct float_struct {
+  float f;
+  float f2[2];
+} compound_float;
+
+
+static
+int main(int argc, char* argv[])
+{
+  float f = 0.f;
+  float *pf = &f;
+
+  double d[2][2] = {{0, 1}, {2, 3.0}};
+  struct float_struct s;
+
+  unsigned short us = -1;
+  const unsigned long l = (unsigned long) -1.0e8f;
+
+  {
+    int** ppn = 0;
+    if (ppn) {
+      return -1;
+    }
+  }
+
+  s.f = 10e-4f;
+  s.f2[0] = 1e4f;
+  s.f2[1] = 100.5f;
+
+  double result = pf[0] * d[1][1] * s.f * us * l;
+  return (result == 0 ? 0 : -1);
+}
+
+void the_main() {
+  main(0, 0);
+}
+
+#pragma version(1)
+#pragma rs java_package_name(foo)
diff --git a/slang/lit-tests/rs-filecheck-wrapper.sh b/slang/lit-tests/rs-filecheck-wrapper.sh
new file mode 100755
index 0000000..8f6d718
--- /dev/null
+++ b/slang/lit-tests/rs-filecheck-wrapper.sh
@@ -0,0 +1,14 @@
+#!/bin/bash -e
+
+# RS Invocation script to FileCheck
+# Usage: rs-filecheck-wrapper.sh <output-directory> <path-to-FileCheck> <source>
+
+OUTDIR=$1
+FILECHECK=$2
+SOURCEFILE=$3
+
+FILECHECK_INPUTFILE=`basename $SOURCEFILE | sed 's/\.rs\$/.ll/'`
+
+# This runs FileCheck on both the 32 bit and the 64 bit bitcode files.
+$FILECHECK -input-file $OUTDIR/bc32/$FILECHECK_INPUTFILE $SOURCEFILE
+$FILECHECK -input-file $OUTDIR/bc64/$FILECHECK_INPUTFILE $SOURCEFILE
diff --git a/slang/lit-tests/run-lit-tests.sh b/slang/lit-tests/run-lit-tests.sh
new file mode 100755
index 0000000..28a9696
--- /dev/null
+++ b/slang/lit-tests/run-lit-tests.sh
@@ -0,0 +1,6 @@
+#!/bin/bash -e
+
+LIT_PATH=$ANDROID_BUILD_TOP/frameworks/compile/libbcc/tests/debuginfo/llvm-lit
+TESTS=$ANDROID_BUILD_TOP/frameworks/compile/slang/lit-tests
+
+$LIT_PATH $TESTS $@
diff --git a/slang/lit-tests/scriptc-filecheck-wrapper.sh b/slang/lit-tests/scriptc-filecheck-wrapper.sh
new file mode 100755
index 0000000..7e16872
--- /dev/null
+++ b/slang/lit-tests/scriptc-filecheck-wrapper.sh
@@ -0,0 +1,76 @@
+#!/bin/bash -e
+
+# RS Invocation script to FileCheck, used to check generated Java
+# files or C++ files. This assumes that the .rs source file has the
+# Java package name "foo".
+
+print_help() {
+  help_str="Usage: %s --output=<output-dir> \
+--filecheck=<path-to-filecheck> \
+--lang=[Java/C++] \
+<.rs file>\n"
+
+  printf "$help_str" $0
+}
+
+for arg in "$@"
+do
+  case $arg in
+  --output=*)
+    outdir="${arg#*=}"
+    ;;
+  --filecheck*)
+    filecheck="${arg#*=}"
+    ;;
+  --lang*)
+    lang="${arg#*=}"
+    ;;
+  --help)
+    print_help
+    exit 0
+    ;;
+  *)
+    rsfile="$arg"
+    ;;
+  esac
+done
+
+if [[ (-z $outdir) || (-z $filecheck) || (-z $rsfile) ]]
+then
+  print_help
+  exit 1
+fi
+
+if [[ ! -f $rsfile ]]
+then
+  echo "Input file $rsfile doesn't exist"
+  exit 1
+fi
+
+rsfile_basename=$(basename "$rsfile")
+
+if [[ $lang == "Java" ]]
+then
+  filecheck_inputfile=foo/ScriptC_${rsfile_basename%.*}.java
+elif [[ $lang == "C++" ]]
+then
+  filecheck_inputfile=ScriptC_${rsfile_basename%.*}.h
+else
+  echo Unknown language "$lang"
+  print_help
+  exit 1
+fi
+
+if [[ ! -f $filecheck ]]
+then
+  echo "No file at supplied FileCheck path $filecheck"
+  exit 1
+fi
+
+if [[ ! -f $outdir/$filecheck_inputfile ]]
+then
+  echo "Input file $outdir/$filecheck_inputfile doesn't exist"
+  exit 1
+fi
+
+"$filecheck" -input-file "$outdir"/$filecheck_inputfile "$rsfile"
diff --git a/slang/llvm-rs-as.cpp b/slang/llvm-rs-as.cpp
new file mode 100644
index 0000000..5f3a901
--- /dev/null
+++ b/slang/llvm-rs-as.cpp
@@ -0,0 +1,149 @@
+//===--- llvm-as.cpp - The low-level LLVM assembler -----------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+//  This utility may be invoked in the following manner:
+//   llvm-as --help         - Output information about command line switches
+//   llvm-as [options]      - Read LLVM asm from stdin, write bitcode to stdout
+//   llvm-as [options] x.ll - Read LLVM asm from the x.ll file, write bitcode
+//                            to the x.bc file.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/Verifier.h"
+#include "llvm/AsmParser/Parser.h"
+#include "llvm/Bitcode/ReaderWriter.h"
+#include "llvm/IR/Module.h"
+#include "llvm/Support/CommandLine.h"
+#include "llvm/Support/FileSystem.h"
+#include "llvm/Support/ManagedStatic.h"
+#include "llvm/Support/PrettyStackTrace.h"
+#include "llvm/Support/Signals.h"
+#include "llvm/Support/SourceMgr.h"
+#include "llvm/Support/SystemUtils.h"
+#include "llvm/Support/ToolOutputFile.h"
+
+#include "slang_bitcode_gen.h"
+#include "slang_version.h"
+
+#include <memory>
+using namespace llvm;
+
+static cl::opt<std::string>
+InputFilename(cl::Positional, cl::desc("<input .llvm file>"), cl::init("-"));
+
+static cl::opt<std::string>
+OutputFilename("o", cl::desc("Override output filename"),
+               cl::value_desc("filename"));
+
+static cl::opt<bool>
+Force("f", cl::desc("Enable binary output on terminals"));
+
+static cl::opt<bool>
+DisableOutput("disable-output", cl::desc("Disable output"), cl::init(false));
+
+static cl::opt<uint32_t>
+TargetAPI("target-api", cl::desc("Specify RenderScript target API version "
+                                 "(0 = development API) (default is 0)"),
+          cl::init(0));
+
+static cl::opt<bool>
+DumpAsm("d", cl::desc("Print assembly as parsed"), cl::Hidden);
+
+static cl::opt<bool>
+DisableVerify("disable-verify", cl::Hidden,
+              cl::desc("Do not run verifier on input LLVM (dangerous!)"));
+
+
+static void WriteOutputFile(const Module *M, uint32_t ModuleTargetAPI) {
+  // Infer the output filename if needed.
+  if (OutputFilename.empty()) {
+    if (InputFilename == "-") {
+      OutputFilename = "-";
+    } else {
+      std::string IFN = InputFilename;
+      int Len = IFN.length();
+      if (IFN[Len-3] == '.' && IFN[Len-2] == 'l' && IFN[Len-1] == 'l') {
+        // Source ends in .ll
+        OutputFilename = std::string(IFN.begin(), IFN.end()-3);
+      } else {
+        OutputFilename = IFN;   // Append a .bc to it
+      }
+      OutputFilename += ".bc";
+    }
+  }
+
+  std::error_code EC;
+  std::unique_ptr<tool_output_file> Out
+  (new tool_output_file(OutputFilename.c_str(), EC, llvm::sys::fs::F_None));
+  if (EC) {
+    // TODO(srhines): This isn't actually very specific and needs cleanup.
+    errs() << EC.message() << '\n';
+    exit(1);
+  }
+
+  if (Force || !CheckBitcodeOutputToConsole(Out->os(), true)) {
+    slang::writeBitcode(Out->os(), *M,
+        /* TargetAPI = */ ModuleTargetAPI,
+        /* OptimizationLevel = */ 3,
+        /* GenerateDebugInfo = */ false);
+
+    if (!Out->os().has_error()) {
+      // Declare success.
+      Out->keep();
+    }
+  }
+}
+
+int main(int argc, char **argv) {
+  // Print a stack trace if we signal out.
+  sys::PrintStackTraceOnErrorSignal();
+  PrettyStackTraceProgram X(argc, argv);
+  LLVMContext &Context = getGlobalContext();
+  llvm_shutdown_obj Y;  // Call llvm_shutdown() on exit.
+  cl::ParseCommandLineOptions(argc, argv, "llvm .ll -> .bc assembler\n");
+
+  // Check target API.
+  uint32_t ActualTargetAPI = (TargetAPI == 0) ? RS_DEVELOPMENT_API : TargetAPI;
+
+  if (ActualTargetAPI != RS_DEVELOPMENT_API &&
+      (ActualTargetAPI < SLANG_MINIMUM_TARGET_API ||
+       ActualTargetAPI > SLANG_MAXIMUM_TARGET_API)) {
+    errs() << "target API level '" << ActualTargetAPI << "' is out of range "
+           << "('" << SLANG_MINIMUM_TARGET_API << "' - '"
+           << SLANG_MAXIMUM_TARGET_API << "')\n";
+    return 1;
+  }
+
+  // Parse the file now...
+  SMDiagnostic Err;
+  std::unique_ptr<Module> M(parseAssemblyFile(InputFilename, Err, Context));
+  if (M.get() == 0) {
+    Err.print(argv[0], errs());
+    return 1;
+  }
+
+  if (!DisableVerify) {
+    std::string Err;
+    raw_string_ostream stream(Err);
+    if (verifyModule(*M.get(), &stream)) {
+      errs() << argv[0]
+             << ": assembly parsed, but does not verify as correct!\n";
+      errs() << Err;
+      return 1;
+    }
+  }
+
+  if (DumpAsm) errs() << "Here's the assembly:\n" << *M.get();
+
+  if (!DisableOutput)
+    WriteOutputFile(M.get(), ActualTargetAPI);
+
+  return 0;
+}
diff --git a/slang/llvm-rs-cc.cpp b/slang/llvm-rs-cc.cpp
new file mode 100644
index 0000000..5da6315
--- /dev/null
+++ b/slang/llvm-rs-cc.cpp
@@ -0,0 +1,302 @@
+/*
+ * Copyright 2010-2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "clang/Basic/DiagnosticOptions.h"
+#include "clang/Driver/DriverDiagnostic.h"
+#include "clang/Driver/Options.h"
+#include "clang/Frontend/CompilerInvocation.h"
+#include "clang/Frontend/FrontendDiagnostic.h"
+#include "clang/Frontend/TextDiagnosticPrinter.h"
+#include "clang/Frontend/Utils.h"
+
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/IntrusiveRefCntPtr.h"
+
+#include "llvm/Option/OptTable.h"
+#include "llvm/Support/Allocator.h"
+#include "llvm/Support/ManagedStatic.h"
+#include "llvm/Support/MemoryBuffer.h"
+#include "llvm/Support/Path.h"
+#include "llvm/Support/raw_ostream.h"
+#include "llvm/Support/Signals.h"
+#include "llvm/Support/StringSaver.h"
+#include "llvm/Target/TargetMachine.h"
+
+#include "os_sep.h"
+#include "rs_cc_options.h"
+#include "slang.h"
+#include "slang_assert.h"
+#include "slang_diagnostic_buffer.h"
+#include "slang_rs_reflect_utils.h"
+
+#include <list>
+#include <set>
+#include <string>
+
+namespace {
+class StringSet {
+public:
+  const char *save(const char *Str) {
+    return Strings.save(Str);
+  }
+
+  StringSet() : Strings(A), A() {}
+
+  llvm::StringSaver & getStringSaver() { return Strings; }
+
+private:
+  llvm::StringSaver Strings;
+  llvm::BumpPtrAllocator A;
+};
+}
+
+static const char *DetermineOutputFile(const std::string &OutputDir,
+                                       const std::string &PathSuffix,
+                                       const char *InputFile,
+                                       slang::Slang::OutputType OutputType,
+                                       StringSet *SavedStrings) {
+  if (OutputType == slang::Slang::OT_Nothing)
+    return "/dev/null";
+
+  std::string OutputFile(OutputDir);
+
+  // Append '/' to Opts.mBitcodeOutputDir if not presents
+  if (!OutputFile.empty() &&
+      (OutputFile[OutputFile.size() - 1]) != OS_PATH_SEPARATOR)
+    OutputFile.append(1, OS_PATH_SEPARATOR);
+
+  if (!PathSuffix.empty()) {
+    OutputFile.append(PathSuffix);
+    OutputFile.append(1, OS_PATH_SEPARATOR);
+  }
+
+  if (OutputType == slang::Slang::OT_Dependency) {
+    // The build system wants the .d file name stem to be exactly the same as
+    // the source .rs file, instead of the .bc file.
+    OutputFile.append(slang::RSSlangReflectUtils::GetFileNameStem(InputFile));
+  } else {
+    OutputFile.append(
+        slang::RSSlangReflectUtils::BCFileNameFromRSFileName(InputFile));
+  }
+
+  switch (OutputType) {
+    case slang::Slang::OT_Dependency: {
+      OutputFile.append(".d");
+      break;
+    }
+    case slang::Slang::OT_Assembly: {
+      OutputFile.append(".S");
+      break;
+    }
+    case slang::Slang::OT_LLVMAssembly: {
+      OutputFile.append(".ll");
+      break;
+    }
+    case slang::Slang::OT_Object: {
+      OutputFile.append(".o");
+      break;
+    }
+    case slang::Slang::OT_Bitcode: {
+      OutputFile.append(".bc");
+      break;
+    }
+    case slang::Slang::OT_Nothing:
+    default: {
+      slangAssert(false && "Invalid output type!");
+    }
+  }
+
+  return SavedStrings->save(OutputFile.c_str());
+}
+
+typedef std::list<std::pair<const char*, const char*> > NamePairList;
+
+/*
+ * Compile the Inputs.
+ *
+ * Returns 0 on success and nonzero on failure.
+ *
+ * IOFiles - list of (foo.rs, foo.bc) pairs of input/output files.
+ * IOFiles32 - list of input/output pairs for 32-bit compilation.
+ * Inputs - input filenames.
+ * Opts - options controlling compilation.
+ * DiagEngine - Clang diagnostic engine (for creating diagnostics).
+ * DiagClient - Slang diagnostic consumer (collects and displays diagnostics).
+ * SavedStrings - expanded strings copied from argv source input files.
+ *
+ * We populate IOFiles dynamically while working through the list of Inputs.
+ * On any 64-bit compilation, we pass back in the 32-bit pairs of files as
+ * IOFiles32. This allows the 64-bit compiler to later bundle up both the
+ * 32-bit and 64-bit bitcode outputs to be included in the final reflected
+ * source code that is emitted.
+ */
+static void makeFileList(NamePairList *IOFiles, NamePairList *DepFiles,
+    const llvm::SmallVector<const char*, 16> &Inputs, slang::RSCCOptions &Opts,
+    StringSet *SavedStrings) {
+  std::string PathSuffix = "";
+  // In our mixed 32/64-bit path, we need to suffix our files differently for
+  // both 32-bit and 64-bit versions.
+  if (Opts.mEmit3264) {
+    if (Opts.mBitWidth == 64) {
+      PathSuffix = "bc64";
+    } else {
+      PathSuffix = "bc32";
+    }
+  }
+
+  for (int i = 0, e = Inputs.size(); i != e; i++) {
+    const char *InputFile = Inputs[i];
+
+    const char *BCOutputFile = DetermineOutputFile(Opts.mBitcodeOutputDir,
+                                                   PathSuffix, InputFile,
+                                                   Opts.mOutputType,
+                                                   SavedStrings);
+    const char *OutputFile = BCOutputFile;
+
+    if (Opts.mEmitDependency) {
+      // The dependency file is always emitted without a PathSuffix.
+      // Collisions between 32-bit and 64-bit files don't make a difference,
+      // because they share the same sources/dependencies.
+      const char *DepOutputFile =
+          DetermineOutputFile(Opts.mDependencyOutputDir, "", InputFile,
+                              slang::Slang::OT_Dependency, SavedStrings);
+      if (Opts.mOutputType == slang::Slang::OT_Dependency) {
+        OutputFile = DepOutputFile;
+      }
+
+      DepFiles->push_back(std::make_pair(BCOutputFile, DepOutputFile));
+    }
+
+    IOFiles->push_back(std::make_pair(InputFile, OutputFile));
+  }
+}
+
+#define str(s) #s
+#define wrap_str(s) str(s)
+static void llvm_rs_cc_VersionPrinter() {
+  llvm::raw_ostream &OS = llvm::outs();
+  OS << "llvm-rs-cc: Renderscript compiler\n"
+     << "  (http://developer.android.com/guide/topics/renderscript)\n"
+     << "  based on LLVM (http://llvm.org):\n";
+  OS << "  Target APIs: " << SLANG_MINIMUM_TARGET_API << " - "
+     << SLANG_MAXIMUM_TARGET_API;
+  OS << "\n  Build type: " << wrap_str(TARGET_BUILD_VARIANT);
+#ifndef __DISABLE_ASSERTS
+  OS << " with assertions";
+#endif
+  OS << ".\n";
+}
+#undef wrap_str
+#undef str
+
+static void LLVMErrorHandler(void *UserData, const std::string &Message,
+                             bool GenCrashDialog) {
+  clang::DiagnosticsEngine *DiagEngine =
+      static_cast<clang::DiagnosticsEngine *>(UserData);
+
+  DiagEngine->Report(clang::diag::err_fe_error_backend) << Message;
+
+  // Run the interrupt handlers to make sure any special cleanups get done, in
+  // particular that we remove files registered with RemoveFileOnSignal.
+  llvm::sys::RunInterruptHandlers();
+
+  exit(1);
+}
+
+int main(int argc, const char **argv) {
+  llvm::llvm_shutdown_obj Y; // Call llvm_shutdown() on exit.
+  LLVMInitializeARMTargetInfo();
+  LLVMInitializeARMTarget();
+  LLVMInitializeARMAsmPrinter();
+
+  StringSet SavedStrings; // Keeps track of strings to be destroyed at the end.
+
+  // Parse the command line arguments and respond to show help & version
+  // commands.
+  llvm::SmallVector<const char *, 16> Inputs;
+  slang::RSCCOptions Opts;
+  llvm::IntrusiveRefCntPtr<clang::DiagnosticOptions> DiagOpts =
+      new clang::DiagnosticOptions();
+  if (!slang::ParseArguments(llvm::makeArrayRef(argv, argc), Inputs, Opts,
+                             *DiagOpts, SavedStrings.getStringSaver())) {
+    // Exits when there's any error occurred during parsing the arguments
+    return 1;
+  }
+  if (Opts.mShowHelp) {
+    std::unique_ptr<llvm::opt::OptTable> OptTbl(slang::createRSCCOptTable());
+    const std::string Argv0 = llvm::sys::path::stem(argv[0]);
+    OptTbl->PrintHelp(llvm::outs(), Argv0.c_str(),
+                      "Renderscript source compiler");
+    return 0;
+  }
+  if (Opts.mShowVersion) {
+    llvm_rs_cc_VersionPrinter();
+    return 0;
+  }
+
+  // Initialize the diagnostic objects
+  llvm::IntrusiveRefCntPtr<clang::DiagnosticIDs> DiagIDs(
+      new clang::DiagnosticIDs());
+  slang::DiagnosticBuffer DiagsBuffer;
+  clang::DiagnosticsEngine DiagEngine(DiagIDs, &*DiagOpts, &DiagsBuffer, false);
+  clang::ProcessWarningOptions(DiagEngine, *DiagOpts);
+  (void)DiagEngine.setSeverityForGroup(clang::diag::Flavor::WarningOrError,
+                                       "implicit-function-declaration",
+                                       clang::diag::Severity::Error);
+
+  // Report error if no input file
+  if (Inputs.empty()) {
+    DiagEngine.Report(clang::diag::err_drv_no_input_files);
+    llvm::errs() << DiagsBuffer.str();
+    return 1;
+  }
+
+  llvm::install_fatal_error_handler(LLVMErrorHandler, &DiagEngine);
+
+  // Compile the 32 bit version
+  NamePairList IOFiles32;
+  NamePairList DepFiles32;
+  makeFileList(&IOFiles32, &DepFiles32, Inputs, Opts, &SavedStrings);
+
+  int CompileFailed = 0;
+  // Handle 32-bit case for Java and C++ reflection.
+  // For Java, both 32bit and 64bit will be generated.
+  // For C++, either 64bit or 32bit will be generated based on the target.
+  if (Opts.mEmit3264 || Opts.mBitWidth == 32) {
+      std::unique_ptr<slang::Slang> Compiler(
+          new slang::Slang(32, &DiagEngine, &DiagsBuffer));
+      CompileFailed =
+          !Compiler->compile(IOFiles32, IOFiles32, DepFiles32, Opts, *DiagOpts);
+  }
+
+  // Handle the 64-bit case too!
+  bool needEmit64 = Opts.mEmit3264 || Opts.mBitWidth == 64;
+  if (needEmit64 && !CompileFailed) {
+    Opts.mBitWidth = 64;
+    NamePairList IOFiles64;
+    NamePairList DepFiles64;
+    makeFileList(&IOFiles64, &DepFiles64, Inputs, Opts, &SavedStrings);
+
+    std::unique_ptr<slang::Slang> Compiler(
+        new slang::Slang(64, &DiagEngine, &DiagsBuffer));
+    CompileFailed =
+        !Compiler->compile(IOFiles64, IOFiles32, DepFiles64, Opts, *DiagOpts);
+  }
+
+  llvm::errs() << DiagsBuffer.str();
+  llvm::remove_fatal_error_handler();
+  return CompileFailed;
+}
diff --git a/slang/os_sep.h b/slang/os_sep.h
new file mode 100644
index 0000000..832e8fe
--- /dev/null
+++ b/slang/os_sep.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2011, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FRAMEWORKS_COMPILE_SLANG_OS_SEP_H_  // NOLINT
+#define _FRAMEWORKS_COMPILE_SLANG_OS_SEP_H_
+
+#ifdef USE_MINGW
+/* Define the default path separator for the platform. */
+#define OS_PATH_SEPARATOR     '\\'
+#define OS_PATH_SEPARATOR_STR "\\"
+
+#else /* not USE_MINGW */
+
+/* Define the default path separator for the platform. */
+#define OS_PATH_SEPARATOR     '/'
+#define OS_PATH_SEPARATOR_STR "/"
+
+#endif
+
+#endif  // _FRAMEWORKS_COMPILE_SLANG_NO_SEP_H_  NOLINT
diff --git a/slang/rs_cc_options.cpp b/slang/rs_cc_options.cpp
new file mode 100644
index 0000000..8c8ae58
--- /dev/null
+++ b/slang/rs_cc_options.cpp
@@ -0,0 +1,307 @@
+/*
+ * Copyright 2014, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "clang/Basic/DiagnosticOptions.h"
+#include "clang/Driver/DriverDiagnostic.h"
+#include "clang/Driver/Options.h"
+#include "clang/Frontend/Utils.h"
+
+#include "llvm/Option/Arg.h"
+#include "llvm/Option/ArgList.h"
+#include "llvm/Option/Option.h"
+#include "llvm/Option/OptTable.h"
+#include "llvm/Support/CommandLine.h"
+
+#include "rs_cc_options.h"
+#include "slang.h"
+#include "slang_assert.h"
+
+#include <cstdlib>
+#include <string>
+#include <utility>
+#include <vector>
+
+enum {
+  OPT_INVALID = 0,  // This is not an option ID.
+#define PREFIX(NAME, VALUE)
+#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
+               HELPTEXT, METAVAR)                                             \
+  OPT_##ID,
+#include "RSCCOptions.inc"
+  LastOption
+#undef OPTION
+#undef PREFIX
+};
+
+#define PREFIX(NAME, VALUE) const char *const NAME[] = VALUE;
+#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
+               HELPTEXT, METAVAR)
+#include "RSCCOptions.inc"
+#undef OPTION
+#undef PREFIX
+
+static const llvm::opt::OptTable::Info RSCCInfoTable[] = {
+#define PREFIX(NAME, VALUE)
+#define OPTION(PREFIX, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM,  \
+               HELPTEXT, METAVAR)                                              \
+  {                                                                            \
+    PREFIX, NAME, HELPTEXT, METAVAR, OPT_##ID, llvm::opt::Option::KIND##Class, \
+        PARAM, FLAGS, OPT_##GROUP, OPT_##ALIAS, ALIASARGS                      \
+  }                                                                            \
+  ,
+#include "RSCCOptions.inc"
+#undef OPTION
+#undef PREFIX
+};
+
+namespace {
+
+class RSCCOptTable : public llvm::opt::OptTable {
+ public:
+  RSCCOptTable()
+      : OptTable(llvm::makeArrayRef(RSCCInfoTable)) {}
+};
+}
+
+namespace slang {
+
+llvm::opt::OptTable *createRSCCOptTable() { return new RSCCOptTable(); }
+
+// This function is similar to
+// clang/lib/Frontend/CompilerInvocation::CreateFromArgs.
+bool ParseArguments(const llvm::ArrayRef<const char *> &ArgsIn,
+                    llvm::SmallVectorImpl<const char *> &Inputs,
+                    RSCCOptions &Opts, clang::DiagnosticOptions &DiagOpts,
+                    llvm::StringSaver &StringSaver) {
+  // We use a different diagnostic engine for argument parsing from the rest of
+  // the work.  This mimics what's done in clang.  I believe it is so the
+  // argument parsing errors are well formatted while the full errors can be
+  // influenced by command line arguments.
+  llvm::IntrusiveRefCntPtr<clang::DiagnosticOptions> ArgumentParseDiagOpts(
+      new clang::DiagnosticOptions());
+  llvm::IntrusiveRefCntPtr<clang::DiagnosticIDs> DiagIDs(
+      new clang::DiagnosticIDs());
+  DiagnosticBuffer DiagsBuffer;
+  clang::DiagnosticsEngine DiagEngine(DiagIDs, &*ArgumentParseDiagOpts,
+                                      &DiagsBuffer, false);
+
+  // Populate a vector with the command line arguments, expanding command files
+  // that have been included via the '@' argument.
+  llvm::SmallVector<const char *, 256> ArgVector;
+  // Skip over the command name, or we will mistakenly process it as a source file.
+  ArgVector.append(ArgsIn.slice(1).begin(), ArgsIn.end());
+  llvm::cl::ExpandResponseFiles(StringSaver, llvm::cl::TokenizeGNUCommandLine,
+                                ArgVector, false);
+
+  std::unique_ptr<llvm::opt::OptTable> OptParser(createRSCCOptTable());
+  unsigned MissingArgIndex = 0;
+  unsigned MissingArgCount = 0;
+  llvm::opt::InputArgList Args =
+      OptParser->ParseArgs(ArgVector, MissingArgIndex, MissingArgCount);
+
+  // Check for missing argument error.
+  if (MissingArgCount) {
+    DiagEngine.Report(clang::diag::err_drv_missing_argument)
+        << Args.getArgString(MissingArgIndex) << MissingArgCount;
+  }
+
+  // Issue errors on unknown arguments.
+  for (llvm::opt::arg_iterator it = Args.filtered_begin(OPT_UNKNOWN),
+                               ie = Args.filtered_end();
+       it != ie; ++it) {
+    DiagEngine.Report(clang::diag::err_drv_unknown_argument)
+        << (*it)->getAsString(Args);
+  }
+
+  DiagOpts.IgnoreWarnings = Args.hasArg(OPT_w);
+  DiagOpts.Warnings = Args.getAllArgValues(OPT_W);
+
+  // Always turn off warnings for empty initializers, since we really want to
+  // employ/encourage this extension for zero-initialization of structures.
+  DiagOpts.Warnings.push_back("no-gnu-empty-initializer");
+
+  for (llvm::opt::ArgList::const_iterator it = Args.begin(), ie = Args.end();
+       it != ie; ++it) {
+    const llvm::opt::Arg *A = *it;
+    if (A->getOption().getKind() == llvm::opt::Option::InputClass)
+      Inputs.push_back(A->getValue());
+  }
+
+  Opts.mIncludePaths = Args.getAllArgValues(OPT_I);
+
+  Opts.mBitcodeOutputDir = Args.getLastArgValue(OPT_o);
+
+  if (const llvm::opt::Arg *A = Args.getLastArg(OPT_M_Group)) {
+    switch (A->getOption().getID()) {
+    case OPT_M: {
+      Opts.mEmitDependency = true;
+      Opts.mOutputType = Slang::OT_Dependency;
+      break;
+    }
+    case OPT_MD: {
+      Opts.mEmitDependency = true;
+      Opts.mOutputType = Slang::OT_Bitcode;
+      break;
+    }
+    case OPT_MP: {
+      Opts.mEmitDependency = true;
+      Opts.mOutputType = Slang::OT_Bitcode;
+      Opts.mEmitPhonyDependency = true;
+      break;
+    }
+    default: { slangAssert(false && "Invalid option in M group!"); }
+    }
+  }
+
+  if (const llvm::opt::Arg *A = Args.getLastArg(OPT_Output_Type_Group)) {
+    switch (A->getOption().getID()) {
+    case OPT_emit_asm: {
+      Opts.mOutputType = Slang::OT_Assembly;
+      break;
+    }
+    case OPT_emit_llvm: {
+      Opts.mOutputType = Slang::OT_LLVMAssembly;
+      break;
+    }
+    case OPT_emit_bc: {
+      Opts.mOutputType = Slang::OT_Bitcode;
+      break;
+    }
+    case OPT_emit_nothing: {
+      Opts.mOutputType = Slang::OT_Nothing;
+      break;
+    }
+    default: { slangAssert(false && "Invalid option in output type group!"); }
+    }
+  }
+
+  if (Opts.mEmitDependency && ((Opts.mOutputType != Slang::OT_Bitcode) &&
+                               (Opts.mOutputType != Slang::OT_Dependency)))
+    DiagEngine.Report(clang::diag::err_drv_argument_not_allowed_with)
+        << Args.getLastArg(OPT_M_Group)->getAsString(Args)
+        << Args.getLastArg(OPT_Output_Type_Group)->getAsString(Args);
+
+  Opts.mAllowRSPrefix = Args.hasArg(OPT_allow_rs_prefix);
+
+  Opts.mJavaReflectionPathBase =
+      Args.getLastArgValue(OPT_java_reflection_path_base);
+  Opts.mJavaReflectionPackageName =
+      Args.getLastArgValue(OPT_java_reflection_package_name);
+
+  Opts.mRSPackageName = Args.getLastArgValue(OPT_rs_package_name);
+
+  llvm::StringRef BitcodeStorageValue =
+      Args.getLastArgValue(OPT_bitcode_storage);
+  if (BitcodeStorageValue == "ar")
+    Opts.mBitcodeStorage = BCST_APK_RESOURCE;
+  else if (BitcodeStorageValue == "jc")
+    Opts.mBitcodeStorage = BCST_JAVA_CODE;
+  else if (!BitcodeStorageValue.empty())
+    DiagEngine.Report(clang::diag::err_drv_invalid_value)
+        << OptParser->getOptionName(OPT_bitcode_storage) << BitcodeStorageValue;
+
+  llvm::opt::Arg *lastBitwidthArg = Args.getLastArg(OPT_m32, OPT_m64);
+  if (Args.hasArg(OPT_reflect_cpp)) {
+    Opts.mBitcodeStorage = BCST_CPP_CODE;
+    // mJavaReflectionPathBase can be set for C++ reflected builds.
+    // Set it to the standard mBitcodeOutputDir (via -o) by default.
+    if (Opts.mJavaReflectionPathBase.empty()) {
+      Opts.mJavaReflectionPathBase = Opts.mBitcodeOutputDir;
+    }
+
+    // Check for bitwidth arguments.
+    if (lastBitwidthArg) {
+      if (lastBitwidthArg->getOption().matches(OPT_m32)) {
+        Opts.mBitWidth = 32;
+      } else {
+        Opts.mBitWidth = 64;
+      }
+    }
+  } else if (lastBitwidthArg) {
+      // -m32/-m64 are forbidden for non-C++ reflection paths for non-eng builds
+      // (they would make it too easy for a developer to accidentally create and
+      // release an APK that has 32-bit or 64-bit bitcode but not both).
+#ifdef __ENABLE_INTERNAL_OPTIONS
+      if (lastBitwidthArg->getOption().matches(OPT_m32)) {
+        Opts.mBitWidth = 32;
+      } else {
+        Opts.mBitWidth = 64;
+      }
+      Opts.mEmit3264 = false;
+#else
+      DiagEngine.Report(
+          DiagEngine.getCustomDiagID(clang::DiagnosticsEngine::Error,
+                                     "cannot use -m32/-m64 without specifying "
+                                     "C++ reflection (-reflect-c++)"));
+#endif
+  }
+
+  Opts.mDependencyOutputDir =
+      Args.getLastArgValue(OPT_output_dep_dir, Opts.mBitcodeOutputDir);
+  Opts.mAdditionalDepTargets = Args.getAllArgValues(OPT_additional_dep_target);
+
+  Opts.mShowHelp = Args.hasArg(OPT_help);
+  Opts.mShowVersion = Args.hasArg(OPT_version);
+  Opts.mDebugEmission = Args.hasArg(OPT_emit_g);
+  Opts.mVerbose = Args.hasArg(OPT_verbose);
+  Opts.mASTPrint = Args.hasArg(OPT_ast_print);
+
+  // Delegate options
+
+  std::vector<std::string> DelegatedStrings;
+  for (int Opt : std::vector<unsigned>{OPT_debug, OPT_print_after_all, OPT_print_before_all}) {
+    if (Args.hasArg(Opt)) {
+      // TODO: Don't assume that the option begins with "-"; determine this programmatically instead.
+      DelegatedStrings.push_back(std::string("-") + std::string(OptParser->getOptionName(Opt)));
+      slangAssert(OptParser->getOptionKind(Opt) == llvm::opt::Option::FlagClass);
+    }
+  }
+  if (DelegatedStrings.size()) {
+    std::vector<const char *> DelegatedCStrs;
+    DelegatedCStrs.push_back(*ArgVector.data()); // program name
+    std::for_each(DelegatedStrings.cbegin(), DelegatedStrings.cend(),
+                  [&DelegatedCStrs](const std::string &String) { DelegatedCStrs.push_back(String.c_str()); });
+    llvm::cl::ParseCommandLineOptions(DelegatedCStrs.size(), DelegatedCStrs.data());
+  }
+
+  // If we are emitting both 32-bit and 64-bit bitcode, we must embed it.
+
+  size_t OptLevel =
+      clang::getLastArgIntValue(Args, OPT_optimization_level, 3, DiagEngine);
+
+  Opts.mOptimizationLevel =
+      OptLevel == 0 ? llvm::CodeGenOpt::None : llvm::CodeGenOpt::Aggressive;
+
+  Opts.mTargetAPI =
+      clang::getLastArgIntValue(Args, OPT_target_api, RS_VERSION, DiagEngine);
+
+  if (Opts.mTargetAPI == 0) {
+    Opts.mTargetAPI = UINT_MAX;
+  }
+
+  if ((Opts.mTargetAPI < 21) || (Opts.mBitcodeStorage == BCST_CPP_CODE))
+    Opts.mEmit3264 = false;
+  if (Opts.mEmit3264)
+    Opts.mBitcodeStorage = BCST_JAVA_CODE;
+
+  if (DiagEngine.hasErrorOccurred()) {
+    llvm::errs() << DiagsBuffer.str();
+    return false;
+  }
+
+  return true;
+}
+}
diff --git a/slang/rs_cc_options.h b/slang/rs_cc_options.h
new file mode 100644
index 0000000..cc60560
--- /dev/null
+++ b/slang/rs_cc_options.h
@@ -0,0 +1,148 @@
+/*
+ * Copyright 2014, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FRAMEWORKS_COMPILE_SLANG_RS_CC_OPTIONS_H_  // NOLINT
+#define _FRAMEWORKS_COMPILE_SLANG_RS_CC_OPTIONS_H_
+
+#include "llvm/Option/ArgList.h"
+#include "llvm/Option/Option.h"
+#include "llvm/Option/OptTable.h"
+
+#include "slang.h"
+#include "slang_rs_reflect_utils.h"
+
+#include <string>
+#include <vector>
+
+namespace llvm {
+namespace cl {
+class StringSaver;
+}
+namespace opt {
+class OptTable;
+}
+}
+
+namespace slang {
+
+// Options for the RenderScript compiler llvm-rs-cc
+class RSCCOptions {
+ public:
+  // User-defined include paths.
+  std::vector<std::string> mIncludePaths;
+
+  // The output directory for writing the bitcode files
+  // (i.e. out/target/common/obj/APPS/.../src/renderscript/res/raw).
+  std::string mBitcodeOutputDir;
+
+  // Type of file to emit (bitcode, dependency, ...).
+  slang::Slang::OutputType mOutputType;
+
+  // Allow user-defined functions prefixed with 'rs'.
+  bool mAllowRSPrefix;
+
+  // 32-bit or 64-bit target
+  uint32_t mBitWidth;
+
+  // The path for storing reflected Java source files
+  // (i.e. out/target/common/obj/APPS/.../src/renderscript/src).
+  std::string mJavaReflectionPathBase;
+
+  // Force package name. This may override the package name specified by a
+  // #pragma in the .rs file.
+  std::string mJavaReflectionPackageName;
+
+  // Force the RS package name to use. This can override the default value of
+  // "android.renderscript" used for the standard RS APIs.
+  std::string mRSPackageName;
+
+  // Where to store the generated bitcode (resource, Java source, C++ source).
+  slang::BitCodeStorageType mBitcodeStorage;
+
+  // Emit output dependency file for each input file.
+  bool mEmitDependency;
+
+  // Emit phony targets for each header dependency, which can avoid make errors
+  // when the header gets deleted. See -MP option of cc.
+  bool mEmitPhonyDependency;
+
+  // The output directory for writing dependency files
+  // (i.e. out/target/common/obj/APPS/.../src/renderscript).
+  std::string mDependencyOutputDir;
+
+  // User-defined files added to the dependencies (i.e. for adding fake
+  // dependency files like RenderScript.stamp).
+  std::vector<std::string> mAdditionalDepTargets;
+
+  bool mShowHelp;     // Show the -help text.
+  bool mShowVersion;  // Show the -version text.
+
+  // The target API we are generating code for (see slang_version.h).
+  unsigned int mTargetAPI;
+
+  // Enable emission of debugging symbols.
+  bool mDebugEmission;
+
+  // The optimization level used in CodeGen, and encoded in emitted bitcode.
+  llvm::CodeGenOpt::Level mOptimizationLevel;
+
+  // Display verbose information about the compilation on stdout.
+  bool mVerbose;
+
+  // Display AST.
+  bool mASTPrint;
+
+  // Emit both 32-bit and 64-bit bitcode (embedded in the reflected sources).
+  bool mEmit3264;
+
+  RSCCOptions() {
+    mOutputType = slang::Slang::OT_Bitcode;
+    mBitWidth = 32;
+    mBitcodeStorage = slang::BCST_APK_RESOURCE;
+    mEmitDependency = 0;
+    mEmitPhonyDependency = 0;
+    mShowHelp = 0;
+    mShowVersion = 0;
+    mTargetAPI = RS_VERSION;
+    mDebugEmission = 0;
+    mOptimizationLevel = llvm::CodeGenOpt::Aggressive;
+    mVerbose = false;
+    mASTPrint = false;
+    mEmit3264 = true;
+  }
+};
+
+/* Return a valid OptTable (useful for dumping help information)
+ */
+llvm::opt::OptTable *createRSCCOptTable();
+
+/* Parse ArgVector and return a list of Inputs (source files) and Opts
+ * (options affecting the compilation of those source files).
+ *
+ * \param ArgVector - the input arguments to llvm-rs-cc
+ * \param Inputs - returned list of actual input source filenames
+ * \param Opts - returned options after command line has been processed
+ * \param DiagEngine - input for issuing warnings/errors on arguments
+ */
+
+bool ParseArguments(const llvm::ArrayRef<const char *> &ArgsIn,
+                    llvm::SmallVectorImpl<const char *> &Inputs,
+                    RSCCOptions &Opts, clang::DiagnosticOptions &DiagOpts,
+                    llvm::StringSaver &StringSaver);
+
+} // namespace slang
+
+#endif  // _FRAMEWORKS_COMPILE_SLANG_RS_CC_OPTIONS_H_
diff --git a/slang/rs_version.mk b/slang/rs_version.mk
new file mode 100644
index 0000000..63b8822
--- /dev/null
+++ b/slang/rs_version.mk
@@ -0,0 +1,22 @@
+#
+# Copyright (C) 2014 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+RS_VERSION := 24
+RS_VERSION_DEFINE := -DRS_VERSION=$(RS_VERSION)
+
+# Use RS_VERSION_DEFINE as part of your LOCAL_CFLAGS to have the proper value.
+# LOCAL_CFLAGS += $(RS_VERSION_DEFINE)
+
diff --git a/slang/slang.cpp b/slang/slang.cpp
new file mode 100644
index 0000000..164fd3d
--- /dev/null
+++ b/slang/slang.cpp
@@ -0,0 +1,789 @@
+/*
+ * Copyright 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "slang.h"
+
+#include <stdlib.h>
+
+#include <cstring>
+#include <list>
+#include <sstream>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "clang/AST/ASTConsumer.h"
+#include "clang/AST/ASTContext.h"
+
+#include "clang/Basic/DiagnosticIDs.h"
+#include "clang/Basic/DiagnosticOptions.h"
+#include "clang/Basic/FileManager.h"
+#include "clang/Basic/FileSystemOptions.h"
+#include "clang/Basic/SourceLocation.h"
+#include "clang/Basic/SourceManager.h"
+#include "clang/Basic/TargetInfo.h"
+#include "clang/Basic/TargetOptions.h"
+
+#include "clang/Frontend/DependencyOutputOptions.h"
+#include "clang/Frontend/FrontendDiagnostic.h"
+#include "clang/Frontend/FrontendOptions.h"
+#include "clang/Frontend/PCHContainerOperations.h"
+#include "clang/Frontend/TextDiagnosticPrinter.h"
+#include "clang/Frontend/Utils.h"
+
+#include "clang/Lex/HeaderSearch.h"
+#include "clang/Lex/HeaderSearchOptions.h"
+#include "clang/Lex/Preprocessor.h"
+#include "clang/Lex/PreprocessorOptions.h"
+
+#include "clang/Parse/ParseAST.h"
+
+#include "clang/Sema/SemaDiagnostic.h"
+
+#include "llvm/ADT/IntrusiveRefCntPtr.h"
+
+#include "llvm/Bitcode/ReaderWriter.h"
+
+// More force linking
+#include "llvm/Linker/Linker.h"
+
+// Force linking all passes/vmcore stuffs to libslang.so
+#include "llvm/LinkAllIR.h"
+#include "llvm/LinkAllPasses.h"
+
+#include "llvm/Support/raw_ostream.h"
+#include "llvm/Support/MemoryBuffer.h"
+#include "llvm/Support/ErrorHandling.h"
+#include "llvm/Support/ManagedStatic.h"
+#include "llvm/Support/Path.h"
+#include "llvm/Support/TargetSelect.h"
+#include "llvm/Support/ToolOutputFile.h"
+
+#include "os_sep.h"
+#include "rs_cc_options.h"
+#include "slang_assert.h"
+#include "slang_backend.h"
+
+#include "slang_rs_context.h"
+#include "slang_rs_export_type.h"
+
+#include "slang_rs_reflection.h"
+#include "slang_rs_reflection_cpp.h"
+
+
+namespace {
+
+static const char *kRSTriple32 = "armv7-none-linux-gnueabi";
+static const char *kRSTriple64 = "aarch64-none-linux-gnueabi";
+
+}  // namespace
+
+namespace slang {
+
+
+#define FS_SUFFIX  "fs"
+
+#define RS_HEADER_SUFFIX  "rsh"
+
+/* RS_HEADER_ENTRY(name) */
+#define ENUM_RS_HEADER()  \
+  RS_HEADER_ENTRY(rs_allocation_create) \
+  RS_HEADER_ENTRY(rs_allocation_data) \
+  RS_HEADER_ENTRY(rs_atomic) \
+  RS_HEADER_ENTRY(rs_convert) \
+  RS_HEADER_ENTRY(rs_core) \
+  RS_HEADER_ENTRY(rs_debug) \
+  RS_HEADER_ENTRY(rs_for_each) \
+  RS_HEADER_ENTRY(rs_graphics) \
+  RS_HEADER_ENTRY(rs_graphics_types) \
+  RS_HEADER_ENTRY(rs_io) \
+  RS_HEADER_ENTRY(rs_math) \
+  RS_HEADER_ENTRY(rs_matrix) \
+  RS_HEADER_ENTRY(rs_object_info) \
+  RS_HEADER_ENTRY(rs_object_types) \
+  RS_HEADER_ENTRY(rs_quaternion) \
+  RS_HEADER_ENTRY(rs_time) \
+  RS_HEADER_ENTRY(rs_value_types) \
+  RS_HEADER_ENTRY(rs_vector_math) \
+
+
+// The named of metadata node that pragma resides (should be synced with
+// bcc.cpp)
+const llvm::StringRef Slang::PragmaMetadataName = "#pragma";
+
+static inline llvm::tool_output_file *
+OpenOutputFile(const char *OutputFile,
+               llvm::sys::fs::OpenFlags Flags,
+               std::error_code &EC,
+               clang::DiagnosticsEngine *DiagEngine) {
+  slangAssert((OutputFile != nullptr) &&
+              (DiagEngine != nullptr) && "Invalid parameter!");
+
+  EC = llvm::sys::fs::create_directories(
+      llvm::sys::path::parent_path(OutputFile));
+  if (!EC) {
+    llvm::tool_output_file *F =
+          new llvm::tool_output_file(OutputFile, EC, Flags);
+    if (F != nullptr)
+      return F;
+  }
+
+  // Report error here.
+  DiagEngine->Report(clang::diag::err_fe_error_opening)
+    << OutputFile << EC.message();
+
+  return nullptr;
+}
+
+void Slang::createTarget(uint32_t BitWidth) {
+  std::vector<std::string> features;
+
+  if (BitWidth == 64) {
+    mTargetOpts->Triple = kRSTriple64;
+  } else {
+    mTargetOpts->Triple = kRSTriple32;
+    // Treat long as a 64-bit type for our 32-bit RS code.
+    features.push_back("+long64");
+    mTargetOpts->FeaturesAsWritten = features;
+  }
+
+  mTarget.reset(clang::TargetInfo::CreateTargetInfo(*mDiagEngine,
+                                                    mTargetOpts));
+}
+
+void Slang::createFileManager() {
+  mFileSysOpt.reset(new clang::FileSystemOptions());
+  mFileMgr.reset(new clang::FileManager(*mFileSysOpt));
+}
+
+void Slang::createSourceManager() {
+  mSourceMgr.reset(new clang::SourceManager(*mDiagEngine, *mFileMgr));
+}
+
+void Slang::createPreprocessor() {
+  // Default only search header file in current dir
+  clang::HeaderSearch *HeaderInfo = new clang::HeaderSearch(&getHeaderSearchOpts(),
+                                                            *mSourceMgr,
+                                                            *mDiagEngine,
+                                                            LangOpts,
+                                                            mTarget.get());
+
+  mPP.reset(new clang::Preprocessor(&getPreprocessorOpts(),
+                                    *mDiagEngine,
+                                    LangOpts,
+                                    *mSourceMgr,
+                                    *HeaderInfo,
+                                    *this,
+                                    nullptr,
+                                    /* OwnsHeaderSearch = */true));
+  // Initialize the preprocessor
+  mPP->Initialize(getTargetInfo());
+  clang::FrontendOptions FEOpts;
+
+  auto *Reader = mPCHContainerOperations->getReaderOrNull(
+      getHeaderSearchOpts().ModuleFormat);
+  clang::InitializePreprocessor(*mPP, getPreprocessorOpts(), *Reader, FEOpts);
+
+  clang::ApplyHeaderSearchOptions(*HeaderInfo, getHeaderSearchOpts(), LangOpts,
+      mPP->getTargetInfo().getTriple());
+
+  mPragmas.clear();
+
+  std::vector<clang::DirectoryLookup> SearchList;
+  for (unsigned i = 0, e = mIncludePaths.size(); i != e; i++) {
+    if (const clang::DirectoryEntry *DE =
+            mFileMgr->getDirectory(mIncludePaths[i])) {
+      SearchList.push_back(clang::DirectoryLookup(DE,
+                                                  clang::SrcMgr::C_System,
+                                                  false));
+    }
+  }
+
+  HeaderInfo->SetSearchPaths(SearchList,
+                             /* angledDirIdx = */1,
+                             /* systemDixIdx = */1,
+                             /* noCurDirSearch = */false);
+
+  initPreprocessor();
+}
+
+void Slang::createASTContext() {
+  mASTContext.reset(
+      new clang::ASTContext(LangOpts, *mSourceMgr, mPP->getIdentifierTable(),
+                            mPP->getSelectorTable(), mPP->getBuiltinInfo()));
+  mASTContext->InitBuiltinTypes(getTargetInfo());
+  initASTContext();
+}
+
+clang::ASTConsumer *
+Slang::createBackend(const RSCCOptions &Opts, const clang::CodeGenOptions &CodeGenOpts,
+                     llvm::raw_ostream *OS, OutputType OT) {
+  auto *B = new Backend(mRSContext, &getDiagnostics(), Opts,
+                        getHeaderSearchOpts(), getPreprocessorOpts(),
+                        CodeGenOpts, getTargetOptions(), &mPragmas, OS, OT,
+                        getSourceManager(), mAllowRSPrefix, mIsFilterscript);
+  B->Initialize(getASTContext());
+  return B;
+}
+
+Slang::Slang(uint32_t BitWidth, clang::DiagnosticsEngine *DiagEngine,
+             DiagnosticBuffer *DiagClient)
+    : mDiagEngine(DiagEngine), mDiagClient(DiagClient),
+      mTargetOpts(new clang::TargetOptions()),
+      mHSOpts(new clang::HeaderSearchOptions()),
+      mPPOpts(new clang::PreprocessorOptions()),
+      mPCHContainerOperations(std::make_shared<clang::PCHContainerOperations>()),
+      mOT(OT_Default), mRSContext(nullptr), mAllowRSPrefix(false), mTargetAPI(0),
+      mVerbose(false), mIsFilterscript(false) {
+  // Please refer to include/clang/Basic/LangOptions.h to setup
+  // the options.
+  LangOpts.RTTI = 0;  // Turn off the RTTI information support
+  LangOpts.LineComment = 1;
+  LangOpts.C99 = 1;
+  LangOpts.Renderscript = 1;
+  LangOpts.LaxVectorConversions = 0;  // Do not bitcast vectors!
+  LangOpts.CharIsSigned = 1;  // Signed char is our default.
+
+  CodeGenOpts.OptimizationLevel = 3;
+
+  // We must set StackRealignment, because the default is for the actual
+  // Clang driver to pass this option (-mstackrealign) directly to cc1.
+  // Since we don't use Clang's driver, we need to similarly supply it.
+  // If StackRealignment is zero (i.e. the option wasn't set), then the
+  // backend assumes that it can't adjust the stack in any way, which breaks
+  // alignment for vector loads/stores.
+  CodeGenOpts.StackRealignment = 1;
+
+  createTarget(BitWidth);
+  createFileManager();
+  createSourceManager();
+}
+
+Slang::~Slang() {
+  delete mRSContext;
+  for (ReflectedDefinitionListTy::iterator I = ReflectedDefinitions.begin(),
+                                           E = ReflectedDefinitions.end();
+       I != E; I++) {
+    delete I->getValue().first;
+  }
+}
+
+clang::ModuleLoadResult Slang::loadModule(
+    clang::SourceLocation ImportLoc,
+    clang::ModuleIdPath Path,
+    clang::Module::NameVisibilityKind Visibility,
+    bool IsInclusionDirective) {
+  slangAssert(0 && "Not implemented");
+  return clang::ModuleLoadResult();
+}
+
+bool Slang::setInputSource(llvm::StringRef InputFile) {
+  mInputFileName = InputFile.str();
+
+  mSourceMgr->clearIDTables();
+
+  const clang::FileEntry *File = mFileMgr->getFile(InputFile);
+  if (File) {
+    mSourceMgr->setMainFileID(mSourceMgr->createFileID(File,
+        clang::SourceLocation(), clang::SrcMgr::C_User));
+  }
+
+  if (mSourceMgr->getMainFileID().isInvalid()) {
+    mDiagEngine->Report(clang::diag::err_fe_error_reading) << InputFile;
+    return false;
+  }
+
+  return true;
+}
+
+bool Slang::setOutput(const char *OutputFile) {
+  std::error_code EC;
+  llvm::tool_output_file *OS = nullptr;
+
+  switch (mOT) {
+    case OT_Dependency:
+    case OT_Assembly:
+    case OT_LLVMAssembly: {
+      OS = OpenOutputFile(OutputFile, llvm::sys::fs::F_Text, EC, mDiagEngine);
+      break;
+    }
+    case OT_Nothing: {
+      break;
+    }
+    case OT_Object:
+    case OT_Bitcode: {
+      OS = OpenOutputFile(OutputFile, llvm::sys::fs::F_None, EC, mDiagEngine);
+      break;
+    }
+    default: {
+      llvm_unreachable("Unknown compiler output type");
+    }
+  }
+
+  if (EC)
+    return false;
+
+  mOS.reset(OS);
+
+  mOutputFileName = OutputFile;
+
+  return true;
+}
+
+bool Slang::setDepOutput(const char *OutputFile) {
+  std::error_code EC;
+
+  mDOS.reset(
+      OpenOutputFile(OutputFile, llvm::sys::fs::F_Text, EC, mDiagEngine));
+  if (EC || (mDOS.get() == nullptr))
+    return false;
+
+  mDepOutputFileName = OutputFile;
+
+  return true;
+}
+
+int Slang::generateDepFile(bool PhonyTarget) {
+  if (mDiagEngine->hasErrorOccurred())
+    return 1;
+  if (mDOS.get() == nullptr)
+    return 1;
+
+  // Initialize options for generating dependency file
+  clang::DependencyOutputOptions DepOpts;
+  DepOpts.IncludeSystemHeaders = 1;
+  if (PhonyTarget)
+    DepOpts.UsePhonyTargets = 1;
+  DepOpts.OutputFile = mDepOutputFileName;
+  DepOpts.Targets = mAdditionalDepTargets;
+  DepOpts.Targets.push_back(mDepTargetBCFileName);
+  for (std::vector<std::string>::const_iterator
+           I = mGeneratedFileNames.begin(), E = mGeneratedFileNames.end();
+       I != E;
+       I++) {
+    DepOpts.Targets.push_back(*I);
+  }
+  mGeneratedFileNames.clear();
+
+  // Per-compilation needed initialization
+  createPreprocessor();
+  clang::DependencyFileGenerator::CreateAndAttachToPreprocessor(*mPP.get(), DepOpts);
+
+  // Inform the diagnostic client we are processing a source file
+  mDiagClient->BeginSourceFile(LangOpts, mPP.get());
+
+  // Go through the source file (no operations necessary)
+  clang::Token Tok;
+  mPP->EnterMainSourceFile();
+  do {
+    mPP->Lex(Tok);
+  } while (Tok.isNot(clang::tok::eof));
+
+  mPP->EndSourceFile();
+
+  // Declare success if no error
+  if (!mDiagEngine->hasErrorOccurred())
+    mDOS->keep();
+
+  // Clean up after compilation
+  mPP.reset();
+  mDOS.reset();
+
+  return mDiagEngine->hasErrorOccurred() ? 1 : 0;
+}
+
+int Slang::compile(const RSCCOptions &Opts) {
+  if (mDiagEngine->hasErrorOccurred())
+    return 1;
+  if (mOS.get() == nullptr)
+    return 1;
+
+  // Here is per-compilation needed initialization
+  createPreprocessor();
+  createASTContext();
+
+  mBackend.reset(createBackend(Opts, CodeGenOpts, &mOS->os(), mOT));
+
+  // Inform the diagnostic client we are processing a source file
+  mDiagClient->BeginSourceFile(LangOpts, mPP.get());
+
+  // The core of the slang compiler
+  ParseAST(*mPP, mBackend.get(), *mASTContext);
+
+  // Inform the diagnostic client we are done with previous source file
+  mDiagClient->EndSourceFile();
+
+  // Declare success if no error
+  if (!mDiagEngine->hasErrorOccurred())
+    mOS->keep();
+
+  // The compilation ended, clear
+  mBackend.reset();
+  mOS.reset();
+
+  return mDiagEngine->hasErrorOccurred() ? 1 : 0;
+}
+
+void Slang::setDebugMetadataEmission(bool EmitDebug) {
+  if (EmitDebug)
+    CodeGenOpts.setDebugInfo(clang::CodeGenOptions::FullDebugInfo);
+  else
+    CodeGenOpts.setDebugInfo(clang::CodeGenOptions::NoDebugInfo);
+}
+
+void Slang::setOptimizationLevel(llvm::CodeGenOpt::Level OptimizationLevel) {
+  CodeGenOpts.OptimizationLevel = OptimizationLevel;
+}
+
+bool Slang::isFilterscript(const char *Filename) {
+  const char *c = strrchr(Filename, '.');
+  if (c && !strncmp(FS_SUFFIX, c + 1, strlen(FS_SUFFIX) + 1)) {
+    return true;
+  } else {
+    return false;
+  }
+}
+
+bool Slang::generateJavaBitcodeAccessor(const std::string &OutputPathBase,
+                                          const std::string &PackageName,
+                                          const std::string *LicenseNote) {
+  RSSlangReflectUtils::BitCodeAccessorContext BCAccessorContext;
+
+  BCAccessorContext.rsFileName = getInputFileName().c_str();
+  BCAccessorContext.bc32FileName = mOutput32FileName.c_str();
+  BCAccessorContext.bc64FileName = mOutputFileName.c_str();
+  BCAccessorContext.reflectPath = OutputPathBase.c_str();
+  BCAccessorContext.packageName = PackageName.c_str();
+  BCAccessorContext.licenseNote = LicenseNote;
+  BCAccessorContext.bcStorage = BCST_JAVA_CODE;   // Must be BCST_JAVA_CODE
+  BCAccessorContext.verbose = false;
+
+  return RSSlangReflectUtils::GenerateJavaBitCodeAccessor(BCAccessorContext);
+}
+
+bool Slang::checkODR(const char *CurInputFile) {
+  for (RSContext::ExportableList::iterator I = mRSContext->exportable_begin(),
+          E = mRSContext->exportable_end();
+       I != E;
+       I++) {
+    RSExportable *RSE = *I;
+    if (RSE->getKind() != RSExportable::EX_TYPE)
+      continue;
+
+    RSExportType *ET = static_cast<RSExportType *>(RSE);
+    if (ET->getClass() != RSExportType::ExportClassRecord)
+      continue;
+
+    RSExportRecordType *ERT = static_cast<RSExportRecordType *>(ET);
+
+    // Artificial record types (create by us not by user in the source) always
+    // conforms the ODR.
+    if (ERT->isArtificial())
+      continue;
+
+    // Key to lookup ERT in ReflectedDefinitions
+    llvm::StringRef RDKey(ERT->getName());
+    ReflectedDefinitionListTy::const_iterator RD =
+        ReflectedDefinitions.find(RDKey);
+
+    if (RD != ReflectedDefinitions.end()) {
+      const RSExportRecordType *Reflected = RD->getValue().first;
+      // There's a record (struct) with the same name reflected before. Enforce
+      // ODR checking - the Reflected must hold *exactly* the same "definition"
+      // as the one defined previously. We say two record types A and B have the
+      // same definition iff:
+      //
+      //  struct A {              struct B {
+      //    Type(a1) a1,            Type(b1) b1,
+      //    Type(a2) a2,            Type(b1) b2,
+      //    ...                     ...
+      //    Type(aN) aN             Type(b3) b3,
+      //  };                      }
+      //  Cond. #1. They have same number of fields, i.e., N = M;
+      //  Cond. #2. for (i := 1 to N)
+      //              Type(ai) = Type(bi) must hold;
+      //  Cond. #3. for (i := 1 to N)
+      //              Name(ai) = Name(bi) must hold;
+      //
+      // where,
+      //  Type(F) = the type of field F and
+      //  Name(F) = the field name.
+
+      bool PassODR = false;
+      // Cond. #1 and Cond. #2
+      if (Reflected->equals(ERT)) {
+        // Cond #3.
+        RSExportRecordType::const_field_iterator AI = Reflected->fields_begin(),
+                                                 BI = ERT->fields_begin();
+
+        for (unsigned i = 0, e = Reflected->getFields().size(); i != e; i++) {
+          if ((*AI)->getName() != (*BI)->getName())
+            break;
+          AI++;
+          BI++;
+        }
+        PassODR = (AI == (Reflected->fields_end()));
+      }
+
+      if (!PassODR) {
+        unsigned DiagID = mDiagEngine->getCustomDiagID(
+            clang::DiagnosticsEngine::Error,
+            "type '%0' in different translation unit (%1 v.s. %2) "
+            "has incompatible type definition");
+        getDiagnostics().Report(DiagID) << Reflected->getName()
+                                        << getInputFileName()
+                                        << RD->getValue().second;
+        return false;
+      }
+    } else {
+      llvm::StringMapEntry<ReflectedDefinitionTy> *ME =
+          llvm::StringMapEntry<ReflectedDefinitionTy>::Create(RDKey);
+      ME->setValue(std::make_pair(ERT, CurInputFile));
+
+      if (!ReflectedDefinitions.insert(ME)) {
+        slangAssert(false && "Type shouldn't be in map yet!");
+      }
+
+      // Take the ownership of ERT such that it won't be freed in ~RSContext().
+      ERT->keep();
+    }
+  }
+  return true;
+}
+
+void Slang::initPreprocessor() {
+  clang::Preprocessor &PP = getPreprocessor();
+
+  std::stringstream RSH;
+  RSH << PP.getPredefines();
+  RSH << "#define RS_VERSION " << mTargetAPI << "\n";
+  RSH << "#include \"rs_core." RS_HEADER_SUFFIX "\"\n";
+  PP.setPredefines(RSH.str());
+}
+
+void Slang::initASTContext() {
+  mRSContext = new RSContext(getPreprocessor(),
+                             getASTContext(),
+                             getTargetInfo(),
+                             &mPragmas,
+                             mTargetAPI,
+                             mVerbose);
+}
+
+bool Slang::IsRSHeaderFile(const char *File) {
+#define RS_HEADER_ENTRY(name)  \
+  if (::strcmp(File, #name "." RS_HEADER_SUFFIX) == 0)  \
+    return true;
+ENUM_RS_HEADER()
+#undef RS_HEADER_ENTRY
+  return false;
+}
+
+bool Slang::IsLocInRSHeaderFile(const clang::SourceLocation &Loc,
+                                  const clang::SourceManager &SourceMgr) {
+  clang::FullSourceLoc FSL(Loc, SourceMgr);
+  clang::PresumedLoc PLoc = SourceMgr.getPresumedLoc(FSL);
+
+  const char *Filename = PLoc.getFilename();
+  if (!Filename) {
+    return false;
+  } else {
+    return IsRSHeaderFile(llvm::sys::path::filename(Filename).data());
+  }
+}
+
+bool Slang::compile(
+    const std::list<std::pair<const char*, const char*> > &IOFiles64,
+    const std::list<std::pair<const char*, const char*> > &IOFiles32,
+    const std::list<std::pair<const char*, const char*> > &DepFiles,
+    const RSCCOptions &Opts,
+    clang::DiagnosticOptions &DiagOpts) {
+  if (IOFiles32.empty())
+    return true;
+
+  if (Opts.mEmitDependency && (DepFiles.size() != IOFiles32.size())) {
+    unsigned DiagID = mDiagEngine->getCustomDiagID(
+        clang::DiagnosticsEngine::Error,
+        "invalid parameter for output dependencies files.");
+    getDiagnostics().Report(DiagID);
+    return false;
+  }
+
+  if (Opts.mEmit3264 && (IOFiles64.size() != IOFiles32.size())) {
+    slangAssert(false && "Should have equal number of 32/64-bit files");
+    return false;
+  }
+
+  std::string RealPackageName;
+
+  const char *InputFile, *Output64File, *Output32File, *BCOutputFile,
+             *DepOutputFile;
+
+  setIncludePaths(Opts.mIncludePaths);
+  setOutputType(Opts.mOutputType);
+  if (Opts.mEmitDependency) {
+    setAdditionalDepTargets(Opts.mAdditionalDepTargets);
+  }
+
+  setDebugMetadataEmission(Opts.mDebugEmission);
+
+  setOptimizationLevel(Opts.mOptimizationLevel);
+
+  mAllowRSPrefix = Opts.mAllowRSPrefix;
+
+  mTargetAPI = Opts.mTargetAPI;
+  if (mTargetAPI != SLANG_DEVELOPMENT_TARGET_API &&
+      (mTargetAPI < SLANG_MINIMUM_TARGET_API ||
+       mTargetAPI > SLANG_MAXIMUM_TARGET_API)) {
+    unsigned DiagID = mDiagEngine->getCustomDiagID(
+        clang::DiagnosticsEngine::Error,
+        "target API level '%0' is out of range ('%1' - '%2')");
+    getDiagnostics().Report(DiagID) << mTargetAPI << SLANG_MINIMUM_TARGET_API
+                                    << SLANG_MAXIMUM_TARGET_API;
+    return false;
+  }
+
+  if (mTargetAPI >= SLANG_M_TARGET_API) {
+    LangOpts.NativeHalfArgsAndReturns = 1;
+    LangOpts.NativeHalfType = 1;
+    LangOpts.HalfArgsAndReturns = 1;
+  }
+
+  mVerbose = Opts.mVerbose;
+
+  // Skip generation of warnings a second time if we are doing more than just
+  // a single pass over the input file.
+  bool SuppressAllWarnings = (Opts.mOutputType != Slang::OT_Dependency);
+
+  std::list<std::pair<const char*, const char*> >::const_iterator
+      IOFile64Iter = IOFiles64.begin(),
+      IOFile32Iter = IOFiles32.begin(),
+      DepFileIter = DepFiles.begin();
+
+  for (unsigned i = 0, e = IOFiles32.size(); i != e; i++) {
+    InputFile = IOFile64Iter->first;
+    Output64File = IOFile64Iter->second;
+    Output32File = IOFile32Iter->second;
+
+    if (!setInputSource(InputFile))
+      return false;
+
+    if (!setOutput(Output64File))
+      return false;
+
+    // For use with 64-bit compilation/reflection. This only sets the filename of
+    // the 32-bit bitcode file, and doesn't actually verify it already exists.
+    mOutput32FileName = Output32File;
+
+    mIsFilterscript = isFilterscript(InputFile);
+
+    CodeGenOpts.MainFileName = mInputFileName;
+
+    if (Slang::compile(Opts) > 0)
+      return false;
+
+    if (!Opts.mJavaReflectionPackageName.empty()) {
+      mRSContext->setReflectJavaPackageName(Opts.mJavaReflectionPackageName);
+    }
+    const std::string &RealPackageName =
+        mRSContext->getReflectJavaPackageName();
+
+    bool doReflection = true;
+    if (Opts.mEmit3264 && (Opts.mBitWidth == 32)) {
+      // Skip reflection on the 32-bit path if we are going to emit it on the
+      // 64-bit path.
+      doReflection = false;
+    }
+    if (Opts.mOutputType != Slang::OT_Dependency && doReflection) {
+
+      if (Opts.mBitcodeStorage == BCST_CPP_CODE) {
+        const std::string &outputFileName = (Opts.mBitWidth == 64) ?
+                                            mOutputFileName : mOutput32FileName;
+        RSReflectionCpp R(mRSContext, Opts.mJavaReflectionPathBase,
+                          getInputFileName(), outputFileName);
+        if (!R.reflect()) {
+            return false;
+        }
+      } else {
+        if (!Opts.mRSPackageName.empty()) {
+          mRSContext->setRSPackageName(Opts.mRSPackageName);
+        }
+
+        std::vector<std::string> generatedFileNames;
+        RSReflectionJava R(mRSContext, &generatedFileNames,
+                           Opts.mJavaReflectionPathBase, getInputFileName(),
+                           mOutputFileName,
+                           Opts.mBitcodeStorage == BCST_JAVA_CODE);
+        if (!R.reflect()) {
+          // TODO Is this needed or will the error message have been printed
+          // already? and why not for the C++ case?
+          fprintf(stderr, "RSContext::reflectToJava : failed to do reflection "
+                          "(%s)\n",
+                  R.getLastError());
+          return false;
+        }
+
+        for (std::vector<std::string>::const_iterator
+                 I = generatedFileNames.begin(), E = generatedFileNames.end();
+             I != E;
+             I++) {
+          std::string ReflectedName = RSSlangReflectUtils::ComputePackagedPath(
+              Opts.mJavaReflectionPathBase.c_str(),
+              (RealPackageName + OS_PATH_SEPARATOR_STR + *I).c_str());
+          appendGeneratedFileName(ReflectedName + ".java");
+        }
+
+        if ((Opts.mOutputType == Slang::OT_Bitcode) &&
+            (Opts.mBitcodeStorage == BCST_JAVA_CODE) &&
+            !generateJavaBitcodeAccessor(Opts.mJavaReflectionPathBase,
+                                         RealPackageName.c_str(),
+                                         mRSContext->getLicenseNote())) {
+          return false;
+        }
+      }
+    }
+
+    if (Opts.mEmitDependency) {
+      BCOutputFile = DepFileIter->first;
+      DepOutputFile = DepFileIter->second;
+
+      setDepTargetBC(BCOutputFile);
+
+      if (!setDepOutput(DepOutputFile))
+        return false;
+
+      if (SuppressAllWarnings) {
+        getDiagnostics().setSuppressAllDiagnostics(true);
+      }
+      if (generateDepFile(Opts.mEmitPhonyDependency) > 0)
+        return false;
+      if (SuppressAllWarnings) {
+        getDiagnostics().setSuppressAllDiagnostics(false);
+      }
+
+      DepFileIter++;
+    }
+
+    if (!checkODR(InputFile))
+      return false;
+
+    IOFile64Iter++;
+    IOFile32Iter++;
+  }
+  return true;
+}
+
+}  // namespace slang
diff --git a/slang/slang.h b/slang/slang.h
new file mode 100644
index 0000000..faf6f8a
--- /dev/null
+++ b/slang/slang.h
@@ -0,0 +1,307 @@
+/*
+ * Copyright 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_H_  // NOLINT
+#define _FRAMEWORKS_COMPILE_SLANG_SLANG_H_
+
+#include <cstdio>
+#include <list>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "llvm/ADT/StringMap.h"
+
+#include "slang_rs_reflect_utils.h"
+#include "slang_version.h"
+
+// Terrible workaround for TargetOptions.h not using llvm::RefCountedBase!
+#include "llvm/ADT/IntrusiveRefCntPtr.h"
+using llvm::RefCountedBase;
+
+#include "clang/Basic/LangOptions.h"
+#include "clang/Basic/TargetOptions.h"
+#include "clang/Frontend/CodeGenOptions.h"
+#include "clang/Lex/ModuleLoader.h"
+
+#include "llvm/ADT/StringRef.h"
+
+#include "llvm/Target/TargetMachine.h"
+
+#include "slang_diagnostic_buffer.h"
+#include "slang_pragma_list.h"
+
+namespace llvm {
+  class tool_output_file;
+}
+
+namespace clang {
+  class ASTConsumer;
+  class ASTContext;
+  class Backend;
+  class CodeGenOptions;
+  class Diagnostic;
+  class DiagnosticsEngine;
+  class FileManager;
+  class FileSystemOptions;
+  class HeaderSearchOptions;
+  class LangOptions;
+  class PCHContainerOperations;
+  class Preprocessor;
+  class PreprocessorOptions;
+  class SourceManager;
+  class TargetInfo;
+}  // namespace clang
+
+namespace slang {
+
+class RSCCOptions;
+class RSContext;
+class RSExportRecordType;
+
+class Slang : public clang::ModuleLoader {
+ public:
+  enum OutputType {
+    OT_Dependency,
+    OT_Assembly,
+    OT_LLVMAssembly,
+    OT_Bitcode,
+    OT_Nothing,
+    OT_Object,
+
+    OT_Default = OT_Bitcode
+  };
+
+ private:
+  // Language options (define the language feature for compiler such as C99)
+  clang::LangOptions LangOpts;
+  // Code generation options for the compiler
+  clang::CodeGenOptions CodeGenOpts;
+
+  // Returns true if this is a Filterscript file.
+  static bool isFilterscript(const char *Filename);
+
+  // Diagnostics Engine (Producer and Diagnostics Reporter)
+  clang::DiagnosticsEngine *mDiagEngine;
+
+  // Diagnostics Consumer
+  // NOTE: The ownership is taken by mDiagEngine after creation.
+  DiagnosticBuffer *mDiagClient;
+
+  // The target being compiled for
+  std::shared_ptr<clang::TargetOptions> mTargetOpts;
+  std::unique_ptr<clang::TargetInfo> mTarget;
+  void createTarget(uint32_t BitWidth);
+
+  // File manager (for prepocessor doing the job such as header file search)
+  std::unique_ptr<clang::FileManager> mFileMgr;
+  std::unique_ptr<clang::FileSystemOptions> mFileSysOpt;
+  void createFileManager();
+
+  // Source manager (responsible for the source code handling)
+  std::unique_ptr<clang::SourceManager> mSourceMgr;
+  void createSourceManager();
+
+  // Preprocessor (source code preprocessor)
+  std::unique_ptr<clang::Preprocessor> mPP;
+  void createPreprocessor();
+
+  // AST context (the context to hold long-lived AST nodes)
+  std::unique_ptr<clang::ASTContext> mASTContext;
+  void createASTContext();
+
+  // AST consumer, responsible for code generation
+  std::unique_ptr<clang::ASTConsumer> mBackend;
+
+  // Options for includes
+  llvm::IntrusiveRefCntPtr<clang::HeaderSearchOptions> mHSOpts;
+
+  // Options for the preprocessor (but not header includes)
+  llvm::IntrusiveRefCntPtr<clang::PreprocessorOptions> mPPOpts;
+
+  // Module provider (probably not necessary, but keeps us more consistent
+  // with regular Clang.
+  std::shared_ptr<clang::PCHContainerOperations> mPCHContainerOperations;
+
+  // File names
+  std::string mInputFileName;
+  std::string mOutputFileName;
+  std::string mOutput32FileName;
+
+  std::string mDepOutputFileName;
+  std::string mDepTargetBCFileName;
+  std::vector<std::string> mAdditionalDepTargets;
+
+  OutputType mOT;
+
+  // Output stream
+  std::unique_ptr<llvm::tool_output_file> mOS;
+
+  // Dependency output stream
+  std::unique_ptr<llvm::tool_output_file> mDOS;
+
+  std::vector<std::string> mIncludePaths;
+
+  // Context for Renderscript
+  RSContext *mRSContext;
+
+  bool mAllowRSPrefix;
+
+  unsigned int mTargetAPI;
+
+  bool mVerbose;
+
+  bool mIsFilterscript;
+
+  // Collect generated filenames (without the .java) for dependency generation
+  std::vector<std::string> mGeneratedFileNames;
+
+  PragmaList mPragmas;
+
+  // FIXME: Should be std::list<RSExportable *> here. But currently we only
+  //        check ODR on record type.
+  //
+  // ReflectedDefinitions maps record type name to a pair:
+  //  <its RSExportRecordType instance,
+  //   the first file contains this record type definition>
+  typedef std::pair<RSExportRecordType*, const char*> ReflectedDefinitionTy;
+  typedef llvm::StringMap<ReflectedDefinitionTy> ReflectedDefinitionListTy;
+  ReflectedDefinitionListTy ReflectedDefinitions;
+
+  bool generateJavaBitcodeAccessor(const std::string &OutputPathBase,
+                                   const std::string &PackageName,
+                                   const std::string *LicenseNote);
+
+  // CurInputFile is the pointer to a char array holding the input filename
+  // and is valid before compile() ends.
+  bool checkODR(const char *CurInputFile);
+
+  clang::DiagnosticsEngine &getDiagnostics() { return *mDiagEngine; }
+  clang::TargetInfo const &getTargetInfo() const { return *mTarget; }
+  clang::FileManager &getFileManager() { return *mFileMgr; }
+  clang::SourceManager &getSourceManager() { return *mSourceMgr; }
+  clang::Preprocessor &getPreprocessor() { return *mPP; }
+  clang::ASTContext &getASTContext() { return *mASTContext; }
+  clang::HeaderSearchOptions &getHeaderSearchOpts() { return *mHSOpts; }
+  clang::PreprocessorOptions &getPreprocessorOpts() { return *mPPOpts; }
+
+  inline clang::TargetOptions const &getTargetOptions() const
+    { return *mTargetOpts.get(); }
+
+  void initPreprocessor();
+  void initASTContext();
+
+  clang::ASTConsumer *createBackend(const RSCCOptions &Opts,
+                                    const clang::CodeGenOptions &CodeGenOpts,
+                                    llvm::raw_ostream *OS,
+                                    OutputType OT);
+
+ public:
+  static const llvm::StringRef PragmaMetadataName;
+
+  static void GlobalInitialization();
+
+  static bool IsRSHeaderFile(const char *File);
+  // FIXME: Determine whether a location is in RS header (i.e., one of the RS
+  //        built-in APIs) should only need its names (we need a "list" of RS
+  //        built-in APIs).
+  static bool IsLocInRSHeaderFile(const clang::SourceLocation &Loc,
+                                  const clang::SourceManager &SourceMgr);
+
+  Slang(uint32_t BitWidth, clang::DiagnosticsEngine *DiagEngine,
+        DiagnosticBuffer *DiagClient);
+
+  virtual ~Slang();
+
+  bool setInputSource(llvm::StringRef InputFile);
+
+  std::string const &getInputFileName() const { return mInputFileName; }
+
+  void setIncludePaths(const std::vector<std::string> &IncludePaths) {
+    mIncludePaths = IncludePaths;
+  }
+
+  void setOutputType(OutputType OT) { mOT = OT; }
+
+  bool setOutput(const char *OutputFile);
+
+  bool setDepOutput(const char *OutputFile);
+
+  void setDepTargetBC(const char *TargetBCFile) {
+    mDepTargetBCFileName = TargetBCFile;
+  }
+
+  void setAdditionalDepTargets(
+      std::vector<std::string> const &AdditionalDepTargets) {
+    mAdditionalDepTargets = AdditionalDepTargets;
+  }
+
+  void appendGeneratedFileName(std::string const &GeneratedFileName) {
+    mGeneratedFileNames.push_back(GeneratedFileName);
+  }
+
+  int generateDepFile(bool PhonyTarget);
+
+  int compile(const RSCCOptions &Opts);
+
+  char const *getErrorMessage() { return mDiagClient->str().c_str(); }
+
+  void setDebugMetadataEmission(bool EmitDebug);
+
+  void setOptimizationLevel(llvm::CodeGenOpt::Level OptimizationLevel);
+
+  // Compile bunch of RS files given in the llvm-rs-cc arguments. Return true if
+  // all given input files are successfully compiled without errors.
+  //
+  // @IOFiles - List of pairs of <input file path, output file path>.
+  //
+  // @DepFiles - List of pairs of <output dep. file path, dependent bitcode
+  //             target>. If @OutputDep is true, this parameter must be given
+  //             with the same number of pairs given in @IOFiles.
+  //
+  // @Opts - Selection of options defined from invoking llvm-rs-cc
+  bool
+  compile(const std::list<std::pair<const char *, const char *>> &IOFiles64,
+          const std::list<std::pair<const char *, const char *>> &IOFiles32,
+          const std::list<std::pair<const char *, const char *>> &DepFiles,
+          const RSCCOptions &Opts,
+          clang::DiagnosticOptions &DiagOpts);
+
+  clang::ModuleLoadResult loadModule(clang::SourceLocation ImportLoc,
+                                     clang::ModuleIdPath Path,
+                                     clang::Module::NameVisibilityKind VK,
+                                     bool IsInclusionDirective) override;
+
+  void makeModuleVisible(clang::Module *Mod,
+                         clang::Module::NameVisibilityKind Visibility,
+                         clang::SourceLocation ImportLoc) override {}
+
+  clang::GlobalModuleIndex *
+  loadGlobalModuleIndex(clang::SourceLocation TriggerLoc) override {
+    // We don't support C++ modules for RenderScript.
+    return nullptr;
+  }
+
+  bool lookupMissingImports(llvm::StringRef Name,
+                            clang::SourceLocation TriggerLoc) override {
+    // We don't support C++ modules for RenderScript.
+    return false;
+  }
+};
+
+} // namespace slang
+
+#endif  // _FRAMEWORKS_COMPILE_SLANG_SLANG_H_  NOLINT
diff --git a/slang/slang_assert.h b/slang/slang_assert.h
new file mode 100644
index 0000000..c3ea84f
--- /dev/null
+++ b/slang/slang_assert.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2011, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_ASSERT_H_  // NOLINT
+#define _FRAMEWORKS_COMPILE_SLANG_SLANG_ASSERT_H_
+
+#include <cstdlib>
+#include <cstdio>
+
+#ifdef __DISABLE_ASSERTS
+#define slangAssert(v) do {} while (0)
+#else
+#define __ABORT_ON_FAILURES 1
+#define slangAssert(v)                                        \
+  do {                                                        \
+    if (!(v)) {                                               \
+      fprintf(stderr, "slangAssert failed at %s:%d - '%s'\n", \
+          __FILE__, __LINE__, #v);                            \
+      if (__ABORT_ON_FAILURES) {                              \
+        abort();                                              \
+      }                                                       \
+    }                                                         \
+  } while (0)
+#endif  // __DISABLE_ASSERTS
+
+
+#endif  // _FRAMEWORKS_COMPILE_SLANG_SLANG_ASSERT_H_  NOLINT
diff --git a/slang/slang_backend.cpp b/slang/slang_backend.cpp
new file mode 100644
index 0000000..81de4fd
--- /dev/null
+++ b/slang/slang_backend.cpp
@@ -0,0 +1,911 @@
+/*
+ * Copyright 2010-2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "slang_backend.h"
+
+#include <string>
+#include <vector>
+
+#include "clang/AST/ASTContext.h"
+#include "clang/AST/Attr.h"
+#include "clang/AST/Decl.h"
+#include "clang/AST/DeclGroup.h"
+
+#include "clang/Basic/Diagnostic.h"
+#include "clang/Basic/TargetInfo.h"
+#include "clang/Basic/TargetOptions.h"
+
+#include "clang/CodeGen/ModuleBuilder.h"
+
+#include "clang/Frontend/CodeGenOptions.h"
+#include "clang/Frontend/FrontendDiagnostic.h"
+
+#include "llvm/ADT/Twine.h"
+#include "llvm/ADT/StringExtras.h"
+
+#include "llvm/Bitcode/ReaderWriter.h"
+
+#include "llvm/CodeGen/RegAllocRegistry.h"
+#include "llvm/CodeGen/SchedulerRegistry.h"
+
+#include "llvm/IR/Constant.h"
+#include "llvm/IR/Constants.h"
+#include "llvm/IR/DataLayout.h"
+#include "llvm/IR/DebugLoc.h"
+#include "llvm/IR/DerivedTypes.h"
+#include "llvm/IR/Function.h"
+#include "llvm/IR/IRBuilder.h"
+#include "llvm/IR/IRPrintingPasses.h"
+#include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/Metadata.h"
+#include "llvm/IR/Module.h"
+
+#include "llvm/Transforms/IPO/PassManagerBuilder.h"
+
+#include "llvm/Target/TargetMachine.h"
+#include "llvm/Target/TargetOptions.h"
+#include "llvm/Support/TargetRegistry.h"
+
+#include "llvm/MC/SubtargetFeature.h"
+
+#include "slang_assert.h"
+#include "slang.h"
+#include "slang_bitcode_gen.h"
+#include "slang_rs_context.h"
+#include "slang_rs_export_foreach.h"
+#include "slang_rs_export_func.h"
+#include "slang_rs_export_reduce.h"
+#include "slang_rs_export_type.h"
+#include "slang_rs_export_var.h"
+#include "slang_rs_metadata.h"
+
+#include "rs_cc_options.h"
+
+#include "strip_unknown_attributes.h"
+
+namespace slang {
+
+void Backend::CreateFunctionPasses() {
+  if (!mPerFunctionPasses) {
+    mPerFunctionPasses = new llvm::legacy::FunctionPassManager(mpModule);
+
+    llvm::PassManagerBuilder PMBuilder;
+    PMBuilder.OptLevel = mCodeGenOpts.OptimizationLevel;
+    PMBuilder.populateFunctionPassManager(*mPerFunctionPasses);
+  }
+}
+
+void Backend::CreateModulePasses() {
+  if (!mPerModulePasses) {
+    mPerModulePasses = new llvm::legacy::PassManager();
+
+    llvm::PassManagerBuilder PMBuilder;
+    PMBuilder.OptLevel = mCodeGenOpts.OptimizationLevel;
+    PMBuilder.SizeLevel = mCodeGenOpts.OptimizeSize;
+    if (mCodeGenOpts.UnitAtATime) {
+      PMBuilder.DisableUnitAtATime = 0;
+    } else {
+      PMBuilder.DisableUnitAtATime = 1;
+    }
+
+    if (mCodeGenOpts.UnrollLoops) {
+      PMBuilder.DisableUnrollLoops = 0;
+    } else {
+      PMBuilder.DisableUnrollLoops = 1;
+    }
+
+    PMBuilder.populateModulePassManager(*mPerModulePasses);
+    // Add a pass to strip off unknown/unsupported attributes.
+    mPerModulePasses->add(createStripUnknownAttributesPass());
+  }
+}
+
+bool Backend::CreateCodeGenPasses() {
+  if ((mOT != Slang::OT_Assembly) && (mOT != Slang::OT_Object))
+    return true;
+
+  // Now we add passes for code emitting
+  if (mCodeGenPasses) {
+    return true;
+  } else {
+    mCodeGenPasses = new llvm::legacy::FunctionPassManager(mpModule);
+  }
+
+  // Create the TargetMachine for generating code.
+  std::string Triple = mpModule->getTargetTriple();
+
+  std::string Error;
+  const llvm::Target* TargetInfo =
+      llvm::TargetRegistry::lookupTarget(Triple, Error);
+  if (TargetInfo == nullptr) {
+    mDiagEngine.Report(clang::diag::err_fe_unable_to_create_target) << Error;
+    return false;
+  }
+
+  // Target Machine Options
+  llvm::TargetOptions Options;
+
+  // Use soft-float ABI for ARM (which is the target used by Slang during code
+  // generation).  Codegen still uses hardware FPU by default.  To use software
+  // floating point, add 'soft-float' feature to FeaturesStr below.
+  Options.FloatABIType = llvm::FloatABI::Soft;
+
+  // BCC needs all unknown symbols resolved at compilation time. So we don't
+  // need any relocation model.
+  llvm::Reloc::Model RM = llvm::Reloc::Static;
+
+  // This is set for the linker (specify how large of the virtual addresses we
+  // can access for all unknown symbols.)
+  llvm::CodeModel::Model CM;
+  if (mpModule->getDataLayout().getPointerSize() == 4) {
+    CM = llvm::CodeModel::Small;
+  } else {
+    // The target may have pointer size greater than 32 (e.g. x86_64
+    // architecture) may need large data address model
+    CM = llvm::CodeModel::Medium;
+  }
+
+  // Setup feature string
+  std::string FeaturesStr;
+  if (mTargetOpts.CPU.size() || mTargetOpts.Features.size()) {
+    llvm::SubtargetFeatures Features;
+
+    for (std::vector<std::string>::const_iterator
+             I = mTargetOpts.Features.begin(), E = mTargetOpts.Features.end();
+         I != E;
+         I++)
+      Features.AddFeature(*I);
+
+    FeaturesStr = Features.getString();
+  }
+
+  llvm::TargetMachine *TM =
+    TargetInfo->createTargetMachine(Triple, mTargetOpts.CPU, FeaturesStr,
+                                    Options, RM, CM);
+
+  // Register allocation policy:
+  //  createFastRegisterAllocator: fast but bad quality
+  //  createGreedyRegisterAllocator: not so fast but good quality
+  llvm::RegisterRegAlloc::setDefault((mCodeGenOpts.OptimizationLevel == 0) ?
+                                     llvm::createFastRegisterAllocator :
+                                     llvm::createGreedyRegisterAllocator);
+
+  llvm::CodeGenOpt::Level OptLevel = llvm::CodeGenOpt::Default;
+  if (mCodeGenOpts.OptimizationLevel == 0) {
+    OptLevel = llvm::CodeGenOpt::None;
+  } else if (mCodeGenOpts.OptimizationLevel == 3) {
+    OptLevel = llvm::CodeGenOpt::Aggressive;
+  }
+
+  llvm::TargetMachine::CodeGenFileType CGFT =
+      llvm::TargetMachine::CGFT_AssemblyFile;
+  if (mOT == Slang::OT_Object) {
+    CGFT = llvm::TargetMachine::CGFT_ObjectFile;
+  }
+  if (TM->addPassesToEmitFile(*mCodeGenPasses, mBufferOutStream,
+                              CGFT, OptLevel)) {
+    mDiagEngine.Report(clang::diag::err_fe_unable_to_interface_with_target);
+    return false;
+  }
+
+  return true;
+}
+
+Backend::Backend(RSContext *Context, clang::DiagnosticsEngine *DiagEngine,
+                 const RSCCOptions &Opts,
+                 const clang::HeaderSearchOptions &HeaderSearchOpts,
+                 const clang::PreprocessorOptions &PreprocessorOpts,
+                 const clang::CodeGenOptions &CodeGenOpts,
+                 const clang::TargetOptions &TargetOpts, PragmaList *Pragmas,
+                 llvm::raw_ostream *OS, Slang::OutputType OT,
+                 clang::SourceManager &SourceMgr, bool AllowRSPrefix,
+                 bool IsFilterscript)
+    : ASTConsumer(), mTargetOpts(TargetOpts), mpModule(nullptr), mpOS(OS),
+      mOT(OT), mGen(nullptr), mPerFunctionPasses(nullptr),
+      mPerModulePasses(nullptr), mCodeGenPasses(nullptr),
+      mBufferOutStream(*mpOS), mContext(Context),
+      mSourceMgr(SourceMgr), mASTPrint(Opts.mASTPrint), mAllowRSPrefix(AllowRSPrefix),
+      mIsFilterscript(IsFilterscript), mExportVarMetadata(nullptr),
+      mExportFuncMetadata(nullptr), mExportForEachNameMetadata(nullptr),
+      mExportForEachSignatureMetadata(nullptr),
+      mExportReduceMetadata(nullptr),
+      mExportTypeMetadata(nullptr), mRSObjectSlotsMetadata(nullptr),
+      mRefCount(mContext->getASTContext()),
+      mASTChecker(Context, Context->getTargetAPI(), IsFilterscript),
+      mForEachHandler(Context),
+      mLLVMContext(llvm::getGlobalContext()), mDiagEngine(*DiagEngine),
+      mCodeGenOpts(CodeGenOpts), mPragmas(Pragmas) {
+  mGen = CreateLLVMCodeGen(mDiagEngine, "", HeaderSearchOpts, PreprocessorOpts,
+      mCodeGenOpts, mLLVMContext);
+}
+
+void Backend::Initialize(clang::ASTContext &Ctx) {
+  mGen->Initialize(Ctx);
+
+  mpModule = mGen->GetModule();
+}
+
+void Backend::HandleTranslationUnit(clang::ASTContext &Ctx) {
+  HandleTranslationUnitPre(Ctx);
+
+  if (mASTPrint)
+    Ctx.getTranslationUnitDecl()->dump();
+
+  mGen->HandleTranslationUnit(Ctx);
+
+  // Here, we complete a translation unit (whole translation unit is now in LLVM
+  // IR). Now, interact with LLVM backend to generate actual machine code (asm
+  // or machine code, whatever.)
+
+  // Silently ignore if we weren't initialized for some reason.
+  if (!mpModule)
+    return;
+
+  llvm::Module *M = mGen->ReleaseModule();
+  if (!M) {
+    // The module has been released by IR gen on failures, do not double free.
+    mpModule = nullptr;
+    return;
+  }
+
+  slangAssert(mpModule == M &&
+              "Unexpected module change during LLVM IR generation");
+
+  // Insert #pragma information into metadata section of module
+  if (!mPragmas->empty()) {
+    llvm::NamedMDNode *PragmaMetadata =
+        mpModule->getOrInsertNamedMetadata(Slang::PragmaMetadataName);
+    for (PragmaList::const_iterator I = mPragmas->begin(), E = mPragmas->end();
+         I != E;
+         I++) {
+      llvm::SmallVector<llvm::Metadata*, 2> Pragma;
+      // Name goes first
+      Pragma.push_back(llvm::MDString::get(mLLVMContext, I->first));
+      // And then value
+      Pragma.push_back(llvm::MDString::get(mLLVMContext, I->second));
+
+      // Create MDNode and insert into PragmaMetadata
+      PragmaMetadata->addOperand(
+          llvm::MDNode::get(mLLVMContext, Pragma));
+    }
+  }
+
+  HandleTranslationUnitPost(mpModule);
+
+  // Create passes for optimization and code emission
+
+  // Create and run per-function passes
+  CreateFunctionPasses();
+  if (mPerFunctionPasses) {
+    mPerFunctionPasses->doInitialization();
+
+    for (llvm::Module::iterator I = mpModule->begin(), E = mpModule->end();
+         I != E;
+         I++)
+      if (!I->isDeclaration())
+        mPerFunctionPasses->run(*I);
+
+    mPerFunctionPasses->doFinalization();
+  }
+
+  // Create and run module passes
+  CreateModulePasses();
+  if (mPerModulePasses)
+    mPerModulePasses->run(*mpModule);
+
+  switch (mOT) {
+    case Slang::OT_Assembly:
+    case Slang::OT_Object: {
+      if (!CreateCodeGenPasses())
+        return;
+
+      mCodeGenPasses->doInitialization();
+
+      for (llvm::Module::iterator I = mpModule->begin(), E = mpModule->end();
+          I != E;
+          I++)
+        if (!I->isDeclaration())
+          mCodeGenPasses->run(*I);
+
+      mCodeGenPasses->doFinalization();
+      break;
+    }
+    case Slang::OT_LLVMAssembly: {
+      llvm::legacy::PassManager *LLEmitPM = new llvm::legacy::PassManager();
+      LLEmitPM->add(llvm::createPrintModulePass(mBufferOutStream));
+      LLEmitPM->run(*mpModule);
+      break;
+    }
+    case Slang::OT_Bitcode: {
+      writeBitcode(mBufferOutStream, *mpModule, getTargetAPI(),
+                   mCodeGenOpts.OptimizationLevel, mCodeGenOpts.getDebugInfo());
+      break;
+    }
+    case Slang::OT_Nothing: {
+      return;
+    }
+    default: {
+      slangAssert(false && "Unknown output type");
+    }
+  }
+}
+
+void Backend::HandleTagDeclDefinition(clang::TagDecl *D) {
+  mGen->HandleTagDeclDefinition(D);
+}
+
+void Backend::CompleteTentativeDefinition(clang::VarDecl *D) {
+  mGen->CompleteTentativeDefinition(D);
+}
+
+Backend::~Backend() {
+  delete mpModule;
+  delete mGen;
+  delete mPerFunctionPasses;
+  delete mPerModulePasses;
+  delete mCodeGenPasses;
+}
+
+// 1) Add zero initialization of local RS object types
+void Backend::AnnotateFunction(clang::FunctionDecl *FD) {
+  if (FD &&
+      FD->hasBody() &&
+      !Slang::IsLocInRSHeaderFile(FD->getLocation(), mSourceMgr)) {
+    mRefCount.Init();
+    mRefCount.SetDeclContext(FD);
+    mRefCount.Visit(FD->getBody());
+  }
+}
+
+bool Backend::HandleTopLevelDecl(clang::DeclGroupRef D) {
+  // Find and remember the types for rs_allocation and rs_script_call_t so
+  // they can be used later for translating rsForEach() calls.
+  for (clang::DeclGroupRef::iterator I = D.begin(), E = D.end();
+       (mContext->getAllocationType().isNull() ||
+        mContext->getScriptCallType().isNull()) &&
+       I != E; I++) {
+    if (clang::TypeDecl* TD = llvm::dyn_cast<clang::TypeDecl>(*I)) {
+      clang::StringRef TypeName = TD->getName();
+      if (TypeName.equals("rs_allocation")) {
+        mContext->setAllocationType(TD);
+      } else if (TypeName.equals("rs_script_call_t")) {
+        mContext->setScriptCallType(TD);
+      }
+    }
+  }
+
+  // Disallow user-defined functions with prefix "rs"
+  if (!mAllowRSPrefix) {
+    // Iterate all function declarations in the program.
+    for (clang::DeclGroupRef::iterator I = D.begin(), E = D.end();
+         I != E; I++) {
+      clang::FunctionDecl *FD = llvm::dyn_cast<clang::FunctionDecl>(*I);
+      if (FD == nullptr)
+        continue;
+      if (!FD->getName().startswith("rs"))  // Check prefix
+        continue;
+      if (!Slang::IsLocInRSHeaderFile(FD->getLocation(), mSourceMgr))
+        mContext->ReportError(FD->getLocation(),
+                              "invalid function name prefix, "
+                              "\"rs\" is reserved: '%0'")
+            << FD->getName();
+    }
+  }
+
+  for (clang::DeclGroupRef::iterator I = D.begin(), E = D.end(); I != E; I++) {
+    clang::FunctionDecl *FD = llvm::dyn_cast<clang::FunctionDecl>(*I);
+    if (FD) {
+      // Handle forward reference from pragma (see
+      // RSReducePragmaHandler::HandlePragma for backward reference).
+      mContext->markUsedByReducePragma(FD, RSContext::CheckNameYes);
+      if (FD->isGlobal()) {
+        // Check that we don't have any array parameters being misinterpreted as
+        // kernel pointers due to the C type system's array to pointer decay.
+        size_t numParams = FD->getNumParams();
+        for (size_t i = 0; i < numParams; i++) {
+          const clang::ParmVarDecl *PVD = FD->getParamDecl(i);
+          clang::QualType QT = PVD->getOriginalType();
+          if (QT->isArrayType()) {
+            mContext->ReportError(
+                PVD->getTypeSpecStartLoc(),
+                "exported function parameters may not have array type: %0")
+                << QT;
+          }
+        }
+        AnnotateFunction(FD);
+      }
+    }
+
+    if (getTargetAPI() >= SLANG_FEATURE_SINGLE_SOURCE_API) {
+      if (FD && FD->hasBody() &&
+          !Slang::IsLocInRSHeaderFile(FD->getLocation(), mSourceMgr)) {
+        if (FD->hasAttr<clang::KernelAttr>()) {
+          // Log functions with attribute "kernel" by their names, and assign
+          // them slot numbers. Any other function cannot be used in a
+          // rsForEach() or rsForEachWithOptions() call, including old-style
+          // kernel functions which are defined without the "kernel" attribute.
+          mContext->addForEach(FD);
+        }
+        // Look for any kernel launch calls and translate them into using the
+        // internal API.
+        // Report a compiler error on kernel launches inside a kernel.
+        mForEachHandler.handleForEachCalls(FD, getTargetAPI());
+      }
+    }
+  }
+
+  return mGen->HandleTopLevelDecl(D);
+}
+
+void Backend::HandleTranslationUnitPre(clang::ASTContext &C) {
+  clang::TranslationUnitDecl *TUDecl = C.getTranslationUnitDecl();
+
+  if (!mContext->processReducePragmas(this))
+    return;
+
+  // If we have an invalid RS/FS AST, don't check further.
+  if (!mASTChecker.Validate()) {
+    return;
+  }
+
+  if (mIsFilterscript) {
+    mContext->addPragma("rs_fp_relaxed", "");
+  }
+
+  int version = mContext->getVersion();
+  if (version == 0) {
+    // Not setting a version is an error
+    mDiagEngine.Report(
+        mSourceMgr.getLocForEndOfFile(mSourceMgr.getMainFileID()),
+        mDiagEngine.getCustomDiagID(
+            clang::DiagnosticsEngine::Error,
+            "missing pragma for version in source file"));
+  } else {
+    slangAssert(version == 1);
+  }
+
+  if (mContext->getReflectJavaPackageName().empty()) {
+    mDiagEngine.Report(
+        mSourceMgr.getLocForEndOfFile(mSourceMgr.getMainFileID()),
+        mDiagEngine.getCustomDiagID(clang::DiagnosticsEngine::Error,
+                                    "missing \"#pragma rs "
+                                    "java_package_name(com.foo.bar)\" "
+                                    "in source file"));
+    return;
+  }
+
+  // Create a static global destructor if necessary (to handle RS object
+  // runtime cleanup).
+  clang::FunctionDecl *FD = mRefCount.CreateStaticGlobalDtor();
+  if (FD) {
+    HandleTopLevelDecl(clang::DeclGroupRef(FD));
+  }
+
+  // Process any static function declarations
+  for (clang::DeclContext::decl_iterator I = TUDecl->decls_begin(),
+          E = TUDecl->decls_end(); I != E; I++) {
+    if ((I->getKind() >= clang::Decl::firstFunction) &&
+        (I->getKind() <= clang::Decl::lastFunction)) {
+      clang::FunctionDecl *FD = llvm::dyn_cast<clang::FunctionDecl>(*I);
+      if (FD && !FD->isGlobal()) {
+        AnnotateFunction(FD);
+      }
+    }
+  }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+void Backend::dumpExportVarInfo(llvm::Module *M) {
+  int slotCount = 0;
+  if (mExportVarMetadata == nullptr)
+    mExportVarMetadata = M->getOrInsertNamedMetadata(RS_EXPORT_VAR_MN);
+
+  llvm::SmallVector<llvm::Metadata *, 2> ExportVarInfo;
+
+  // We emit slot information (#rs_object_slots) for any reference counted
+  // RS type or pointer (which can also be bound).
+
+  for (RSContext::const_export_var_iterator I = mContext->export_vars_begin(),
+          E = mContext->export_vars_end();
+       I != E;
+       I++) {
+    const RSExportVar *EV = *I;
+    const RSExportType *ET = EV->getType();
+    bool countsAsRSObject = false;
+
+    // Variable name
+    ExportVarInfo.push_back(
+        llvm::MDString::get(mLLVMContext, EV->getName().c_str()));
+
+    // Type name
+    switch (ET->getClass()) {
+      case RSExportType::ExportClassPrimitive: {
+        const RSExportPrimitiveType *PT =
+            static_cast<const RSExportPrimitiveType*>(ET);
+        ExportVarInfo.push_back(
+            llvm::MDString::get(
+              mLLVMContext, llvm::utostr_32(PT->getType())));
+        if (PT->isRSObjectType()) {
+          countsAsRSObject = true;
+        }
+        break;
+      }
+      case RSExportType::ExportClassPointer: {
+        ExportVarInfo.push_back(
+            llvm::MDString::get(
+              mLLVMContext, ("*" + static_cast<const RSExportPointerType*>(ET)
+                ->getPointeeType()->getName()).c_str()));
+        break;
+      }
+      case RSExportType::ExportClassMatrix: {
+        ExportVarInfo.push_back(
+            llvm::MDString::get(
+              mLLVMContext, llvm::utostr_32(
+                  /* TODO Strange value.  This pushes just a number, quite
+                   * different than the other cases.  What is this used for?
+                   * These are the metadata values that some partner drivers
+                   * want to reference (for TBAA, etc.). We may want to look
+                   * at whether these provide any reasonable value (or have
+                   * distinct enough values to actually depend on).
+                   */
+                DataTypeRSMatrix2x2 +
+                static_cast<const RSExportMatrixType*>(ET)->getDim() - 2)));
+        break;
+      }
+      case RSExportType::ExportClassVector:
+      case RSExportType::ExportClassConstantArray:
+      case RSExportType::ExportClassRecord: {
+        ExportVarInfo.push_back(
+            llvm::MDString::get(mLLVMContext,
+              EV->getType()->getName().c_str()));
+        break;
+      }
+    }
+
+    mExportVarMetadata->addOperand(
+        llvm::MDNode::get(mLLVMContext, ExportVarInfo));
+    ExportVarInfo.clear();
+
+    if (mRSObjectSlotsMetadata == nullptr) {
+      mRSObjectSlotsMetadata =
+          M->getOrInsertNamedMetadata(RS_OBJECT_SLOTS_MN);
+    }
+
+    if (countsAsRSObject) {
+      mRSObjectSlotsMetadata->addOperand(llvm::MDNode::get(mLLVMContext,
+          llvm::MDString::get(mLLVMContext, llvm::utostr_32(slotCount))));
+    }
+
+    slotCount++;
+  }
+}
+
+void Backend::dumpExportFunctionInfo(llvm::Module *M) {
+  if (mExportFuncMetadata == nullptr)
+    mExportFuncMetadata =
+        M->getOrInsertNamedMetadata(RS_EXPORT_FUNC_MN);
+
+  llvm::SmallVector<llvm::Metadata *, 1> ExportFuncInfo;
+
+  for (RSContext::const_export_func_iterator
+          I = mContext->export_funcs_begin(),
+          E = mContext->export_funcs_end();
+       I != E;
+       I++) {
+    const RSExportFunc *EF = *I;
+
+    // Function name
+    if (!EF->hasParam()) {
+      ExportFuncInfo.push_back(llvm::MDString::get(mLLVMContext,
+                                                   EF->getName().c_str()));
+    } else {
+      llvm::Function *F = M->getFunction(EF->getName());
+      llvm::Function *HelperFunction;
+      const std::string HelperFunctionName(".helper_" + EF->getName());
+
+      slangAssert(F && "Function marked as exported disappeared in Bitcode");
+
+      // Create helper function
+      {
+        llvm::StructType *HelperFunctionParameterTy = nullptr;
+        std::vector<bool> isStructInput;
+
+        if (!F->getArgumentList().empty()) {
+          std::vector<llvm::Type*> HelperFunctionParameterTys;
+          for (llvm::Function::arg_iterator AI = F->arg_begin(),
+                   AE = F->arg_end(); AI != AE; AI++) {
+              if (AI->getType()->isPointerTy() && AI->getType()->getPointerElementType()->isStructTy()) {
+                  HelperFunctionParameterTys.push_back(AI->getType()->getPointerElementType());
+                  isStructInput.push_back(true);
+              } else {
+                  HelperFunctionParameterTys.push_back(AI->getType());
+                  isStructInput.push_back(false);
+              }
+          }
+          HelperFunctionParameterTy =
+              llvm::StructType::get(mLLVMContext, HelperFunctionParameterTys);
+        }
+
+        if (!EF->checkParameterPacketType(HelperFunctionParameterTy)) {
+          fprintf(stderr, "Failed to export function %s: parameter type "
+                          "mismatch during creation of helper function.\n",
+                  EF->getName().c_str());
+
+          const RSExportRecordType *Expected = EF->getParamPacketType();
+          if (Expected) {
+            fprintf(stderr, "Expected:\n");
+            Expected->getLLVMType()->dump();
+          }
+          if (HelperFunctionParameterTy) {
+            fprintf(stderr, "Got:\n");
+            HelperFunctionParameterTy->dump();
+          }
+        }
+
+        std::vector<llvm::Type*> Params;
+        if (HelperFunctionParameterTy) {
+          llvm::PointerType *HelperFunctionParameterTyP =
+              llvm::PointerType::getUnqual(HelperFunctionParameterTy);
+          Params.push_back(HelperFunctionParameterTyP);
+        }
+
+        llvm::FunctionType * HelperFunctionType =
+            llvm::FunctionType::get(F->getReturnType(),
+                                    Params,
+                                    /* IsVarArgs = */false);
+
+        HelperFunction =
+            llvm::Function::Create(HelperFunctionType,
+                                   llvm::GlobalValue::ExternalLinkage,
+                                   HelperFunctionName,
+                                   M);
+
+        HelperFunction->addFnAttr(llvm::Attribute::NoInline);
+        HelperFunction->setCallingConv(F->getCallingConv());
+
+        // Create helper function body
+        {
+          llvm::Argument *HelperFunctionParameter =
+              &(*HelperFunction->arg_begin());
+          llvm::BasicBlock *BB =
+              llvm::BasicBlock::Create(mLLVMContext, "entry", HelperFunction);
+          llvm::IRBuilder<> *IB = new llvm::IRBuilder<>(BB);
+          llvm::SmallVector<llvm::Value*, 6> Params;
+          llvm::Value *Idx[2];
+
+          Idx[0] =
+              llvm::ConstantInt::get(llvm::Type::getInt32Ty(mLLVMContext), 0);
+
+          // getelementptr and load instruction for all elements in
+          // parameter .p
+          for (size_t i = 0; i < EF->getNumParameters(); i++) {
+            // getelementptr
+            Idx[1] = llvm::ConstantInt::get(
+              llvm::Type::getInt32Ty(mLLVMContext), i);
+
+            llvm::Value *Ptr = NULL;
+
+            Ptr = IB->CreateInBoundsGEP(HelperFunctionParameter, Idx);
+
+            // Load is only required for non-struct ptrs
+            if (isStructInput[i]) {
+                Params.push_back(Ptr);
+            } else {
+                llvm::Value *V = IB->CreateLoad(Ptr);
+                Params.push_back(V);
+            }
+          }
+
+          // Call and pass the all elements as parameter to F
+          llvm::CallInst *CI = IB->CreateCall(F, Params);
+
+          CI->setCallingConv(F->getCallingConv());
+
+          if (F->getReturnType() == llvm::Type::getVoidTy(mLLVMContext)) {
+            IB->CreateRetVoid();
+          } else {
+            IB->CreateRet(CI);
+          }
+
+          delete IB;
+        }
+      }
+
+      ExportFuncInfo.push_back(
+          llvm::MDString::get(mLLVMContext, HelperFunctionName.c_str()));
+    }
+
+    mExportFuncMetadata->addOperand(
+        llvm::MDNode::get(mLLVMContext, ExportFuncInfo));
+    ExportFuncInfo.clear();
+  }
+}
+
+void Backend::dumpExportForEachInfo(llvm::Module *M) {
+  if (mExportForEachNameMetadata == nullptr) {
+    mExportForEachNameMetadata =
+        M->getOrInsertNamedMetadata(RS_EXPORT_FOREACH_NAME_MN);
+  }
+  if (mExportForEachSignatureMetadata == nullptr) {
+    mExportForEachSignatureMetadata =
+        M->getOrInsertNamedMetadata(RS_EXPORT_FOREACH_MN);
+  }
+
+  llvm::SmallVector<llvm::Metadata *, 1> ExportForEachName;
+  llvm::SmallVector<llvm::Metadata *, 1> ExportForEachInfo;
+
+  for (RSContext::const_export_foreach_iterator
+          I = mContext->export_foreach_begin(),
+          E = mContext->export_foreach_end();
+       I != E;
+       I++) {
+    const RSExportForEach *EFE = *I;
+
+    ExportForEachName.push_back(
+        llvm::MDString::get(mLLVMContext, EFE->getName().c_str()));
+
+    mExportForEachNameMetadata->addOperand(
+        llvm::MDNode::get(mLLVMContext, ExportForEachName));
+    ExportForEachName.clear();
+
+    ExportForEachInfo.push_back(
+        llvm::MDString::get(mLLVMContext,
+                            llvm::utostr_32(EFE->getSignatureMetadata())));
+
+    mExportForEachSignatureMetadata->addOperand(
+        llvm::MDNode::get(mLLVMContext, ExportForEachInfo));
+    ExportForEachInfo.clear();
+  }
+}
+
+void Backend::dumpExportReduceInfo(llvm::Module *M) {
+  if (!mExportReduceMetadata) {
+    mExportReduceMetadata =
+      M->getOrInsertNamedMetadata(RS_EXPORT_REDUCE_MN);
+  }
+
+  llvm::SmallVector<llvm::Metadata *, 6> ExportReduceInfo;
+  // Add operand to ExportReduceInfo, padding out missing operands with
+  // nullptr.
+  auto addOperand = [&ExportReduceInfo](uint32_t Idx, llvm::Metadata *N) {
+    while (Idx > ExportReduceInfo.size())
+      ExportReduceInfo.push_back(nullptr);
+    ExportReduceInfo.push_back(N);
+  };
+  // Add string operand to ExportReduceInfo, padding out missing operands
+  // with nullptr.
+  // If string is empty, then do not add it unless Always is true.
+  auto addString = [&addOperand, this](uint32_t Idx, const std::string &S,
+                                       bool Always = true) {
+    if (Always || !S.empty())
+      addOperand(Idx, llvm::MDString::get(mLLVMContext, S));
+  };
+
+  // Add the description of the reduction kernels to the metadata node.
+  for (auto I = mContext->export_reduce_begin(),
+            E = mContext->export_reduce_end();
+       I != E; ++I) {
+    ExportReduceInfo.clear();
+
+    int Idx = 0;
+
+    addString(Idx++, (*I)->getNameReduce());
+
+    addOperand(Idx++, llvm::MDString::get(mLLVMContext, llvm::utostr_32((*I)->getAccumulatorTypeSize())));
+
+    llvm::SmallVector<llvm::Metadata *, 2> Accumulator;
+    Accumulator.push_back(
+      llvm::MDString::get(mLLVMContext, (*I)->getNameAccumulator()));
+    Accumulator.push_back(llvm::MDString::get(
+      mLLVMContext,
+      llvm::utostr_32((*I)->getAccumulatorSignatureMetadata())));
+    addOperand(Idx++, llvm::MDTuple::get(mLLVMContext, Accumulator));
+
+    addString(Idx++, (*I)->getNameInitializer(), false);
+    addString(Idx++, (*I)->getNameCombiner(), false);
+    addString(Idx++, (*I)->getNameOutConverter(), false);
+    addString(Idx++, (*I)->getNameHalter(), false);
+
+    mExportReduceMetadata->addOperand(
+      llvm::MDTuple::get(mLLVMContext, ExportReduceInfo));
+  }
+}
+
+void Backend::dumpExportTypeInfo(llvm::Module *M) {
+  llvm::SmallVector<llvm::Metadata *, 1> ExportTypeInfo;
+
+  for (RSContext::const_export_type_iterator
+          I = mContext->export_types_begin(),
+          E = mContext->export_types_end();
+       I != E;
+       I++) {
+    // First, dump type name list to export
+    const RSExportType *ET = I->getValue();
+
+    ExportTypeInfo.clear();
+    // Type name
+    ExportTypeInfo.push_back(
+        llvm::MDString::get(mLLVMContext, ET->getName().c_str()));
+
+    if (ET->getClass() == RSExportType::ExportClassRecord) {
+      const RSExportRecordType *ERT =
+          static_cast<const RSExportRecordType*>(ET);
+
+      if (mExportTypeMetadata == nullptr)
+        mExportTypeMetadata =
+            M->getOrInsertNamedMetadata(RS_EXPORT_TYPE_MN);
+
+      mExportTypeMetadata->addOperand(
+          llvm::MDNode::get(mLLVMContext, ExportTypeInfo));
+
+      // Now, export struct field information to %[struct name]
+      std::string StructInfoMetadataName("%");
+      StructInfoMetadataName.append(ET->getName());
+      llvm::NamedMDNode *StructInfoMetadata =
+          M->getOrInsertNamedMetadata(StructInfoMetadataName);
+      llvm::SmallVector<llvm::Metadata *, 3> FieldInfo;
+
+      slangAssert(StructInfoMetadata->getNumOperands() == 0 &&
+                  "Metadata with same name was created before");
+      for (RSExportRecordType::const_field_iterator FI = ERT->fields_begin(),
+              FE = ERT->fields_end();
+           FI != FE;
+           FI++) {
+        const RSExportRecordType::Field *F = *FI;
+
+        // 1. field name
+        FieldInfo.push_back(llvm::MDString::get(mLLVMContext,
+                                                F->getName().c_str()));
+
+        // 2. field type name
+        FieldInfo.push_back(
+            llvm::MDString::get(mLLVMContext,
+                                F->getType()->getName().c_str()));
+
+        StructInfoMetadata->addOperand(
+            llvm::MDNode::get(mLLVMContext, FieldInfo));
+        FieldInfo.clear();
+      }
+    }   // ET->getClass() == RSExportType::ExportClassRecord
+  }
+}
+
+void Backend::HandleTranslationUnitPost(llvm::Module *M) {
+
+  if (!mContext->is64Bit()) {
+    M->setDataLayout("e-p:32:32-i64:64-v128:64:128-n32-S64");
+  }
+
+  if (!mContext->processExports())
+    return;
+
+  if (mContext->hasExportVar())
+    dumpExportVarInfo(M);
+
+  if (mContext->hasExportFunc())
+    dumpExportFunctionInfo(M);
+
+  if (mContext->hasExportForEach())
+    dumpExportForEachInfo(M);
+
+  if (mContext->hasExportReduce())
+    dumpExportReduceInfo(M);
+
+  if (mContext->hasExportType())
+    dumpExportTypeInfo(M);
+}
+
+}  // namespace slang
diff --git a/slang/slang_backend.h b/slang/slang_backend.h
new file mode 100644
index 0000000..38aa1e4
--- /dev/null
+++ b/slang/slang_backend.h
@@ -0,0 +1,198 @@
+/*
+ * Copyright 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_BACKEND_H_  // NOLINT
+#define _FRAMEWORKS_COMPILE_SLANG_SLANG_BACKEND_H_
+
+#include "clang/AST/ASTConsumer.h"
+
+#include "llvm/IR/LegacyPassManager.h"
+
+#include "llvm/Support/raw_ostream.h"
+
+#include "slang.h"
+#include "slang_pragma_list.h"
+#include "slang_rs_check_ast.h"
+#include "slang_rs_foreach_lowering.h"
+#include "slang_rs_object_ref_count.h"
+#include "slang_version.h"
+
+namespace llvm {
+  class buffer_ostream;
+  class LLVMContext;
+  class NamedMDNode;
+  class Module;
+}
+
+namespace clang {
+  class ASTConsumer;
+  class ASTContext;
+  class CodeGenOptions;
+  class CodeGenerator;
+  class DeclGroupRef;
+  class DiagnosticsEngine;
+  class FunctionDecl;
+  class HeaderSearchOptions;
+  class PreprocessorOptions;
+  class TagDecl;
+  class TargetOptions;
+  class VarDecl;
+}
+
+namespace slang {
+
+class RSContext;
+
+class Backend : public clang::ASTConsumer {
+ private:
+  const clang::TargetOptions &mTargetOpts;
+
+  llvm::Module *mpModule;
+
+  // Output stream
+  llvm::raw_ostream *mpOS;
+  Slang::OutputType mOT;
+
+  // This helps us translate Clang AST using into LLVM IR
+  clang::CodeGenerator *mGen;
+
+  // Passes
+
+  // Passes apply on function scope in a translation unit
+  llvm::legacy::FunctionPassManager *mPerFunctionPasses;
+  // Passes apply on module scope
+  llvm::legacy::PassManager *mPerModulePasses;
+  // Passes for code emission
+  llvm::legacy::FunctionPassManager *mCodeGenPasses;
+
+  llvm::buffer_ostream mBufferOutStream;
+
+  void CreateFunctionPasses();
+  void CreateModulePasses();
+  bool CreateCodeGenPasses();
+
+  RSContext *mContext;
+
+  clang::SourceManager &mSourceMgr;
+
+  bool mASTPrint;
+
+  bool mAllowRSPrefix;
+
+  bool mIsFilterscript;
+
+  llvm::NamedMDNode *mExportVarMetadata;
+  llvm::NamedMDNode *mExportFuncMetadata;
+  llvm::NamedMDNode *mExportForEachNameMetadata;
+  llvm::NamedMDNode *mExportForEachSignatureMetadata;
+  llvm::NamedMDNode *mExportReduceMetadata;
+  llvm::NamedMDNode *mExportTypeMetadata;
+  llvm::NamedMDNode *mRSObjectSlotsMetadata;
+
+  RSObjectRefCount mRefCount;
+
+  RSCheckAST mASTChecker;
+
+  RSForEachLowering mForEachHandler;
+
+  void AnnotateFunction(clang::FunctionDecl *FD);
+
+  void dumpExportVarInfo(llvm::Module *M);
+  void dumpExportFunctionInfo(llvm::Module *M);
+  void dumpExportForEachInfo(llvm::Module *M);
+  void dumpExportReduceInfo(llvm::Module *M);
+  void dumpExportTypeInfo(llvm::Module *M);
+
+  // Translates any rsForEach() or rsForEachWithOptions() calls inside the body
+  // of FD to lower-level runtime calls to rsForEachInternal(), if FD is not a
+  // kernel function itself, as indicated by isKernel being false. If isKernel
+  // is true, reports an error on any calls to rsForEach() or
+  // rsForEachWithOptions().
+  void LowerRSForEachCall(clang::FunctionDecl* FD, bool isKernel);
+
+ protected:
+  llvm::LLVMContext &mLLVMContext;
+  clang::DiagnosticsEngine &mDiagEngine;
+  const clang::CodeGenOptions &mCodeGenOpts;
+
+  PragmaList *mPragmas;
+
+  unsigned int getTargetAPI() const { return mContext->getTargetAPI(); }
+
+  // TODO These are no longer virtual from base.  Look into merging into caller.
+
+  // This handler will be invoked before Clang translates @Ctx to LLVM IR. This
+  // give you an opportunity to modified the IR in AST level (scope information,
+  // unoptimized IR, etc.). After the return from this method, slang will start
+  // translate @Ctx into LLVM IR. One should not operate on @Ctx afterwards
+  // since the changes applied on that never reflects to the LLVM module used
+  // in the final codegen.
+  void HandleTranslationUnitPre(clang::ASTContext &Ctx);
+
+  // This handler will be invoked when Clang have converted AST tree to LLVM IR.
+  // The @M contains the resulting LLVM IR tree. After the return from this
+  // method, slang will start doing optimization and code generation for @M.
+  void HandleTranslationUnitPost(llvm::Module *M);
+
+ public:
+  Backend(RSContext *Context,
+            clang::DiagnosticsEngine *DiagEngine,
+            const RSCCOptions &Opts,
+            const clang::HeaderSearchOptions &HeaderSearchOpts,
+            const clang::PreprocessorOptions &PreprocessorOpts,
+            const clang::CodeGenOptions &CodeGenOpts,
+            const clang::TargetOptions &TargetOpts,
+            PragmaList *Pragmas,
+            llvm::raw_ostream *OS,
+            Slang::OutputType OT,
+            clang::SourceManager &SourceMgr,
+            bool AllowRSPrefix,
+            bool IsFilterscript);
+
+  virtual ~Backend();
+
+  // Initialize - This is called to initialize the consumer, providing the
+  // ASTContext.
+  void Initialize(clang::ASTContext &Ctx) override;
+
+  // TODO Clean up what should be private, protected
+  // TODO Also clean up the include files
+
+  // HandleTopLevelDecl - Handle the specified top-level declaration.  This is
+  // called by the parser to process every top-level Decl*. Note that D can be
+  // the head of a chain of Decls (e.g. for `int a, b` the chain will have two
+  // elements). Use Decl::getNextDeclarator() to walk the chain.
+  bool HandleTopLevelDecl(clang::DeclGroupRef D) override;
+
+  // HandleTranslationUnit - This method is called when the ASTs for entire
+  // translation unit have been parsed.
+  void HandleTranslationUnit(clang::ASTContext &Ctx) override;
+
+  // HandleTagDeclDefinition - This callback is invoked each time a TagDecl
+  // (e.g. struct, union, enum, class) is completed.  This allows the client to
+  // hack on the type, which can occur at any point in the file (because these
+  // can be defined in declspecs).
+  void HandleTagDeclDefinition(clang::TagDecl *D) override;
+
+  // CompleteTentativeDefinition - Callback invoked at the end of a translation
+  // unit to notify the consumer that the given tentative definition should be
+  // completed.
+  void CompleteTentativeDefinition(clang::VarDecl *D) override;
+};
+
+}   // namespace slang
+
+#endif  // _FRAMEWORKS_COMPILE_SLANG_SLANG_BACKEND_H_  NOLINT
diff --git a/slang/slang_bitcode_gen.cpp b/slang/slang_bitcode_gen.cpp
new file mode 100644
index 0000000..dc0eb8d
--- /dev/null
+++ b/slang/slang_bitcode_gen.cpp
@@ -0,0 +1,103 @@
+/*
+ * Copyright 2015, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "bcinfo/BitcodeWrapper.h"
+
+#include "llvm/Support/raw_ostream.h"
+
+#include "BitWriter_2_9/ReaderWriter_2_9.h"
+#include "BitWriter_2_9_func/ReaderWriter_2_9_func.h"
+#include "BitWriter_3_2/ReaderWriter_3_2.h"
+
+#include "slang_assert.h"
+#include "slang_bitcode_gen.h"
+#include "slang_version.h"
+#include "llvm/Bitcode/ReaderWriter.h"
+
+namespace slang {
+
+void writeBitcode(llvm::raw_ostream &Out,
+                  const llvm::Module &M,
+                  uint32_t TargetAPI,
+                  uint32_t OptimizationLevel,
+                  bool GenerateDebugInfo) {
+  std::string BitcodeStr;
+  llvm::raw_string_ostream Bitcode(BitcodeStr);
+
+  // The older bitcode writers will produce invalid bitcode if the -g
+  // flag is set using WriteBitcodeToFile. As such we use the ToT writer
+  // when -g is set. However, this will produce a bitcode file linked to
+  // this version of LLVM as the debug info format can change between
+  // versions.
+  // If bcc receives a bitcode file with a format of debug info
+  // which is either ahead or behind the version it is expecting it will
+  // fail the verification stage. Failing this stage results in the bitcode
+  // loader returning null and the compiler will terminate abruptly. Bitcode
+  // files with debug info are as such only capable of targeting devices with
+  // LLVM libraries with the same debug info version as the version of slang
+  // which was used to compile the file. This is due to the fact that LLVM
+  // offers no backwards or forwards compatibility guarantee for its debug
+  // bitcode. At the moment the only practical guarantee which can be made
+  // is that the debug bitcode emitted by any slang will work with the bcc
+  // version which was newest at the time when llvm-rs-cc was built.
+  if (GenerateDebugInfo) {
+    llvm::WriteBitcodeToFile(&M, Bitcode);
+  } else {
+    // Create the bitcode.
+    switch (TargetAPI) {
+    case SLANG_HC_TARGET_API:
+    case SLANG_HC_MR1_TARGET_API:
+    case SLANG_HC_MR2_TARGET_API: {
+      // Pre-ICS targets must use the LLVM 2.9 BitcodeWriter
+      llvm_2_9::WriteBitcodeToFile(&M, Bitcode);
+      break;
+    }
+    case SLANG_ICS_TARGET_API:
+    case SLANG_ICS_MR1_TARGET_API: {
+      // ICS targets must use the LLVM 2.9_func BitcodeWriter
+      llvm_2_9_func::WriteBitcodeToFile(&M, Bitcode);
+      break;
+    }
+    default: {
+      if (TargetAPI != SLANG_DEVELOPMENT_TARGET_API &&
+          (TargetAPI < SLANG_MINIMUM_TARGET_API ||
+           TargetAPI > SLANG_MAXIMUM_TARGET_API)) {
+        slangAssert(false && "Invalid target API value");
+      }
+      // Switch to the 3.2 BitcodeWriter by default, and don't use
+      // LLVM's included BitcodeWriter at all (for now).
+      llvm_3_2::WriteBitcodeToFile(&M, Bitcode);
+      break;
+    }
+    }
+  }
+
+  const uint32_t CompilerVersion = SlangVersion::CURRENT;
+
+  // Create the bitcode wrapper.
+  bcinfo::AndroidBitcodeWrapper Wrapper;
+  size_t ActualWrapperLen = bcinfo::writeAndroidBitcodeWrapper(
+        &Wrapper, Bitcode.str().length(), TargetAPI,
+        CompilerVersion, OptimizationLevel);
+
+  slangAssert(ActualWrapperLen > 0);
+
+  // Write out the file.
+  Out.write(reinterpret_cast<char*>(&Wrapper), ActualWrapperLen);
+  Out << Bitcode.str();
+}
+
+}  // namespace slang
diff --git a/slang/slang_bitcode_gen.h b/slang/slang_bitcode_gen.h
new file mode 100644
index 0000000..b1f97c9
--- /dev/null
+++ b/slang/slang_bitcode_gen.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2015, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_BITCODE_GEN_H_  // NOLINT
+#define _FRAMEWORKS_COMPILE_SLANG_SLANG_BITCODE_GEN_H_
+
+#include <cstdint>
+
+namespace llvm {
+  class raw_ostream;
+  class Module;
+}
+
+namespace slang {
+
+// Write out the LLVM bitcode for a module, encased in a wrapper
+// containing RS version information.
+void writeBitcode(llvm::raw_ostream &Out,
+                  const llvm::Module &M,
+                  uint32_t TargetAPI,
+                  uint32_t OptimizationLevel,
+                  bool GenerateDebugInfo);
+
+} // end namespace slang
+
+#endif  // _FRAMEWORKS_COMPILE_SLANG_SLANG_BITCODE_GEN_H_  NOLINT
diff --git a/slang/slang_diagnostic_buffer.cpp b/slang/slang_diagnostic_buffer.cpp
new file mode 100644
index 0000000..d6afabf
--- /dev/null
+++ b/slang/slang_diagnostic_buffer.cpp
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "slang_diagnostic_buffer.h"
+
+#include "clang/Basic/SourceLocation.h"
+#include "clang/Basic/SourceManager.h"
+
+#include "llvm/ADT/SmallString.h"
+
+#include "slang_assert.h"
+
+namespace slang {
+
+DiagnosticBuffer::DiagnosticBuffer()
+  : mSOS(new llvm::raw_string_ostream(mDiags)) {
+}
+
+DiagnosticBuffer::~DiagnosticBuffer() {
+}
+
+void DiagnosticBuffer::HandleDiagnostic(
+    clang::DiagnosticsEngine::Level DiagLevel,
+    clang::Diagnostic const &Info) {
+  clang::SourceLocation const &SrcLoc = Info.getLocation();
+
+  std::string Message;
+  llvm::raw_string_ostream stream(Message);
+
+  if (SrcLoc.isValid()) {
+    SrcLoc.print(stream, Info.getSourceManager());
+    stream << ": ";
+  }
+
+  switch (DiagLevel) {
+    case clang::DiagnosticsEngine::Note: {
+      stream << "note: ";
+      break;
+    }
+    case clang::DiagnosticsEngine::Warning: {
+      stream << "warning: ";
+      break;
+    }
+    case clang::DiagnosticsEngine::Error: {
+      stream << "error: ";
+      break;
+    }
+    case clang::DiagnosticsEngine::Fatal: {
+      stream << "fatal: ";
+      break;
+    }
+    default: {
+      slangAssert(0 && "Diagnostic not handled during diagnostic buffering!");
+    }
+  }
+  // 100 is enough for storing general diagnosis Message
+  llvm::SmallString<100> Buf;
+  Info.FormatDiagnostic(Buf);
+  stream << Buf.str() << '\n';
+  stream.flush();
+
+  if (mIncludedMessages.find(Message) == mIncludedMessages.end()) {
+    mIncludedMessages.insert(Message);
+    (*mSOS) << Message;
+  }
+}
+
+}  // namespace slang
diff --git a/slang/slang_diagnostic_buffer.h b/slang/slang_diagnostic_buffer.h
new file mode 100644
index 0000000..500f345
--- /dev/null
+++ b/slang/slang_diagnostic_buffer.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_DIAGNOSTIC_BUFFER_H_  // NOLINT
+#define _FRAMEWORKS_COMPILE_SLANG_SLANG_DIAGNOSTIC_BUFFER_H_
+
+#include <set>
+#include <string>
+
+#include "clang/Basic/Diagnostic.h"
+
+#include "llvm/Support/raw_ostream.h"
+
+namespace llvm {
+  class raw_string_ostream;
+}
+
+namespace slang {
+
+// The diagnostics consumer instance (for reading the processed diagnostics)
+class DiagnosticBuffer : public clang::DiagnosticConsumer {
+private:
+  // We keed track of the messages that have been already added to this
+  // diagnostic buffer, to avoid duplicates.  This can happen because for a
+  // given script we'll usually compile for both 32 and 64 bit targets.
+  std::set<std::string> mIncludedMessages;
+  std::string mDiags;
+  std::unique_ptr<llvm::raw_string_ostream> mSOS;
+
+public:
+  DiagnosticBuffer();
+  virtual ~DiagnosticBuffer();
+
+  virtual void HandleDiagnostic(clang::DiagnosticsEngine::Level DiagLevel,
+                                const clang::Diagnostic &Info) override;
+
+  inline const std::string &str() const {
+    mSOS->flush();
+    return mDiags;
+  }
+
+  inline void reset() {
+    mIncludedMessages.clear();
+    mSOS.reset();
+    mDiags.clear();
+  }
+};
+
+}  // namespace slang
+
+#endif  // _FRAMEWORKS_COMPILE_SLANG_SLANG_DIAGNOSTIC_BUFFER_H_  NOLINT
diff --git a/slang/slang_pragma_list.h b/slang/slang_pragma_list.h
new file mode 100644
index 0000000..a972b56
--- /dev/null
+++ b/slang/slang_pragma_list.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2015, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_PRAGMA_LIST_H_  // NOLINT
+#define _FRAMEWORKS_COMPILE_SLANG_SLANG_PRAGMA_LIST_H_
+
+#include <list>
+#include <string>
+#include <utility>
+
+namespace slang {
+
+typedef std::list< std::pair<std::string, std::string> > PragmaList;
+
+}  // namespace slang
+
+#endif  // _FRAMEWORKS_COMPILE_SLANG_SLANG_PRAGMA_LIST_H_  NOLINT
diff --git a/slang/slang_rs_ast_replace.cpp b/slang/slang_rs_ast_replace.cpp
new file mode 100644
index 0000000..92e1428
--- /dev/null
+++ b/slang/slang_rs_ast_replace.cpp
@@ -0,0 +1,169 @@
+/*
+ * Copyright 2011, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "slang_rs_ast_replace.h"
+
+#include "slang_assert.h"
+
+#include "llvm/Support/Casting.h"
+
+namespace slang {
+
+void RSASTReplace::ReplaceStmt(
+    clang::Stmt *OuterStmt,
+    clang::Stmt *OldStmt,
+    clang::Stmt *NewStmt) {
+  mOldStmt = OldStmt;
+  mNewStmt = NewStmt;
+  mOuterStmt = OuterStmt;
+
+  // This simplifies use in various Stmt visitor passes where the only
+  // valid type is an Expr.
+  mOldExpr = llvm::dyn_cast<clang::Expr>(OldStmt);
+  if (mOldExpr) {
+    mNewExpr = llvm::dyn_cast<clang::Expr>(NewStmt);
+  }
+  Visit(mOuterStmt);
+}
+
+void RSASTReplace::ReplaceInCompoundStmt(clang::CompoundStmt *CS) {
+  clang::Stmt **UpdatedStmtList = new clang::Stmt*[CS->size()];
+
+  unsigned UpdatedStmtCount = 0;
+  clang::CompoundStmt::body_iterator bI = CS->body_begin();
+  clang::CompoundStmt::body_iterator bE = CS->body_end();
+
+  for ( ; bI != bE; bI++) {
+    if (matchesStmt(*bI)) {
+      UpdatedStmtList[UpdatedStmtCount++] = mNewStmt;
+    } else {
+      UpdatedStmtList[UpdatedStmtCount++] = *bI;
+    }
+  }
+
+  CS->setStmts(C, llvm::makeArrayRef(UpdatedStmtList, UpdatedStmtCount));
+
+  delete [] UpdatedStmtList;
+}
+
+void RSASTReplace::VisitStmt(clang::Stmt *S) {
+  // This function does the actual iteration through all sub-Stmt's within
+  // a given Stmt. Note that this function is skipped by all of the other
+  // Visit* functions if we have already found a higher-level match.
+  for (clang::Stmt::child_iterator I = S->child_begin(), E = S->child_end();
+       I != E;
+       I++) {
+    if (clang::Stmt *Child = *I) {
+      if (!matchesStmt(Child)) {
+        Visit(Child);
+      }
+    }
+  }
+}
+
+void RSASTReplace::VisitCompoundStmt(clang::CompoundStmt *CS) {
+  VisitStmt(CS);
+  ReplaceInCompoundStmt(CS);
+}
+
+void RSASTReplace::VisitCaseStmt(clang::CaseStmt *CS) {
+  if (matchesStmt(CS->getSubStmt())) {
+    CS->setSubStmt(mNewStmt);
+  } else {
+    VisitStmt(CS);
+  }
+}
+
+void RSASTReplace::VisitDeclStmt(clang::DeclStmt* DS) {
+  VisitStmt(DS);
+  for (clang::Decl* D : DS->decls()) {
+    clang::VarDecl* VD;
+    if ((VD = llvm::dyn_cast<clang::VarDecl>(D))) {
+      if (matchesExpr(VD->getInit())) {
+        VD->setInit(mNewExpr);
+      }
+    }
+  }
+}
+
+void RSASTReplace::VisitDefaultStmt(clang::DefaultStmt *DS) {
+  if (matchesStmt(DS->getSubStmt())) {
+    DS->setSubStmt(mNewStmt);
+  } else {
+    VisitStmt(DS);
+  }
+}
+
+void RSASTReplace::VisitDoStmt(clang::DoStmt *DS) {
+  if (matchesExpr(DS->getCond())) {
+    DS->setCond(mNewExpr);
+  } else if (matchesStmt(DS->getBody())) {
+    DS->setBody(mNewStmt);
+  } else {
+    VisitStmt(DS);
+  }
+}
+
+void RSASTReplace::VisitForStmt(clang::ForStmt *FS) {
+  if (matchesStmt(FS->getInit())) {
+    FS->setInit(mNewStmt);
+  } else if (matchesExpr(FS->getCond())) {
+    FS->setCond(mNewExpr);
+  } else if (matchesExpr(FS->getInc())) {
+    FS->setInc(mNewExpr);
+  } else if (matchesStmt(FS->getBody())) {
+    FS->setBody(mNewStmt);
+  } else {
+    VisitStmt(FS);
+  }
+}
+
+void RSASTReplace::VisitIfStmt(clang::IfStmt *IS) {
+  if (matchesExpr(IS->getCond())) {
+    IS->setCond(mNewExpr);
+  } else if (matchesStmt(IS->getThen())) {
+    IS->setThen(mNewStmt);
+  } else if (matchesStmt(IS->getElse())) {
+    IS->setElse(mNewStmt);
+  } else {
+    VisitStmt(IS);
+  }
+}
+
+void RSASTReplace::VisitSwitchCase(clang::SwitchCase *SC) {
+  slangAssert(false && "Both case and default have specialized handlers");
+  VisitStmt(SC);
+}
+
+void RSASTReplace::VisitSwitchStmt(clang::SwitchStmt *SS) {
+  if (matchesExpr(SS->getCond())) {
+    SS->setCond(mNewExpr);
+  } else {
+    VisitStmt(SS);
+  }
+}
+
+void RSASTReplace::VisitWhileStmt(clang::WhileStmt *WS) {
+  if (matchesExpr(WS->getCond())) {
+    WS->setCond(mNewExpr);
+  } else if (matchesStmt(WS->getBody())) {
+    WS->setBody(mNewStmt);
+  } else {
+    VisitStmt(WS);
+  }
+}
+
+}  // namespace slang
diff --git a/slang/slang_rs_ast_replace.h b/slang/slang_rs_ast_replace.h
new file mode 100644
index 0000000..58f9bd9
--- /dev/null
+++ b/slang/slang_rs_ast_replace.h
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2011, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_AST_REPLACE_H_  // NOLINT
+#define _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_AST_REPLACE_H_
+
+#include "clang/AST/StmtVisitor.h"
+
+#include "slang_assert.h"
+#include "clang/AST/ASTContext.h"
+
+namespace clang {
+  class Diagnostic;
+  class Expr;
+  class Stmt;
+}
+
+namespace slang {
+
+class RSASTReplace : public clang::StmtVisitor<RSASTReplace> {
+ private:
+  const clang::ASTContext &C;
+  clang::Stmt *mOuterStmt;
+  clang::Stmt *mOldStmt;
+  clang::Stmt *mNewStmt;
+  clang::Expr *mOldExpr;
+  clang::Expr *mNewExpr;
+
+  inline bool matchesExpr(const clang::Expr *E) const {
+    bool retVal = mOldExpr && (mOldExpr == E);
+    if (retVal) {
+      slangAssert(mNewExpr &&
+          "Cannot replace an expression if we don't have a new expression");
+    }
+    return retVal;
+  }
+
+  inline bool matchesStmt(const clang::Stmt *S) const {
+    slangAssert(mOldStmt);
+    return mOldStmt == S;
+  }
+
+  void ReplaceInCompoundStmt(clang::CompoundStmt *CS);
+
+ public:
+  explicit RSASTReplace(const clang::ASTContext &Con)
+      : C(Con),
+        mOuterStmt(nullptr),
+        mOldStmt(nullptr),
+        mNewStmt(nullptr),
+        mOldExpr(nullptr),
+        mNewExpr(nullptr) {
+  }
+
+  void VisitStmt(clang::Stmt *S);
+  void VisitCompoundStmt(clang::CompoundStmt *CS);
+  void VisitCaseStmt(clang::CaseStmt *CS);
+  void VisitDeclStmt(clang::DeclStmt* DS);
+  void VisitDefaultStmt(clang::DefaultStmt *DS);
+  void VisitDoStmt(clang::DoStmt *DS);
+  void VisitForStmt(clang::ForStmt *FS);
+  void VisitIfStmt(clang::IfStmt *IS);
+  void VisitSwitchCase(clang::SwitchCase *SC);
+  void VisitSwitchStmt(clang::SwitchStmt *SS);
+  void VisitWhileStmt(clang::WhileStmt *WS);
+
+  // Replace all instances of OldStmt in OuterStmt with NewStmt.
+  void ReplaceStmt(
+      clang::Stmt *OuterStmt,
+      clang::Stmt *OldStmt,
+      clang::Stmt *NewStmt);
+};
+
+}  // namespace slang
+
+#endif  // _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_AST_REPLACE_H_  NOLINT
diff --git a/slang/slang_rs_check_ast.cpp b/slang/slang_rs_check_ast.cpp
new file mode 100644
index 0000000..52626bc
--- /dev/null
+++ b/slang/slang_rs_check_ast.cpp
@@ -0,0 +1,324 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "clang/AST/Attr.h"
+
+#include "slang_rs_check_ast.h"
+
+#include "slang_assert.h"
+#include "slang.h"
+#include "slang_rs_export_foreach.h"
+#include "slang_rs_export_reduce.h"
+#include "slang_rs_export_type.h"
+
+namespace slang {
+
+void RSCheckAST::VisitStmt(clang::Stmt *S) {
+  // This function does the actual iteration through all sub-Stmt's within
+  // a given Stmt. Note that this function is skipped by all of the other
+  // Visit* functions if we have already found a higher-level match.
+  for (clang::Stmt::child_iterator I = S->child_begin(), E = S->child_end();
+       I != E;
+       I++) {
+    if (clang::Stmt *Child = *I) {
+      Visit(Child);
+    }
+  }
+}
+
+void RSCheckAST::WarnOnSetElementAt(clang::CallExpr *E) {
+  clang::FunctionDecl *Decl;
+  Decl = clang::dyn_cast_or_null<clang::FunctionDecl>(E->getCalleeDecl());
+
+  if (!Decl || Decl->getNameAsString() != std::string("rsSetElementAt")) {
+    return;
+  }
+
+  clang::Expr *Expr;
+  clang::ImplicitCastExpr *ImplCast;
+  Expr = E->getArg(1);
+  ImplCast = clang::dyn_cast_or_null<clang::ImplicitCastExpr>(Expr);
+
+  if (!ImplCast) {
+    return;
+  }
+
+  const clang::Type *Ty;
+  const clang::VectorType *VectorTy;
+  const clang::BuiltinType *ElementTy;
+  Ty = ImplCast->getSubExpr()->getType()->getPointeeType()
+    ->getUnqualifiedDesugaredType();
+  VectorTy = clang::dyn_cast_or_null<clang::VectorType>(Ty);
+
+  if (VectorTy) {
+    ElementTy = clang::dyn_cast_or_null<clang::BuiltinType>(
+      VectorTy->getElementType()->getUnqualifiedDesugaredType());
+  } else {
+    ElementTy = clang::dyn_cast_or_null<clang::BuiltinType>(
+      Ty->getUnqualifiedDesugaredType());
+  }
+
+  if (!ElementTy) {
+    return;
+  }
+
+  // We only support vectors with 2, 3 or 4 elements.
+  if (VectorTy) {
+    switch (VectorTy->getNumElements()) {
+    default:
+      return;
+    case 2:
+    case 3:
+    case 4:
+      break;
+    }
+  }
+
+  const char *Name;
+
+  switch (ElementTy->getKind()) {
+    case clang::BuiltinType::Float:
+      Name = "float";
+      break;
+    case clang::BuiltinType::Double:
+      Name = "double";
+      break;
+    case clang::BuiltinType::Char_S:
+      Name = "char";
+      break;
+    case clang::BuiltinType::Short:
+      Name = "short";
+      break;
+    case clang::BuiltinType::Int:
+      Name = "int";
+      break;
+    case clang::BuiltinType::Long:
+      Name = "long";
+      break;
+    case clang::BuiltinType::UChar:
+      Name = "uchar";
+      break;
+    case clang::BuiltinType::UShort:
+      Name = "ushort";
+      break;
+    case clang::BuiltinType::UInt:
+      Name = "uint";
+      break;
+    case clang::BuiltinType::ULong:
+      Name = "ulong";
+      break;
+    default:
+      return;
+  }
+
+  clang::DiagnosticBuilder DiagBuilder =
+      Context->ReportWarning(E->getLocStart(),
+                             "untyped rsSetElementAt() can reduce performance. "
+                             "Use rsSetElementAt_%0%1() instead.");
+  DiagBuilder << Name;
+
+  if (VectorTy) {
+    DiagBuilder << VectorTy->getNumElements();
+  } else {
+    DiagBuilder << "";
+  }
+}
+
+void RSCheckAST::VisitCallExpr(clang::CallExpr *E) {
+  WarnOnSetElementAt(E);
+
+  for (clang::CallExpr::arg_iterator AI = E->arg_begin(), AE = E->arg_end();
+       AI != AE; ++AI) {
+    Visit(*AI);
+  }
+}
+
+void RSCheckAST::ValidateFunctionDecl(clang::FunctionDecl *FD) {
+  if (!FD) {
+    return;
+  }
+
+  if (FD->hasAttr<clang::KernelAttr>()) {
+    // Validate that the kernel attribute is not used with static.
+    if (FD->getStorageClass() == clang::SC_Static) {
+      Context->ReportError(FD->getLocation(),
+                           "Invalid use of attribute kernel with "
+                           "static function declaration: %0")
+        << FD->getName();
+      mValid = false;
+    }
+
+    // We allow no arguments to the attribute, or an expected single
+    // argument. If there is an expected single argument, we verify
+    // that it is one of the recognized kernel kinds.
+    llvm::StringRef KernelKind =
+      FD->getAttr<clang::KernelAttr>()->getKernelKind();
+
+    if (!KernelKind.empty()) {
+      Context->ReportError(FD->getLocation(),
+                           "Unknown kernel attribute argument '%0' "
+                           "in declaration of function '%1'")
+        << KernelKind << FD->getName();
+      mValid = false;
+    }
+  }
+
+  clang::QualType resultType = FD->getReturnType().getCanonicalType();
+  bool isExtern = (FD->getFormalLinkage() == clang::ExternalLinkage);
+
+  // We use FD as our NamedDecl in the case of a bad return type.
+  if (!RSExportType::ValidateType(Context, C, resultType, FD,
+                                  FD->getLocStart(), mTargetAPI,
+                                  mIsFilterscript, isExtern)) {
+    mValid = false;
+  }
+
+  size_t numParams = FD->getNumParams();
+  for (size_t i = 0; i < numParams; i++) {
+    clang::ParmVarDecl *PVD = FD->getParamDecl(i);
+    clang::QualType QT = PVD->getType().getCanonicalType();
+    if (!RSExportType::ValidateType(Context, C, QT, PVD, PVD->getLocStart(),
+                                    mTargetAPI, mIsFilterscript, isExtern)) {
+      mValid = false;
+    }
+  }
+
+  bool saveKernel = mInKernel;
+  mInKernel = RSExportForEach::isRSForEachFunc(mTargetAPI, FD);
+
+  if (clang::Stmt *Body = FD->getBody()) {
+    Visit(Body);
+  }
+
+  mInKernel = saveKernel;
+}
+
+
+void RSCheckAST::ValidateVarDecl(clang::VarDecl *VD) {
+  if (!VD || RSContext::isSyntheticName(VD->getName())) {
+    return;
+  }
+
+  clang::QualType QT = VD->getType();
+
+  if (VD->getFormalLinkage() == clang::ExternalLinkage) {
+    llvm::StringRef TypeName;
+    const clang::Type *T = QT.getTypePtr();
+    if (!RSExportType::NormalizeType(T, TypeName, Context, VD,
+                                     NotLegacyKernelArgument)) {
+      mValid = false;
+    }
+  }
+
+  // We don't allow static (non-const) variables within kernels.
+  if (mInKernel && VD->isStaticLocal()) {
+    if (!QT.isConstQualified()) {
+      Context->ReportError(
+          VD->getLocation(),
+          "Non-const static variables are not allowed in kernels: '%0'")
+          << VD->getName();
+      mValid = false;
+    }
+  }
+
+  if (!RSExportType::ValidateVarDecl(Context, VD, mTargetAPI, mIsFilterscript)) {
+    mValid = false;
+  } else if (clang::Expr *Init = VD->getInit()) {
+    // Only check the initializer if the decl is already ok.
+    Visit(Init);
+  }
+}
+
+
+void RSCheckAST::VisitDeclStmt(clang::DeclStmt *DS) {
+  if (!Slang::IsLocInRSHeaderFile(DS->getLocStart(), mSM)) {
+    for (clang::DeclStmt::decl_iterator I = DS->decl_begin(),
+                                        E = DS->decl_end();
+         I != E;
+         ++I) {
+      if (clang::VarDecl *VD = llvm::dyn_cast<clang::VarDecl>(*I)) {
+        ValidateVarDecl(VD);
+      } else if (clang::FunctionDecl *FD =
+            llvm::dyn_cast<clang::FunctionDecl>(*I)) {
+        ValidateFunctionDecl(FD);
+      }
+    }
+  }
+}
+
+
+void RSCheckAST::VisitCastExpr(clang::CastExpr *CE) {
+  if (CE->getCastKind() == clang::CK_BitCast) {
+    clang::QualType QT = CE->getType();
+    const clang::Type *T = QT.getTypePtr();
+    if (T->isVectorType()) {
+      if (llvm::isa<clang::ImplicitCastExpr>(CE)) {
+        Context->ReportError(CE->getExprLoc(), "invalid implicit vector cast");
+      } else {
+        Context->ReportError(CE->getExprLoc(), "invalid vector cast");
+      }
+      mValid = false;
+    }
+  }
+  Visit(CE->getSubExpr());
+}
+
+
+void RSCheckAST::VisitExpr(clang::Expr *E) {
+  // This is where FS checks for code using pointer and/or 64-bit expressions
+  // (i.e. things like casts).
+
+  // First we skip implicit casts (things like function calls and explicit
+  // array accesses rely heavily on them and they are valid.
+  E = E->IgnoreImpCasts();
+
+  // Expressions at this point in the checker are not externally visible.
+  static const bool kIsExtern = false;
+
+  if (mIsFilterscript &&
+      !Slang::IsLocInRSHeaderFile(E->getExprLoc(), mSM) &&
+      !RSExportType::ValidateType(Context, C, E->getType(), nullptr, E->getExprLoc(),
+                                  mTargetAPI, mIsFilterscript, kIsExtern)) {
+    mValid = false;
+  } else {
+    // Only visit sub-expressions if we haven't already seen a violation.
+    VisitStmt(E);
+  }
+}
+
+
+bool RSCheckAST::Validate() {
+  clang::TranslationUnitDecl *TUDecl = C.getTranslationUnitDecl();
+  for (clang::DeclContext::decl_iterator DI = TUDecl->decls_begin(),
+          DE = TUDecl->decls_end();
+       DI != DE;
+       DI++) {
+    if (!Slang::IsLocInRSHeaderFile(DI->getLocStart(), mSM)) {
+      if (clang::VarDecl *VD = llvm::dyn_cast<clang::VarDecl>(*DI)) {
+        ValidateVarDecl(VD);
+      } else if (clang::FunctionDecl *FD =
+            llvm::dyn_cast<clang::FunctionDecl>(*DI)) {
+        ValidateFunctionDecl(FD);
+      } else if (clang::Stmt *Body = (*DI)->getBody()) {
+        Visit(Body);
+      }
+    }
+  }
+
+  return mValid;
+}
+
+}  // namespace slang
diff --git a/slang/slang_rs_check_ast.h b/slang/slang_rs_check_ast.h
new file mode 100644
index 0000000..e4b0dff
--- /dev/null
+++ b/slang/slang_rs_check_ast.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_CHECK_AST_H_  // NOLINT
+#define _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_CHECK_AST_H_
+
+#include "slang_assert.h"
+#include "slang_rs_context.h"
+#include "clang/AST/ASTContext.h"
+#include "clang/AST/StmtVisitor.h"
+
+namespace slang {
+
+// This class is designed to walk a Renderscript/Filterscript AST looking for
+// violations. Examples of violations for FS are pointer declarations and
+// casts (i.e. no pointers allowed in FS whatsoever).
+class RSCheckAST : public clang::StmtVisitor<RSCheckAST> {
+ private:
+  slang::RSContext *Context;
+  clang::ASTContext &C;
+  clang::SourceManager &mSM;
+  bool mValid;
+  unsigned int mTargetAPI;
+  bool mIsFilterscript;
+  bool mInKernel;
+
+  /// @brief Emit warnings for inapproriate uses of rsSetElementAt
+  ///
+  /// We warn in case generic rsSetElementAt() is used even though the user
+  /// could have used a typed rsSetElementAt_<type>() call. Typed calls
+  /// allow more aggressive optimization (e.g. due to better alias analysis
+  /// results). Hence, we want to steer the users to use them.
+  void WarnOnSetElementAt(clang::CallExpr*);
+
+ public:
+  explicit RSCheckAST(RSContext *Con, unsigned int TargetAPI,
+                      bool IsFilterscript)
+      : Context(Con),
+        C(Con->getASTContext()),
+        mSM(C.getSourceManager()),
+        mValid(true),
+        mTargetAPI(TargetAPI),
+        mIsFilterscript(IsFilterscript),
+        mInKernel(false) {
+  }
+
+  void VisitStmt(clang::Stmt *S);
+
+  void VisitCallExpr(clang::CallExpr *CE);
+
+  void VisitCastExpr(clang::CastExpr *CE);
+
+  void VisitExpr(clang::Expr *E);
+
+  void VisitDeclStmt(clang::DeclStmt *DS);
+
+  void ValidateFunctionDecl(clang::FunctionDecl *FD);
+
+  void ValidateVarDecl(clang::VarDecl *VD);
+
+  bool Validate();
+};
+
+}  // namespace slang
+
+#endif  // _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_CHECK_AST_H_  NOLINT
diff --git a/slang/slang_rs_context.cpp b/slang/slang_rs_context.cpp
new file mode 100644
index 0000000..0e3ee53
--- /dev/null
+++ b/slang/slang_rs_context.cpp
@@ -0,0 +1,414 @@
+/*
+ * Copyright 2010-2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "slang_rs_context.h"
+
+#include <string>
+
+#include "clang/AST/ASTContext.h"
+#include "clang/AST/Attr.h"
+#include "clang/AST/Decl.h"
+#include "clang/AST/DeclBase.h"
+#include "clang/AST/Mangle.h"
+#include "clang/AST/Type.h"
+
+#include "clang/Basic/Linkage.h"
+#include "clang/Basic/TargetInfo.h"
+
+#include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/DataLayout.h"
+
+#include "slang.h"
+#include "slang_assert.h"
+#include "slang_backend.h"
+#include "slang_rs_export_foreach.h"
+#include "slang_rs_export_func.h"
+#include "slang_rs_export_reduce.h"
+#include "slang_rs_export_type.h"
+#include "slang_rs_export_var.h"
+#include "slang_rs_exportable.h"
+#include "slang_rs_pragma_handler.h"
+#include "slang_rs_reflection.h"
+#include "slang_rs_special_func.h"
+
+namespace slang {
+
+RSContext::RSContext(clang::Preprocessor &PP,
+                     clang::ASTContext &Ctx,
+                     const clang::TargetInfo &Target,
+                     PragmaList *Pragmas,
+                     unsigned int TargetAPI,
+                     bool Verbose)
+    : mPP(PP),
+      mCtx(Ctx),
+      mPragmas(Pragmas),
+      mTargetAPI(TargetAPI),
+      mVerbose(Verbose),
+      mDataLayout(nullptr),
+      mLLVMContext(llvm::getGlobalContext()),
+      mLicenseNote(nullptr),
+      mRSPackageName("android.renderscript"),
+      version(0),
+      mMangleCtx(Ctx.createMangleContext()),
+      mIs64Bit(Target.getPointerWidth(0) == 64),
+      mNextSlot(1) {
+
+  AddPragmaHandlers(PP, this);
+
+  // Prepare target data
+  mDataLayout = new llvm::DataLayout(Target.getDataLayoutString());
+
+  // Reserve slot 0 for the root kernel.
+  mExportForEach.push_back(nullptr);
+  mFirstOldStyleKernel = mExportForEach.end();
+}
+
+bool RSContext::processExportVar(const clang::VarDecl *VD) {
+  slangAssert(!VD->getName().empty() && "Variable name should not be empty");
+
+  RSExportType *ET = RSExportType::CreateFromDecl(this, VD);
+  if (!ET)
+    return false;
+
+  RSExportVar *EV = new RSExportVar(this, VD, ET);
+  if (EV == nullptr)
+    return false;
+  else
+    mExportVars.push_back(EV);
+
+  return true;
+}
+
+int RSContext::getForEachSlotNumber(const clang::FunctionDecl* FD) {
+  const clang::StringRef& funcName = FD->getName();
+  return getForEachSlotNumber(funcName);
+}
+
+int RSContext::getForEachSlotNumber(const clang::StringRef& funcName) {
+  auto it = mExportForEachMap.find(funcName);
+  if (it == mExportForEachMap.end()) {
+    return -1;
+  }
+  return it->second;
+}
+
+bool RSContext::processExportFunc(const clang::FunctionDecl *FD) {
+  slangAssert(!FD->getName().empty() && "Function name should not be empty");
+
+  if (!FD->isThisDeclarationADefinition()) {
+    return true;
+  }
+
+  slangAssert(FD->getStorageClass() == clang::SC_None);
+
+  // Specialized function
+  if (RSSpecialFunc::isSpecialRSFunc(mTargetAPI, FD)) {
+    // Do not reflect specialized functions like init, dtor, or graphics root.
+    return RSSpecialFunc::validateSpecialFuncDecl(mTargetAPI, this, FD);
+  }
+
+  // Foreach kernel
+  if (RSExportForEach::isRSForEachFunc(mTargetAPI, FD)) {
+    RSExportForEach *EFE = RSExportForEach::Create(this, FD);
+    if (EFE == nullptr) {
+      return false;
+    }
+
+    // The root function should be at index 0 in the list
+    if (FD->getName().equals("root")) {
+      mExportForEach[0] = EFE;
+      return true;
+    }
+
+    // New-style kernels with attribute "kernel" should come first in the list
+    if (FD->hasAttr<clang::KernelAttr>()) {
+      mFirstOldStyleKernel = mExportForEach.insert(mFirstOldStyleKernel, EFE) + 1;
+      slangAssert((mTargetAPI < SLANG_FEATURE_SINGLE_SOURCE_API ||
+                   getForEachSlotNumber(FD->getName()) ==
+                   mFirstOldStyleKernel - mExportForEach.begin() - 1) &&
+                  "Inconsistent slot number assignment");
+      return true;
+    }
+
+    // Old-style kernels should appear in the end of the list
+    mFirstOldStyleKernel = mExportForEach.insert(mFirstOldStyleKernel, EFE);
+    return true;
+  }
+
+  // Invokable
+  if (auto *EF = RSExportFunc::Create(this, FD)) {
+    mExportFuncs.push_back(EF);
+    return true;
+  }
+
+  return false;
+}
+
+bool RSContext::addForEach(const clang::FunctionDecl* FD) {
+  const llvm::StringRef& funcName = FD->getName();
+
+  if (funcName.equals("root")) {
+    // The root kernel should always be in slot 0.
+    mExportForEachMap.insert(std::make_pair(funcName, 0));
+  } else {
+    mExportForEachMap.insert(std::make_pair(funcName, mNextSlot++));
+  }
+
+  return true;
+}
+
+bool RSContext::processExportType(const llvm::StringRef &Name) {
+  clang::TranslationUnitDecl *TUDecl = mCtx.getTranslationUnitDecl();
+
+  slangAssert(TUDecl != nullptr && "Translation unit declaration (top-level "
+                                   "declaration) is null object");
+
+  const clang::IdentifierInfo *II = mPP.getIdentifierInfo(Name);
+  if (II == nullptr)
+    // TODO(zonr): alert identifier @Name mark as an exportable type cannot be
+    //             found
+    return false;
+
+  clang::DeclContext::lookup_result R = TUDecl->lookup(II);
+  RSExportType *ET = nullptr;
+
+  for (clang::DeclContext::lookup_iterator I = R.begin(), E = R.end();
+       I != E;
+       I++) {
+    clang::NamedDecl *const ND = *I;
+    const clang::Type *T = nullptr;
+
+    switch (ND->getKind()) {
+      case clang::Decl::Typedef: {
+        T = static_cast<const clang::TypedefDecl*>(
+            ND)->getCanonicalDecl()->getUnderlyingType().getTypePtr();
+        break;
+      }
+      case clang::Decl::Record: {
+        T = static_cast<const clang::RecordDecl*>(ND)->getTypeForDecl();
+        break;
+      }
+      default: {
+        // unsupported, skip
+        break;
+      }
+    }
+
+    if (T != nullptr)
+      ET = RSExportType::Create(this, T, NotLegacyKernelArgument);
+  }
+
+  return (ET != nullptr);
+}
+
+void RSContext::setAllocationType(const clang::TypeDecl* TD) {
+  mAllocationType = mCtx.getTypeDeclType(TD);
+}
+
+void RSContext::setScriptCallType(const clang::TypeDecl* TD) {
+  mScriptCallType = mCtx.getTypeDeclType(TD);
+}
+
+bool RSContext::processExports() {
+  bool valid = true;
+
+  if (getDiagnostics()->hasErrorOccurred()) {
+    return false;
+  }
+
+  clang::TranslationUnitDecl *TUDecl = mCtx.getTranslationUnitDecl();
+  for (auto I = TUDecl->decls_begin(), E = TUDecl->decls_end(); I != E; I++) {
+    clang::Decl* D = *I;
+    switch (D->getKind()) {
+    case clang::Decl::Var: {
+      clang::VarDecl* VD = llvm::dyn_cast<clang::VarDecl>(D);
+      bool ShouldExportVariable = true;
+      if (VD->getFormalLinkage() == clang::ExternalLinkage) {
+        clang::QualType QT = VD->getTypeSourceInfo()->getType();
+        if (QT.isConstQualified() && !VD->hasInit()) {
+          if (Slang::IsLocInRSHeaderFile(VD->getLocation(),
+                                         *getSourceManager())) {
+            // We don't export variables internal to the runtime's
+            // implementation.
+            ShouldExportVariable = false;
+          } else {
+            clang::DiagnosticsEngine *DiagEngine = getDiagnostics();
+            DiagEngine->Report(VD->getLocation(), DiagEngine->getCustomDiagID(
+                clang::DiagnosticsEngine::Error,
+                "invalid declaration of uninitialized constant variable '%0'"))
+              << VD->getName();
+            valid = false;
+          }
+        }
+        if (valid && ShouldExportVariable && isSyntheticName(VD->getName()))
+          ShouldExportVariable = false;
+        if (valid && ShouldExportVariable && !processExportVar(VD)) {
+          valid = false;
+        }
+      }
+      break;
+    }
+    case clang::Decl::Function: {
+      clang::FunctionDecl* FD = llvm::dyn_cast<clang::FunctionDecl>(D);
+      if (FD->getFormalLinkage() == clang::ExternalLinkage) {
+        if (!processExportFunc(FD)) {
+          valid = false;
+        }
+      }
+      break;
+    }
+    default:
+      break;
+    }
+  }
+
+  // Create a dummy root in slot 0 if a root kernel is not seen
+  // and there exists a non-root kernel.
+  if (valid && mExportForEach[0] == nullptr) {
+    const size_t numExportedForEach = mExportForEach.size();
+    if (numExportedForEach > 1) {
+      mExportForEach[0] = RSExportForEach::CreateDummyRoot(this);
+    } else {
+      slangAssert(numExportedForEach == 1);
+      mExportForEach.pop_back();
+    }
+  }
+
+  // Finally, export type forcely set to be exported by user
+  for (NeedExportTypeSet::const_iterator EI = mNeedExportTypes.begin(),
+           EE = mNeedExportTypes.end();
+       EI != EE;
+       EI++) {
+    if (!processExportType(EI->getKey())) {
+      valid = false;
+    }
+  }
+
+  return valid;
+}
+
+bool RSContext::processReducePragmas(Backend *BE) {
+  // This is needed to ensure that the dummy variable is emitted into
+  // the bitcode -- which in turn forces the function to be emitted
+  // into the bitcode.  We couldn't do this at
+  // markUsedByReducePragma() time because we had to wait until the
+  // Backend is available.
+  for (auto DummyVar : mUsedByReducePragmaDummyVars)
+    BE->HandleTopLevelDecl(clang::DeclGroupRef(DummyVar));
+
+  bool valid = true;
+  for (auto I = export_reduce_begin(), E = export_reduce_end(); I != E; ++I) {
+    if (! (*I)->analyzeTranslationUnit())
+      valid = false;
+  }
+  return valid;
+}
+
+void RSContext::markUsedByReducePragma(clang::FunctionDecl *FD, CheckName Check) {
+  if (mUsedByReducePragmaFns.find(FD) != mUsedByReducePragmaFns.end())
+    return;  // already marked used
+
+  if (Check == CheckNameYes) {
+    // This is an inefficient linear search.  If this turns out to be a
+    // problem in practice, then processReducePragmas() could build a
+    // set or hash table or something similar containing all function
+    // names mentioned in a reduce pragma and searchable in O(c) or
+    // O(log(n)) time rather than the currently-implemented O(n) search.
+    auto NameMatches = [this, FD]() {
+      for (auto I = export_reduce_begin(), E = export_reduce_end(); I != E; ++I) {
+        if ((*I)->matchName(FD->getName()))
+          return true;
+      }
+      return false;
+    };
+    if (!NameMatches())
+      return;
+  }
+
+  mUsedByReducePragmaFns.insert(FD);
+
+  // This is needed to prevent clang from warning that the function is
+  // unused (in the case where it is only referenced by #pragma rs
+  // reduce).
+  FD->setIsUsed();
+
+  // Each constituent function "f" of a reduction kernel gets a dummy variable generated for it:
+  //   void *.rs.reduce_fn.f = (void*)&f;
+  // This is a trick to ensure that clang will not delete "f" as unused.
+
+  // `-VarDecl 0x87cb558 <line:3:1, col:30> col:7 var 'void *' cinit
+  //     `-CStyleCastExpr 0x87cb630 <col:19, col:26> 'void *' <BitCast>
+  //       `-ImplicitCastExpr 0x87cb618 <col:26> 'void (*)(int *, float, double)' <FunctionToPointerDecay>
+  //         `-DeclRefExpr 0x87cb5b8 <col:26> 'void (int *, float, double)' Function 0x8784e10 'foo' 'void (int *, float, double)
+
+  const clang::QualType VoidPtrType = mCtx.getPointerType(mCtx.VoidTy);
+
+  clang::DeclContext *const DC = FD->getDeclContext();
+  const clang::SourceLocation Loc = FD->getLocation();
+
+  clang::VarDecl *const VD = clang::VarDecl::Create(
+      mCtx, DC, Loc, Loc,
+      &mCtx.Idents.get(std::string(".rs.reduce_fn.") + FD->getNameAsString()),
+      VoidPtrType,
+      mCtx.getTrivialTypeSourceInfo(VoidPtrType),
+      clang::SC_None);
+  VD->setLexicalDeclContext(DC);
+  DC->addDecl(VD);
+
+  clang::DeclRefExpr *const DRE = clang::DeclRefExpr::Create(mCtx,
+                                                             clang::NestedNameSpecifierLoc(),
+                                                             Loc,
+                                                             FD, false, Loc, FD->getType(),
+                                                             clang::VK_RValue);
+  clang::ImplicitCastExpr *const ICE = clang::ImplicitCastExpr::Create(mCtx, mCtx.getPointerType(FD->getType()),
+                                                                       clang::CK_FunctionToPointerDecay, DRE,
+                                                                       nullptr, clang::VK_RValue);
+  clang::CStyleCastExpr *const CSCE = clang::CStyleCastExpr::Create(mCtx, VoidPtrType, clang::VK_RValue, clang::CK_BitCast,
+                                                                    ICE, nullptr, nullptr,
+                                                                    Loc, Loc);
+  VD->setInit(CSCE);
+
+  mUsedByReducePragmaDummyVars.push_back(VD);
+}
+
+bool RSContext::insertExportType(const llvm::StringRef &TypeName,
+                                 RSExportType *ET) {
+  ExportTypeMap::value_type *NewItem =
+      ExportTypeMap::value_type::Create(TypeName,
+                                        mExportTypes.getAllocator(),
+                                        ET);
+
+  if (mExportTypes.insert(NewItem)) {
+    return true;
+  } else {
+    NewItem->Destroy(mExportTypes.getAllocator());
+    return false;
+  }
+}
+
+RSContext::~RSContext() {
+  delete mLicenseNote;
+  delete mDataLayout;
+  for (ExportableList::iterator I = mExportables.begin(),
+          E = mExportables.end();
+       I != E;
+       I++) {
+    if (!(*I)->isKeep())
+      delete *I;
+  }
+}
+
+}  // namespace slang
diff --git a/slang/slang_rs_context.h b/slang/slang_rs_context.h
new file mode 100644
index 0000000..e6b4e8c
--- /dev/null
+++ b/slang/slang_rs_context.h
@@ -0,0 +1,362 @@
+/*
+ * Copyright 2010-2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_CONTEXT_H_  // NOLINT
+#define _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_CONTEXT_H_
+
+#include <cstdio>
+#include <list>
+#include <map>
+#include <set>
+#include <string>
+#include <unordered_set>
+#include <vector>
+
+#include "clang/Lex/Preprocessor.h"
+#include "clang/AST/Mangle.h"
+
+#include "llvm/ADT/StringSet.h"
+#include "llvm/ADT/StringMap.h"
+
+#include "slang_pragma_list.h"
+
+namespace llvm {
+  class LLVMContext;
+  class DataLayout;
+}   // namespace llvm
+
+namespace clang {
+  class VarDecl;
+  class ASTContext;
+  class TargetInfo;
+  class FunctionDecl;
+  class QualType;
+  class SourceManager;
+  class TypeDecl;
+  class FunctionDecl;
+}   // namespace clang
+
+namespace slang {
+  class Backend;
+  class RSExportable;
+  class RSExportVar;
+  class RSExportFunc;
+  class RSExportForEach;
+  class RSExportReduce;
+  class RSExportType;
+
+class RSContext {
+  typedef llvm::StringSet<> NeedExportVarSet;
+  typedef llvm::StringSet<> NeedExportFuncSet;
+  typedef llvm::StringSet<> NeedExportTypeSet;
+
+ public:
+  typedef std::list<RSExportable*> ExportableList;
+  typedef std::list<RSExportVar*> ExportVarList;
+  typedef std::list<RSExportFunc*> ExportFuncList;
+  typedef std::vector<RSExportForEach*> ExportForEachVector;
+  typedef std::list<RSExportReduce*> ExportReduceList;
+
+  // WARNING: Sorted by pointer value, resulting in unpredictable order
+  typedef std::unordered_set<RSExportType*> ExportReduceResultTypeSet;
+
+  typedef llvm::StringMap<RSExportType*> ExportTypeMap;
+
+ private:
+  clang::Preprocessor &mPP;
+  clang::ASTContext &mCtx;
+  PragmaList *mPragmas;
+  // Precision specified via pragma, either rs_fp_full or rs_fp_relaxed. If
+  // empty, rs_fp_full is assumed.
+  std::string mPrecision;
+  unsigned int mTargetAPI;
+  bool mVerbose;
+
+  llvm::DataLayout *mDataLayout;
+  llvm::LLVMContext &mLLVMContext;
+
+  ExportableList mExportables;
+
+  NeedExportTypeSet mNeedExportTypes;
+
+  std::string *mLicenseNote;
+  std::string mReflectJavaPackageName;
+  std::string mReflectJavaPathName;
+
+  std::string mRSPackageName;
+
+  int version;
+
+  std::unique_ptr<clang::MangleContext> mMangleCtx;
+
+  bool mIs64Bit;
+
+  bool processExportVar(const clang::VarDecl *VD);
+  bool processExportFunc(const clang::FunctionDecl *FD);
+  bool processExportType(const llvm::StringRef &Name);
+
+  int getForEachSlotNumber(const clang::StringRef& funcName);
+  unsigned mNextSlot;
+
+  ExportVarList mExportVars;
+  ExportFuncList mExportFuncs;
+  std::map<llvm::StringRef, unsigned> mExportForEachMap;
+  ExportForEachVector mExportForEach;
+  ExportForEachVector::iterator mFirstOldStyleKernel;
+  ExportReduceList mExportReduce;
+  ExportReduceResultTypeSet mExportReduceResultType;
+  ExportTypeMap mExportTypes;
+
+  clang::QualType mAllocationType;
+  clang::QualType mScriptCallType;
+
+  std::set<const clang::FunctionDecl *> mUsedByReducePragmaFns;
+
+  // Populated by markUsedByReducePragma().
+  // Consumed by processReducePragmas().
+  std::vector<clang::VarDecl *> mUsedByReducePragmaDummyVars;
+
+ public:
+  RSContext(clang::Preprocessor &PP,
+            clang::ASTContext &Ctx,
+            const clang::TargetInfo &Target,
+            PragmaList *Pragmas,
+            unsigned int TargetAPI,
+            bool Verbose);
+
+  enum CheckName { CheckNameNo, CheckNameYes };
+
+  static bool isSyntheticName(const llvm::StringRef Name) { return Name.startswith(".rs."); }
+
+  inline clang::Preprocessor &getPreprocessor() const { return mPP; }
+  inline clang::ASTContext &getASTContext() const { return mCtx; }
+  inline clang::MangleContext &getMangleContext() const {
+    return *mMangleCtx;
+  }
+  inline const llvm::DataLayout *getDataLayout() const { return mDataLayout; }
+  inline llvm::LLVMContext &getLLVMContext() const { return mLLVMContext; }
+  inline const clang::SourceManager *getSourceManager() const {
+    return &mPP.getSourceManager();
+  }
+  inline clang::DiagnosticsEngine *getDiagnostics() const {
+    return &mPP.getDiagnostics();
+  }
+  inline unsigned int getTargetAPI() const {
+    return mTargetAPI;
+  }
+
+  inline bool getVerbose() const {
+    return mVerbose;
+  }
+  inline bool is64Bit() const {
+    return mIs64Bit;
+  }
+
+  inline void setLicenseNote(const std::string &S) {
+    mLicenseNote = new std::string(S);
+  }
+  inline const std::string *getLicenseNote() const { return mLicenseNote; }
+
+  inline void addExportType(const std::string &S) {
+    mNeedExportTypes.insert(S);
+  }
+
+  inline void setReflectJavaPackageName(const std::string &S) {
+    mReflectJavaPackageName = S;
+  }
+  inline const std::string &getReflectJavaPackageName() const {
+    return mReflectJavaPackageName;
+  }
+
+  inline void setRSPackageName(const std::string &S) {
+    mRSPackageName = S;
+  }
+
+  inline const std::string &getRSPackageName() const { return mRSPackageName; }
+
+  void setAllocationType(const clang::TypeDecl* TD);
+  inline const clang::QualType& getAllocationType() const {
+    return mAllocationType;
+  }
+
+  void setScriptCallType(const clang::TypeDecl* TD);
+  inline const clang::QualType& getScriptCallType() const {
+    return mScriptCallType;
+  }
+
+  bool addForEach(const clang::FunctionDecl* FD);
+  bool processExports();
+  inline void newExportable(RSExportable *E) {
+    if (E != nullptr)
+      mExportables.push_back(E);
+  }
+  typedef ExportableList::iterator exportable_iterator;
+  exportable_iterator exportable_begin() {
+    return mExportables.begin();
+  }
+  exportable_iterator exportable_end() {
+    return mExportables.end();
+  }
+
+  typedef ExportVarList::const_iterator const_export_var_iterator;
+  const_export_var_iterator export_vars_begin() const {
+    return mExportVars.begin();
+  }
+  const_export_var_iterator export_vars_end() const {
+    return mExportVars.end();
+  }
+  inline bool hasExportVar() const {
+    return !mExportVars.empty();
+  }
+
+  typedef ExportFuncList::const_iterator const_export_func_iterator;
+  const_export_func_iterator export_funcs_begin() const {
+    return mExportFuncs.begin();
+  }
+  const_export_func_iterator export_funcs_end() const {
+    return mExportFuncs.end();
+  }
+  inline bool hasExportFunc() const { return !mExportFuncs.empty(); }
+
+  typedef ExportForEachVector::const_iterator const_export_foreach_iterator;
+  const_export_foreach_iterator export_foreach_begin() const {
+    return mExportForEach.begin();
+  }
+  const_export_foreach_iterator export_foreach_end() const {
+    return mExportForEach.end();
+  }
+  inline bool hasExportForEach() const { return !mExportForEach.empty(); }
+  int getForEachSlotNumber(const clang::FunctionDecl* FD);
+
+  typedef ExportReduceList::const_iterator const_export_reduce_iterator;
+  const_export_reduce_iterator export_reduce_begin() const {
+    return mExportReduce.begin();
+  }
+  const_export_reduce_iterator export_reduce_end() const {
+    return mExportReduce.end();
+  }
+  inline bool hasExportReduce() const { return !mExportReduce.empty(); }
+  void addExportReduce(RSExportReduce *Reduce) {
+    mExportReduce.push_back(Reduce);
+  }
+  bool processReducePragmas(Backend *BE);
+  void markUsedByReducePragma(clang::FunctionDecl *FD, CheckName Check);
+
+  // If the type has already been inserted, has no effect.
+  void insertExportReduceResultType(RSExportType *Type) { mExportReduceResultType.insert(Type); }
+
+  template <class FilterIn, class Compare>
+  std::vector<RSExportType *> getReduceResultTypes(FilterIn Filt, Compare Comp) const {
+    std::vector<RSExportType *> Return;
+    std::copy_if(mExportReduceResultType.begin(), mExportReduceResultType.end(), std::back_inserter(Return), Filt);
+    std::sort(Return.begin(), Return.end(), Comp);
+    auto ReturnNewEndIter = std::unique(Return.begin(), Return.end(),
+                                        [Comp](const RSExportType *a, const RSExportType *b) {
+                                          return !Comp(a, b) && !Comp(b, a);
+                                        });
+    Return.erase(ReturnNewEndIter, Return.end());
+    return Return;
+  }
+
+  typedef ExportTypeMap::iterator export_type_iterator;
+  typedef ExportTypeMap::const_iterator const_export_type_iterator;
+  export_type_iterator export_types_begin() { return mExportTypes.begin(); }
+  export_type_iterator export_types_end() { return mExportTypes.end(); }
+  const_export_type_iterator export_types_begin() const {
+    return mExportTypes.begin();
+  }
+  const_export_type_iterator export_types_end() const {
+    return mExportTypes.end();
+  }
+  inline bool hasExportType() const { return !mExportTypes.empty(); }
+  export_type_iterator findExportType(const llvm::StringRef &TypeName) {
+    return mExportTypes.find(TypeName);
+  }
+  const_export_type_iterator findExportType(const llvm::StringRef &TypeName)
+      const {
+    return mExportTypes.find(TypeName);
+  }
+
+  // Insert the specified Typename/Type pair into the map. If the key already
+  // exists in the map, return false and ignore the request, otherwise insert it
+  // and return true.
+  bool insertExportType(const llvm::StringRef &TypeName, RSExportType *Type);
+
+  int getVersion() const { return version; }
+  void setVersion(int v) {
+    version = v;
+  }
+
+  bool isCompatLib() const {
+    // If we are not targeting the actual Android Renderscript classes,
+    // we should reflect code that works with the compatibility library.
+    return (mRSPackageName.compare("android.renderscript") != 0);
+  }
+
+  void addPragma(const std::string &T, const std::string &V) {
+    mPragmas->push_back(make_pair(T, V));
+  }
+  void setPrecision(const std::string &P) { mPrecision = P; }
+  std::string getPrecision() { return mPrecision; }
+
+  // Report an error or a warning to the user.
+  template <unsigned N>
+  clang::DiagnosticBuilder Report(clang::DiagnosticsEngine::Level Level,
+                                             const char (&Message)[N]) {
+  clang::DiagnosticsEngine *DiagEngine = getDiagnostics();
+  return DiagEngine->Report(DiagEngine->getCustomDiagID(Level, Message));
+  }
+
+  template <unsigned N>
+  clang::DiagnosticBuilder Report(clang::DiagnosticsEngine::Level Level,
+                                             const clang::SourceLocation Loc,
+                                             const char (&Message)[N]) {
+  clang::DiagnosticsEngine *DiagEngine = getDiagnostics();
+  const clang::SourceManager *SM = getSourceManager();
+  return DiagEngine->Report(clang::FullSourceLoc(Loc, *SM),
+                            DiagEngine->getCustomDiagID(Level, Message));
+  }
+
+  // Utility functions to report errors and warnings to make the calling code
+  // easier to read.
+  template <unsigned N>
+  clang::DiagnosticBuilder ReportError(const char (&Message)[N]) {
+    return Report<N>(clang::DiagnosticsEngine::Error, Message);
+  }
+
+  template <unsigned N>
+  clang::DiagnosticBuilder ReportError(const clang::SourceLocation Loc,
+                                       const char (&Message)[N]) {
+    return Report<N>(clang::DiagnosticsEngine::Error, Loc, Message);
+  }
+
+  template <unsigned N>
+  clang::DiagnosticBuilder ReportWarning(const char (&Message)[N]) {
+    return Report<N>(clang::DiagnosticsEngine::Warning, Message);
+  }
+
+  template <unsigned N>
+  clang::DiagnosticBuilder ReportWarning(const clang::SourceLocation Loc,
+                                         const char (&Message)[N]) {
+    return Report<N>(clang::DiagnosticsEngine::Warning, Loc, Message);
+  }
+
+  ~RSContext();
+};
+
+}   // namespace slang
+
+#endif  // _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_CONTEXT_H_  NOLINT
diff --git a/slang/slang_rs_export_element.cpp b/slang/slang_rs_export_element.cpp
new file mode 100644
index 0000000..15902c2
--- /dev/null
+++ b/slang/slang_rs_export_element.cpp
@@ -0,0 +1,179 @@
+/*
+ * Copyright 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "slang_rs_export_element.h"
+
+#include "clang/AST/Decl.h"
+#include "clang/AST/Type.h"
+
+#include "clang/Basic/SourceLocation.h"
+#include "clang/Basic/IdentifierTable.h"
+
+#include "slang_assert.h"
+#include "slang_rs_context.h"
+#include "slang_rs_export_type.h"
+
+namespace slang {
+
+bool RSExportElement::Initialized = false;
+RSExportElement::ElementInfoMapTy RSExportElement::ElementInfoMap;
+
+struct DataElementInfo {
+  const char *name;
+  DataType dataType;
+  bool normalized;
+  int vsize;
+};
+
+static DataElementInfo DataElementInfoTable[] = {
+    {"rs_pixel_l", DataTypeUnsigned8, true, 1},
+    {"rs_pixel_a", DataTypeUnsigned8, true, 1},
+    {"rs_pixel_la", DataTypeUnsigned8, true, 2},
+    {"rs_pixel_rgb", DataTypeUnsigned8, true, 3},
+    {"rs_pixel_rgba", DataTypeUnsigned8, true, 4},
+    {"rs_pixel_rgb565", DataTypeUnsigned8, true, 3},
+    {"rs_pixel_rgb5551", DataTypeUnsigned8, true, 4},
+    {"rs_pixel_rgb4444", DataTypeUnsigned8, true, 4},
+};
+
+const int DataElementInfoTableCount = sizeof(DataElementInfoTable) / sizeof(DataElementInfoTable[0]);
+
+// TODO Rename RSExportElement to RSExportDataElement
+void RSExportElement::Init() {
+  if (!Initialized) {
+    // Initialize ElementInfoMap
+    for (int i = 0; i < DataElementInfoTableCount; i++) {
+      ElementInfo *EI = new ElementInfo;
+      EI->type = DataElementInfoTable[i].dataType;
+      EI->normalized = DataElementInfoTable[i].normalized;
+      EI->vsize = DataElementInfoTable[i].vsize;
+      llvm::StringRef Name(DataElementInfoTable[i].name);
+      ElementInfoMap.insert(ElementInfoMapTy::value_type::Create(
+          Name, ElementInfoMap.getAllocator(), EI));
+    }
+    Initialized = true;
+  }
+}
+
+RSExportType *RSExportElement::Create(RSContext *Context,
+                                      const clang::Type *T,
+                                      const ElementInfo *EI) {
+  // Create RSExportType corresponded to the @T first and then verify
+
+  llvm::StringRef TypeName;
+  RSExportType *ET = nullptr;
+
+  if (!Initialized)
+    Init();
+
+  slangAssert(EI != nullptr && "Element info not found");
+
+  if (!RSExportType::NormalizeType(T, TypeName, Context, nullptr,
+                                   NotLegacyKernelArgument))
+    return nullptr;
+
+  switch (T->getTypeClass()) {
+    case clang::Type::Builtin:
+    case clang::Type::Pointer: {
+      slangAssert(EI->vsize == 1 && "Element not a primitive class (please "
+                                    "check your macro)");
+      RSExportPrimitiveType *EPT =
+          RSExportPrimitiveType::Create(Context,
+                                        T,
+                                        TypeName,
+                                        EI->normalized);
+      // Verify
+      slangAssert(EI->type == EPT->getType() && "Element has unexpected type");
+      ET = EPT;
+      break;
+    }
+    case clang::Type::ExtVector: {
+      slangAssert(EI->vsize > 1 && "Element not a vector class (please check "
+                                   "your macro)");
+      RSExportVectorType *EVT =
+          RSExportVectorType::Create(Context,
+                                     static_cast<const clang::ExtVectorType*>(
+                                         T->getCanonicalTypeInternal()
+                                             .getTypePtr()),
+                                     TypeName,
+                                     EI->normalized);
+      // Verify
+      slangAssert(EI->type == EVT->getType() && "Element has unexpected type");
+      slangAssert(EI->vsize == EVT->getNumElement() && "Element has unexpected "
+                                                       "size of vector");
+      ET = EVT;
+      break;
+    }
+    default: {
+      // TODO(zonr): warn that type is not exportable
+      fprintf(stderr, "RSExportElement::Create : type '%s' is not exportable\n",
+              T->getTypeClassName());
+      break;
+    }
+  }
+
+  return ET;
+}
+
+RSExportType *RSExportElement::CreateFromDecl(RSContext *Context,
+                                              const clang::DeclaratorDecl *DD) {
+  const clang::Type* T = RSExportType::GetTypeOfDecl(DD);
+  const clang::Type* CT = GetCanonicalType(T);
+  const ElementInfo* EI = nullptr;
+
+  // Note: RS element like rs_pixel_rgb elements are either in the type of
+  // primitive or vector.
+  if ((CT->getTypeClass() != clang::Type::Builtin) &&
+      (CT->getTypeClass() != clang::Type::ExtVector)) {
+    return RSExportType::Create(Context, T, NotLegacyKernelArgument);
+  }
+
+  // Following the typedef chain to see whether it's an element name like
+  // rs_pixel_rgb or its alias (via typedef).
+  while (T != CT) {
+    if (T->getTypeClass() != clang::Type::Typedef) {
+      break;
+    } else {
+      const clang::TypedefType *TT = static_cast<const clang::TypedefType*>(T);
+      const clang::TypedefNameDecl *TD = TT->getDecl();
+      EI = GetElementInfo(TD->getName());
+      if (EI != nullptr)
+        break;
+
+      T = TD->getUnderlyingType().getTypePtr();
+    }
+  }
+
+  if (EI == nullptr) {
+    return RSExportType::Create(Context, T, NotLegacyKernelArgument);
+  } else {
+    return RSExportElement::Create(Context, T, EI);
+  }
+}
+
+const RSExportElement::ElementInfo *
+RSExportElement::GetElementInfo(const llvm::StringRef &Name) {
+  if (!Initialized)
+    Init();
+
+  ElementInfoMapTy::const_iterator I = ElementInfoMap.find(Name);
+  if (I == ElementInfoMap.end())
+    return nullptr;
+  else
+    return I->getValue();
+}
+
+}  // namespace slang
diff --git a/slang/slang_rs_export_element.h b/slang/slang_rs_export_element.h
new file mode 100644
index 0000000..5f7006c
--- /dev/null
+++ b/slang/slang_rs_export_element.h
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_EXPORT_ELEMENT_H_  // NOLINT
+#define _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_EXPORT_ELEMENT_H_
+
+#include <string>
+
+#include "clang/Lex/Token.h"
+
+#include "llvm/ADT/StringMap.h"
+#include "llvm/ADT/StringRef.h"
+
+#include "slang_rs_export_type.h"
+
+namespace clang {
+  class Type;
+  class DeclaratorDecl;
+}   // namespace clang
+
+namespace slang {
+
+  class RSContext;
+  class RSExportType;
+
+class RSExportElement {
+  // This is a utility class for handling the RS_ELEMENT_ADD* marker
+  RSExportElement() { }
+
+  typedef struct {
+    DataType type;
+    bool normalized;
+    unsigned vsize;
+  } ElementInfo;
+
+  typedef llvm::StringMap<const ElementInfo*> ElementInfoMapTy;
+
+ private:
+  // Macro name <-> ElementInfo
+  static ElementInfoMapTy ElementInfoMap;
+
+  static bool Initialized;
+
+  static RSExportType *Create(RSContext *Context,
+                              const clang::Type *T,
+                              const ElementInfo *EI);
+
+  static const ElementInfo *GetElementInfo(const llvm::StringRef &Name);
+
+ public:
+  static void Init();
+
+  static RSExportType *CreateFromDecl(RSContext *Context,
+                                      const clang::DeclaratorDecl *DD);
+};
+
+}   // namespace slang
+
+#endif  // _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_EXPORT_ELEMENT_H_  NOLINT
diff --git a/slang/slang_rs_export_foreach.cpp b/slang/slang_rs_export_foreach.cpp
new file mode 100644
index 0000000..f7483e3
--- /dev/null
+++ b/slang/slang_rs_export_foreach.cpp
@@ -0,0 +1,481 @@
+/*
+ * Copyright 2011-2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "slang_rs_export_foreach.h"
+
+#include <string>
+
+#include "clang/AST/ASTContext.h"
+#include "clang/AST/Attr.h"
+#include "clang/AST/Decl.h"
+#include "clang/AST/TypeLoc.h"
+
+#include "llvm/IR/DerivedTypes.h"
+
+#include "bcinfo/MetadataExtractor.h"
+
+#include "slang_assert.h"
+#include "slang_rs_context.h"
+#include "slang_rs_export_type.h"
+#include "slang_rs_special_func.h"
+#include "slang_rs_special_kernel_param.h"
+#include "slang_version.h"
+
+namespace {
+
+const size_t RS_KERNEL_INPUT_LIMIT = 8; // see frameworks/base/libs/rs/cpu_ref/rsCpuCoreRuntime.h
+
+bool isRootRSFunc(const clang::FunctionDecl *FD) {
+  if (!FD) {
+    return false;
+  }
+  return FD->getName().equals("root");
+}
+
+} // end anonymous namespace
+
+namespace slang {
+
+// This function takes care of additional validation and construction of
+// parameters related to forEach_* reflection.
+bool RSExportForEach::validateAndConstructParams(
+    RSContext *Context, const clang::FunctionDecl *FD) {
+  slangAssert(Context && FD);
+  bool valid = true;
+
+  numParams = FD->getNumParams();
+
+  if (Context->getTargetAPI() < SLANG_JB_TARGET_API) {
+    // Before JellyBean, we allowed only one kernel per file.  It must be called "root".
+    if (!isRootRSFunc(FD)) {
+      Context->ReportError(FD->getLocation(),
+                           "Non-root compute kernel %0() is "
+                           "not supported in SDK levels %1-%2")
+          << FD->getName() << SLANG_MINIMUM_TARGET_API
+          << (SLANG_JB_TARGET_API - 1);
+      return false;
+    }
+  }
+
+  mResultType = FD->getReturnType().getCanonicalType();
+  // Compute kernel functions are defined differently when the
+  // "__attribute__((kernel))" is set.
+  if (FD->hasAttr<clang::KernelAttr>()) {
+    valid &= validateAndConstructKernelParams(Context, FD);
+  } else {
+    valid &= validateAndConstructOldStyleParams(Context, FD);
+  }
+
+  valid &= setSignatureMetadata(Context, FD);
+  return valid;
+}
+
+bool RSExportForEach::validateAndConstructOldStyleParams(
+    RSContext *Context, const clang::FunctionDecl *FD) {
+  slangAssert(Context && FD);
+  // If numParams is 0, we already marked this as a graphics root().
+  slangAssert(numParams > 0);
+
+  bool valid = true;
+
+  // Compute kernel functions of this style are required to return a void type.
+  clang::ASTContext &C = Context->getASTContext();
+  if (mResultType != C.VoidTy) {
+    Context->ReportError(FD->getLocation(),
+                         "Compute kernel %0() is required to return a "
+                         "void type")
+        << FD->getName();
+    valid = false;
+  }
+
+  // Validate remaining parameter types
+
+  size_t IndexOfFirstSpecialParameter = numParams;
+  valid &= processSpecialParameters(Context, FD, &IndexOfFirstSpecialParameter);
+
+  // Validate the non-special parameters, which should all be found before the
+  // first special parameter.
+  for (size_t i = 0; i < IndexOfFirstSpecialParameter; i++) {
+    const clang::ParmVarDecl *PVD = FD->getParamDecl(i);
+    clang::QualType QT = PVD->getType().getCanonicalType();
+
+    if (!QT->isPointerType()) {
+      Context->ReportError(PVD->getLocation(),
+                           "Compute kernel %0() cannot have non-pointer "
+                           "parameters besides special parameters (%1). Parameter '%2' is "
+                           "of type: '%3'")
+          << FD->getName() << listSpecialKernelParameters(Context->getTargetAPI())
+          << PVD->getName() << PVD->getType().getAsString();
+      valid = false;
+      continue;
+    }
+
+    // The only non-const pointer should be out.
+    if (!QT->getPointeeType().isConstQualified()) {
+      if (mOut == nullptr) {
+        mOut = PVD;
+      } else {
+        Context->ReportError(PVD->getLocation(),
+                             "Compute kernel %0() can only have one non-const "
+                             "pointer parameter. Parameters '%1' and '%2' are "
+                             "both non-const.")
+            << FD->getName() << mOut->getName() << PVD->getName();
+        valid = false;
+      }
+    } else {
+      if (mIns.empty() && mOut == nullptr) {
+        mIns.push_back(PVD);
+      } else if (mUsrData == nullptr) {
+        mUsrData = PVD;
+      } else {
+        Context->ReportError(
+            PVD->getLocation(),
+            "Unexpected parameter '%0' for compute kernel %1()")
+            << PVD->getName() << FD->getName();
+        valid = false;
+      }
+    }
+  }
+
+  if (mIns.empty() && !mOut) {
+    Context->ReportError(FD->getLocation(),
+                         "Compute kernel %0() must have at least one "
+                         "parameter for in or out")
+        << FD->getName();
+    valid = false;
+  }
+
+  return valid;
+}
+
+bool RSExportForEach::validateAndConstructKernelParams(
+    RSContext *Context, const clang::FunctionDecl *FD) {
+  slangAssert(Context && FD);
+  bool valid = true;
+  clang::ASTContext &C = Context->getASTContext();
+
+  if (Context->getTargetAPI() < SLANG_JB_MR1_TARGET_API) {
+    Context->ReportError(FD->getLocation(),
+                         "Compute kernel %0() targeting SDK levels "
+                         "%1-%2 may not use pass-by-value with "
+                         "__attribute__((kernel))")
+        << FD->getName() << SLANG_MINIMUM_TARGET_API
+        << (SLANG_JB_MR1_TARGET_API - 1);
+    return false;
+  }
+
+  // Denote that we are indeed a pass-by-value kernel.
+  mIsKernelStyle = true;
+  mHasReturnType = (mResultType != C.VoidTy);
+
+  if (mResultType->isPointerType()) {
+    Context->ReportError(
+        FD->getTypeSpecStartLoc(),
+        "Compute kernel %0() cannot return a pointer type: '%1'")
+        << FD->getName() << mResultType.getAsString();
+    valid = false;
+  }
+
+  // Validate remaining parameter types
+
+  size_t IndexOfFirstSpecialParameter = numParams;
+  valid &= processSpecialParameters(Context, FD, &IndexOfFirstSpecialParameter);
+
+  // Validate the non-special parameters, which should all be found before the
+  // first special.
+  for (size_t i = 0; i < IndexOfFirstSpecialParameter; i++) {
+    const clang::ParmVarDecl *PVD = FD->getParamDecl(i);
+
+    if (Context->getTargetAPI() >= SLANG_M_TARGET_API || i == 0) {
+      if (i >= RS_KERNEL_INPUT_LIMIT) {
+        Context->ReportError(PVD->getLocation(),
+                             "Invalid parameter '%0' for compute kernel %1(). "
+                             "Kernels targeting SDK levels %2+ may not use "
+                             "more than %3 input parameters.") << PVD->getName() <<
+                             FD->getName() << SLANG_M_TARGET_API <<
+                             int(RS_KERNEL_INPUT_LIMIT);
+
+      } else {
+        mIns.push_back(PVD);
+      }
+    } else {
+      Context->ReportError(PVD->getLocation(),
+                           "Invalid parameter '%0' for compute kernel %1(). "
+                           "Kernels targeting SDK levels %2-%3 may not use "
+                           "multiple input parameters.") << PVD->getName() <<
+                           FD->getName() << SLANG_MINIMUM_TARGET_API <<
+                           (SLANG_M_TARGET_API - 1);
+      valid = false;
+    }
+    clang::QualType QT = PVD->getType().getCanonicalType();
+    if (QT->isPointerType()) {
+      Context->ReportError(PVD->getLocation(),
+                           "Compute kernel %0() cannot have "
+                           "parameter '%1' of pointer type: '%2'")
+          << FD->getName() << PVD->getName() << PVD->getType().getAsString();
+      valid = false;
+    }
+  }
+
+  // Check that we have at least one allocation to use for dimensions.
+  if (valid && mIns.empty() && !mHasReturnType && Context->getTargetAPI() < SLANG_M_TARGET_API) {
+    Context->ReportError(FD->getLocation(),
+                         "Compute kernel %0() targeting SDK levels "
+                         "%1-%2 must have at least one "
+                         "input parameter or a non-void return "
+                         "type")
+        << FD->getName() << SLANG_MINIMUM_TARGET_API
+        << (SLANG_M_TARGET_API - 1);
+    valid = false;
+  }
+
+  return valid;
+}
+
+// Process the optional special parameters:
+// - Sets *IndexOfFirstSpecialParameter to the index of the first special parameter, or
+//     FD->getNumParams() if none are found.
+// - Add bits to mSpecialParameterSignatureMetadata for the found special parameters.
+// Returns true if no errors.
+bool RSExportForEach::processSpecialParameters(
+    RSContext *Context, const clang::FunctionDecl *FD,
+    size_t *IndexOfFirstSpecialParameter) {
+  auto DiagnosticCallback = [FD] {
+    std::ostringstream DiagnosticDescription;
+    DiagnosticDescription << "compute kernel " << FD->getName().str() << "()";
+    return DiagnosticDescription.str();
+  };
+  return slang::processSpecialKernelParameters(Context,
+                                               DiagnosticCallback,
+                                               FD,
+                                               IndexOfFirstSpecialParameter,
+                                               &mSpecialParameterSignatureMetadata);
+}
+
+bool RSExportForEach::setSignatureMetadata(RSContext *Context,
+                                           const clang::FunctionDecl *FD) {
+  mSignatureMetadata = 0;
+  bool valid = true;
+
+  if (mIsKernelStyle) {
+    slangAssert(mOut == nullptr);
+    slangAssert(mUsrData == nullptr);
+  } else {
+    slangAssert(!mHasReturnType);
+  }
+
+  // Set up the bitwise metadata encoding for runtime argument passing.
+  const bool HasOut = mOut || mHasReturnType;
+  mSignatureMetadata |= (hasIns() ?       bcinfo::MD_SIG_In     : 0);
+  mSignatureMetadata |= (HasOut ?         bcinfo::MD_SIG_Out    : 0);
+  mSignatureMetadata |= (mUsrData ?       bcinfo::MD_SIG_Usr    : 0);
+  mSignatureMetadata |= (mIsKernelStyle ? bcinfo::MD_SIG_Kernel : 0);  // pass-by-value
+  mSignatureMetadata |= mSpecialParameterSignatureMetadata;
+
+  if (Context->getTargetAPI() < SLANG_ICS_TARGET_API) {
+    // APIs before ICS cannot skip between parameters. It is ok, however, for
+    // them to omit further parameters (i.e. skipping X is ok if you skip Y).
+    if (mSignatureMetadata != (bcinfo::MD_SIG_In | bcinfo::MD_SIG_Out | bcinfo::MD_SIG_Usr |
+                               bcinfo::MD_SIG_X | bcinfo::MD_SIG_Y) &&
+        mSignatureMetadata != (bcinfo::MD_SIG_In | bcinfo::MD_SIG_Out | bcinfo::MD_SIG_Usr |
+                               bcinfo::MD_SIG_X) &&
+        mSignatureMetadata != (bcinfo::MD_SIG_In | bcinfo::MD_SIG_Out | bcinfo::MD_SIG_Usr) &&
+        mSignatureMetadata != (bcinfo::MD_SIG_In | bcinfo::MD_SIG_Out) &&
+        mSignatureMetadata != (bcinfo::MD_SIG_In)) {
+      Context->ReportError(FD->getLocation(),
+                           "Compute kernel %0() targeting SDK levels "
+                           "%1-%2 may not skip parameters")
+          << FD->getName() << SLANG_MINIMUM_TARGET_API
+          << (SLANG_ICS_TARGET_API - 1);
+      valid = false;
+    }
+  }
+  return valid;
+}
+
+RSExportForEach *RSExportForEach::Create(RSContext *Context,
+                                         const clang::FunctionDecl *FD) {
+  slangAssert(Context && FD);
+  llvm::StringRef Name = FD->getName();
+  RSExportForEach *FE;
+
+  slangAssert(!Name.empty() && "Function must have a name");
+
+  FE = new RSExportForEach(Context, Name);
+
+  if (!FE->validateAndConstructParams(Context, FD)) {
+    return nullptr;
+  }
+
+  clang::ASTContext &Ctx = Context->getASTContext();
+
+  std::string Id = CreateDummyName("helper_foreach_param", FE->getName());
+
+  // Extract the usrData parameter (if we have one)
+  if (FE->mUsrData) {
+    const clang::ParmVarDecl *PVD = FE->mUsrData;
+    clang::QualType QT = PVD->getType().getCanonicalType();
+    slangAssert(QT->isPointerType() &&
+                QT->getPointeeType().isConstQualified());
+
+    const clang::ASTContext &C = Context->getASTContext();
+    if (QT->getPointeeType().getCanonicalType().getUnqualifiedType() ==
+        C.VoidTy) {
+      // In the case of using const void*, we can't reflect an appopriate
+      // Java type, so we fall back to just reflecting the ain/aout parameters
+      FE->mUsrData = nullptr;
+    } else {
+      clang::RecordDecl *RD =
+          clang::RecordDecl::Create(Ctx, clang::TTK_Struct,
+                                    Ctx.getTranslationUnitDecl(),
+                                    clang::SourceLocation(),
+                                    clang::SourceLocation(),
+                                    &Ctx.Idents.get(Id));
+
+      clang::FieldDecl *FD =
+          clang::FieldDecl::Create(Ctx,
+                                   RD,
+                                   clang::SourceLocation(),
+                                   clang::SourceLocation(),
+                                   PVD->getIdentifier(),
+                                   QT->getPointeeType(),
+                                   nullptr,
+                                   /* BitWidth = */ nullptr,
+                                   /* Mutable = */ false,
+                                   /* HasInit = */ clang::ICIS_NoInit);
+      RD->addDecl(FD);
+      RD->completeDefinition();
+
+      // Create an export type iff we have a valid usrData type
+      clang::QualType T = Ctx.getTagDeclType(RD);
+      slangAssert(!T.isNull());
+
+      RSExportType *ET =
+          RSExportType::Create(Context, T.getTypePtr(), LegacyKernelArgument);
+
+      slangAssert(ET && "Failed to export a kernel");
+
+      slangAssert((ET->getClass() == RSExportType::ExportClassRecord) &&
+                  "Parameter packet must be a record");
+
+      FE->mParamPacketType = static_cast<RSExportRecordType *>(ET);
+    }
+  }
+
+  // Construct type information about inputs and outputs. Return null when
+  // there is an error exporting types.
+
+  bool TypeExportError = false;
+
+  if (FE->hasIns()) {
+    for (InIter BI = FE->mIns.begin(), EI = FE->mIns.end(); BI != EI; BI++) {
+      const clang::Type *T = (*BI)->getType().getCanonicalType().getTypePtr();
+      ExportKind EK = (FE->mIsKernelStyle ? NotLegacyKernelArgument :
+                                            LegacyKernelArgument);
+      RSExportType *InExportType = RSExportType::Create(Context, T, EK);
+
+      // It is not an error if we don't export an input type for legacy
+      // kernel arguments. This can happen in the case of a void pointer.
+      if (FE->mIsKernelStyle && !InExportType) {
+        TypeExportError = true;
+      }
+
+      FE->mInTypes.push_back(InExportType);
+    }
+  }
+
+  if (FE->mIsKernelStyle && FE->mHasReturnType) {
+    const clang::Type *ReturnType = FE->mResultType.getTypePtr();
+    FE->mOutType = RSExportType::Create(Context, ReturnType,
+                                        NotLegacyKernelArgument);
+    TypeExportError |= !FE->mOutType;
+  } else if (FE->mOut) {
+    const clang::Type *OutType =
+        FE->mOut->getType().getCanonicalType().getTypePtr();
+    FE->mOutType = RSExportType::Create(Context, OutType, LegacyKernelArgument);
+    // It is not an error if we don't export an output type.
+    // This can happen in the case of a void pointer.
+  }
+
+  if (TypeExportError) {
+    slangAssert(Context->getDiagnostics()->hasErrorOccurred() &&
+                "Error exporting type but no diagnostic message issued!");
+    return nullptr;
+  }
+
+  return FE;
+}
+
+RSExportForEach *RSExportForEach::CreateDummyRoot(RSContext *Context) {
+  slangAssert(Context);
+  llvm::StringRef Name = "root";
+  RSExportForEach *FE = new RSExportForEach(Context, Name);
+  FE->mDummyRoot = true;
+  return FE;
+}
+
+bool RSExportForEach::isRSForEachFunc(unsigned int targetAPI,
+                                      const clang::FunctionDecl *FD) {
+  if (!FD) {
+    return false;
+  }
+
+  // Anything tagged as a kernel("") is definitely used with ForEach.
+  if (auto *Kernel = FD->getAttr<clang::KernelAttr>()) {
+    return Kernel->getKernelKind().empty();
+  }
+
+  if (RSSpecialFunc::isGraphicsRootRSFunc(targetAPI, FD)) {
+    return false;
+  }
+
+  // Check if first parameter is a pointer (which is required for ForEach).
+  unsigned int numParams = FD->getNumParams();
+
+  if (numParams > 0) {
+    const clang::ParmVarDecl *PVD = FD->getParamDecl(0);
+    clang::QualType QT = PVD->getType().getCanonicalType();
+
+    if (QT->isPointerType()) {
+      return true;
+    }
+
+    // Any non-graphics root() is automatically a ForEach candidate.
+    // At this point, however, we know that it is not going to be a valid
+    // compute root() function (due to not having a pointer parameter). We
+    // still want to return true here, so that we can issue appropriate
+    // diagnostics.
+    if (isRootRSFunc(FD)) {
+      return true;
+    }
+  }
+
+  return false;
+}
+
+unsigned RSExportForEach::getNumInputs(unsigned int targetAPI,
+                                       const clang::FunctionDecl *FD) {
+  unsigned numInputs = 0;
+  for (const clang::ParmVarDecl* param : FD->params()) {
+    if (!isSpecialKernelParameter(param->getName())) {
+      numInputs++;
+    }
+  }
+
+  return numInputs;
+}
+
+}  // namespace slang
diff --git a/slang/slang_rs_export_foreach.h b/slang/slang_rs_export_foreach.h
new file mode 100644
index 0000000..67b3a5c
--- /dev/null
+++ b/slang/slang_rs_export_foreach.h
@@ -0,0 +1,172 @@
+/*
+ * Copyright 2011-2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_EXPORT_FOREACH_H_  // NOLINT
+#define _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_EXPORT_FOREACH_H_
+
+#include "llvm/ADT/StringRef.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/Support/raw_ostream.h"
+
+#include "clang/AST/Decl.h"
+
+#include "slang_assert.h"
+#include "slang_rs_context.h"
+#include "slang_rs_exportable.h"
+#include "slang_rs_export_type.h"
+
+namespace clang {
+  class FunctionDecl;
+}  // namespace clang
+
+namespace slang {
+
+// Base class for reflecting control-side forEach (currently for root()
+// functions that fit appropriate criteria)
+class RSExportForEach : public RSExportable {
+ public:
+
+  typedef llvm::SmallVectorImpl<const clang::ParmVarDecl*> InVec;
+  typedef llvm::SmallVectorImpl<const RSExportType*> InTypeVec;
+
+  typedef InVec::const_iterator InIter;
+  typedef InTypeVec::const_iterator InTypeIter;
+
+ private:
+  std::string mName;
+  RSExportRecordType *mParamPacketType;
+  llvm::SmallVector<const RSExportType*, 16> mInTypes;
+  RSExportType *mOutType;
+  size_t numParams;
+
+  unsigned int mSignatureMetadata;
+
+  llvm::SmallVector<const clang::ParmVarDecl*, 16> mIns;
+  const clang::ParmVarDecl *mOut;
+  const clang::ParmVarDecl *mUsrData;
+
+  // Accumulator for metadata bits corresponding to special parameters.
+  unsigned int mSpecialParameterSignatureMetadata;
+
+  clang::QualType mResultType;  // return type (if present).
+  bool mHasReturnType;  // does this kernel have a return type?
+  bool mIsKernelStyle;  // is this a pass-by-value kernel?
+
+  bool mDummyRoot;
+
+  // TODO(all): Add support for LOD/face when we have them
+  RSExportForEach(RSContext *Context, const llvm::StringRef &Name)
+    : RSExportable(Context, RSExportable::EX_FOREACH),
+      mName(Name.data(), Name.size()), mParamPacketType(nullptr),
+      mOutType(nullptr), numParams(0), mSignatureMetadata(0),
+      mOut(nullptr), mUsrData(nullptr), mSpecialParameterSignatureMetadata(0),
+      mResultType(clang::QualType()), mHasReturnType(false),
+      mIsKernelStyle(false), mDummyRoot(false) {
+  }
+
+  bool validateAndConstructParams(RSContext *Context,
+                                  const clang::FunctionDecl *FD);
+
+  bool validateAndConstructOldStyleParams(RSContext *Context,
+                                          const clang::FunctionDecl *FD);
+
+  bool validateAndConstructKernelParams(RSContext *Context,
+                                        const clang::FunctionDecl *FD);
+
+  bool processSpecialParameters(RSContext *Context,
+                                const clang::FunctionDecl *FD,
+                                size_t *IndexOfFirstSpecialParameter);
+
+  bool setSignatureMetadata(RSContext *Context,
+                            const clang::FunctionDecl *FD);
+ public:
+  static RSExportForEach *Create(RSContext *Context,
+                                 const clang::FunctionDecl *FD);
+
+  static RSExportForEach *CreateDummyRoot(RSContext *Context);
+
+  inline const std::string &getName() const {
+    return mName;
+  }
+
+  inline size_t getNumParameters() const {
+    return numParams;
+  }
+
+  inline bool hasIns() const {
+    return (!mIns.empty());
+  }
+
+  inline bool hasOut() const {
+    return (mOut != nullptr);
+  }
+
+  inline bool hasUsrData() const {
+    return (mUsrData != nullptr);
+  }
+
+  inline bool hasReturn() const {
+    return mHasReturnType;
+  }
+
+  inline const InVec& getIns() const {
+    return mIns;
+  }
+
+  inline const InTypeVec& getInTypes() const {
+    return mInTypes;
+  }
+
+  inline const RSExportType *getOutType() const {
+    return mOutType;
+  }
+
+  inline const RSExportRecordType *getParamPacketType() const {
+    return mParamPacketType;
+  }
+
+  inline unsigned int getSignatureMetadata() const {
+    return mSignatureMetadata;
+  }
+
+  inline bool isDummyRoot() const {
+    return mDummyRoot;
+  }
+
+  typedef RSExportRecordType::const_field_iterator const_param_iterator;
+
+  inline const_param_iterator params_begin() const {
+    slangAssert((mParamPacketType != nullptr) &&
+                "Get parameter from export foreach having no parameter!");
+    return mParamPacketType->fields_begin();
+  }
+
+  inline const_param_iterator params_end() const {
+    slangAssert((mParamPacketType != nullptr) &&
+                "Get parameter from export foreach having no parameter!");
+    return mParamPacketType->fields_end();
+  }
+
+  static bool isRSForEachFunc(unsigned int targetAPI,
+                              const clang::FunctionDecl *FD);
+
+  static unsigned getNumInputs(unsigned int targetAPI,
+                              const clang::FunctionDecl *FD);
+};  // RSExportForEach
+
+}  // namespace slang
+
+#endif  // _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_EXPORT_FOREACH_H_  NOLINT
diff --git a/slang/slang_rs_export_func.cpp b/slang/slang_rs_export_func.cpp
new file mode 100644
index 0000000..519ac59
--- /dev/null
+++ b/slang/slang_rs_export_func.cpp
@@ -0,0 +1,173 @@
+/*
+ * Copyright 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "slang_rs_export_func.h"
+
+#include <string>
+
+#include "clang/AST/ASTContext.h"
+#include "clang/AST/Decl.h"
+
+#include "llvm/IR/DataLayout.h"
+#include "llvm/IR/DerivedTypes.h"
+
+#include "slang_assert.h"
+#include "slang_rs_context.h"
+
+namespace slang {
+
+namespace {
+
+// Ensure that the exported function is actually valid
+static bool ValidateFuncDecl(slang::RSContext *Context,
+                             const clang::FunctionDecl *FD) {
+  slangAssert(Context && FD);
+  const clang::ASTContext &C = FD->getASTContext();
+  if (FD->getReturnType().getCanonicalType() != C.VoidTy) {
+    Context->ReportError(
+        FD->getLocation(),
+        "invokable non-static functions are required to return void");
+    return false;
+  }
+  return true;
+}
+
+}  // namespace
+
+RSExportFunc *RSExportFunc::Create(RSContext *Context,
+                                   const clang::FunctionDecl *FD) {
+  llvm::StringRef Name = FD->getName();
+  RSExportFunc *F;
+
+  slangAssert(!Name.empty() && "Function must have a name");
+
+  if (!ValidateFuncDecl(Context, FD)) {
+    return nullptr;
+  }
+
+  F = new RSExportFunc(Context, Name, FD);
+
+  // Initialize mParamPacketType
+  if (FD->getNumParams() <= 0) {
+    F->mParamPacketType = nullptr;
+  } else {
+    clang::ASTContext &Ctx = Context->getASTContext();
+
+    std::string Id = CreateDummyName("helper_func_param", F->getName());
+
+    clang::RecordDecl *RD =
+        clang::RecordDecl::Create(Ctx, clang::TTK_Struct,
+                                  Ctx.getTranslationUnitDecl(),
+                                  clang::SourceLocation(),
+                                  clang::SourceLocation(),
+                                  &Ctx.Idents.get(Id));
+
+    for (unsigned i = 0; i < FD->getNumParams(); i++) {
+      const clang::ParmVarDecl *PVD = FD->getParamDecl(i);
+      llvm::StringRef ParamName = PVD->getName();
+
+      if (PVD->hasDefaultArg())
+        fprintf(stderr, "Note: parameter '%s' in function '%s' has default "
+                        "value which is not supported\n",
+                        ParamName.str().c_str(),
+                        F->getName().c_str());
+
+      clang::FieldDecl *FD =
+          clang::FieldDecl::Create(Ctx,
+                                   RD,
+                                   clang::SourceLocation(),
+                                   clang::SourceLocation(),
+                                   PVD->getIdentifier(),
+                                   PVD->getOriginalType(),
+                                   nullptr,
+                                   /* BitWidth = */ nullptr,
+                                   /* Mutable = */ false,
+                                   /* HasInit = */ clang::ICIS_NoInit);
+      RD->addDecl(FD);
+    }
+
+    RD->completeDefinition();
+
+    clang::QualType T = Ctx.getTagDeclType(RD);
+    slangAssert(!T.isNull());
+
+    RSExportType *ET =
+      RSExportType::Create(Context, T.getTypePtr(), NotLegacyKernelArgument);
+
+    if (ET == nullptr) {
+      fprintf(stderr, "Failed to export the function %s. There's at least one "
+                      "parameter whose type is not supported by the "
+                      "reflection\n", F->getName().c_str());
+      return nullptr;
+    }
+
+    slangAssert((ET->getClass() == RSExportType::ExportClassRecord) &&
+           "Parameter packet must be a record");
+
+    F->mParamPacketType = static_cast<RSExportRecordType *>(ET);
+  }
+
+  return F;
+}
+
+bool
+RSExportFunc::checkParameterPacketType(llvm::StructType *ParamTy) const {
+  if (ParamTy == nullptr)
+    return !hasParam();
+  else if (!hasParam())
+    return false;
+
+  slangAssert(mParamPacketType != nullptr);
+
+  const RSExportRecordType *ERT = mParamPacketType;
+  // must have same number of elements
+  if (ERT->getFields().size() != ParamTy->getNumElements())
+    return false;
+
+  const llvm::StructLayout *ParamTySL =
+      getRSContext()->getDataLayout()->getStructLayout(ParamTy);
+
+  unsigned Index = 0;
+  for (RSExportRecordType::const_field_iterator FI = ERT->fields_begin(),
+       FE = ERT->fields_end(); FI != FE; FI++, Index++) {
+    const RSExportRecordType::Field *F = *FI;
+
+    llvm::Type *T1 = F->getType()->getLLVMType();
+    llvm::Type *T2 = ParamTy->getTypeAtIndex(Index);
+
+    // Fast check
+    if (T1 == T2)
+      continue;
+
+    // Check offset
+    size_t T1Offset = F->getOffsetInParent();
+    size_t T2Offset = ParamTySL->getElementOffset(Index);
+
+    if (T1Offset != T2Offset)
+      return false;
+
+    // Check size
+    size_t T1Size = F->getType()->getAllocSize();
+    size_t T2Size = getRSContext()->getDataLayout()->getTypeAllocSize(T2);
+
+    if (T1Size != T2Size)
+      return false;
+  }
+
+  return true;
+}
+
+}  // namespace slang
diff --git a/slang/slang_rs_export_func.h b/slang/slang_rs_export_func.h
new file mode 100644
index 0000000..3c0804d
--- /dev/null
+++ b/slang/slang_rs_export_func.h
@@ -0,0 +1,108 @@
+/*
+ * Copyright 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_EXPORT_FUNC_H_  // NOLINT
+#define _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_EXPORT_FUNC_H_
+
+#include <list>
+#include <string>
+
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/raw_ostream.h"
+
+#include "clang/AST/Decl.h"
+
+#include "slang_assert.h"
+#include "slang_rs_export_type.h"
+#include "slang_rs_exportable.h"
+
+namespace llvm {
+  class StructType;
+}
+
+namespace clang {
+  class FunctionDecl;
+}   // namespace clang
+
+namespace slang {
+
+class RSContext;
+
+class RSExportFunc : public RSExportable {
+  friend class RSContext;
+
+ private:
+  std::string mName;
+  std::string mMangledName;
+  bool mShouldMangle;
+  RSExportRecordType *mParamPacketType;
+
+  RSExportFunc(RSContext *Context, const llvm::StringRef &Name,
+               const clang::FunctionDecl *FD)
+    : RSExportable(Context, RSExportable::EX_FUNC),
+      mName(Name.data(), Name.size()),
+      mMangledName(),
+      mShouldMangle(false),
+      mParamPacketType(nullptr) {
+
+    mShouldMangle = Context->getMangleContext().shouldMangleDeclName(FD);
+
+    if (mShouldMangle) {
+      llvm::raw_string_ostream BufStm(mMangledName);
+      Context->getMangleContext().mangleName(FD, BufStm);
+      BufStm.flush();
+    }
+  }
+
+ public:
+  static RSExportFunc *Create(RSContext *Context,
+                              const clang::FunctionDecl *FD);
+
+  typedef RSExportRecordType::const_field_iterator const_param_iterator;
+
+  inline const_param_iterator params_begin() const {
+    slangAssert((mParamPacketType != nullptr) &&
+                "Get parameter from export function having no parameter!");
+    return mParamPacketType->fields_begin();
+  }
+  inline const_param_iterator params_end() const {
+    slangAssert((mParamPacketType != nullptr) &&
+                "Get parameter from export function having no parameter!");
+    return mParamPacketType->fields_end();
+  }
+
+  inline const std::string &getName(bool mangle = true) const {
+    return (mShouldMangle && mangle) ? mMangledName : mName;
+  }
+
+  inline bool hasParam() const
+    { return (mParamPacketType && !mParamPacketType->getFields().empty()); }
+  inline size_t getNumParameters() const
+    { return ((mParamPacketType) ? mParamPacketType->getFields().size() : 0); }
+
+  inline const RSExportRecordType *getParamPacketType() const
+    { return mParamPacketType; }
+
+  // Check whether the given ParamsPacket type (in LLVM type) is "size
+  // equivalent" to the one obtained from getParamPacketType(). If the @Params
+  // is nullptr, means there must be no any parameters.
+  bool checkParameterPacketType(llvm::StructType *ParamTy) const;
+};  // RSExportFunc
+
+
+}   // namespace slang
+
+#endif  // _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_EXPORT_FUNC_H_  NOLINT
diff --git a/slang/slang_rs_export_reduce.cpp b/slang/slang_rs_export_reduce.cpp
new file mode 100644
index 0000000..e4de976
--- /dev/null
+++ b/slang/slang_rs_export_reduce.cpp
@@ -0,0 +1,786 @@
+/*
+ * Copyright 2015, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "slang_rs_export_reduce.h"
+
+#include <algorithm>
+#include <sstream>
+#include <string>
+
+#include "clang/AST/ASTContext.h"
+
+#include "slang_assert.h"
+#include "slang_rs_context.h"
+#include "slang_rs_export_type.h"
+#include "slang_rs_object_ref_count.h"
+#include "slang_rs_special_kernel_param.h"
+#include "slang_version.h"
+
+#include "bcinfo/MetadataExtractor.h"
+
+namespace slang {
+
+const char RSExportReduce::KeyReduce[] = "reduce";
+const char RSExportReduce::KeyInitializer[] = "initializer";
+const char RSExportReduce::KeyAccumulator[] = "accumulator";
+const char RSExportReduce::KeyCombiner[] = "combiner";
+const char RSExportReduce::KeyOutConverter[] = "outconverter";
+const char RSExportReduce::KeyHalter[] = "halter";
+
+bool RSExportReduce::matchName(const llvm::StringRef &Candidate) const {
+  return
+      Candidate.equals(mNameInitializer)  ||
+      Candidate.equals(mNameAccumulator)  ||
+      Candidate.equals(mNameCombiner)     ||
+      Candidate.equals(mNameOutConverter) ||
+      Candidate.equals(mNameHalter);
+}
+
+RSExportReduce *RSExportReduce::Create(RSContext *Context,
+                                       const clang::SourceLocation Location,
+                                       const llvm::StringRef &NameReduce,
+                                       const llvm::StringRef &NameInitializer,
+                                       const llvm::StringRef &NameAccumulator,
+                                       const llvm::StringRef &NameCombiner,
+                                       const llvm::StringRef &NameOutConverter,
+                                       const llvm::StringRef &NameHalter) {
+  slangAssert(Context);
+  RSExportReduce *RNE = new RSExportReduce(Context,
+                                           Location,
+                                           NameReduce,
+                                           NameInitializer,
+                                           NameAccumulator,
+                                           NameCombiner,
+                                           NameOutConverter,
+                                           NameHalter);
+
+  return RNE;
+}
+
+const char *RSExportReduce::getKey(FnIdent Kind) {
+  switch (Kind) {
+    default:
+      slangAssert(!"Unknown FnIdent");
+      // and fall through
+    case FN_IDENT_INITIALIZER:
+      return KeyInitializer;
+    case FN_IDENT_ACCUMULATOR:
+      return KeyAccumulator;
+    case FN_IDENT_COMBINER:
+      return KeyCombiner;
+    case FN_IDENT_OUT_CONVERTER:
+      return KeyOutConverter;
+    case FN_IDENT_HALTER:
+      return KeyHalter;
+  }
+}
+
+// This data is needed during analyzeTranslationUnit() but not afterwards.
+// Breaking it out into a struct makes it easy for analyzeTranslationUnit()
+// to call a number of helper functions that all need access to this data.
+struct RSExportReduce::StateOfAnalyzeTranslationUnit {
+
+  typedef std::function<std::string (const char *Key, const std::string &Name)> DiagnosticDescriptionType;
+
+  StateOfAnalyzeTranslationUnit(
+      RSContext &anRSContext,
+      clang::Preprocessor &aPP,
+      clang::ASTContext &anASTContext,
+      const DiagnosticDescriptionType &aDiagnosticDescription) :
+
+      RSC(anRSContext),
+      PP(aPP),
+      ASTC(anASTContext),
+      DiagnosticDescription(aDiagnosticDescription),
+
+      Ok(true),
+
+      FnInitializer(nullptr),
+      FnAccumulator(nullptr),
+      FnCombiner(nullptr),
+      FnOutConverter(nullptr),
+      FnHalter(nullptr),
+
+      FnInitializerParam(nullptr),
+      FnInitializerParamTy(),
+
+      FnAccumulatorOk(true),
+      FnAccumulatorParamFirst(nullptr),
+      FnAccumulatorParamFirstTy(),
+      FnAccumulatorIndexOfFirstSpecialParameter(0),
+
+      FnOutConverterOk(true),
+      FnOutConverterParamFirst(nullptr),
+      FnOutConverterParamFirstTy()
+  { }
+
+  /*-- Convenience ------------------------------------------*/
+
+  RSContext                       &RSC;
+  clang::Preprocessor             &PP;
+  clang::ASTContext               &ASTC;
+  const DiagnosticDescriptionType  DiagnosticDescription;
+
+  /*-- Actual state -----------------------------------------*/
+
+  bool Ok;
+
+  clang::FunctionDecl *FnInitializer;
+  clang::FunctionDecl *FnAccumulator;
+  clang::FunctionDecl *FnCombiner;
+  clang::FunctionDecl *FnOutConverter;
+  clang::FunctionDecl *FnHalter;
+
+  clang::ParmVarDecl  *FnInitializerParam;
+  clang::QualType      FnInitializerParamTy;
+
+  bool                 FnAccumulatorOk;
+  clang::ParmVarDecl  *FnAccumulatorParamFirst;
+  clang::QualType      FnAccumulatorParamFirstTy;
+  size_t               FnAccumulatorIndexOfFirstSpecialParameter;
+
+  bool                 FnOutConverterOk;  // also true if no outconverter
+  clang::ParmVarDecl  *FnOutConverterParamFirst;
+  clang::QualType      FnOutConverterParamFirstTy;
+};
+
+// does update S.Ok
+clang::FunctionDecl *RSExportReduce::lookupFunction(StateOfAnalyzeTranslationUnit &S,
+                                                    const char *Kind, const llvm::StringRef &Name) {
+  if (Name.empty())
+    return nullptr;
+
+  clang::TranslationUnitDecl *TUDecl = getRSContext()->getASTContext().getTranslationUnitDecl();
+  slangAssert(TUDecl);
+
+  clang::FunctionDecl *Ret = nullptr;
+  const clang::IdentifierInfo *II = S.PP.getIdentifierInfo(Name);
+  if (II) {
+    for (auto Decl : TUDecl->lookup(II)) {
+      clang::FunctionDecl *FDecl = Decl->getAsFunction();
+      if (!FDecl || !FDecl->isThisDeclarationADefinition())
+        continue;
+      if (Ret) {
+        S.RSC.ReportError(mLocation,
+                          "duplicate function definition for '%0(%1)' for '#pragma rs %2(%3)' (%4, %5)")
+            << Kind << Name << KeyReduce << mNameReduce
+            << Ret->getLocation().printToString(S.PP.getSourceManager())
+            << FDecl->getLocation().printToString(S.PP.getSourceManager());
+        S.Ok = false;
+        return nullptr;
+      }
+      Ret = FDecl;
+    }
+  }
+  if (!Ret) {
+    // Either the identifier lookup failed, or we never found the function definition.
+    S.RSC.ReportError(mLocation,
+                      "could not find function definition for '%0(%1)' for '#pragma rs %2(%3)'")
+        << Kind << Name << KeyReduce << mNameReduce;
+    S.Ok = false;
+    return nullptr;
+  }
+  if (Ret) {
+    // Must have internal linkage
+    if (Ret->getFormalLinkage() != clang::InternalLinkage) {
+      S.RSC.ReportError(Ret->getLocation(), "%0 must be static")
+          << S.DiagnosticDescription(Kind, Name);
+      S.Ok = false;
+    }
+  }
+  if (Ret == nullptr)
+    S.Ok = false;
+  return Ret;
+}
+
+// updates S.Ok; and, depending on Kind, possibly S.FnAccumulatorOk or S.FnOutConverterOk
+void RSExportReduce::notOk(StateOfAnalyzeTranslationUnit &S, FnIdent Kind) {
+    S.Ok = false;
+    if (Kind == FN_IDENT_ACCUMULATOR) {
+      S.FnAccumulatorOk = false;
+    } else if (Kind == FN_IDENT_OUT_CONVERTER) {
+      S.FnOutConverterOk = false;
+    }
+}
+
+// updates S.Ok; and, depending on Kind, possibly S.FnAccumulatorOk or S.FnOutConverterOk
+void RSExportReduce::checkVoidReturn(StateOfAnalyzeTranslationUnit &S,
+                                     FnIdent Kind, clang::FunctionDecl *Fn) {
+  slangAssert(Fn);
+  const clang::QualType ReturnTy = Fn->getReturnType().getCanonicalType();
+  if (!ReturnTy->isVoidType()) {
+    S.RSC.ReportError(Fn->getLocation(),
+                      "%0 must return void not '%1'")
+        << S.DiagnosticDescription(getKey(Kind), Fn->getName()) << ReturnTy.getAsString();
+    notOk(S, Kind);
+  }
+}
+
+// updates S.Ok; and, depending on Kind, possibly S.FnAccumulatorOk or S.FnOutConverterOk
+void RSExportReduce::checkPointeeConstQualified(StateOfAnalyzeTranslationUnit &S,
+                                                FnIdent Kind, const llvm::StringRef &Name,
+                                                const clang::ParmVarDecl *Param, bool ExpectedQualification) {
+  const clang::QualType ParamQType = Param->getType();
+  slangAssert(ParamQType->isPointerType());
+  const clang::QualType PointeeQType = ParamQType->getPointeeType();
+  if (PointeeQType.isConstQualified() != ExpectedQualification) {
+    S.RSC.ReportError(Param->getLocation(),
+                      "%0 parameter '%1' (type '%2') must%3 point to const-qualified type")
+        << S.DiagnosticDescription(getKey(Kind), Name)
+        << Param->getName() << ParamQType.getAsString()
+        << (ExpectedQualification ? "" : " not");
+    notOk(S, Kind);
+  }
+}
+
+// Process "void mNameInitializer(compType *accum)"
+void RSExportReduce::analyzeInitializer(StateOfAnalyzeTranslationUnit &S) {
+  if (!S.FnInitializer) // initializer is always optional
+    return;
+
+  // Must return void
+  checkVoidReturn(S, FN_IDENT_INITIALIZER, S.FnInitializer);
+
+  // Must have exactly one parameter
+  if (S.FnInitializer->getNumParams() != 1) {
+    S.RSC.ReportError(S.FnInitializer->getLocation(),
+                      "%0 must take exactly 1 parameter (found %1)")
+        << S.DiagnosticDescription(KeyInitializer, mNameInitializer)
+        << S.FnInitializer->getNumParams();
+    S.Ok = false;
+    return;
+  }
+
+  // Parameter must not be a special parameter
+  S.FnInitializerParam = S.FnInitializer->getParamDecl(0);
+  if (isSpecialKernelParameter(S.FnInitializerParam->getName())) {
+    S.RSC.ReportError(S.FnInitializer->getLocation(),
+                      "%0 cannot take special parameter '%1'")
+        << S.DiagnosticDescription(KeyInitializer, mNameInitializer)
+        << S.FnInitializerParam->getName();
+    S.Ok = false;
+    return;
+  }
+
+  // Parameter must be of pointer type
+  S.FnInitializerParamTy = S.FnInitializerParam->getType().getCanonicalType();
+  if (!S.FnInitializerParamTy->isPointerType()) {
+    S.RSC.ReportError(S.FnInitializer->getLocation(),
+                      "%0 parameter '%1' must be of pointer type not '%2'")
+        << S.DiagnosticDescription(KeyInitializer, mNameInitializer)
+        << S.FnInitializerParam->getName() << S.FnInitializerParamTy.getAsString();
+    S.Ok = false;
+    return;
+  }
+
+  // Parameter must not point to const-qualified
+  checkPointeeConstQualified(S, FN_IDENT_INITIALIZER, mNameInitializer, S.FnInitializerParam, false);
+}
+
+// Process "void mNameAccumulator(compType *accum, in1Type in1, …, inNType inN[, specialarguments])"
+void RSExportReduce::analyzeAccumulator(StateOfAnalyzeTranslationUnit &S) {
+  slangAssert(S.FnAccumulator);
+
+  // Must return void
+  checkVoidReturn(S, FN_IDENT_ACCUMULATOR, S.FnAccumulator);
+
+  // Must have initial parameter of same type as initializer parameter
+  // (if there is an initializer), followed by at least 1 input
+
+  if (S.FnAccumulator->getNumParams() < 2) {
+    S.RSC.ReportError(S.FnAccumulator->getLocation(),
+                      "%0 must take at least 2 parameters")
+        << S.DiagnosticDescription(KeyAccumulator, mNameAccumulator);
+    S.Ok = S.FnAccumulatorOk = false;
+    return;
+  }
+
+  S.FnAccumulatorParamFirst = S.FnAccumulator->getParamDecl(0);
+  S.FnAccumulatorParamFirstTy = S.FnAccumulatorParamFirst->getType().getCanonicalType();
+
+  // First parameter must be of pointer type
+  if (!S.FnAccumulatorParamFirstTy->isPointerType()) {
+    S.RSC.ReportError(S.FnAccumulator->getLocation(),
+                      "%0 parameter '%1' must be of pointer type not '%2'")
+        << S.DiagnosticDescription(KeyAccumulator, mNameAccumulator)
+        << S.FnAccumulatorParamFirst->getName() << S.FnAccumulatorParamFirstTy.getAsString();
+    S.Ok = S.FnAccumulatorOk = false;
+    return;
+  }
+
+  // If there is an initializer with a pointer-typed parameter (as
+  // opposed to an initializer with a bad parameter list), then
+  // accumulator first parameter must be of same type as initializer
+  // parameter
+  if (S.FnInitializer &&
+      !S.FnInitializerParamTy.isNull() &&
+      S.FnInitializerParamTy->isPointerType() &&
+      !S.FnAccumulator->getASTContext().hasSameUnqualifiedType(
+          S.FnInitializerParamTy->getPointeeType().getCanonicalType(),
+          S.FnAccumulatorParamFirstTy->getPointeeType().getCanonicalType())) {
+    // <accumulator> parameter '<baz>' (type '<tbaz>') and initializer <goo>() parameter '<gaz>' (type '<tgaz>')
+    //   must be pointers to the same type
+    S.RSC.ReportError(S.FnAccumulator->getLocation(),
+                      "%0 parameter '%1' (type '%2') and %3 %4() parameter '%5' (type '%6')"
+                      " must be pointers to the same type")
+        << S.DiagnosticDescription(KeyAccumulator, mNameAccumulator)
+        << S.FnAccumulatorParamFirst->getName() << S.FnAccumulatorParamFirstTy.getAsString()
+        << KeyInitializer << mNameInitializer
+        << S.FnInitializerParam->getName() << S.FnInitializerParamTy.getAsString();
+    S.Ok = S.FnAccumulatorOk = false;
+  }
+
+  if (S.FnAccumulatorOk && S.FnAccumulatorParamFirstTy->getPointeeType()->isFunctionType()) {
+    S.RSC.ReportError(S.FnAccumulator->getLocation(),
+                      "%0 parameter '%1' (type '%2') must not be pointer to function type")
+        << S.DiagnosticDescription(KeyAccumulator, mNameAccumulator)
+        << S.FnAccumulatorParamFirst->getName() << S.FnAccumulatorParamFirstTy.getAsString();
+    S.Ok = S.FnAccumulatorOk = false;
+  }
+
+  if (S.FnAccumulatorOk && S.FnAccumulatorParamFirstTy->getPointeeType()->isIncompleteType()) {
+    S.RSC.ReportError(S.FnAccumulator->getLocation(),
+                      "%0 parameter '%1' (type '%2') must not be pointer to incomplete type")
+        << S.DiagnosticDescription(KeyAccumulator, mNameAccumulator)
+        << S.FnAccumulatorParamFirst->getName() << S.FnAccumulatorParamFirstTy.getAsString();
+    S.Ok = S.FnAccumulatorOk = false;
+  }
+
+  if (S.FnAccumulatorOk &&
+      HasRSObjectType(S.FnAccumulatorParamFirstTy->getPointeeType().getCanonicalType().getTypePtr())) {
+    S.RSC.ReportError(S.FnAccumulator->getLocation(),
+                      "%0 parameter '%1' (type '%2') must not be pointer to data containing an object type")
+        << S.DiagnosticDescription(KeyAccumulator, mNameAccumulator)
+        << S.FnAccumulatorParamFirst->getName() << S.FnAccumulatorParamFirstTy.getAsString();
+    S.Ok = S.FnAccumulatorOk = false;
+  }
+
+  // Parameter must not point to const-qualified
+  checkPointeeConstQualified(S, FN_IDENT_ACCUMULATOR, mNameAccumulator, S.FnAccumulatorParamFirst, false);
+
+  // Analyze special parameters
+  S.Ok &= (S.FnAccumulatorOk &= processSpecialKernelParameters(
+                                  &S.RSC,
+                                  std::bind(S.DiagnosticDescription, KeyAccumulator, mNameAccumulator),
+                                  S.FnAccumulator,
+                                  &S.FnAccumulatorIndexOfFirstSpecialParameter,
+                                  &mAccumulatorSignatureMetadata));
+
+  // Must have at least an accumulator and an input.
+  // If we get here we know there are at least 2 arguments; so the only problem case is
+  // where we have an accumulator followed immediately by a special parameter.
+  if (S.FnAccumulatorIndexOfFirstSpecialParameter < 2) {
+    slangAssert(S.FnAccumulatorIndexOfFirstSpecialParameter < S.FnAccumulator->getNumParams());
+    S.RSC.ReportError(S.FnAccumulator->getLocation(),
+                      "%0 must have at least 1 input ('%1' is a special parameter)")
+        << S.DiagnosticDescription(KeyAccumulator, mNameAccumulator)
+        << S.FnAccumulator->getParamDecl(S.FnAccumulatorIndexOfFirstSpecialParameter)->getName();
+    S.Ok = S.FnAccumulatorOk = false;
+    return;
+  }
+
+  if (S.FnAccumulatorOk) {
+    mAccumulatorSignatureMetadata |= bcinfo::MD_SIG_In;
+    mAccumulatorTypeSize = S.ASTC.getTypeSizeInChars(S.FnAccumulatorParamFirstTy->getPointeeType()).getQuantity();
+    for (size_t ParamIdx = 1; ParamIdx < S.FnAccumulatorIndexOfFirstSpecialParameter; ++ParamIdx) {
+      const clang::ParmVarDecl *const Param = S.FnAccumulator->getParamDecl(ParamIdx);
+      mAccumulatorIns.push_back(Param);
+      const clang::QualType ParamQType = Param->getType().getCanonicalType();
+      const clang::Type *ParamType = ParamQType.getTypePtr();
+
+      RSExportType *ParamEType = nullptr;
+      if (ParamQType->isPointerType()) {
+        S.RSC.ReportError(Param->getLocation(),
+                          "%0 parameter '%1' (type '%2') must not be a pointer")
+            << S.DiagnosticDescription(KeyAccumulator, mNameAccumulator)
+            << Param->getName() << ParamQType.getAsString();
+        S.Ok = false;
+      } else if (HasRSObjectType(ParamType)) {
+        S.RSC.ReportError(Param->getLocation(),
+                          "%0 parameter '%1' (type '%2') must not contain an object type")
+            << S.DiagnosticDescription(KeyAccumulator, mNameAccumulator)
+            << Param->getName() << ParamQType.getAsString();
+        S.Ok = false;
+      } else if (RSExportType::ValidateType(&S.RSC, S.ASTC, ParamQType, Param, Param->getLocStart(),
+                                            S.RSC.getTargetAPI(),
+                                            false /* IsFilterscript */,
+                                            true /* IsExtern */)) {
+        // TODO: Better diagnostics on validation or creation failure?
+        ParamEType = RSExportType::Create(&S.RSC, ParamType, NotLegacyKernelArgument);
+        S.Ok &= (ParamEType != nullptr);
+      } else {
+        S.Ok = false;
+      }
+      mAccumulatorInTypes.push_back(ParamEType); // possibly nullptr
+    }
+  }
+}
+
+// Process "void combinename(compType *accum, const compType *val)"
+void RSExportReduce::analyzeCombiner(StateOfAnalyzeTranslationUnit &S) {
+  if (S.FnCombiner) {
+    // Must return void
+    checkVoidReturn(S, FN_IDENT_COMBINER, S.FnCombiner);
+
+    // Must have exactly two parameters, of same type as first accumulator parameter
+
+    if (S.FnCombiner->getNumParams() != 2) {
+      S.RSC.ReportError(S.FnCombiner->getLocation(),
+                        "%0 must take exactly 2 parameters (found %1)")
+          << S.DiagnosticDescription(KeyCombiner, mNameCombiner)
+          << S.FnCombiner->getNumParams();
+      S.Ok = false;
+      return;
+    }
+
+    if (S.FnAccumulatorParamFirstTy.isNull() || !S.FnAccumulatorParamFirstTy->isPointerType()) {
+      // We're already in an error situation.  We could compare
+      // against the initializer parameter type instead of the first
+      // accumulator parameter type (we'd have to check for the
+      // availability of a parameter type there, too), but it does not
+      // seem worth the effort.
+      //
+      // Likewise, we could compare the two combiner parameter types
+      // against each other.
+      slangAssert(!S.Ok);
+      return;
+    }
+
+    for (int ParamIdx = 0; ParamIdx < 2; ++ParamIdx) {
+      const clang::ParmVarDecl *const FnCombinerParam = S.FnCombiner->getParamDecl(ParamIdx);
+      const clang::QualType FnCombinerParamTy = FnCombinerParam->getType().getCanonicalType();
+      if (!FnCombinerParamTy->isPointerType() ||
+          !S.FnCombiner->getASTContext().hasSameUnqualifiedType(
+              S.FnAccumulatorParamFirstTy->getPointeeType().getCanonicalType(),
+              FnCombinerParamTy->getPointeeType().getCanonicalType())) {
+        // <combiner> parameter '<baz>' (type '<tbaz>')
+        //   and accumulator <goo>() parameter '<gaz>' (type '<tgaz>') must be pointers to the same type
+        S.RSC.ReportError(S.FnCombiner->getLocation(),
+                          "%0 parameter '%1' (type '%2') and %3 %4() parameter '%5' (type '%6')"
+                          " must be pointers to the same type")
+            << S.DiagnosticDescription(KeyCombiner, mNameCombiner)
+            << FnCombinerParam->getName() << FnCombinerParamTy.getAsString()
+            << KeyAccumulator << mNameAccumulator
+            << S.FnAccumulatorParamFirst->getName() << S.FnAccumulatorParamFirstTy.getAsString();
+        S.Ok = false;
+      } else {
+        // Check const-qualification
+        checkPointeeConstQualified(S, FN_IDENT_COMBINER, mNameCombiner, FnCombinerParam, ParamIdx==1);
+      }
+    }
+
+    return;
+  }
+
+  // Ensure accumulator properties permit omission of combiner.
+
+  if (!S.FnAccumulatorOk) {
+    // Couldn't fully analyze accumulator, so cannot see whether it permits omission of combiner.
+    return;
+  }
+
+  if (mAccumulatorIns.size() != 1 ||
+      S.FnAccumulatorIndexOfFirstSpecialParameter != S.FnAccumulator->getNumParams())
+  {
+    S.RSC.ReportError(S.FnAccumulator->getLocation(),
+                      "%0 must have exactly 1 input"
+                      " and no special parameters in order for the %1 to be omitted")
+        << S.DiagnosticDescription(KeyAccumulator, mNameAccumulator)
+        << KeyCombiner;
+    S.Ok = false;
+    return;
+  }
+
+  const clang::ParmVarDecl *const FnAccumulatorParamInput = S.FnAccumulator->getParamDecl(1);
+  const clang::QualType FnAccumulatorParamInputTy = FnAccumulatorParamInput->getType().getCanonicalType();
+  if (!S.FnAccumulator->getASTContext().hasSameUnqualifiedType(
+          S.FnAccumulatorParamFirstTy->getPointeeType().getCanonicalType(),
+          FnAccumulatorParamInputTy.getCanonicalType())) {
+    S.RSC.ReportError(S.FnAccumulator->getLocation(),
+                      "%0 parameter '%1' (type '%2')"
+                      " must be pointer to the type of parameter '%3' (type '%4')"
+                      " in order for the %5 to be omitted")
+        << S.DiagnosticDescription(KeyAccumulator, mNameAccumulator)
+        << S.FnAccumulatorParamFirst->getName() << S.FnAccumulatorParamFirstTy.getAsString()
+        << FnAccumulatorParamInput->getName() << FnAccumulatorParamInputTy.getAsString()
+        << KeyCombiner;
+    S.Ok = false;
+  }
+}
+
+// Process "void outconvertname(resultType *result, const compType *accum)"
+void RSExportReduce::analyzeOutConverter(StateOfAnalyzeTranslationUnit &S) {
+  if (!S.FnOutConverter) // outconverter is always optional
+    return;
+
+  // Must return void
+  checkVoidReturn(S, FN_IDENT_OUT_CONVERTER, S.FnOutConverter);
+
+  // Must have exactly two parameters
+  if (S.FnOutConverter->getNumParams() != 2) {
+    S.RSC.ReportError(S.FnOutConverter->getLocation(),
+                      "%0 must take exactly 2 parameters (found %1)")
+        << S.DiagnosticDescription(KeyOutConverter, mNameOutConverter)
+        << S.FnOutConverter->getNumParams();
+    S.Ok = S.FnOutConverterOk = false;
+    return;
+  }
+
+  // Parameters must not be special and must be of pointer type;
+  // and second parameter must match first accumulator parameter
+  for (int ParamIdx = 0; ParamIdx < 2; ++ParamIdx) {
+    clang::ParmVarDecl *const FnOutConverterParam = S.FnOutConverter->getParamDecl(ParamIdx);
+
+    if (isSpecialKernelParameter(FnOutConverterParam->getName())) {
+      S.RSC.ReportError(S.FnOutConverter->getLocation(),
+                        "%0 cannot take special parameter '%1'")
+          << S.DiagnosticDescription(KeyOutConverter, mNameOutConverter)
+          << FnOutConverterParam->getName();
+      S.Ok = S.FnOutConverterOk = false;
+      continue;
+    }
+
+    const clang::QualType FnOutConverterParamTy = FnOutConverterParam->getType().getCanonicalType();
+
+    if (!FnOutConverterParamTy->isPointerType()) {
+      S.RSC.ReportError(S.FnOutConverter->getLocation(),
+                        "%0 parameter '%1' must be of pointer type not '%2'")
+          << S.DiagnosticDescription(KeyOutConverter, mNameOutConverter)
+          << FnOutConverterParam->getName() << FnOutConverterParamTy.getAsString();
+      S.Ok = S.FnOutConverterOk = false;
+      continue;
+    }
+
+    // Check const-qualification
+    checkPointeeConstQualified(S, FN_IDENT_OUT_CONVERTER, mNameOutConverter, FnOutConverterParam, ParamIdx==1);
+
+    if (ParamIdx == 0) {
+      S.FnOutConverterParamFirst = FnOutConverterParam;
+      S.FnOutConverterParamFirstTy = FnOutConverterParamTy;
+      continue;
+    }
+
+    if (S.FnAccumulatorParamFirstTy.isNull() || !S.FnAccumulatorParamFirstTy->isPointerType()) {
+      // We're already in an error situation.  We could compare
+      // against the initializer parameter type instead of the first
+      // accumulator parameter type (we'd have to check for the
+      // availability of a parameter type there, too), but it does not
+      // seem worth the effort.
+      slangAssert(!S.Ok);
+      continue;
+    }
+
+    if (!S.FnOutConverter->getASTContext().hasSameUnqualifiedType(
+            S.FnAccumulatorParamFirstTy->getPointeeType().getCanonicalType(),
+            FnOutConverterParamTy->getPointeeType().getCanonicalType())) {
+      // <outconverter> parameter '<baz>' (type '<tbaz>')
+      //   and accumulator <goo>() parameter '<gaz>' (type '<tgaz>') must be pointers to the same type
+      S.RSC.ReportError(S.FnOutConverter->getLocation(),
+                        "%0 parameter '%1' (type '%2') and %3 %4() parameter '%5' (type '%6')"
+                        " must be pointers to the same type")
+          << S.DiagnosticDescription(KeyOutConverter, mNameOutConverter)
+          << FnOutConverterParam->getName() << FnOutConverterParamTy.getAsString()
+          << KeyAccumulator << mNameAccumulator
+          << S.FnAccumulatorParamFirst->getName() << S.FnAccumulatorParamFirstTy.getAsString();
+      S.Ok = S.FnOutConverterOk = false;
+    }
+  }
+}
+
+// Process "bool haltername(const compType *accum)"
+void RSExportReduce::analyzeHalter(StateOfAnalyzeTranslationUnit &S) {
+  if (!S.FnHalter) // halter is always optional
+    return;
+
+  // Must return bool
+  const clang::QualType ReturnTy = S.FnHalter->getReturnType().getCanonicalType();
+  if (!ReturnTy->isBooleanType()) {
+    S.RSC.ReportError(S.FnHalter->getLocation(),
+                    "%0 must return bool not '%1'")
+        << S.DiagnosticDescription(KeyHalter, mNameHalter) << ReturnTy.getAsString();
+    S.Ok = false;
+  }
+
+  // Must have exactly one parameter
+  if (S.FnHalter->getNumParams() != 1) {
+    S.RSC.ReportError(S.FnHalter->getLocation(),
+                      "%0 must take exactly 1 parameter (found %1)")
+        << S.DiagnosticDescription(KeyHalter, mNameHalter)
+        << S.FnHalter->getNumParams();
+    S.Ok = false;
+    return;
+  }
+
+  // Parameter must not be a special parameter
+  const clang::ParmVarDecl *const FnHalterParam = S.FnHalter->getParamDecl(0);
+  if (isSpecialKernelParameter(FnHalterParam->getName())) {
+    S.RSC.ReportError(S.FnHalter->getLocation(),
+                      "%0 cannot take special parameter '%1'")
+        << S.DiagnosticDescription(KeyHalter, mNameHalter)
+        << FnHalterParam->getName();
+    S.Ok = false;
+    return;
+  }
+
+  // Parameter must be same type as first accumulator parameter
+
+  if (S.FnAccumulatorParamFirstTy.isNull() || !S.FnAccumulatorParamFirstTy->isPointerType()) {
+    // We're already in an error situation.  We could compare against
+    // the initializer parameter type or the first combiner parameter
+    // type instead of the first accumulator parameter type (we'd have
+    // to check for the availability of a parameter type there, too),
+    // but it does not seem worth the effort.
+    slangAssert(!S.Ok);
+    return;
+  }
+
+  const clang::QualType FnHalterParamTy = FnHalterParam->getType().getCanonicalType();
+  if (!FnHalterParamTy->isPointerType() ||
+      !S.FnHalter->getASTContext().hasSameUnqualifiedType(
+          S.FnAccumulatorParamFirstTy->getPointeeType().getCanonicalType(),
+          FnHalterParamTy->getPointeeType().getCanonicalType())) {
+    // <halter> parameter '<baz>' (type '<tbaz>')
+    //   and accumulator <goo>() parameter '<gaz>' (type '<tgaz>') must be pointers to the same type
+    S.RSC.ReportError(S.FnHalter->getLocation(),
+                      "%0 parameter '%1' (type '%2') and %3 %4() parameter '%5' (type '%6')"
+                      " must be pointers to the same type")
+        << S.DiagnosticDescription(KeyHalter, mNameHalter)
+        << FnHalterParam->getName() << FnHalterParamTy.getAsString()
+        << KeyAccumulator << mNameAccumulator
+        << S.FnAccumulatorParamFirst->getName() << S.FnAccumulatorParamFirstTy.getAsString();
+    S.Ok = false;
+    return;
+  }
+
+  // Parameter must point to const-qualified
+  checkPointeeConstQualified(S, FN_IDENT_HALTER, mNameHalter, FnHalterParam, true);
+}
+
+void RSExportReduce::analyzeResultType(StateOfAnalyzeTranslationUnit &S) {
+  if (!(S.FnAccumulatorOk && S.FnOutConverterOk)) {
+    // No idea what the result type is
+    slangAssert(!S.Ok);
+    return;
+  }
+
+  struct ResultInfoType {
+    const clang::QualType QType;
+    clang::VarDecl *const Decl;
+    const char *FnKey;
+    const std::string &FnName;
+    std::function<std::string ()> UnlessOutConverter;
+  } ResultInfo =
+        S.FnOutConverter
+        ? ResultInfoType({ S.FnOutConverterParamFirstTy, S.FnOutConverterParamFirst,
+                           KeyOutConverter, mNameOutConverter,
+                           []() { return std::string(""); }})
+        : ResultInfoType({ S.FnAccumulatorParamFirstTy,  S.FnAccumulatorParamFirst,
+                           KeyAccumulator,  mNameAccumulator,
+                           []() { return std::string(" unless ") + KeyOutConverter + " is provided"; }});
+  const clang::QualType PointeeQType = ResultInfo.QType->getPointeeType();
+
+  if (PointeeQType->isPointerType()) {
+    S.RSC.ReportError(ResultInfo.Decl->getLocation(),
+                      "%0 parameter '%1' (type '%2') must not point to a pointer%3")
+        << S.DiagnosticDescription(ResultInfo.FnKey, ResultInfo.FnName)
+        << ResultInfo.Decl->getName() << ResultInfo.QType.getAsString()
+        << ResultInfo.UnlessOutConverter();
+  } else if (PointeeQType->isIncompleteType()) {
+    S.RSC.ReportError(ResultInfo.Decl->getLocation(),
+                      "%0 parameter '%1' (type '%2') must not point to an incomplete type%3")
+        << S.DiagnosticDescription(ResultInfo.FnKey, ResultInfo.FnName)
+        << ResultInfo.Decl->getName() << ResultInfo.QType.getAsString()
+        << ResultInfo.UnlessOutConverter();
+  } else if (HasRSObjectType(PointeeQType.getTypePtr())) {
+    S.RSC.ReportError(ResultInfo.Decl->getLocation(),
+                      "%0 parameter '%1' (type '%2') must not point to data containing an object type%3")
+        << S.DiagnosticDescription(ResultInfo.FnKey, ResultInfo.FnName)
+        << ResultInfo.Decl->getName() << ResultInfo.QType.getAsString()
+        << ResultInfo.UnlessOutConverter();
+  } else if (RSExportType::ValidateType(&S.RSC, S.ASTC, PointeeQType,
+                                        ResultInfo.Decl, ResultInfo.Decl->getLocStart(),
+                                        S.RSC.getTargetAPI(),
+                                        false /* IsFilterscript */,
+                                        true /* IsExtern */)) {
+    // TODO: Better diagnostics on validation or creation failure?
+    if ((mResultType = RSExportType::Create(&S.RSC, PointeeQType.getTypePtr(),
+                                            NotLegacyKernelArgument, ResultInfo.Decl)) != nullptr) {
+      const RSExportType *CheckType = mResultType;
+      const char *ArrayErrorPhrase = "";
+      if (mResultType->getClass() == RSExportType::ExportClassConstantArray) {
+        CheckType = static_cast<const RSExportConstantArrayType *>(mResultType)->getElementType();
+        ArrayErrorPhrase = "n array of";
+      }
+      switch (CheckType->getClass()) {
+        case RSExportType::ExportClassMatrix:
+          // Not supported for now -- what does a matrix result type mean?
+          S.RSC.ReportError(ResultInfo.Decl->getLocation(),
+                            "%0 parameter '%1' (type '%2') must not point to a%3 matrix type%4")
+              << S.DiagnosticDescription(ResultInfo.FnKey, ResultInfo.FnName)
+              << ResultInfo.Decl->getName() << ResultInfo.QType.getAsString()
+              << ArrayErrorPhrase
+              << ResultInfo.UnlessOutConverter();
+          mResultType = nullptr;
+          break;
+        default:
+          // All's well
+          break;
+      }
+    }
+  }
+
+  if (mResultType)
+    S.RSC.insertExportReduceResultType(mResultType);
+  else
+    S.Ok = false;
+}
+
+bool RSExportReduce::analyzeTranslationUnit() {
+
+  RSContext &RSC = *getRSContext();
+  clang::Preprocessor &PP = RSC.getPreprocessor();
+
+  StateOfAnalyzeTranslationUnit S(
+      RSC, PP, RSC.getASTContext(),
+      [&RSC, &PP, this] (const char *Key, const std::string &Name) {
+        std::ostringstream Description;
+        Description
+            << Key << " " << Name << "()"
+            << " for '#pragma rs " << KeyReduce << "(" << mNameReduce << ")'"
+            << " (" << mLocation.printToString(PP.getSourceManager()) << ")";
+        return Description.str();
+      });
+
+  S.FnInitializer  = lookupFunction(S, KeyInitializer,  mNameInitializer);
+  S.FnAccumulator  = lookupFunction(S, KeyAccumulator,  mNameAccumulator);
+  S.FnCombiner     = lookupFunction(S, KeyCombiner,     mNameCombiner);
+  S.FnOutConverter = lookupFunction(S, KeyOutConverter, mNameOutConverter);
+  S.FnHalter       = lookupFunction(S, KeyHalter,       mNameHalter);
+
+  if (!S.Ok)
+    return false;
+
+  analyzeInitializer(S);
+  analyzeAccumulator(S);
+  analyzeCombiner(S);
+  analyzeOutConverter(S);
+  analyzeHalter(S);
+  analyzeResultType(S);
+
+  return S.Ok;
+}
+
+}  // namespace slang
diff --git a/slang/slang_rs_export_reduce.h b/slang/slang_rs_export_reduce.h
new file mode 100644
index 0000000..491bf19
--- /dev/null
+++ b/slang/slang_rs_export_reduce.h
@@ -0,0 +1,168 @@
+/*
+ * Copyright 2015, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_EXPORT_REDUCE_H_  // NOLINT
+#define _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_EXPORT_REDUCE_H_
+
+#include "llvm/ADT/StringRef.h"
+#include "llvm/ADT/SmallVector.h"
+
+#include "slang_rs_context.h"
+#include "slang_rs_exportable.h"
+#include "slang_rs_export_type.h"
+
+namespace clang {
+  class FunctionDecl;
+}  // namespace clang
+
+namespace slang {
+
+// Base class for reflecting control-side reduce
+class RSExportReduce : public RSExportable {
+ public:
+  typedef llvm::SmallVectorImpl<const clang::ParmVarDecl*> InVec;
+  typedef llvm::SmallVectorImpl<const RSExportType*> InTypeVec;
+
+  typedef InVec::const_iterator InIter;
+  typedef InTypeVec::const_iterator InTypeIter;
+
+ private:
+  // pragma location (for error reporting)
+  clang::SourceLocation mLocation;
+
+  // reduction kernel name
+  std::string mNameReduce;
+
+  // constituent function names
+  std::string mNameInitializer;
+  std::string mNameAccumulator;
+  std::string mNameCombiner;
+  std::string mNameOutConverter;
+  std::string mNameHalter;
+
+  // constituent function identity
+  enum FnIdent {
+    FN_IDENT_INITIALIZER,
+    FN_IDENT_ACCUMULATOR,
+    FN_IDENT_COMBINER,
+    FN_IDENT_OUT_CONVERTER,
+    FN_IDENT_HALTER
+  };
+  static const char *getKey(FnIdent Kind);
+
+  // signature information for accumulator function
+  unsigned int mAccumulatorSignatureMetadata;
+
+  // size of accumulator data type (compType), in bytes
+  unsigned int mAccumulatorTypeSize;
+
+  // input information for accumulator function
+  static const int kAccumulatorInsSmallSize = 4;
+  llvm::SmallVector<const clang::ParmVarDecl*, kAccumulatorInsSmallSize> mAccumulatorIns;
+  llvm::SmallVector<const RSExportType*, kAccumulatorInsSmallSize> mAccumulatorInTypes;
+
+  // result information
+  RSExportType *mResultType;
+
+  RSExportReduce(RSContext *Context,
+                 const clang::SourceLocation Location,
+                 const llvm::StringRef &NameReduce,
+                 const llvm::StringRef &NameInitializer,
+                 const llvm::StringRef &NameAccumulator,
+                 const llvm::StringRef &NameCombiner,
+                 const llvm::StringRef &NameOutConverter,
+                 const llvm::StringRef &NameHalter)
+    : RSExportable(Context, RSExportable::EX_REDUCE),
+      mLocation(Location),
+      mNameReduce(NameReduce),
+      mNameInitializer(NameInitializer),
+      mNameAccumulator(NameAccumulator),
+      mNameCombiner(NameCombiner),
+      mNameOutConverter(NameOutConverter),
+      mNameHalter(NameHalter),
+      mAccumulatorSignatureMetadata(0),
+      mAccumulatorTypeSize(0),
+      mResultType(nullptr) {
+  }
+
+  RSExportReduce(const RSExportReduce &) = delete;
+  void operator=(const RSExportReduce &) = delete;
+
+  struct StateOfAnalyzeTranslationUnit;
+
+  static void notOk(StateOfAnalyzeTranslationUnit &S, FnIdent Kind);
+
+  static void checkPointeeConstQualified(StateOfAnalyzeTranslationUnit &S,
+                                         FnIdent Kind, const llvm::StringRef &Name,
+                                         const clang::ParmVarDecl *Param, bool ExpectedQualification);
+
+  static void checkVoidReturn(StateOfAnalyzeTranslationUnit &S, FnIdent Kind, clang::FunctionDecl *Fn);
+
+  clang::FunctionDecl *lookupFunction(StateOfAnalyzeTranslationUnit &S,
+                                      const char *Kind, const llvm::StringRef &Name);
+
+  void analyzeInitializer(StateOfAnalyzeTranslationUnit &S);
+  void analyzeAccumulator(StateOfAnalyzeTranslationUnit &S);
+  void analyzeCombiner(StateOfAnalyzeTranslationUnit &S);
+  void analyzeOutConverter(StateOfAnalyzeTranslationUnit &S);
+  void analyzeHalter(StateOfAnalyzeTranslationUnit &S);
+  void analyzeResultType(StateOfAnalyzeTranslationUnit &S);
+
+ public:
+
+  static const char KeyReduce[];
+  static const char KeyInitializer[];
+  static const char KeyAccumulator[];
+  static const char KeyCombiner[];
+  static const char KeyOutConverter[];
+  static const char KeyHalter[];
+
+  static RSExportReduce *Create(RSContext *Context,
+                                const clang::SourceLocation Location,
+                                const llvm::StringRef &NameReduce,
+                                const llvm::StringRef &NameInitializer,
+                                const llvm::StringRef &NameAccumulator,
+                                const llvm::StringRef &NameCombiner,
+                                const llvm::StringRef &NameOutConverter,
+                                const llvm::StringRef &NameHalter);
+
+  const clang::SourceLocation &getLocation() const { return mLocation; }
+
+  const std::string &getNameReduce() const { return mNameReduce; }
+  const std::string &getNameInitializer() const { return mNameInitializer; }
+  const std::string &getNameAccumulator() const { return mNameAccumulator; }
+  const std::string &getNameCombiner() const { return mNameCombiner; }
+  const std::string &getNameOutConverter() const { return mNameOutConverter; }
+  const std::string &getNameHalter() const { return mNameHalter; }
+
+  unsigned int getAccumulatorSignatureMetadata() const { return mAccumulatorSignatureMetadata; }
+
+  unsigned int getAccumulatorTypeSize() const { return mAccumulatorTypeSize; }
+
+  const InVec &getAccumulatorIns() const { return mAccumulatorIns; }
+  const InTypeVec &getAccumulatorInTypes() const { return mAccumulatorInTypes; }
+
+  const RSExportType *getResultType() const { return mResultType; }
+
+  // Does one of this reduction's constituent function names match Candidate?
+  bool matchName(const llvm::StringRef &Candidate) const;
+
+  bool analyzeTranslationUnit();
+};  // RSExportReduce
+
+}  // namespace slang
+
+#endif  // _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_EXPORT_REDUCE_H_  NOLINT
diff --git a/slang/slang_rs_export_type.cpp b/slang/slang_rs_export_type.cpp
new file mode 100644
index 0000000..cf5e71c
--- /dev/null
+++ b/slang/slang_rs_export_type.cpp
@@ -0,0 +1,1642 @@
+/*
+ * Copyright 2010-2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "slang_rs_export_type.h"
+
+#include <list>
+#include <vector>
+
+#include "clang/AST/ASTContext.h"
+#include "clang/AST/Attr.h"
+#include "clang/AST/RecordLayout.h"
+
+#include "llvm/ADT/StringExtras.h"
+#include "llvm/IR/DataLayout.h"
+#include "llvm/IR/DerivedTypes.h"
+#include "llvm/IR/Type.h"
+
+#include "slang_assert.h"
+#include "slang_rs_context.h"
+#include "slang_rs_export_element.h"
+#include "slang_version.h"
+
+#define CHECK_PARENT_EQUALITY(ParentClass, E) \
+  if (!ParentClass::equals(E))                \
+    return false;
+
+namespace slang {
+
+namespace {
+
+// For the data types we support:
+//  Category      - data type category
+//  SName         - "common name" in script (C99)
+//  RsType        - element name in RenderScript
+//  RsShortType   - short element name in RenderScript
+//  SizeInBits    - size in bits
+//  CName         - reflected C name
+//  JavaName      - reflected Java name
+//  JavaArrayElementName - reflected name in Java arrays
+//  CVecName      - prefix for C vector types
+//  JavaVecName   - prefix for Java vector type
+//  JavaPromotion - unsigned type undergoing Java promotion
+//
+// IMPORTANT: The data types in this table should be at the same index as
+// specified by the corresponding DataType enum.
+//
+// TODO: Pull this information out into a separate file.
+static RSReflectionType gReflectionTypes[] = {
+#define _ nullptr
+  //      Category     SName              RsType       RsST           CName         JN      JAEN       CVN       JVN     JP
+{PrimitiveDataType,   "half",         "FLOAT_16",     "F16", 16,     "half",   "short",  "short",   "Half",  "Short", false},
+{PrimitiveDataType,  "float",         "FLOAT_32",     "F32", 32,    "float",   "float",  "float",  "Float",  "Float", false},
+{PrimitiveDataType, "double",         "FLOAT_64",     "F64", 64,   "double",  "double", "double", "Double", "Double", false},
+{PrimitiveDataType,   "char",         "SIGNED_8",      "I8",  8,   "int8_t",    "byte",   "byte",   "Byte",   "Byte", false},
+{PrimitiveDataType,  "short",        "SIGNED_16",     "I16", 16,  "int16_t",   "short",  "short",  "Short",  "Short", false},
+{PrimitiveDataType,    "int",        "SIGNED_32",     "I32", 32,  "int32_t",     "int",    "int",    "Int",    "Int", false},
+{PrimitiveDataType,   "long",        "SIGNED_64",     "I64", 64,  "int64_t",    "long",   "long",   "Long",   "Long", false},
+{PrimitiveDataType,  "uchar",       "UNSIGNED_8",      "U8",  8,  "uint8_t",   "short",   "byte",  "UByte",  "Short",  true},
+{PrimitiveDataType, "ushort",      "UNSIGNED_16",     "U16", 16, "uint16_t",     "int",  "short", "UShort",    "Int",  true},
+{PrimitiveDataType,   "uint",      "UNSIGNED_32",     "U32", 32, "uint32_t",    "long",    "int",   "UInt",   "Long",  true},
+{PrimitiveDataType,  "ulong",      "UNSIGNED_64",     "U64", 64, "uint64_t",    "long",   "long",  "ULong",   "Long", false},
+{PrimitiveDataType,   "bool",          "BOOLEAN", "BOOLEAN",  8,     "bool", "boolean",   "byte",        _,        _, false},
+{PrimitiveDataType,        _,   "UNSIGNED_5_6_5",         _, 16,          _,         _,        _,        _,        _, false},
+{PrimitiveDataType,        _, "UNSIGNED_5_5_5_1",         _, 16,          _,         _,        _,        _,        _, false},
+{PrimitiveDataType,        _, "UNSIGNED_4_4_4_4",         _, 16,          _,         _,        _,        _,        _, false},
+
+{MatrixDataType, "rs_matrix2x2", "MATRIX_2X2", _,  4*32, "rs_matrix2x2", "Matrix2f", _, _, _, false},
+{MatrixDataType, "rs_matrix3x3", "MATRIX_3X3", _,  9*32, "rs_matrix3x3", "Matrix3f", _, _, _, false},
+{MatrixDataType, "rs_matrix4x4", "MATRIX_4X4", _, 16*32, "rs_matrix4x4", "Matrix4f", _, _, _, false},
+
+// RS object types are 32 bits in 32-bit RS, but 256 bits in 64-bit RS.
+// This is handled specially by the GetElementSizeInBits() method.
+{ObjectDataType, _,          "RS_ELEMENT",          "ELEMENT", 32,         "Element",         "Element", _, _, _, false},
+{ObjectDataType, _,             "RS_TYPE",             "TYPE", 32,            "Type",            "Type", _, _, _, false},
+{ObjectDataType, _,       "RS_ALLOCATION",       "ALLOCATION", 32,      "Allocation",      "Allocation", _, _, _, false},
+{ObjectDataType, _,          "RS_SAMPLER",          "SAMPLER", 32,         "Sampler",         "Sampler", _, _, _, false},
+{ObjectDataType, _,           "RS_SCRIPT",           "SCRIPT", 32,          "Script",          "Script", _, _, _, false},
+{ObjectDataType, _,             "RS_MESH",             "MESH", 32,            "Mesh",            "Mesh", _, _, _, false},
+{ObjectDataType, _,             "RS_PATH",             "PATH", 32,            "Path",            "Path", _, _, _, false},
+{ObjectDataType, _, "RS_PROGRAM_FRAGMENT", "PROGRAM_FRAGMENT", 32, "ProgramFragment", "ProgramFragment", _, _, _, false},
+{ObjectDataType, _,   "RS_PROGRAM_VERTEX",   "PROGRAM_VERTEX", 32,   "ProgramVertex",   "ProgramVertex", _, _, _, false},
+{ObjectDataType, _,   "RS_PROGRAM_RASTER",   "PROGRAM_RASTER", 32,   "ProgramRaster",   "ProgramRaster", _, _, _, false},
+{ObjectDataType, _,    "RS_PROGRAM_STORE",    "PROGRAM_STORE", 32,    "ProgramStore",    "ProgramStore", _, _, _, false},
+{ObjectDataType, _,             "RS_FONT",             "FONT", 32,            "Font",            "Font", _, _, _, false},
+#undef _
+};
+
+const int kMaxVectorSize = 4;
+
+struct BuiltinInfo {
+  clang::BuiltinType::Kind builtinTypeKind;
+  DataType type;
+  /* TODO If we return std::string instead of llvm::StringRef, we could build
+   * the name instead of duplicating the entries.
+   */
+  const char *cname[kMaxVectorSize];
+};
+
+
+BuiltinInfo BuiltinInfoTable[] = {
+    {clang::BuiltinType::Bool, DataTypeBoolean,
+     {"bool", "bool2", "bool3", "bool4"}},
+    {clang::BuiltinType::Char_U, DataTypeUnsigned8,
+     {"uchar", "uchar2", "uchar3", "uchar4"}},
+    {clang::BuiltinType::UChar, DataTypeUnsigned8,
+     {"uchar", "uchar2", "uchar3", "uchar4"}},
+    {clang::BuiltinType::Char16, DataTypeSigned16,
+     {"short", "short2", "short3", "short4"}},
+    {clang::BuiltinType::Char32, DataTypeSigned32,
+     {"int", "int2", "int3", "int4"}},
+    {clang::BuiltinType::UShort, DataTypeUnsigned16,
+     {"ushort", "ushort2", "ushort3", "ushort4"}},
+    {clang::BuiltinType::UInt, DataTypeUnsigned32,
+     {"uint", "uint2", "uint3", "uint4"}},
+    {clang::BuiltinType::ULong, DataTypeUnsigned64,
+     {"ulong", "ulong2", "ulong3", "ulong4"}},
+    {clang::BuiltinType::ULongLong, DataTypeUnsigned64,
+     {"ulong", "ulong2", "ulong3", "ulong4"}},
+
+    {clang::BuiltinType::Char_S, DataTypeSigned8,
+     {"char", "char2", "char3", "char4"}},
+    {clang::BuiltinType::SChar, DataTypeSigned8,
+     {"char", "char2", "char3", "char4"}},
+    {clang::BuiltinType::Short, DataTypeSigned16,
+     {"short", "short2", "short3", "short4"}},
+    {clang::BuiltinType::Int, DataTypeSigned32,
+     {"int", "int2", "int3", "int4"}},
+    {clang::BuiltinType::Long, DataTypeSigned64,
+     {"long", "long2", "long3", "long4"}},
+    {clang::BuiltinType::LongLong, DataTypeSigned64,
+     {"long", "long2", "long3", "long4"}},
+    {clang::BuiltinType::Half, DataTypeFloat16,
+     {"half", "half2", "half3", "half4"}},
+    {clang::BuiltinType::Float, DataTypeFloat32,
+     {"float", "float2", "float3", "float4"}},
+    {clang::BuiltinType::Double, DataTypeFloat64,
+     {"double", "double2", "double3", "double4"}},
+};
+const int BuiltinInfoTableCount = sizeof(BuiltinInfoTable) / sizeof(BuiltinInfoTable[0]);
+
+struct NameAndPrimitiveType {
+  const char *name;
+  DataType dataType;
+};
+
+static NameAndPrimitiveType MatrixAndObjectDataTypes[] = {
+    {"rs_matrix2x2", DataTypeRSMatrix2x2},
+    {"rs_matrix3x3", DataTypeRSMatrix3x3},
+    {"rs_matrix4x4", DataTypeRSMatrix4x4},
+    {"rs_element", DataTypeRSElement},
+    {"rs_type", DataTypeRSType},
+    {"rs_allocation", DataTypeRSAllocation},
+    {"rs_sampler", DataTypeRSSampler},
+    {"rs_script", DataTypeRSScript},
+    {"rs_mesh", DataTypeRSMesh},
+    {"rs_path", DataTypeRSPath},
+    {"rs_program_fragment", DataTypeRSProgramFragment},
+    {"rs_program_vertex", DataTypeRSProgramVertex},
+    {"rs_program_raster", DataTypeRSProgramRaster},
+    {"rs_program_store", DataTypeRSProgramStore},
+    {"rs_font", DataTypeRSFont},
+};
+
+const int MatrixAndObjectDataTypesCount =
+    sizeof(MatrixAndObjectDataTypes) / sizeof(MatrixAndObjectDataTypes[0]);
+
+static const clang::Type *TypeExportableHelper(
+    const clang::Type *T,
+    llvm::SmallPtrSet<const clang::Type*, 8>& SPS,
+    slang::RSContext *Context,
+    const clang::VarDecl *VD,
+    const clang::RecordDecl *TopLevelRecord,
+    ExportKind EK);
+
+template <unsigned N>
+static void ReportTypeError(slang::RSContext *Context,
+                            const clang::NamedDecl *ND,
+                            const clang::RecordDecl *TopLevelRecord,
+                            const char (&Message)[N],
+                            unsigned int TargetAPI = 0) {
+  // Attempt to use the type declaration first (if we have one).
+  // Fall back to the variable definition, if we are looking at something
+  // like an array declaration that can't be exported.
+  if (TopLevelRecord) {
+    Context->ReportError(TopLevelRecord->getLocation(), Message)
+        << TopLevelRecord->getName() << TargetAPI;
+  } else if (ND) {
+    Context->ReportError(ND->getLocation(), Message) << ND->getName()
+                                                     << TargetAPI;
+  } else {
+    slangAssert(false && "Variables should be validated before exporting");
+  }
+}
+
+static const clang::Type *ConstantArrayTypeExportableHelper(
+    const clang::ConstantArrayType *CAT,
+    llvm::SmallPtrSet<const clang::Type*, 8>& SPS,
+    slang::RSContext *Context,
+    const clang::VarDecl *VD,
+    const clang::RecordDecl *TopLevelRecord,
+    ExportKind EK) {
+  // Check element type
+  const clang::Type *ElementType = GetConstantArrayElementType(CAT);
+  if (ElementType->isArrayType()) {
+    ReportTypeError(Context, VD, TopLevelRecord,
+                    "multidimensional arrays cannot be exported: '%0'");
+    return nullptr;
+  } else if (ElementType->isExtVectorType()) {
+    const clang::ExtVectorType *EVT =
+        static_cast<const clang::ExtVectorType*>(ElementType);
+    unsigned numElements = EVT->getNumElements();
+
+    const clang::Type *BaseElementType = GetExtVectorElementType(EVT);
+    if (!RSExportPrimitiveType::IsPrimitiveType(BaseElementType)) {
+      ReportTypeError(Context, VD, TopLevelRecord,
+        "vectors of non-primitive types cannot be exported: '%0'");
+      return nullptr;
+    }
+
+    if (numElements == 3 && CAT->getSize() != 1) {
+      ReportTypeError(Context, VD, TopLevelRecord,
+        "arrays of width 3 vector types cannot be exported: '%0'");
+      return nullptr;
+    }
+  }
+
+  if (TypeExportableHelper(ElementType, SPS, Context, VD,
+                           TopLevelRecord, EK) == nullptr) {
+    return nullptr;
+  } else {
+    return CAT;
+  }
+}
+
+BuiltinInfo *FindBuiltinType(clang::BuiltinType::Kind builtinTypeKind) {
+  for (int i = 0; i < BuiltinInfoTableCount; i++) {
+    if (builtinTypeKind == BuiltinInfoTable[i].builtinTypeKind) {
+      return &BuiltinInfoTable[i];
+    }
+  }
+  return nullptr;
+}
+
+static const clang::Type *TypeExportableHelper(
+    clang::Type const *T,
+    llvm::SmallPtrSet<clang::Type const *, 8> &SPS,
+    slang::RSContext *Context,
+    clang::VarDecl const *VD,
+    clang::RecordDecl const *TopLevelRecord,
+    ExportKind EK) {
+  // Normalize first
+  if ((T = GetCanonicalType(T)) == nullptr)
+    return nullptr;
+
+  if (SPS.count(T))
+    return T;
+
+  const clang::Type *CTI = T->getCanonicalTypeInternal().getTypePtr();
+
+  switch (T->getTypeClass()) {
+    case clang::Type::Builtin: {
+      const clang::BuiltinType *BT = static_cast<const clang::BuiltinType*>(CTI);
+      return FindBuiltinType(BT->getKind()) == nullptr ? nullptr : T;
+    }
+    case clang::Type::Record: {
+      if (RSExportPrimitiveType::GetRSSpecificType(T) != DataTypeUnknown) {
+        return T;  // RS object type, no further checks are needed
+      }
+
+      // Check internal struct
+      if (T->isUnionType()) {
+        ReportTypeError(Context, VD, T->getAsUnionType()->getDecl(),
+                        "unions cannot be exported: '%0'");
+        return nullptr;
+      } else if (!T->isStructureType()) {
+        slangAssert(false && "Unknown type cannot be exported");
+        return nullptr;
+      }
+
+      clang::RecordDecl *RD = T->getAsStructureType()->getDecl();
+      if (RD != nullptr) {
+        RD = RD->getDefinition();
+        if (RD == nullptr) {
+          ReportTypeError(Context, nullptr, T->getAsStructureType()->getDecl(),
+                          "struct is not defined in this module");
+          return nullptr;
+        }
+      }
+
+      if (!TopLevelRecord) {
+        TopLevelRecord = RD;
+      }
+      if (RD->getName().empty()) {
+        ReportTypeError(Context, nullptr, RD,
+                        "anonymous structures cannot be exported");
+        return nullptr;
+      }
+
+      // Fast check
+      if (RD->hasFlexibleArrayMember() || RD->hasObjectMember())
+        return nullptr;
+
+      // Insert myself into checking set
+      SPS.insert(T);
+
+      // Check all element
+      for (clang::RecordDecl::field_iterator FI = RD->field_begin(),
+               FE = RD->field_end();
+           FI != FE;
+           FI++) {
+        const clang::FieldDecl *FD = *FI;
+        const clang::Type *FT = RSExportType::GetTypeOfDecl(FD);
+        FT = GetCanonicalType(FT);
+
+        if (!TypeExportableHelper(FT, SPS, Context, VD, TopLevelRecord,
+                                  EK)) {
+          return nullptr;
+        }
+
+        // We don't support bit fields yet
+        //
+        // TODO(zonr/srhines): allow bit fields of size 8, 16, 32
+        if (FD->isBitField()) {
+          Context->ReportError(
+              FD->getLocation(),
+              "bit fields are not able to be exported: '%0.%1'")
+              << RD->getName() << FD->getName();
+          return nullptr;
+        }
+      }
+
+      return T;
+    }
+    case clang::Type::FunctionProto:
+      ReportTypeError(Context, VD, TopLevelRecord,
+                      "function types cannot be exported: '%0'");
+      return nullptr;
+    case clang::Type::Pointer: {
+      if (TopLevelRecord) {
+        ReportTypeError(Context, VD, TopLevelRecord,
+            "structures containing pointers cannot be used as the type of "
+            "an exported global variable or the parameter to an exported "
+            "function: '%0'");
+        return nullptr;
+      }
+
+      const clang::PointerType *PT = static_cast<const clang::PointerType*>(CTI);
+      const clang::Type *PointeeType = GetPointeeType(PT);
+
+      if (PointeeType->getTypeClass() == clang::Type::Pointer) {
+        ReportTypeError(Context, VD, TopLevelRecord,
+            "multiple levels of pointers cannot be exported: '%0'");
+        return nullptr;
+      }
+
+      // Void pointers are forbidden for export, although we must accept
+      // void pointers that come in as arguments to a legacy kernel.
+      if (PointeeType->isVoidType() && EK != LegacyKernelArgument) {
+        ReportTypeError(Context, VD, TopLevelRecord,
+            "void pointers cannot be exported: '%0'");
+        return nullptr;
+      }
+
+      // We don't support pointer with array-type pointee or unsupported pointee
+      // type
+      if (PointeeType->isArrayType() ||
+          (TypeExportableHelper(PointeeType, SPS, Context, VD,
+                                TopLevelRecord, EK) == nullptr))
+        return nullptr;
+      else
+        return T;
+    }
+    case clang::Type::ExtVector: {
+      const clang::ExtVectorType *EVT =
+              static_cast<const clang::ExtVectorType*>(CTI);
+      // Only vector with size 2, 3 and 4 are supported.
+      if (EVT->getNumElements() < 2 || EVT->getNumElements() > 4)
+        return nullptr;
+
+      // Check base element type
+      const clang::Type *ElementType = GetExtVectorElementType(EVT);
+
+      if ((ElementType->getTypeClass() != clang::Type::Builtin) ||
+          (TypeExportableHelper(ElementType, SPS, Context, VD,
+                                TopLevelRecord, EK) == nullptr))
+        return nullptr;
+      else
+        return T;
+    }
+    case clang::Type::ConstantArray: {
+      const clang::ConstantArrayType *CAT =
+              static_cast<const clang::ConstantArrayType*>(CTI);
+
+      return ConstantArrayTypeExportableHelper(CAT, SPS, Context, VD,
+                                               TopLevelRecord, EK);
+    }
+    case clang::Type::Enum: {
+      // FIXME: We currently convert enums to integers, rather than reflecting
+      // a more complete (and nicer type-safe Java version).
+      return Context->getASTContext().IntTy.getTypePtr();
+    }
+    default: {
+      slangAssert(false && "Unknown type cannot be validated");
+      return nullptr;
+    }
+  }
+}
+
+// Return the type that can be used to create RSExportType, will always return
+// the canonical type.
+//
+// If the Type T is not exportable, this function returns nullptr. DiagEngine is
+// used to generate proper Clang diagnostic messages when a non-exportable type
+// is detected. TopLevelRecord is used to capture the highest struct (in the
+// case of a nested hierarchy) for detecting other types that cannot be exported
+// (mostly pointers within a struct).
+static const clang::Type *TypeExportable(const clang::Type *T,
+                                         slang::RSContext *Context,
+                                         const clang::VarDecl *VD,
+                                         ExportKind EK) {
+  llvm::SmallPtrSet<const clang::Type*, 8> SPS =
+      llvm::SmallPtrSet<const clang::Type*, 8>();
+
+  return TypeExportableHelper(T, SPS, Context, VD, nullptr, EK);
+}
+
+static bool ValidateRSObjectInVarDecl(slang::RSContext *Context,
+                                      const clang::VarDecl *VD, bool InCompositeType,
+                                      unsigned int TargetAPI) {
+  if (TargetAPI < SLANG_JB_TARGET_API) {
+    // Only if we are already in a composite type (like an array or structure).
+    if (InCompositeType) {
+      // Only if we are actually exported (i.e. non-static).
+      if (VD->hasLinkage() &&
+          (VD->getFormalLinkage() == clang::ExternalLinkage)) {
+        // Only if we are not a pointer to an object.
+        const clang::Type *T = GetCanonicalType(VD->getType().getTypePtr());
+        if (T->getTypeClass() != clang::Type::Pointer) {
+          ReportTypeError(Context, VD, nullptr,
+                          "arrays/structures containing RS object types "
+                          "cannot be exported in target API < %1: '%0'",
+                          SLANG_JB_TARGET_API);
+          return false;
+        }
+      }
+    }
+  }
+
+  return true;
+}
+
+// Helper function for ValidateType(). We do a recursive descent on the
+// type hierarchy to ensure that we can properly export/handle the
+// declaration.
+// \return true if the variable declaration is valid,
+//         false if it is invalid (along with proper diagnostics).
+//
+// C - ASTContext (for diagnostics + builtin types).
+// T - sub-type that we are validating.
+// ND - (optional) top-level named declaration that we are validating.
+// SPS - set of types we have already seen/validated.
+// InCompositeType - true if we are within an outer composite type.
+// UnionDecl - set if we are in a sub-type of a union.
+// TargetAPI - target SDK API level.
+// IsFilterscript - whether or not we are compiling for Filterscript
+// IsExtern - is this type externally visible (i.e. extern global or parameter
+//                                             to an extern function)
+static bool ValidateTypeHelper(
+    slang::RSContext *Context,
+    clang::ASTContext &C,
+    const clang::Type *&T,
+    const clang::NamedDecl *ND,
+    clang::SourceLocation Loc,
+    llvm::SmallPtrSet<const clang::Type*, 8>& SPS,
+    bool InCompositeType,
+    clang::RecordDecl *UnionDecl,
+    unsigned int TargetAPI,
+    bool IsFilterscript,
+    bool IsExtern) {
+  if ((T = GetCanonicalType(T)) == nullptr)
+    return true;
+
+  if (SPS.count(T))
+    return true;
+
+  const clang::Type *CTI = T->getCanonicalTypeInternal().getTypePtr();
+
+  switch (T->getTypeClass()) {
+    case clang::Type::Record: {
+      if (RSExportPrimitiveType::IsRSObjectType(T)) {
+        const clang::VarDecl *VD = (ND ? llvm::dyn_cast<clang::VarDecl>(ND) : nullptr);
+        if (VD && !ValidateRSObjectInVarDecl(Context, VD, InCompositeType,
+                                             TargetAPI)) {
+          return false;
+        }
+      }
+
+      if (RSExportPrimitiveType::GetRSSpecificType(T) != DataTypeUnknown) {
+        if (!UnionDecl) {
+          return true;
+        } else if (RSExportPrimitiveType::IsRSObjectType(T)) {
+          ReportTypeError(Context, nullptr, UnionDecl,
+              "unions containing RS object types are not allowed");
+          return false;
+        }
+      }
+
+      clang::RecordDecl *RD = nullptr;
+
+      // Check internal struct
+      if (T->isUnionType()) {
+        RD = T->getAsUnionType()->getDecl();
+        UnionDecl = RD;
+      } else if (T->isStructureType()) {
+        RD = T->getAsStructureType()->getDecl();
+      } else {
+        slangAssert(false && "Unknown type cannot be exported");
+        return false;
+      }
+
+      if (RD != nullptr) {
+        RD = RD->getDefinition();
+        if (RD == nullptr) {
+          // FIXME
+          return true;
+        }
+      }
+
+      // Fast check
+      if (RD->hasFlexibleArrayMember() || RD->hasObjectMember())
+        return false;
+
+      // Insert myself into checking set
+      SPS.insert(T);
+
+      // Check all elements
+      for (clang::RecordDecl::field_iterator FI = RD->field_begin(),
+               FE = RD->field_end();
+           FI != FE;
+           FI++) {
+        const clang::FieldDecl *FD = *FI;
+        const clang::Type *FT = RSExportType::GetTypeOfDecl(FD);
+        FT = GetCanonicalType(FT);
+
+        if (!ValidateTypeHelper(Context, C, FT, ND, Loc, SPS, true, UnionDecl,
+                                TargetAPI, IsFilterscript, IsExtern)) {
+          return false;
+        }
+      }
+
+      return true;
+    }
+
+    case clang::Type::Builtin: {
+      if (IsFilterscript) {
+        clang::QualType QT = T->getCanonicalTypeInternal();
+        if (QT == C.DoubleTy ||
+            QT == C.LongDoubleTy ||
+            QT == C.LongTy ||
+            QT == C.LongLongTy) {
+          if (ND) {
+            Context->ReportError(
+                Loc,
+                "Builtin types > 32 bits in size are forbidden in "
+                "Filterscript: '%0'")
+                << ND->getName();
+          } else {
+            Context->ReportError(
+                Loc,
+                "Builtin types > 32 bits in size are forbidden in "
+                "Filterscript");
+          }
+          return false;
+        }
+      }
+      break;
+    }
+
+    case clang::Type::Pointer: {
+      if (IsFilterscript) {
+        if (ND) {
+          Context->ReportError(Loc,
+                               "Pointers are forbidden in Filterscript: '%0'")
+              << ND->getName();
+          return false;
+        } else {
+          // TODO(srhines): Find a better way to handle expressions (i.e. no
+          // NamedDecl) involving pointers in FS that should be allowed.
+          // An example would be calls to library functions like
+          // rsMatrixMultiply() that take rs_matrixNxN * types.
+        }
+      }
+
+      // Forbid pointers in structures that are externally visible.
+      if (InCompositeType && IsExtern) {
+        if (ND) {
+          Context->ReportError(Loc,
+              "structures containing pointers cannot be used as the type of "
+              "an exported global variable or the parameter to an exported "
+              "function: '%0'")
+            << ND->getName();
+        } else {
+          Context->ReportError(Loc,
+              "structures containing pointers cannot be used as the type of "
+              "an exported global variable or the parameter to an exported "
+              "function");
+        }
+        return false;
+      }
+
+      const clang::PointerType *PT = static_cast<const clang::PointerType*>(CTI);
+      const clang::Type *PointeeType = GetPointeeType(PT);
+
+      return ValidateTypeHelper(Context, C, PointeeType, ND, Loc, SPS,
+                                InCompositeType, UnionDecl, TargetAPI,
+                                IsFilterscript, IsExtern);
+    }
+
+    case clang::Type::ExtVector: {
+      const clang::ExtVectorType *EVT =
+              static_cast<const clang::ExtVectorType*>(CTI);
+      const clang::Type *ElementType = GetExtVectorElementType(EVT);
+      if (TargetAPI < SLANG_ICS_TARGET_API &&
+          InCompositeType &&
+          EVT->getNumElements() == 3 &&
+          ND &&
+          ND->getFormalLinkage() == clang::ExternalLinkage) {
+        ReportTypeError(Context, ND, nullptr,
+                        "structs containing vectors of dimension 3 cannot "
+                        "be exported at this API level: '%0'");
+        return false;
+      }
+      return ValidateTypeHelper(Context, C, ElementType, ND, Loc, SPS, true,
+                                UnionDecl, TargetAPI, IsFilterscript, IsExtern);
+    }
+
+    case clang::Type::ConstantArray: {
+      const clang::ConstantArrayType *CAT = static_cast<const clang::ConstantArrayType*>(CTI);
+      const clang::Type *ElementType = GetConstantArrayElementType(CAT);
+      return ValidateTypeHelper(Context, C, ElementType, ND, Loc, SPS, true,
+                                UnionDecl, TargetAPI, IsFilterscript, IsExtern);
+    }
+
+    default: {
+      break;
+    }
+  }
+
+  return true;
+}
+
+}  // namespace
+
+std::string CreateDummyName(const char *type, const std::string &name) {
+  std::stringstream S;
+  S << "<" << type;
+  if (!name.empty()) {
+    S << ":" << name;
+  }
+  S << ">";
+  return S.str();
+}
+
+/****************************** RSExportType ******************************/
+bool RSExportType::NormalizeType(const clang::Type *&T,
+                                 llvm::StringRef &TypeName,
+                                 RSContext *Context,
+                                 const clang::VarDecl *VD,
+                                 ExportKind EK) {
+  if ((T = TypeExportable(T, Context, VD, EK)) == nullptr) {
+    return false;
+  }
+  // Get type name
+  TypeName = RSExportType::GetTypeName(T);
+  if (Context && TypeName.empty()) {
+    if (VD) {
+      Context->ReportError(VD->getLocation(),
+                           "anonymous types cannot be exported");
+    } else {
+      Context->ReportError("anonymous types cannot be exported");
+    }
+    return false;
+  }
+
+  return true;
+}
+
+bool RSExportType::ValidateType(slang::RSContext *Context, clang::ASTContext &C,
+                                clang::QualType QT, const clang::NamedDecl *ND,
+                                clang::SourceLocation Loc,
+                                unsigned int TargetAPI, bool IsFilterscript,
+                                bool IsExtern) {
+  const clang::Type *T = QT.getTypePtr();
+  llvm::SmallPtrSet<const clang::Type*, 8> SPS =
+      llvm::SmallPtrSet<const clang::Type*, 8>();
+
+  // If this is an externally visible variable declaration, we check if the
+  // type is able to be exported first.
+  if (auto VD = llvm::dyn_cast_or_null<clang::VarDecl>(ND)) {
+    if (VD->getFormalLinkage() == clang::ExternalLinkage) {
+      if (!TypeExportable(T, Context, VD, NotLegacyKernelArgument)) {
+        return false;
+      }
+    }
+  }
+  return ValidateTypeHelper(Context, C, T, ND, Loc, SPS, false, nullptr, TargetAPI,
+                            IsFilterscript, IsExtern);
+}
+
+bool RSExportType::ValidateVarDecl(slang::RSContext *Context,
+                                   clang::VarDecl *VD, unsigned int TargetAPI,
+                                   bool IsFilterscript) {
+  return ValidateType(Context, VD->getASTContext(), VD->getType(), VD,
+                      VD->getLocation(), TargetAPI, IsFilterscript,
+                      (VD->getFormalLinkage() == clang::ExternalLinkage));
+}
+
+const clang::Type
+*RSExportType::GetTypeOfDecl(const clang::DeclaratorDecl *DD) {
+  if (DD) {
+    clang::QualType T = DD->getType();
+
+    if (T.isNull())
+      return nullptr;
+    else
+      return T.getTypePtr();
+  }
+  return nullptr;
+}
+
+llvm::StringRef RSExportType::GetTypeName(const clang::Type* T) {
+  T = GetCanonicalType(T);
+  if (T == nullptr)
+    return llvm::StringRef();
+
+  const clang::Type *CTI = T->getCanonicalTypeInternal().getTypePtr();
+
+  switch (T->getTypeClass()) {
+    case clang::Type::Builtin: {
+      const clang::BuiltinType *BT = static_cast<const clang::BuiltinType*>(CTI);
+      BuiltinInfo *info = FindBuiltinType(BT->getKind());
+      if (info != nullptr) {
+        return info->cname[0];
+      }
+      slangAssert(false && "Unknown data type of the builtin");
+      break;
+    }
+    case clang::Type::Record: {
+      clang::RecordDecl *RD;
+      if (T->isStructureType()) {
+        RD = T->getAsStructureType()->getDecl();
+      } else {
+        break;
+      }
+
+      llvm::StringRef Name = RD->getName();
+      if (Name.empty()) {
+        if (RD->getTypedefNameForAnonDecl() != nullptr) {
+          Name = RD->getTypedefNameForAnonDecl()->getName();
+        }
+
+        if (Name.empty()) {
+          // Try to find a name from redeclaration (i.e. typedef)
+          for (clang::TagDecl::redecl_iterator RI = RD->redecls_begin(),
+                   RE = RD->redecls_end();
+               RI != RE;
+               RI++) {
+            slangAssert(*RI != nullptr && "cannot be NULL object");
+
+            Name = (*RI)->getName();
+            if (!Name.empty())
+              break;
+          }
+        }
+      }
+      return Name;
+    }
+    case clang::Type::Pointer: {
+      // "*" plus pointee name
+      const clang::PointerType *P = static_cast<const clang::PointerType*>(CTI);
+      const clang::Type *PT = GetPointeeType(P);
+      llvm::StringRef PointeeName;
+      if (NormalizeType(PT, PointeeName, nullptr, nullptr,
+                        NotLegacyKernelArgument)) {
+        char *Name = new char[ 1 /* * */ + PointeeName.size() + 1 ];
+        Name[0] = '*';
+        memcpy(Name + 1, PointeeName.data(), PointeeName.size());
+        Name[PointeeName.size() + 1] = '\0';
+        return Name;
+      }
+      break;
+    }
+    case clang::Type::ExtVector: {
+      const clang::ExtVectorType *EVT =
+              static_cast<const clang::ExtVectorType*>(CTI);
+      return RSExportVectorType::GetTypeName(EVT);
+      break;
+    }
+    case clang::Type::ConstantArray : {
+      // Construct name for a constant array is too complicated.
+      return "<ConstantArray>";
+    }
+    default: {
+      break;
+    }
+  }
+
+  return llvm::StringRef();
+}
+
+
+RSExportType *RSExportType::Create(RSContext *Context,
+                                   const clang::Type *T,
+                                   const llvm::StringRef &TypeName,
+                                   ExportKind EK) {
+  // Lookup the context to see whether the type was processed before.
+  // Newly created RSExportType will insert into context
+  // in RSExportType::RSExportType()
+  RSContext::export_type_iterator ETI = Context->findExportType(TypeName);
+
+  if (ETI != Context->export_types_end())
+    return ETI->second;
+
+  const clang::Type *CTI = T->getCanonicalTypeInternal().getTypePtr();
+
+  RSExportType *ET = nullptr;
+  switch (T->getTypeClass()) {
+    case clang::Type::Record: {
+      DataType dt = RSExportPrimitiveType::GetRSSpecificType(TypeName);
+      switch (dt) {
+        case DataTypeUnknown: {
+          // User-defined types
+          ET = RSExportRecordType::Create(Context,
+                                          T->getAsStructureType(),
+                                          TypeName);
+          break;
+        }
+        case DataTypeRSMatrix2x2: {
+          // 2 x 2 Matrix type
+          ET = RSExportMatrixType::Create(Context,
+                                          T->getAsStructureType(),
+                                          TypeName,
+                                          2);
+          break;
+        }
+        case DataTypeRSMatrix3x3: {
+          // 3 x 3 Matrix type
+          ET = RSExportMatrixType::Create(Context,
+                                          T->getAsStructureType(),
+                                          TypeName,
+                                          3);
+          break;
+        }
+        case DataTypeRSMatrix4x4: {
+          // 4 x 4 Matrix type
+          ET = RSExportMatrixType::Create(Context,
+                                          T->getAsStructureType(),
+                                          TypeName,
+                                          4);
+          break;
+        }
+        default: {
+          // Others are primitive types
+          ET = RSExportPrimitiveType::Create(Context, T, TypeName);
+          break;
+        }
+      }
+      break;
+    }
+    case clang::Type::Builtin: {
+      ET = RSExportPrimitiveType::Create(Context, T, TypeName);
+      break;
+    }
+    case clang::Type::Pointer: {
+      ET = RSExportPointerType::Create(Context,
+                                       static_cast<const clang::PointerType*>(CTI),
+                                       TypeName);
+      // FIXME: free the name (allocated in RSExportType::GetTypeName)
+      delete [] TypeName.data();
+      break;
+    }
+    case clang::Type::ExtVector: {
+      ET = RSExportVectorType::Create(Context,
+                                      static_cast<const clang::ExtVectorType*>(CTI),
+                                      TypeName);
+      break;
+    }
+    case clang::Type::ConstantArray: {
+      ET = RSExportConstantArrayType::Create(
+              Context,
+              static_cast<const clang::ConstantArrayType*>(CTI));
+      break;
+    }
+    default: {
+      Context->ReportError("unknown type cannot be exported: '%0'")
+          << T->getTypeClassName();
+      break;
+    }
+  }
+
+  return ET;
+}
+
+RSExportType *RSExportType::Create(RSContext *Context, const clang::Type *T,
+                                   ExportKind EK, const clang::VarDecl *VD) {
+  llvm::StringRef TypeName;
+  if (NormalizeType(T, TypeName, Context, VD, EK)) {
+    return Create(Context, T, TypeName, EK);
+  } else {
+    return nullptr;
+  }
+}
+
+RSExportType *RSExportType::CreateFromDecl(RSContext *Context,
+                                           const clang::VarDecl *VD) {
+  return RSExportType::Create(Context, GetTypeOfDecl(VD),
+                              NotLegacyKernelArgument, VD);
+}
+
+size_t RSExportType::getStoreSize() const {
+  return getRSContext()->getDataLayout()->getTypeStoreSize(getLLVMType());
+}
+
+size_t RSExportType::getAllocSize() const {
+    return getRSContext()->getDataLayout()->getTypeAllocSize(getLLVMType());
+}
+
+RSExportType::RSExportType(RSContext *Context,
+                           ExportClass Class,
+                           const llvm::StringRef &Name)
+    : RSExportable(Context, RSExportable::EX_TYPE),
+      mClass(Class),
+      // Make a copy on Name since memory stored @Name is either allocated in
+      // ASTContext or allocated in GetTypeName which will be destroyed later.
+      mName(Name.data(), Name.size()),
+      mLLVMType(nullptr) {
+  // Don't cache the type whose name start with '<'. Those type failed to
+  // get their name since constructing their name in GetTypeName() requiring
+  // complicated work.
+  if (!IsDummyName(Name)) {
+    // TODO(zonr): Need to check whether the insertion is successful or not.
+    Context->insertExportType(llvm::StringRef(Name), this);
+  }
+
+}
+
+bool RSExportType::keep() {
+  if (!RSExportable::keep())
+    return false;
+  // Invalidate converted LLVM type.
+  mLLVMType = nullptr;
+  return true;
+}
+
+bool RSExportType::equals(const RSExportable *E) const {
+  CHECK_PARENT_EQUALITY(RSExportable, E);
+  return (static_cast<const RSExportType*>(E)->getClass() == getClass());
+}
+
+RSExportType::~RSExportType() {
+}
+
+/************************** RSExportPrimitiveType **************************/
+llvm::ManagedStatic<RSExportPrimitiveType::RSSpecificTypeMapTy>
+RSExportPrimitiveType::RSSpecificTypeMap;
+
+bool RSExportPrimitiveType::IsPrimitiveType(const clang::Type *T) {
+  if ((T != nullptr) && (T->getTypeClass() == clang::Type::Builtin))
+    return true;
+  else
+    return false;
+}
+
+DataType
+RSExportPrimitiveType::GetRSSpecificType(const llvm::StringRef &TypeName) {
+  if (TypeName.empty())
+    return DataTypeUnknown;
+
+  if (RSSpecificTypeMap->empty()) {
+    for (int i = 0; i < MatrixAndObjectDataTypesCount; i++) {
+      (*RSSpecificTypeMap)[MatrixAndObjectDataTypes[i].name] =
+          MatrixAndObjectDataTypes[i].dataType;
+    }
+  }
+
+  RSSpecificTypeMapTy::const_iterator I = RSSpecificTypeMap->find(TypeName);
+  if (I == RSSpecificTypeMap->end())
+    return DataTypeUnknown;
+  else
+    return I->getValue();
+}
+
+DataType RSExportPrimitiveType::GetRSSpecificType(const clang::Type *T) {
+  T = GetCanonicalType(T);
+  if ((T == nullptr) || (T->getTypeClass() != clang::Type::Record))
+    return DataTypeUnknown;
+
+  return GetRSSpecificType( RSExportType::GetTypeName(T) );
+}
+
+bool RSExportPrimitiveType::IsRSMatrixType(DataType DT) {
+    if (DT < 0 || DT >= DataTypeMax) {
+        return false;
+    }
+    return gReflectionTypes[DT].category == MatrixDataType;
+}
+
+bool RSExportPrimitiveType::IsRSObjectType(DataType DT) {
+    if (DT < 0 || DT >= DataTypeMax) {
+        return false;
+    }
+    return gReflectionTypes[DT].category == ObjectDataType;
+}
+
+bool RSExportPrimitiveType::IsStructureTypeWithRSObject(const clang::Type *T) {
+  bool RSObjectTypeSeen = false;
+  while (T && T->isArrayType()) {
+    T = T->getArrayElementTypeNoTypeQual();
+  }
+
+  const clang::RecordType *RT = T->getAsStructureType();
+  if (!RT) {
+    return false;
+  }
+
+  const clang::RecordDecl *RD = RT->getDecl();
+  if (RD) {
+    RD = RD->getDefinition();
+  }
+  if (!RD) {
+    return false;
+  }
+
+  for (clang::RecordDecl::field_iterator FI = RD->field_begin(),
+         FE = RD->field_end();
+       FI != FE;
+       FI++) {
+    // We just look through all field declarations to see if we find a
+    // declaration for an RS object type (or an array of one).
+    const clang::FieldDecl *FD = *FI;
+    const clang::Type *FT = RSExportType::GetTypeOfDecl(FD);
+    while (FT && FT->isArrayType()) {
+      FT = FT->getArrayElementTypeNoTypeQual();
+    }
+
+    DataType DT = GetRSSpecificType(FT);
+    if (IsRSObjectType(DT)) {
+      // RS object types definitely need to be zero-initialized
+      RSObjectTypeSeen = true;
+    } else {
+      switch (DT) {
+        case DataTypeRSMatrix2x2:
+        case DataTypeRSMatrix3x3:
+        case DataTypeRSMatrix4x4:
+          // Matrix types should get zero-initialized as well
+          RSObjectTypeSeen = true;
+          break;
+        default:
+          // Ignore all other primitive types
+          break;
+      }
+      while (FT && FT->isArrayType()) {
+        FT = FT->getArrayElementTypeNoTypeQual();
+      }
+      if (FT->isStructureType()) {
+        // Recursively handle structs of structs (even though these can't
+        // be exported, it is possible for a user to have them internally).
+        RSObjectTypeSeen |= IsStructureTypeWithRSObject(FT);
+      }
+    }
+  }
+
+  return RSObjectTypeSeen;
+}
+
+size_t RSExportPrimitiveType::GetElementSizeInBits(const RSExportPrimitiveType *EPT) {
+  int type = EPT->getType();
+  slangAssert((type > DataTypeUnknown && type < DataTypeMax) &&
+              "RSExportPrimitiveType::GetElementSizeInBits : unknown data type");
+  // All RS object types are 256 bits in 64-bit RS.
+  if (EPT->isRSObjectType() && EPT->getRSContext()->is64Bit()) {
+    return 256;
+  }
+  return gReflectionTypes[type].size_in_bits;
+}
+
+DataType
+RSExportPrimitiveType::GetDataType(RSContext *Context, const clang::Type *T) {
+  if (T == nullptr)
+    return DataTypeUnknown;
+
+  switch (T->getTypeClass()) {
+    case clang::Type::Builtin: {
+      const clang::BuiltinType *BT =
+              static_cast<const clang::BuiltinType*>(T->getCanonicalTypeInternal().getTypePtr());
+      BuiltinInfo *info = FindBuiltinType(BT->getKind());
+      if (info != nullptr) {
+        return info->type;
+      }
+      // The size of type WChar depend on platform so we abandon the support
+      // to them.
+      Context->ReportError("built-in type cannot be exported: '%0'")
+          << T->getTypeClassName();
+      break;
+    }
+    case clang::Type::Record: {
+      // must be RS object type
+      return RSExportPrimitiveType::GetRSSpecificType(T);
+    }
+    default: {
+      Context->ReportError("primitive type cannot be exported: '%0'")
+          << T->getTypeClassName();
+      break;
+    }
+  }
+
+  return DataTypeUnknown;
+}
+
+RSExportPrimitiveType
+*RSExportPrimitiveType::Create(RSContext *Context,
+                               const clang::Type *T,
+                               const llvm::StringRef &TypeName,
+                               bool Normalized) {
+  DataType DT = GetDataType(Context, T);
+
+  if ((DT == DataTypeUnknown) || TypeName.empty())
+    return nullptr;
+  else
+    return new RSExportPrimitiveType(Context, ExportClassPrimitive, TypeName,
+                                     DT, Normalized);
+}
+
+RSExportPrimitiveType *RSExportPrimitiveType::Create(RSContext *Context,
+                                                     const clang::Type *T) {
+  llvm::StringRef TypeName;
+  if (RSExportType::NormalizeType(T, TypeName, Context, nullptr,
+                                  NotLegacyKernelArgument) &&
+      IsPrimitiveType(T)) {
+    return Create(Context, T, TypeName);
+  } else {
+    return nullptr;
+  }
+}
+
+llvm::Type *RSExportPrimitiveType::convertToLLVMType() const {
+  llvm::LLVMContext &C = getRSContext()->getLLVMContext();
+
+  if (isRSObjectType()) {
+    // struct {
+    //   int *p;
+    // } __attribute__((packed, aligned(pointer_size)))
+    //
+    // which is
+    //
+    // <{ [1 x i32] }> in LLVM
+    //
+    std::vector<llvm::Type *> Elements;
+    if (getRSContext()->is64Bit()) {
+      // 64-bit path
+      Elements.push_back(llvm::ArrayType::get(llvm::Type::getInt64Ty(C), 4));
+      return llvm::StructType::get(C, Elements, true);
+    } else {
+      // 32-bit legacy path
+      Elements.push_back(llvm::ArrayType::get(llvm::Type::getInt32Ty(C), 1));
+      return llvm::StructType::get(C, Elements, true);
+    }
+  }
+
+  switch (mType) {
+    case DataTypeFloat16: {
+      return llvm::Type::getHalfTy(C);
+      break;
+    }
+    case DataTypeFloat32: {
+      return llvm::Type::getFloatTy(C);
+      break;
+    }
+    case DataTypeFloat64: {
+      return llvm::Type::getDoubleTy(C);
+      break;
+    }
+    case DataTypeBoolean: {
+      return llvm::Type::getInt1Ty(C);
+      break;
+    }
+    case DataTypeSigned8:
+    case DataTypeUnsigned8: {
+      return llvm::Type::getInt8Ty(C);
+      break;
+    }
+    case DataTypeSigned16:
+    case DataTypeUnsigned16:
+    case DataTypeUnsigned565:
+    case DataTypeUnsigned5551:
+    case DataTypeUnsigned4444: {
+      return llvm::Type::getInt16Ty(C);
+      break;
+    }
+    case DataTypeSigned32:
+    case DataTypeUnsigned32: {
+      return llvm::Type::getInt32Ty(C);
+      break;
+    }
+    case DataTypeSigned64:
+    case DataTypeUnsigned64: {
+      return llvm::Type::getInt64Ty(C);
+      break;
+    }
+    default: {
+      slangAssert(false && "Unknown data type");
+    }
+  }
+
+  return nullptr;
+}
+
+bool RSExportPrimitiveType::equals(const RSExportable *E) const {
+  CHECK_PARENT_EQUALITY(RSExportType, E);
+  return (static_cast<const RSExportPrimitiveType*>(E)->getType() == getType());
+}
+
+RSReflectionType *RSExportPrimitiveType::getRSReflectionType(DataType DT) {
+  if (DT > DataTypeUnknown && DT < DataTypeMax) {
+    return &gReflectionTypes[DT];
+  } else {
+    return nullptr;
+  }
+}
+
+/**************************** RSExportPointerType ****************************/
+
+RSExportPointerType
+*RSExportPointerType::Create(RSContext *Context,
+                             const clang::PointerType *PT,
+                             const llvm::StringRef &TypeName) {
+  const clang::Type *PointeeType = GetPointeeType(PT);
+  const RSExportType *PointeeET;
+
+  if (PointeeType->getTypeClass() != clang::Type::Pointer) {
+    PointeeET = RSExportType::Create(Context, PointeeType,
+                                     NotLegacyKernelArgument);
+  } else {
+    // Double or higher dimension of pointer, export as int*
+    PointeeET = RSExportPrimitiveType::Create(Context,
+                    Context->getASTContext().IntTy.getTypePtr());
+  }
+
+  if (PointeeET == nullptr) {
+    // Error diagnostic is emitted for corresponding pointee type
+    return nullptr;
+  }
+
+  return new RSExportPointerType(Context, TypeName, PointeeET);
+}
+
+llvm::Type *RSExportPointerType::convertToLLVMType() const {
+  llvm::Type *PointeeType = mPointeeType->getLLVMType();
+  return llvm::PointerType::getUnqual(PointeeType);
+}
+
+bool RSExportPointerType::keep() {
+  if (!RSExportType::keep())
+    return false;
+  const_cast<RSExportType*>(mPointeeType)->keep();
+  return true;
+}
+
+bool RSExportPointerType::equals(const RSExportable *E) const {
+  CHECK_PARENT_EQUALITY(RSExportType, E);
+  return (static_cast<const RSExportPointerType*>(E)
+              ->getPointeeType()->equals(getPointeeType()));
+}
+
+/***************************** RSExportVectorType *****************************/
+llvm::StringRef
+RSExportVectorType::GetTypeName(const clang::ExtVectorType *EVT) {
+  const clang::Type *ElementType = GetExtVectorElementType(EVT);
+  llvm::StringRef name;
+
+  if ((ElementType->getTypeClass() != clang::Type::Builtin))
+    return name;
+
+  const clang::BuiltinType *BT =
+          static_cast<const clang::BuiltinType*>(
+              ElementType->getCanonicalTypeInternal().getTypePtr());
+
+  if ((EVT->getNumElements() < 1) ||
+      (EVT->getNumElements() > 4))
+    return name;
+
+  BuiltinInfo *info = FindBuiltinType(BT->getKind());
+  if (info != nullptr) {
+    int I = EVT->getNumElements() - 1;
+    if (I < kMaxVectorSize) {
+      name = info->cname[I];
+    } else {
+      slangAssert(false && "Max vector is 4");
+    }
+  }
+  return name;
+}
+
+RSExportVectorType *RSExportVectorType::Create(RSContext *Context,
+                                               const clang::ExtVectorType *EVT,
+                                               const llvm::StringRef &TypeName,
+                                               bool Normalized) {
+  slangAssert(EVT != nullptr && EVT->getTypeClass() == clang::Type::ExtVector);
+
+  const clang::Type *ElementType = GetExtVectorElementType(EVT);
+  DataType DT = RSExportPrimitiveType::GetDataType(Context, ElementType);
+
+  if (DT != DataTypeUnknown)
+    return new RSExportVectorType(Context,
+                                  TypeName,
+                                  DT,
+                                  Normalized,
+                                  EVT->getNumElements());
+  else
+    return nullptr;
+}
+
+llvm::Type *RSExportVectorType::convertToLLVMType() const {
+  llvm::Type *ElementType = RSExportPrimitiveType::convertToLLVMType();
+  return llvm::VectorType::get(ElementType, getNumElement());
+}
+
+bool RSExportVectorType::equals(const RSExportable *E) const {
+  CHECK_PARENT_EQUALITY(RSExportPrimitiveType, E);
+  return (static_cast<const RSExportVectorType*>(E)->getNumElement()
+              == getNumElement());
+}
+
+/***************************** RSExportMatrixType *****************************/
+RSExportMatrixType *RSExportMatrixType::Create(RSContext *Context,
+                                               const clang::RecordType *RT,
+                                               const llvm::StringRef &TypeName,
+                                               unsigned Dim) {
+  slangAssert((RT != nullptr) && (RT->getTypeClass() == clang::Type::Record));
+  slangAssert((Dim > 1) && "Invalid dimension of matrix");
+
+  // Check whether the struct rs_matrix is in our expected form (but assume it's
+  // correct if we're not sure whether it's correct or not)
+  const clang::RecordDecl* RD = RT->getDecl();
+  RD = RD->getDefinition();
+  if (RD != nullptr) {
+    // Find definition, perform further examination
+    if (RD->field_empty()) {
+      Context->ReportError(
+          RD->getLocation(),
+          "invalid matrix struct: must have 1 field for saving values: '%0'")
+          << RD->getName();
+      return nullptr;
+    }
+
+    clang::RecordDecl::field_iterator FIT = RD->field_begin();
+    const clang::FieldDecl *FD = *FIT;
+    const clang::Type *FT = RSExportType::GetTypeOfDecl(FD);
+    if ((FT == nullptr) || (FT->getTypeClass() != clang::Type::ConstantArray)) {
+      Context->ReportError(RD->getLocation(),
+                           "invalid matrix struct: first field should"
+                           " be an array with constant size: '%0'")
+          << RD->getName();
+      return nullptr;
+    }
+    const clang::ConstantArrayType *CAT =
+      static_cast<const clang::ConstantArrayType *>(FT);
+    const clang::Type *ElementType = GetConstantArrayElementType(CAT);
+    if ((ElementType == nullptr) ||
+        (ElementType->getTypeClass() != clang::Type::Builtin) ||
+        (static_cast<const clang::BuiltinType *>(ElementType)->getKind() !=
+         clang::BuiltinType::Float)) {
+      Context->ReportError(RD->getLocation(),
+                           "invalid matrix struct: first field "
+                           "should be a float array: '%0'")
+          << RD->getName();
+      return nullptr;
+    }
+
+    if (CAT->getSize() != Dim * Dim) {
+      Context->ReportError(RD->getLocation(),
+                           "invalid matrix struct: first field "
+                           "should be an array with size %0: '%1'")
+          << (Dim * Dim) << (RD->getName());
+      return nullptr;
+    }
+
+    FIT++;
+    if (FIT != RD->field_end()) {
+      Context->ReportError(RD->getLocation(),
+                           "invalid matrix struct: must have "
+                           "exactly 1 field: '%0'")
+          << RD->getName();
+      return nullptr;
+    }
+  }
+
+  return new RSExportMatrixType(Context, TypeName, Dim);
+}
+
+llvm::Type *RSExportMatrixType::convertToLLVMType() const {
+  // Construct LLVM type:
+  // struct {
+  //  float X[mDim * mDim];
+  // }
+
+  llvm::LLVMContext &C = getRSContext()->getLLVMContext();
+  llvm::ArrayType *X = llvm::ArrayType::get(llvm::Type::getFloatTy(C),
+                                            mDim * mDim);
+  return llvm::StructType::get(C, X, false);
+}
+
+bool RSExportMatrixType::equals(const RSExportable *E) const {
+  CHECK_PARENT_EQUALITY(RSExportType, E);
+  return (static_cast<const RSExportMatrixType*>(E)->getDim() == getDim());
+}
+
+/************************* RSExportConstantArrayType *************************/
+RSExportConstantArrayType
+*RSExportConstantArrayType::Create(RSContext *Context,
+                                   const clang::ConstantArrayType *CAT) {
+  slangAssert(CAT != nullptr && CAT->getTypeClass() == clang::Type::ConstantArray);
+
+  slangAssert((CAT->getSize().getActiveBits() < 32) && "array too large");
+
+  unsigned Size = static_cast<unsigned>(CAT->getSize().getZExtValue());
+  slangAssert((Size > 0) && "Constant array should have size greater than 0");
+
+  const clang::Type *ElementType = GetConstantArrayElementType(CAT);
+  RSExportType *ElementET = RSExportType::Create(Context, ElementType,
+                                                 NotLegacyKernelArgument);
+
+  if (ElementET == nullptr) {
+    return nullptr;
+  }
+
+  return new RSExportConstantArrayType(Context,
+                                       ElementET,
+                                       Size);
+}
+
+llvm::Type *RSExportConstantArrayType::convertToLLVMType() const {
+  return llvm::ArrayType::get(mElementType->getLLVMType(), getNumElement());
+}
+
+bool RSExportConstantArrayType::keep() {
+  if (!RSExportType::keep())
+    return false;
+  const_cast<RSExportType*>(mElementType)->keep();
+  return true;
+}
+
+bool RSExportConstantArrayType::equals(const RSExportable *E) const {
+  CHECK_PARENT_EQUALITY(RSExportType, E);
+  const RSExportConstantArrayType *RHS =
+      static_cast<const RSExportConstantArrayType*>(E);
+  return ((getNumElement() == RHS->getNumElement()) &&
+          (getElementType()->equals(RHS->getElementType())));
+}
+
+/**************************** RSExportRecordType ****************************/
+RSExportRecordType *RSExportRecordType::Create(RSContext *Context,
+                                               const clang::RecordType *RT,
+                                               const llvm::StringRef &TypeName,
+                                               bool mIsArtificial) {
+  slangAssert(RT != nullptr && RT->getTypeClass() == clang::Type::Record);
+
+  const clang::RecordDecl *RD = RT->getDecl();
+  slangAssert(RD->isStruct());
+
+  RD = RD->getDefinition();
+  if (RD == nullptr) {
+    slangAssert(false && "struct is not defined in this module");
+    return nullptr;
+  }
+
+  // Struct layout construct by clang. We rely on this for obtaining the
+  // alloc size of a struct and offset of every field in that struct.
+  const clang::ASTRecordLayout *RL =
+      &Context->getASTContext().getASTRecordLayout(RD);
+  slangAssert((RL != nullptr) &&
+      "Failed to retrieve the struct layout from Clang.");
+
+  RSExportRecordType *ERT =
+      new RSExportRecordType(Context,
+                             TypeName,
+                             RD->hasAttr<clang::PackedAttr>(),
+                             mIsArtificial,
+                             RL->getDataSize().getQuantity(),
+                             RL->getSize().getQuantity());
+  unsigned int Index = 0;
+
+  for (clang::RecordDecl::field_iterator FI = RD->field_begin(),
+           FE = RD->field_end();
+       FI != FE;
+       FI++, Index++) {
+
+    // FIXME: All fields should be primitive type
+    slangAssert(FI->getKind() == clang::Decl::Field);
+    clang::FieldDecl *FD = *FI;
+
+    if (FD->isBitField()) {
+      return nullptr;
+    }
+
+    // Type
+    RSExportType *ET = RSExportElement::CreateFromDecl(Context, FD);
+
+    if (ET != nullptr) {
+      ERT->mFields.push_back(
+          new Field(ET, FD->getName(), ERT,
+                    static_cast<size_t>(RL->getFieldOffset(Index) >> 3)));
+    } else {
+      Context->ReportError(RD->getLocation(),
+                           "field type cannot be exported: '%0.%1'")
+          << RD->getName() << FD->getName();
+      return nullptr;
+    }
+  }
+
+  return ERT;
+}
+
+llvm::Type *RSExportRecordType::convertToLLVMType() const {
+  // Create an opaque type since struct may reference itself recursively.
+
+  // TODO(sliao): LLVM took out the OpaqueType. Any other to migrate to?
+  std::vector<llvm::Type*> FieldTypes;
+
+  for (const_field_iterator FI = fields_begin(), FE = fields_end();
+       FI != FE;
+       FI++) {
+    const Field *F = *FI;
+    const RSExportType *FET = F->getType();
+
+    FieldTypes.push_back(FET->getLLVMType());
+  }
+
+  llvm::StructType *ST = llvm::StructType::get(getRSContext()->getLLVMContext(),
+                                               FieldTypes,
+                                               mIsPacked);
+  if (ST != nullptr) {
+    return ST;
+  } else {
+    return nullptr;
+  }
+}
+
+bool RSExportRecordType::keep() {
+  if (!RSExportType::keep())
+    return false;
+  for (std::list<const Field*>::iterator I = mFields.begin(),
+          E = mFields.end();
+       I != E;
+       I++) {
+    const_cast<RSExportType*>((*I)->getType())->keep();
+  }
+  return true;
+}
+
+bool RSExportRecordType::equals(const RSExportable *E) const {
+  CHECK_PARENT_EQUALITY(RSExportType, E);
+
+  const RSExportRecordType *ERT = static_cast<const RSExportRecordType*>(E);
+
+  if (ERT->getFields().size() != getFields().size())
+    return false;
+
+  const_field_iterator AI = fields_begin(), BI = ERT->fields_begin();
+
+  for (unsigned i = 0, e = getFields().size(); i != e; i++) {
+    if (!(*AI)->getType()->equals((*BI)->getType()))
+      return false;
+    AI++;
+    BI++;
+  }
+
+  return true;
+}
+
+void RSExportType::convertToRTD(RSReflectionTypeData *rtd) const {
+    memset(rtd, 0, sizeof(*rtd));
+    rtd->vecSize = 1;
+
+    switch(getClass()) {
+    case RSExportType::ExportClassPrimitive: {
+            const RSExportPrimitiveType *EPT = static_cast<const RSExportPrimitiveType*>(this);
+            rtd->type = RSExportPrimitiveType::getRSReflectionType(EPT);
+            return;
+        }
+    case RSExportType::ExportClassPointer: {
+            const RSExportPointerType *EPT = static_cast<const RSExportPointerType*>(this);
+            const RSExportType *PointeeType = EPT->getPointeeType();
+            PointeeType->convertToRTD(rtd);
+            rtd->isPointer = true;
+            return;
+        }
+    case RSExportType::ExportClassVector: {
+            const RSExportVectorType *EVT = static_cast<const RSExportVectorType*>(this);
+            rtd->type = EVT->getRSReflectionType(EVT);
+            rtd->vecSize = EVT->getNumElement();
+            return;
+        }
+    case RSExportType::ExportClassMatrix: {
+            const RSExportMatrixType *EMT = static_cast<const RSExportMatrixType*>(this);
+            unsigned Dim = EMT->getDim();
+            slangAssert((Dim >= 2) && (Dim <= 4));
+            rtd->type = &gReflectionTypes[15 + Dim-2];
+            return;
+        }
+    case RSExportType::ExportClassConstantArray: {
+            const RSExportConstantArrayType* CAT =
+              static_cast<const RSExportConstantArrayType*>(this);
+            CAT->getElementType()->convertToRTD(rtd);
+            rtd->arraySize = CAT->getNumElement();
+            return;
+        }
+    case RSExportType::ExportClassRecord: {
+            slangAssert(!"RSExportType::ExportClassRecord not implemented");
+            return;// RS_TYPE_CLASS_NAME_PREFIX + ET->getName() + ".Item";
+        }
+    default: {
+            slangAssert(false && "Unknown class of type");
+        }
+    }
+}
+
+
+}  // namespace slang
diff --git a/slang/slang_rs_export_type.h b/slang/slang_rs_export_type.h
new file mode 100644
index 0000000..2b5787c
--- /dev/null
+++ b/slang/slang_rs_export_type.h
@@ -0,0 +1,635 @@
+/*
+ * Copyright 2010-2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_EXPORT_TYPE_H_  // NOLINT
+#define _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_EXPORT_TYPE_H_
+
+#include <list>
+#include <set>
+#include <string>
+#include <sstream>
+
+#include "clang/AST/Decl.h"
+#include "clang/AST/Type.h"
+
+#include "llvm/ADT/SmallPtrSet.h"
+#include "llvm/ADT/StringMap.h"
+#include "llvm/ADT/StringRef.h"
+
+#include "llvm/Support/ManagedStatic.h"
+
+#include "slang_rs_exportable.h"
+
+
+inline const clang::Type* GetCanonicalType(const clang::Type* T) {
+  if (T == nullptr) {
+    return  nullptr;
+  }
+  return T->getCanonicalTypeInternal().getTypePtr();
+}
+
+inline const clang::Type* GetCanonicalType(clang::QualType QT) {
+  return GetCanonicalType(QT.getTypePtr());
+}
+
+inline const clang::Type* GetExtVectorElementType(const clang::ExtVectorType *T) {
+  if (T == nullptr) {
+    return nullptr;
+  }
+  return GetCanonicalType(T->getElementType());
+}
+
+inline const clang::Type* GetPointeeType(const clang::PointerType *T) {
+  if (T == nullptr) {
+    return nullptr;
+  }
+  return GetCanonicalType(T->getPointeeType());
+}
+
+inline const clang::Type* GetConstantArrayElementType(const clang::ConstantArrayType *T) {
+  if (T == nullptr) {
+    return nullptr;
+  }
+  return GetCanonicalType(T->getElementType());
+}
+
+
+namespace llvm {
+  class Type;
+}   // namespace llvm
+
+namespace slang {
+
+class RSContext;
+
+// Broad grouping of the data types
+enum DataTypeCategory {
+    PrimitiveDataType,
+    MatrixDataType,
+    ObjectDataType
+};
+
+// Denote whether a particular export is intended for a legacy kernel argument.
+// NotLegacyKernelArgument - not a legacy kernel argument (might not even be a
+//                           kernel argument).
+// LegacyKernelArgument    - legacy pass-by-reference kernel argument using
+//                           pointers and no kernel attribute.
+enum ExportKind {
+   NotLegacyKernelArgument,
+   LegacyKernelArgument
+ };
+
+
+// From graphics/java/android/renderscript/Element.java: Element.DataType
+/* NOTE: The values of the enums are found compiled in the bit code (i.e. as
+ * values, not symbolic.  When adding new types, you must add them to the end.
+ * If removing types, you can't re-use the integer value.
+ *
+ * TODO: but if you do this, you won't be able to keep using First* & Last*
+ * for validation.
+ *
+ * IMPORTANT: This enum should correspond one-for-one to the entries found in the
+ * gReflectionsTypes table (except for the two negative numbers).  Don't edit one without
+ * the other.
+ */
+enum DataType {
+    DataTypeIsStruct = -2,
+    DataTypeUnknown = -1,
+
+    DataTypeFloat16 = 0,
+    DataTypeFloat32 = 1,
+    DataTypeFloat64 = 2,
+    DataTypeSigned8 = 3,
+    DataTypeSigned16 = 4,
+    DataTypeSigned32 = 5,
+    DataTypeSigned64 = 6,
+    DataTypeUnsigned8 = 7,
+    DataTypeUnsigned16 = 8,
+    DataTypeUnsigned32 = 9,
+    DataTypeUnsigned64 = 10,
+    DataTypeBoolean = 11,
+    DataTypeUnsigned565 = 12,
+    DataTypeUnsigned5551 = 13,
+    DataTypeUnsigned4444 = 14,
+
+    DataTypeRSMatrix2x2 = 15,
+    DataTypeRSMatrix3x3 = 16,
+    DataTypeRSMatrix4x4 = 17,
+
+    DataTypeRSElement = 18,
+    DataTypeRSType = 19,
+    DataTypeRSAllocation = 20,
+    DataTypeRSSampler = 21,
+    DataTypeRSScript = 22,
+    DataTypeRSMesh = 23,
+    DataTypeRSPath = 24,
+    DataTypeRSProgramFragment = 25,
+    DataTypeRSProgramVertex = 26,
+    DataTypeRSProgramRaster = 27,
+    DataTypeRSProgramStore = 28,
+    DataTypeRSFont = 29,
+
+    // This should always be last and correspond to the size of the gReflectionTypes table.
+    DataTypeMax
+};
+
+typedef struct {
+    // The data type category
+    DataTypeCategory category;
+    // "Common name" in script (C99)
+    const char * s_name;
+    // The element name in RenderScript
+    const char * rs_type;
+    // The short element name in RenderScript
+    const char * rs_short_type;
+    // The size of the type in bits
+    uint32_t size_in_bits;
+    // The reflected name in C code
+    const char * c_name;
+    // The reflected name in Java code
+    const char * java_name;
+    // The array type that is compatible with Allocations of our type,
+    // for use with copyTo(), copyFrom()
+    const char * java_array_element_name;
+    // The prefix for C vector types
+    const char * rs_c_vector_prefix;
+    // The prefix for Java vector types
+    const char * rs_java_vector_prefix;
+    // Indicates an unsigned type undergoing Java promotion
+    bool java_promotion;
+} RSReflectionType;
+
+
+typedef struct RSReflectionTypeData_rec {
+    const RSReflectionType *type;
+    uint32_t vecSize;   // number of elements; one if not a vector
+    bool isPointer;
+    uint32_t arraySize; // number of elements; zero if not an array
+
+    // Subelements
+    //std::vector<const struct RSReflectionTypeData_rec *> fields;
+    //std::vector< std::string > fieldNames;
+    //std::vector< uint32_t> fieldOffsetBytes;
+} RSReflectionTypeData;
+
+// Make a name for types that are too complicated to create the real names.
+std::string CreateDummyName(const char *type, const std::string &name);
+
+inline bool IsDummyName(const llvm::StringRef &Name) {
+  return Name.startswith("<");
+}
+
+class RSExportType : public RSExportable {
+  friend class RSExportElement;
+ public:
+  typedef enum {
+    ExportClassPrimitive,
+    ExportClassPointer,
+    ExportClassVector,
+    ExportClassMatrix,
+    ExportClassConstantArray,
+    ExportClassRecord
+  } ExportClass;
+
+  void convertToRTD(RSReflectionTypeData *rtd) const;
+
+ private:
+  ExportClass mClass;
+  std::string mName;
+
+  // Cache the result after calling convertToLLVMType() at the first time
+  mutable llvm::Type *mLLVMType;
+
+ protected:
+  RSExportType(RSContext *Context,
+               ExportClass Class,
+               const llvm::StringRef &Name);
+
+  // Let's make it private since there're some prerequisites to call this
+  // function.
+  //
+  // @T was normalized by calling RSExportType::NormalizeType().
+  // @TypeName was retrieved from RSExportType::GetTypeName() before calling
+  //           this.
+  // @EK denotes whether this @T is being used for a legacy kernel argument or
+  //     something else.
+  //
+  static RSExportType *Create(RSContext *Context,
+                              const clang::Type *T,
+                              const llvm::StringRef &TypeName,
+                              ExportKind EK);
+
+  static llvm::StringRef GetTypeName(const clang::Type *T);
+
+  // This function convert the RSExportType to LLVM type. Actually, it should be
+  // "convert Clang type to LLVM type." However, clang doesn't make this API
+  // (lib/CodeGen/CodeGenTypes.h) public, we need to do by ourselves.
+  //
+  // Once we can get LLVM type, we can use LLVM to get alignment information,
+  // allocation size of a given type and structure layout that LLVM used
+  // (all of these information are target dependent) without dealing with these
+  // by ourselves.
+  virtual llvm::Type *convertToLLVMType() const = 0;
+  // Record type may recursively reference its type definition. We need a
+  // temporary type setup before the type construction gets done.
+  inline void setAbstractLLVMType(llvm::Type *LLVMType) const {
+    mLLVMType = LLVMType;
+  }
+
+  virtual ~RSExportType();
+
+ public:
+  // This function additionally verifies that the Type T is exportable.
+  // If it is not, this function returns false. Otherwise it returns true.
+  static bool NormalizeType(const clang::Type *&T,
+                            llvm::StringRef &TypeName,
+                            RSContext *Context,
+                            const clang::VarDecl *VD,
+                            ExportKind EK);
+
+  // This function checks whether the specified type can be handled by RS/FS.
+  // If it cannot, this function returns false. Otherwise it returns true.
+  // Filterscript has additional restrictions on supported types.
+  static bool ValidateType(slang::RSContext *Context, clang::ASTContext &C,
+                           clang::QualType QT, const clang::NamedDecl *ND,
+                           clang::SourceLocation Loc, unsigned int TargetAPI,
+                           bool IsFilterscript, bool IsExtern);
+
+  // This function ensures that the VarDecl can be properly handled by RS.
+  // If it cannot, this function returns false. Otherwise it returns true.
+  // Filterscript has additional restrictions on supported types.
+  static bool ValidateVarDecl(slang::RSContext *Context, clang::VarDecl *VD,
+                              unsigned int TargetAPI, bool IsFilterscript);
+
+  // @T may not be normalized
+  static RSExportType *Create(RSContext *Context, const clang::Type *T,
+                              ExportKind EK,
+                              // T is type of VD or of subobject within VD
+                              const clang::VarDecl *VD = nullptr);
+  static RSExportType *CreateFromDecl(RSContext *Context,
+                                      const clang::VarDecl *VD);
+
+  static const clang::Type *GetTypeOfDecl(const clang::DeclaratorDecl *DD);
+
+  inline ExportClass getClass() const { return mClass; }
+
+  inline llvm::Type *getLLVMType() const {
+    if (mLLVMType == nullptr)
+      mLLVMType = convertToLLVMType();
+    return mLLVMType;
+  }
+
+  // Return the maximum number of bytes that may be written when this type is stored.
+  virtual size_t getStoreSize() const;
+
+  // Return the distance in bytes between successive elements of this type; it includes padding.
+  virtual size_t getAllocSize() const;
+
+  inline const std::string &getName() const { return mName; }
+
+  virtual std::string getElementName() const {
+    // Base case is actually an invalid C/Java identifier.
+    return "@@INVALID@@";
+  }
+
+  virtual bool keep();
+  virtual bool equals(const RSExportable *E) const;
+};  // RSExportType
+
+// Primitive types
+class RSExportPrimitiveType : public RSExportType {
+  friend class RSExportType;
+  friend class RSExportElement;
+ private:
+  DataType mType;
+  bool mNormalized;
+
+  typedef llvm::StringMap<DataType> RSSpecificTypeMapTy;
+  static llvm::ManagedStatic<RSSpecificTypeMapTy> RSSpecificTypeMap;
+
+  static const size_t SizeOfDataTypeInBits[];
+  // @T was normalized by calling RSExportType::NormalizeType() before calling
+  // this.
+  // @TypeName was retrieved from RSExportType::GetTypeName() before calling
+  // this
+  static RSExportPrimitiveType *Create(RSContext *Context,
+                                       const clang::Type *T,
+                                       const llvm::StringRef &TypeName,
+                                       bool Normalized = false);
+
+ protected:
+  RSExportPrimitiveType(RSContext *Context,
+                        // for derived class to set their type class
+                        ExportClass Class,
+                        const llvm::StringRef &Name,
+                        DataType DT,
+                        bool Normalized)
+      : RSExportType(Context, Class, Name),
+        mType(DT),
+        mNormalized(Normalized) {
+  }
+
+  virtual llvm::Type *convertToLLVMType() const;
+
+  static DataType GetDataType(RSContext *Context, const clang::Type *T);
+
+ public:
+  // T is normalized by calling RSExportType::NormalizeType() before
+  // calling this
+  static bool IsPrimitiveType(const clang::Type *T);
+
+  // @T may not be normalized
+  static RSExportPrimitiveType *Create(RSContext *Context,
+                                       const clang::Type *T);
+
+  static DataType GetRSSpecificType(const llvm::StringRef &TypeName);
+  static DataType GetRSSpecificType(const clang::Type *T);
+
+  static bool IsRSMatrixType(DataType DT);
+  static bool IsRSObjectType(DataType DT);
+  static bool IsRSObjectType(const clang::Type *T) {
+    return IsRSObjectType(GetRSSpecificType(T));
+  }
+
+  // Determines whether T is [an array of] struct that contains at least one
+  // RS object type within it.
+  static bool IsStructureTypeWithRSObject(const clang::Type *T);
+
+  // For a primitive type, this is the size of the type.
+  // For a vector type (RSExportVectorType is derived from RSExportPrimitiveType),
+  // this is the size of a single vector element (component).
+  static size_t GetElementSizeInBits(const RSExportPrimitiveType *EPT);
+
+  inline DataType getType() const { return mType; }
+  inline bool isRSObjectType() const {
+      return IsRSObjectType(mType);
+  }
+
+  virtual bool equals(const RSExportable *E) const;
+
+  static RSReflectionType *getRSReflectionType(DataType DT);
+  static RSReflectionType *getRSReflectionType(
+      const RSExportPrimitiveType *EPT) {
+    return getRSReflectionType(EPT->getType());
+  }
+
+  // For a vector type, this is the size of a single element.
+  unsigned getElementSizeInBytes() const { return (GetElementSizeInBits(this) >> 3); }
+
+  std::string getElementName() const {
+    return getRSReflectionType(this)->rs_short_type;
+  }
+};  // RSExportPrimitiveType
+
+
+class RSExportPointerType : public RSExportType {
+  friend class RSExportType;
+  friend class RSExportFunc;
+ private:
+  const RSExportType *mPointeeType;
+
+  RSExportPointerType(RSContext *Context,
+                      const llvm::StringRef &Name,
+                      const RSExportType *PointeeType)
+      : RSExportType(Context, ExportClassPointer, Name),
+        mPointeeType(PointeeType) {
+  }
+
+  // @PT was normalized by calling RSExportType::NormalizeType() before calling
+  // this.
+  static RSExportPointerType *Create(RSContext *Context,
+                                     const clang::PointerType *PT,
+                                     const llvm::StringRef &TypeName);
+
+  virtual llvm::Type *convertToLLVMType() const;
+
+ public:
+  virtual bool keep();
+
+  inline const RSExportType *getPointeeType() const { return mPointeeType; }
+
+  virtual bool equals(const RSExportable *E) const;
+};  // RSExportPointerType
+
+
+class RSExportVectorType : public RSExportPrimitiveType {
+  friend class RSExportType;
+  friend class RSExportElement;
+ private:
+  unsigned mNumElement;   // number of elements (components)
+
+  RSExportVectorType(RSContext *Context,
+                     const llvm::StringRef &Name,
+                     DataType DT,
+                     bool Normalized,
+                     unsigned NumElement)
+      : RSExportPrimitiveType(Context, ExportClassVector, Name,
+                              DT, Normalized),
+        mNumElement(NumElement) {
+  }
+
+  // @EVT was normalized by calling RSExportType::NormalizeType() before
+  // calling this.
+  static RSExportVectorType *Create(RSContext *Context,
+                                    const clang::ExtVectorType *EVT,
+                                    const llvm::StringRef &TypeName,
+                                    bool Normalized = false);
+
+  virtual llvm::Type *convertToLLVMType() const;
+
+ public:
+  static llvm::StringRef GetTypeName(const clang::ExtVectorType *EVT);
+
+  inline unsigned getNumElement() const { return mNumElement; }
+
+  std::string getElementName() const {
+    std::stringstream Name;
+    Name << RSExportPrimitiveType::getRSReflectionType(this)->rs_short_type
+         << "_" << getNumElement();
+    return Name.str();
+  }
+
+  virtual bool equals(const RSExportable *E) const;
+};
+
+// Only *square* *float* matrix is supported by now.
+//
+// struct rs_matrix{2x2,3x3,4x4, ..., NxN} should be defined as the following
+// form *exactly*:
+//  typedef struct {
+//    float m[{NxN}];
+//  } rs_matrixNxN;
+//
+//  where mDim will be N.
+class RSExportMatrixType : public RSExportType {
+  friend class RSExportType;
+ private:
+  unsigned mDim;  // dimension
+
+  RSExportMatrixType(RSContext *Context,
+                     const llvm::StringRef &Name,
+                     unsigned Dim)
+    : RSExportType(Context, ExportClassMatrix, Name),
+      mDim(Dim) {
+  }
+
+  virtual llvm::Type *convertToLLVMType() const;
+
+ public:
+  // @RT was normalized by calling RSExportType::NormalizeType() before
+  // calling this.
+  static RSExportMatrixType *Create(RSContext *Context,
+                                    const clang::RecordType *RT,
+                                    const llvm::StringRef &TypeName,
+                                    unsigned Dim);
+
+  inline unsigned getDim() const { return mDim; }
+
+  virtual bool equals(const RSExportable *E) const;
+};
+
+class RSExportConstantArrayType : public RSExportType {
+  friend class RSExportType;
+ private:
+  const RSExportType *mElementType;  // Array element type
+  unsigned mNumElement;              // Array element count
+
+  RSExportConstantArrayType(RSContext *Context,
+                            const RSExportType *ElementType,
+                            unsigned NumElement)
+    : RSExportType(Context, ExportClassConstantArray, "<ConstantArray>"),
+      mElementType(ElementType),
+      mNumElement(NumElement) {
+  }
+
+  // @CAT was normalized by calling RSExportType::NormalizeType() before
+  // calling this.
+  static RSExportConstantArrayType *Create(RSContext *Context,
+                                           const clang::ConstantArrayType *CAT);
+
+  virtual llvm::Type *convertToLLVMType() const;
+
+ public:
+  unsigned getNumElement() const { return mNumElement; }
+  const RSExportType *getElementType() const { return mElementType; }
+
+  std::string getElementName() const {
+    return mElementType->getElementName();
+  }
+
+  virtual bool keep();
+  virtual bool equals(const RSExportable *E) const;
+};
+
+class RSExportRecordType : public RSExportType {
+  friend class RSExportType;
+ public:
+  class Field {
+   private:
+    const RSExportType *mType;
+    // Field name
+    std::string mName;
+    // Link to the struct that contain this field
+    const RSExportRecordType *mParent;
+    // Offset in the container
+    size_t mOffset;
+
+   public:
+    Field(const RSExportType *T,
+          const llvm::StringRef &Name,
+          const RSExportRecordType *Parent,
+          size_t Offset)
+        : mType(T),
+          mName(Name.data(), Name.size()),
+          mParent(Parent),
+          mOffset(Offset) {
+    }
+
+    inline const RSExportRecordType *getParent() const { return mParent; }
+    inline const RSExportType *getType() const { return mType; }
+    inline const std::string &getName() const { return mName; }
+    inline size_t getOffsetInParent() const { return mOffset; }
+  };
+
+  typedef std::list<const Field*>::const_iterator const_field_iterator;
+
+  inline const_field_iterator fields_begin() const {
+    return this->mFields.begin();
+  }
+  inline const_field_iterator fields_end() const {
+    return this->mFields.end();
+  }
+
+ private:
+  std::list<const Field*> mFields;
+  bool mIsPacked;
+  // Artificial export struct type is not exported by user (and thus it won't
+  // get reflected)
+  bool mIsArtificial;
+  size_t mStoreSize;
+  size_t mAllocSize;
+
+  RSExportRecordType(RSContext *Context,
+                     const llvm::StringRef &Name,
+                     bool IsPacked,
+                     bool IsArtificial,
+                     size_t StoreSize,
+                     size_t AllocSize)
+      : RSExportType(Context, ExportClassRecord, Name),
+        mIsPacked(IsPacked),
+        mIsArtificial(IsArtificial),
+        mStoreSize(StoreSize),
+        mAllocSize(AllocSize) {
+  }
+
+  // @RT was normalized by calling RSExportType::NormalizeType() before calling
+  // this.
+  // @TypeName was retrieved from RSExportType::GetTypeName() before calling
+  // this.
+  static RSExportRecordType *Create(RSContext *Context,
+                                    const clang::RecordType *RT,
+                                    const llvm::StringRef &TypeName,
+                                    bool mIsArtificial = false);
+
+  virtual llvm::Type *convertToLLVMType() const;
+
+ public:
+  inline const std::list<const Field*>& getFields() const { return mFields; }
+  inline bool isPacked() const { return mIsPacked; }
+  inline bool isArtificial() const { return mIsArtificial; }
+  virtual size_t getStoreSize() const { return mStoreSize; }
+  virtual size_t getAllocSize() const { return mAllocSize; }
+
+  virtual std::string getElementName() const {
+    return "ScriptField_" + getName();
+  }
+
+  virtual bool keep();
+  virtual bool equals(const RSExportable *E) const;
+
+  ~RSExportRecordType() {
+    for (std::list<const Field*>::iterator I = mFields.begin(),
+             E = mFields.end();
+         I != E;
+         I++)
+      if (*I != nullptr)
+        delete *I;
+  }
+};  // RSExportRecordType
+
+}   // namespace slang
+
+#endif  // _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_EXPORT_TYPE_H_  NOLINT
diff --git a/slang/slang_rs_export_var.cpp b/slang/slang_rs_export_var.cpp
new file mode 100644
index 0000000..2da2baf
--- /dev/null
+++ b/slang/slang_rs_export_var.cpp
@@ -0,0 +1,108 @@
+/*
+ * Copyright 2010-2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "slang_rs_export_var.h"
+
+#include "clang/AST/ASTContext.h"
+#include "clang/AST/Type.h"
+
+#include "llvm/ADT/APSInt.h"
+
+#include "slang_rs_context.h"
+#include "slang_rs_export_type.h"
+
+namespace slang {
+
+RSExportVar::RSExportVar(RSContext *Context,
+                         const clang::VarDecl *VD,
+                         const RSExportType *ET)
+    : RSExportable(Context, RSExportable::EX_VAR),
+      mName(VD->getName().data(), VD->getName().size()),
+      mET(ET),
+      mIsConst(false),
+      mIsUnsigned(false),
+      mArraySize(0),
+      mNumInits(0) {
+  // mInit - Evaluate initializer expression
+  const clang::Expr *Initializer = VD->getAnyInitializer();
+  if (Initializer != nullptr) {
+    switch (ET->getClass()) {
+      case RSExportType::ExportClassPrimitive:
+      case RSExportType::ExportClassVector: {
+        Initializer->EvaluateAsRValue(mInit, Context->getASTContext());
+        break;
+      }
+      case RSExportType::ExportClassPointer: {
+        if (Initializer->isNullPointerConstant(Context->getASTContext(),
+                clang::Expr::NPC_ValueDependentIsNotNull)) {
+          mInit.Val = clang::APValue(llvm::APSInt(1));
+        } else {
+          if (!Initializer->EvaluateAsRValue(mInit, Context->getASTContext())) {
+            Context->ReportError(Initializer->getExprLoc(),
+                                 "initializer is not an R-value");
+          }
+        }
+        break;
+      }
+      case RSExportType::ExportClassConstantArray: {
+        const clang::InitListExpr *IList =
+            static_cast<const clang::InitListExpr*>(Initializer);
+        if (!IList) {
+          Context->ReportError(VD->getLocation(),
+                               "Unable to find initializer list");
+          break;
+        }
+        const RSExportConstantArrayType *ECAT =
+            static_cast<const RSExportConstantArrayType*>(ET);
+        mArraySize = ECAT->getNumElement();
+        mNumInits = IList->getNumInits();
+        for (unsigned int i = 0; i < mNumInits; i++) {
+          clang::Expr::EvalResult tempInit;
+          if (!IList->getInit(i)->EvaluateAsRValue(tempInit,
+                                                   Context->getASTContext())) {
+            Context->ReportError(IList->getInit(i)->getExprLoc(),
+                                 "initializer is not an R-value");
+          }
+          mInitArray.push_back(tempInit);
+        }
+        break;
+      }
+      case RSExportType::ExportClassMatrix:
+      case RSExportType::ExportClassRecord: {
+        Context->ReportError(
+            VD->getLocation(),
+            "Reflection of initializer to variable '%0' (of type "
+            "'%1') is unsupported currently.")
+            << mName << ET->getName();
+        break;
+      }
+      default: {
+        slangAssert(false && "Unknown class of type");
+      }
+    }
+  }
+
+  clang::QualType QT = VD->getTypeSourceInfo()->getType();
+  if (!QT.isNull()) {
+    mIsConst = QT.isConstQualified();
+    mIsUnsigned = QT->hasUnsignedIntegerRepresentation();
+    if (QT == Context->getASTContext().BoolTy) {
+      mIsUnsigned = false;
+    }
+  }
+}
+
+}  // namespace slang
diff --git a/slang/slang_rs_export_var.h b/slang/slang_rs_export_var.h
new file mode 100644
index 0000000..84d607c
--- /dev/null
+++ b/slang/slang_rs_export_var.h
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2010-2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_EXPORT_VAR_H_  // NOLINT
+#define _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_EXPORT_VAR_H_
+
+#include <string>
+
+#include "clang/AST/Decl.h"
+#include "clang/AST/Expr.h"
+
+#include "llvm/ADT/StringRef.h"
+
+#include "slang_assert.h"
+#include "slang_rs_exportable.h"
+
+namespace slang {
+  class RSContext;
+  class RSExportType;
+
+class RSExportVar : public RSExportable {
+  friend class RSContext;
+ private:
+  std::string mName;
+  const RSExportType *mET;
+  bool mIsConst;
+  bool mIsUnsigned;
+
+  clang::Expr::EvalResult mInit;
+
+  size_t mArraySize; // number of elements
+  size_t mNumInits;
+  llvm::SmallVector<clang::Expr::EvalResult, 0> mInitArray;
+
+  RSExportVar(RSContext *Context,
+              const clang::VarDecl *VD,
+              const RSExportType *ET);
+
+ public:
+  inline const std::string &getName() const { return mName; }
+  inline const RSExportType *getType() const { return mET; }
+  inline bool isConst() const { return mIsConst; }
+  inline bool isUnsigned() const { return mIsUnsigned; }
+
+  inline const clang::APValue &getInit() const { return mInit.Val; }
+
+  inline size_t getArraySize() const { return mArraySize; }
+  inline size_t getNumInits() const { return mNumInits; }
+  inline const clang::APValue &getInitArray(unsigned int i) const {
+    slangAssert(i < mNumInits);
+    return mInitArray[i].Val;
+  }
+};  // RSExportVar
+
+}   // namespace slang
+
+#endif  // _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_EXPORT_VAR_H_  NOLINT
diff --git a/slang/slang_rs_exportable.cpp b/slang/slang_rs_exportable.cpp
new file mode 100644
index 0000000..4a843ab
--- /dev/null
+++ b/slang/slang_rs_exportable.cpp
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "slang_rs_exportable.h"
+
+namespace slang {
+
+bool RSExportable::keep() {
+  if (isKeep())
+    return false;
+  // Invalidate associated Context.
+  mContext = nullptr;
+  return true;
+}
+
+bool RSExportable::equals(const RSExportable *E) const {
+  return ((E == nullptr) ? false : (mK == E->mK));
+}
+
+}  // namespace slang
diff --git a/slang/slang_rs_exportable.h b/slang/slang_rs_exportable.h
new file mode 100644
index 0000000..766a388
--- /dev/null
+++ b/slang/slang_rs_exportable.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_EXPORTABLE_H_  // NOLINT
+#define _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_EXPORTABLE_H_
+
+#include "slang_rs_context.h"
+
+namespace slang {
+
+class RSExportable {
+ public:
+  enum Kind {
+    EX_FUNC,
+    EX_TYPE,
+    EX_VAR,
+    EX_FOREACH,
+    EX_REDUCE
+  };
+
+ private:
+  RSContext *mContext;
+
+  Kind mK;
+
+ protected:
+  RSExportable(RSContext *Context, RSExportable::Kind K)
+      : mContext(Context),
+        mK(K) {
+    Context->newExportable(this);
+  }
+
+ public:
+  inline Kind getKind() const { return mK; }
+
+  // When keep() is invoked, mKeep will set to true and the associated RSContext
+  // won't free this RSExportable object in its destructor. The deallocation
+  // responsibility is then transferred to the object who invoked this function.
+  // Return false if the exportable is kept or failed to keep.
+  virtual bool keep();
+  inline bool isKeep() const { return (mContext == nullptr); }
+
+  virtual bool equals(const RSExportable *E) const;
+
+  inline RSContext *getRSContext() const { return mContext; }
+
+  virtual ~RSExportable() { }
+};
+}  // namespace slang
+
+#endif  // _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_EXPORTABLE_H_  NOLINT
diff --git a/slang/slang_rs_foreach_lowering.cpp b/slang/slang_rs_foreach_lowering.cpp
new file mode 100644
index 0000000..6e9991e
--- /dev/null
+++ b/slang/slang_rs_foreach_lowering.cpp
@@ -0,0 +1,392 @@
+/*
+ * Copyright 2015, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "slang_rs_foreach_lowering.h"
+
+#include "clang/AST/ASTContext.h"
+#include "clang/AST/Attr.h"
+#include "llvm/Support/raw_ostream.h"
+#include "slang_rs_context.h"
+#include "slang_rs_export_foreach.h"
+
+namespace slang {
+
+namespace {
+
+const char KERNEL_LAUNCH_FUNCTION_NAME[] = "rsForEach";
+const char KERNEL_LAUNCH_FUNCTION_NAME_WITH_OPTIONS[] = "rsForEachWithOptions";
+const char INTERNAL_LAUNCH_FUNCTION_NAME[] =
+    "_Z17rsForEachInternaliP14rs_script_calliiP13rs_allocation";
+
+}  // anonymous namespace
+
+RSForEachLowering::RSForEachLowering(RSContext* ctxt)
+    : mCtxt(ctxt), mASTCtxt(ctxt->getASTContext()) {}
+
+// Check if the passed-in expr references a kernel function in the following
+// pattern in the AST.
+//
+// ImplicitCastExpr 'void *' <BitCast>
+//  `-ImplicitCastExpr 'int (*)(int)' <FunctionToPointerDecay>
+//    `-DeclRefExpr 'int (int)' Function 'foo' 'int (int)'
+const clang::FunctionDecl* RSForEachLowering::matchFunctionDesignator(
+    clang::Expr* expr) {
+  clang::ImplicitCastExpr* ToVoidPtr =
+      clang::dyn_cast<clang::ImplicitCastExpr>(expr);
+  if (ToVoidPtr == nullptr) {
+    return nullptr;
+  }
+
+  clang::ImplicitCastExpr* Decay =
+      clang::dyn_cast<clang::ImplicitCastExpr>(ToVoidPtr->getSubExpr());
+
+  if (Decay == nullptr) {
+    return nullptr;
+  }
+
+  clang::DeclRefExpr* DRE =
+      clang::dyn_cast<clang::DeclRefExpr>(Decay->getSubExpr());
+
+  if (DRE == nullptr) {
+    return nullptr;
+  }
+
+  const clang::FunctionDecl* FD =
+      clang::dyn_cast<clang::FunctionDecl>(DRE->getDecl());
+
+  if (FD == nullptr) {
+    return nullptr;
+  }
+
+  return FD;
+}
+
+// Checks if the call expression is a legal rsForEach call by looking for the
+// following pattern in the AST. On success, returns the first argument that is
+// a FunctionDecl of a kernel function.
+//
+// CallExpr 'void'
+// |
+// |-ImplicitCastExpr 'void (*)(void *, ...)' <FunctionToPointerDecay>
+// | `-DeclRefExpr  'void (void *, ...)'  'rsForEach' 'void (void *, ...)'
+// |
+// |-ImplicitCastExpr 'void *' <BitCast>
+// | `-ImplicitCastExpr 'int (*)(int)' <FunctionToPointerDecay>
+// |   `-DeclRefExpr 'int (int)' Function 'foo' 'int (int)'
+// |
+// |-ImplicitCastExpr 'rs_allocation':'rs_allocation' <LValueToRValue>
+// | `-DeclRefExpr 'rs_allocation':'rs_allocation' lvalue ParmVar 'in' 'rs_allocation':'rs_allocation'
+// |
+// `-ImplicitCastExpr 'rs_allocation':'rs_allocation' <LValueToRValue>
+//   `-DeclRefExpr  'rs_allocation':'rs_allocation' lvalue ParmVar 'out' 'rs_allocation':'rs_allocation'
+const clang::FunctionDecl* RSForEachLowering::matchKernelLaunchCall(
+    clang::CallExpr* CE, int* slot, bool* hasOptions) {
+  const clang::Decl* D = CE->getCalleeDecl();
+  const clang::FunctionDecl* FD = clang::dyn_cast<clang::FunctionDecl>(D);
+
+  if (FD == nullptr) {
+    return nullptr;
+  }
+
+  const clang::StringRef& funcName = FD->getName();
+
+  if (funcName.equals(KERNEL_LAUNCH_FUNCTION_NAME)) {
+    *hasOptions = false;
+  } else if (funcName.equals(KERNEL_LAUNCH_FUNCTION_NAME_WITH_OPTIONS)) {
+    *hasOptions = true;
+  } else {
+    return nullptr;
+  }
+
+  if (mInsideKernel) {
+    mCtxt->ReportError(CE->getExprLoc(),
+        "Invalid kernel launch call made from inside another kernel.");
+    return nullptr;
+  }
+
+  clang::Expr* arg0 = CE->getArg(0);
+  const clang::FunctionDecl* kernel = matchFunctionDesignator(arg0);
+
+  if (kernel == nullptr) {
+    mCtxt->ReportError(arg0->getExprLoc(),
+                       "Invalid kernel launch call. "
+                       "Expects a function designator for the first argument.");
+    return nullptr;
+  }
+
+  // Verifies that kernel is indeed a "kernel" function.
+  *slot = mCtxt->getForEachSlotNumber(kernel);
+  if (*slot == -1) {
+    mCtxt->ReportError(CE->getExprLoc(),
+         "%0 applied to function %1 defined without \"kernel\" attribute")
+         << funcName << kernel->getName();
+    return nullptr;
+  }
+
+  return kernel;
+}
+
+// Create an AST node for the declaration of rsForEachInternal
+clang::FunctionDecl* RSForEachLowering::CreateForEachInternalFunctionDecl() {
+  clang::DeclContext* DC = mASTCtxt.getTranslationUnitDecl();
+  clang::SourceLocation Loc;
+
+  llvm::StringRef SR(INTERNAL_LAUNCH_FUNCTION_NAME);
+  clang::IdentifierInfo& II = mASTCtxt.Idents.get(SR);
+  clang::DeclarationName N(&II);
+
+  clang::FunctionProtoType::ExtProtoInfo EPI;
+
+  const clang::QualType& AllocTy = mCtxt->getAllocationType();
+  clang::QualType AllocPtrTy = mASTCtxt.getPointerType(AllocTy);
+
+  clang::QualType ScriptCallTy = mCtxt->getScriptCallType();
+  const clang::QualType ScriptCallPtrTy = mASTCtxt.getPointerType(ScriptCallTy);
+
+  clang::QualType ParamTypes[] = {
+    mASTCtxt.IntTy,   // int slot
+    ScriptCallPtrTy,  // rs_script_call_t* launch_options
+    mASTCtxt.IntTy,   // int numOutput
+    mASTCtxt.IntTy,   // int numInputs
+    AllocPtrTy        // rs_allocation* allocs
+  };
+
+  clang::QualType T = mASTCtxt.getFunctionType(
+      mASTCtxt.VoidTy,  // Return type
+      ParamTypes,       // Parameter types
+      EPI);
+
+  clang::FunctionDecl* FD = clang::FunctionDecl::Create(
+      mASTCtxt, DC, Loc, Loc, N, T, nullptr, clang::SC_Extern);
+
+  static constexpr unsigned kNumParams = sizeof(ParamTypes) / sizeof(ParamTypes[0]);
+  clang::ParmVarDecl *ParamDecls[kNumParams];
+  for (unsigned I = 0; I != kNumParams; ++I) {
+    ParamDecls[I] = clang::ParmVarDecl::Create(mASTCtxt, FD, Loc,
+        Loc, nullptr, ParamTypes[I], nullptr, clang::SC_None, nullptr);
+    // Implicit means that this declaration was created by the compiler, and
+    // not part of the actual source code.
+    ParamDecls[I]->setImplicit();
+  }
+  FD->setParams(llvm::makeArrayRef(ParamDecls, kNumParams));
+
+  // Implicit means that this declaration was created by the compiler, and
+  // not part of the actual source code.
+  FD->setImplicit();
+
+  return FD;
+}
+
+// Create an expression like the following that references the rsForEachInternal to
+// replace the callee in the original call expression that references rsForEach.
+//
+// ImplicitCastExpr 'void (*)(int, rs_script_call_t*, int, int, rs_allocation*)' <FunctionToPointerDecay>
+// `-DeclRefExpr 'void' Function '_Z17rsForEachInternaliP14rs_script_calliiP13rs_allocation' 'void (int, rs_script_call_t*, int, int, rs_allocation*)'
+clang::Expr* RSForEachLowering::CreateCalleeExprForInternalForEach() {
+  clang::FunctionDecl* FDNew = CreateForEachInternalFunctionDecl();
+
+  const clang::QualType FDNewType = FDNew->getType();
+
+  clang::DeclRefExpr* refExpr = clang::DeclRefExpr::Create(
+      mASTCtxt, clang::NestedNameSpecifierLoc(), clang::SourceLocation(), FDNew,
+      false, clang::SourceLocation(), FDNewType, clang::VK_RValue);
+
+  clang::Expr* calleeNew = clang::ImplicitCastExpr::Create(
+      mASTCtxt, mASTCtxt.getPointerType(FDNewType),
+      clang::CK_FunctionToPointerDecay, refExpr, nullptr, clang::VK_RValue);
+
+  return calleeNew;
+}
+
+// This visit method checks (via pattern matching) if the call expression is to
+// rsForEach, and the arguments satisfy the restrictions on the
+// rsForEach API. If so, replace the call with a rsForEachInternal call
+// with the first argument replaced by the slot number of the kernel function
+// referenced in the original first argument.
+//
+// See comments to the helper methods defined above for details.
+void RSForEachLowering::VisitCallExpr(clang::CallExpr* CE) {
+  int slot;
+  bool hasOptions;
+  const clang::FunctionDecl* kernel = matchKernelLaunchCall(CE, &slot, &hasOptions);
+  if (kernel == nullptr) {
+    return;
+  }
+
+  slangAssert(slot >= 0);
+
+  const unsigned numArgsOrig = CE->getNumArgs();
+
+  clang::QualType resultType = kernel->getReturnType().getCanonicalType();
+  const unsigned numOutputsExpected = resultType->isVoidType() ? 0 : 1;
+
+  const unsigned numInputsExpected = RSExportForEach::getNumInputs(mCtxt->getTargetAPI(), kernel);
+
+  // Verifies that rsForEach takes the right number of input and output allocations.
+  // TODO: Check input/output allocation types match kernel function expectation.
+  const unsigned numAllocations = numArgsOrig - (hasOptions ? 2 : 1);
+  if (numInputsExpected + numOutputsExpected != numAllocations) {
+    mCtxt->ReportError(
+      CE->getExprLoc(),
+      "Number of input and output allocations unexpected for kernel function %0")
+    << kernel->getName();
+    return;
+  }
+
+  clang::Expr* calleeNew = CreateCalleeExprForInternalForEach();
+  CE->setCallee(calleeNew);
+
+  const clang::CanQualType IntTy = mASTCtxt.IntTy;
+  const unsigned IntTySize = mASTCtxt.getTypeSize(IntTy);
+  const llvm::APInt APIntSlot(IntTySize, slot);
+  const clang::Expr* arg0 = CE->getArg(0);
+  const clang::SourceLocation Loc(arg0->getLocStart());
+  clang::Expr* IntSlotNum =
+      clang::IntegerLiteral::Create(mASTCtxt, APIntSlot, IntTy, Loc);
+  CE->setArg(0, IntSlotNum);
+
+  /*
+    The last few arguments to rsForEach or rsForEachWithOptions are allocations.
+    Creates a new compound literal of an array initialized with those values, and
+    passes it to rsForEachInternal as the last (the 5th) argument.
+
+    For example, rsForEach(foo, ain1, ain2, aout) would be translated into
+    rsForEachInternal(
+        1,                                   // Slot number for kernel
+        NULL,                                // Launch options
+        2,                                   // Number of input allocations
+        1,                                   // Number of output allocations
+        (rs_allocation[]){ain1, ain2, aout)  // Input and output allocations
+    );
+
+    The AST for the rs_allocation array looks like following:
+
+    ImplicitCastExpr 0x99575670 'struct rs_allocation *' <ArrayToPointerDecay>
+    `-CompoundLiteralExpr 0x99575648 'struct rs_allocation [3]' lvalue
+      `-InitListExpr 0x99575590 'struct rs_allocation [3]'
+      |-ImplicitCastExpr 0x99574b38 'rs_allocation':'struct rs_allocation' <LValueToRValue>
+      | `-DeclRefExpr 0x99574a08 'rs_allocation':'struct rs_allocation' lvalue ParmVar 0x9942c408 'ain1' 'rs_allocation':'struct rs_allocation'
+      |-ImplicitCastExpr 0x99574b50 'rs_allocation':'struct rs_allocation' <LValueToRValue>
+      | `-DeclRefExpr 0x99574a30 'rs_allocation':'struct rs_allocation' lvalue ParmVar 0x9942c478 'ain2' 'rs_allocation':'struct rs_allocation'
+      `-ImplicitCastExpr 0x99574b68 'rs_allocation':'struct rs_allocation' <LValueToRValue>
+        `-DeclRefExpr 0x99574a58 'rs_allocation':'struct rs_allocation' lvalue ParmVar 0x9942c478 'aout' 'rs_allocation':'struct rs_allocation'
+  */
+
+  const clang::QualType& AllocTy = mCtxt->getAllocationType();
+  const llvm::APInt APIntNumAllocs(IntTySize, numAllocations);
+  clang::QualType AllocArrayTy = mASTCtxt.getConstantArrayType(
+      AllocTy,
+      APIntNumAllocs,
+      clang::ArrayType::ArraySizeModifier::Normal,
+      0  // index type qualifiers
+  );
+
+  const int allocArgIndexEnd = numArgsOrig - 1;
+  int allocArgIndexStart = allocArgIndexEnd;
+
+  clang::Expr** args = CE->getArgs();
+
+  clang::SourceLocation lparenloc;
+  clang::SourceLocation rparenloc;
+
+  if (numAllocations > 0) {
+    allocArgIndexStart = hasOptions ? 2 : 1;
+    lparenloc = args[allocArgIndexStart]->getExprLoc();
+    rparenloc = args[allocArgIndexEnd]->getExprLoc();
+  }
+
+  clang::InitListExpr* init = new (mASTCtxt) clang::InitListExpr(
+      mASTCtxt,
+      lparenloc,
+      llvm::ArrayRef<clang::Expr*>(args + allocArgIndexStart, numAllocations),
+      rparenloc);
+  init->setType(AllocArrayTy);
+
+  clang::TypeSourceInfo* ti = mASTCtxt.getTrivialTypeSourceInfo(AllocArrayTy);
+  clang::CompoundLiteralExpr* CLE = new (mASTCtxt) clang::CompoundLiteralExpr(
+      lparenloc,
+      ti,
+      AllocArrayTy,
+      clang::VK_LValue,  // A compound literal is an l-value in C.
+      init,
+      false  // Not file scope
+  );
+
+  const clang::QualType AllocPtrTy = mASTCtxt.getPointerType(AllocTy);
+
+  clang::ImplicitCastExpr* Decay = clang::ImplicitCastExpr::Create(
+      mASTCtxt,
+      AllocPtrTy,
+      clang::CK_ArrayToPointerDecay,
+      CLE,
+      nullptr,  // C++ cast path
+      clang::VK_RValue
+  );
+
+  CE->setNumArgs(mASTCtxt, 5);
+
+  CE->setArg(4, Decay);
+
+  // Sets the new arguments for NULL launch option (if the user does not set one),
+  // the number of outputs, and the number of inputs.
+
+  if (!hasOptions) {
+    const llvm::APInt APIntZero(IntTySize, 0);
+    clang::Expr* IntNull =
+        clang::IntegerLiteral::Create(mASTCtxt, APIntZero, IntTy, Loc);
+    clang::QualType ScriptCallTy = mCtxt->getScriptCallType();
+    const clang::QualType ScriptCallPtrTy = mASTCtxt.getPointerType(ScriptCallTy);
+    clang::CStyleCastExpr* Cast =
+        clang::CStyleCastExpr::Create(mASTCtxt,
+                                      ScriptCallPtrTy,
+                                      clang::VK_RValue,
+                                      clang::CK_NullToPointer,
+                                      IntNull,
+                                      nullptr,
+                                      mASTCtxt.getTrivialTypeSourceInfo(ScriptCallPtrTy),
+                                      clang::SourceLocation(),
+                                      clang::SourceLocation());
+    CE->setArg(1, Cast);
+  }
+
+  const llvm::APInt APIntNumOutput(IntTySize, numOutputsExpected);
+  clang::Expr* IntNumOutput =
+      clang::IntegerLiteral::Create(mASTCtxt, APIntNumOutput, IntTy, Loc);
+  CE->setArg(2, IntNumOutput);
+
+  const llvm::APInt APIntNumInputs(IntTySize, numInputsExpected);
+  clang::Expr* IntNumInputs =
+      clang::IntegerLiteral::Create(mASTCtxt, APIntNumInputs, IntTy, Loc);
+  CE->setArg(3, IntNumInputs);
+}
+
+void RSForEachLowering::VisitStmt(clang::Stmt* S) {
+  for (clang::Stmt* Child : S->children()) {
+    if (Child) {
+      Visit(Child);
+    }
+  }
+}
+
+void RSForEachLowering::handleForEachCalls(clang::FunctionDecl* FD,
+                                           unsigned int targetAPI) {
+  slangAssert(FD && FD->hasBody());
+
+  mInsideKernel = FD->hasAttr<clang::KernelAttr>();
+  VisitStmt(FD->getBody());
+}
+
+}  // namespace slang
diff --git a/slang/slang_rs_foreach_lowering.h b/slang/slang_rs_foreach_lowering.h
new file mode 100644
index 0000000..42f476d
--- /dev/null
+++ b/slang/slang_rs_foreach_lowering.h
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2015, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FRAMEWORKS_COMPILE_SLANG_RS_FOREACH_LOWERING_H
+#define _FRAMEWORKS_COMPILE_SLANG_RS_FOREACH_LOWERING_H
+
+#include "clang/AST/StmtVisitor.h"
+
+namespace clang {
+  class ASTContext;
+  class CallExpr;
+  class Expr;
+  class FunctionDecl;
+}
+
+namespace slang {
+
+class RSContext;
+
+class RSForEachLowering : public clang::StmtVisitor<RSForEachLowering> {
+ public:
+  explicit RSForEachLowering(RSContext* ctxt);
+
+  // Given a FunctionDecl FD and the target API level, either translates all
+  // rsForEach() and rsForEachWithOptions() calls inside FD into calls to the
+  // low-level rsForEachInternal() API, if FD is not a kernel function itself;
+  // or, in the case where FD is a kernel function, reports a compiler error on
+  // any calls to either kernel launching API function.
+  void handleForEachCalls(clang::FunctionDecl* FD, unsigned int targetAPI);
+
+  void VisitCallExpr(clang::CallExpr *CE);
+  void VisitStmt(clang::Stmt *S);
+
+ private:
+  RSContext* mCtxt;
+  clang::ASTContext& mASTCtxt;
+  // A flag, if true, indicating that the visitor is walking inside a kernel
+  // function, in which case any call to rsForEach() or rsForEachWithOptions()
+  // is a compiler error.
+  bool mInsideKernel;
+
+  const clang::FunctionDecl* matchFunctionDesignator(clang::Expr* expr);
+  const clang::FunctionDecl* matchKernelLaunchCall(clang::CallExpr* CE,
+                                                   int* slot,
+                                                   bool* hasOptions);
+  clang::FunctionDecl* CreateForEachInternalFunctionDecl();
+  clang::Expr* CreateCalleeExprForInternalForEach();
+};  // RSForEachLowering
+
+}  // namespace slang
+
+#endif  // _FRAMEWORKS_COMPILE_SLANG_RS_FOREACH_LOWERING_H
diff --git a/slang/slang_rs_metadata.h b/slang/slang_rs_metadata.h
new file mode 100644
index 0000000..b84a8cd
--- /dev/null
+++ b/slang/slang_rs_metadata.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2010-2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_METADATA_H_  // NOLINT
+#define _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_METADATA_H_
+
+// MN stands for "metadata name"
+#define RS_EXPORT_VAR_MN  "#rs_export_var"
+#define RS_EXPORT_VAR_NAME  0
+#define RS_EXPORT_VAR_TYPE  1
+
+#define RS_EXPORT_FUNC_MN "#rs_export_func"
+#define RS_EXPORT_FUNC_NAME 0
+
+#define RS_EXPORT_TYPE_MN "#rs_export_type"
+
+#define RS_OBJECT_SLOTS_MN "#rs_object_slots"
+
+#define RS_EXPORT_FOREACH_NAME_MN "#rs_export_foreach_name"
+
+#define RS_EXPORT_FOREACH_MN "#rs_export_foreach"
+
+#define RS_EXPORT_REDUCE_MN "#rs_export_reduce"
+
+#endif  // _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_METADATA_H_  NOLINT
diff --git a/slang/slang_rs_object_ref_count.cpp b/slang/slang_rs_object_ref_count.cpp
new file mode 100644
index 0000000..22c4acc
--- /dev/null
+++ b/slang/slang_rs_object_ref_count.cpp
@@ -0,0 +1,1643 @@
+/*
+ * Copyright 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "slang_rs_object_ref_count.h"
+
+#include <list>
+
+#include "clang/AST/DeclGroup.h"
+#include "clang/AST/Expr.h"
+#include "clang/AST/NestedNameSpecifier.h"
+#include "clang/AST/OperationKinds.h"
+#include "clang/AST/Stmt.h"
+#include "clang/AST/StmtVisitor.h"
+
+#include "slang_assert.h"
+#include "slang.h"
+#include "slang_rs_ast_replace.h"
+#include "slang_rs_export_type.h"
+
+namespace slang {
+
+/* Even though those two arrays are of size DataTypeMax, only entries that
+ * correspond to object types will be set.
+ */
+clang::FunctionDecl *
+RSObjectRefCount::RSSetObjectFD[DataTypeMax];
+clang::FunctionDecl *
+RSObjectRefCount::RSClearObjectFD[DataTypeMax];
+
+void RSObjectRefCount::GetRSRefCountingFunctions(clang::ASTContext &C) {
+  for (unsigned i = 0; i < DataTypeMax; i++) {
+    RSSetObjectFD[i] = nullptr;
+    RSClearObjectFD[i] = nullptr;
+  }
+
+  clang::TranslationUnitDecl *TUDecl = C.getTranslationUnitDecl();
+
+  for (clang::DeclContext::decl_iterator I = TUDecl->decls_begin(),
+          E = TUDecl->decls_end(); I != E; I++) {
+    if ((I->getKind() >= clang::Decl::firstFunction) &&
+        (I->getKind() <= clang::Decl::lastFunction)) {
+      clang::FunctionDecl *FD = static_cast<clang::FunctionDecl*>(*I);
+
+      // points to RSSetObjectFD or RSClearObjectFD
+      clang::FunctionDecl **RSObjectFD;
+
+      if (FD->getName() == "rsSetObject") {
+        slangAssert((FD->getNumParams() == 2) &&
+                    "Invalid rsSetObject function prototype (# params)");
+        RSObjectFD = RSSetObjectFD;
+      } else if (FD->getName() == "rsClearObject") {
+        slangAssert((FD->getNumParams() == 1) &&
+                    "Invalid rsClearObject function prototype (# params)");
+        RSObjectFD = RSClearObjectFD;
+      } else {
+        continue;
+      }
+
+      const clang::ParmVarDecl *PVD = FD->getParamDecl(0);
+      clang::QualType PVT = PVD->getOriginalType();
+      // The first parameter must be a pointer like rs_allocation*
+      slangAssert(PVT->isPointerType() &&
+          "Invalid rs{Set,Clear}Object function prototype (pointer param)");
+
+      // The rs object type passed to the FD
+      clang::QualType RST = PVT->getPointeeType();
+      DataType DT = RSExportPrimitiveType::GetRSSpecificType(RST.getTypePtr());
+      slangAssert(RSExportPrimitiveType::IsRSObjectType(DT)
+             && "must be RS object type");
+
+      if (DT >= 0 && DT < DataTypeMax) {
+          RSObjectFD[DT] = FD;
+      } else {
+          slangAssert(false && "incorrect type");
+      }
+    }
+  }
+}
+
+namespace {
+
+unsigned CountRSObjectTypes(const clang::Type *T);
+
+clang::Stmt *CreateSingleRSSetObject(clang::ASTContext &C,
+                                     clang::Expr *DstExpr,
+                                     clang::Expr *SrcExpr,
+                                     clang::SourceLocation StartLoc,
+                                     clang::SourceLocation Loc);
+
+// This function constructs a new CompoundStmt from the input StmtList.
+clang::CompoundStmt* BuildCompoundStmt(clang::ASTContext &C,
+      std::list<clang::Stmt*> &StmtList, clang::SourceLocation Loc) {
+  unsigned NewStmtCount = StmtList.size();
+  unsigned CompoundStmtCount = 0;
+
+  clang::Stmt **CompoundStmtList;
+  CompoundStmtList = new clang::Stmt*[NewStmtCount];
+
+  std::list<clang::Stmt*>::const_iterator I = StmtList.begin();
+  std::list<clang::Stmt*>::const_iterator E = StmtList.end();
+  for ( ; I != E; I++) {
+    CompoundStmtList[CompoundStmtCount++] = *I;
+  }
+  slangAssert(CompoundStmtCount == NewStmtCount);
+
+  clang::CompoundStmt *CS = new(C) clang::CompoundStmt(
+      C, llvm::makeArrayRef(CompoundStmtList, CompoundStmtCount), Loc, Loc);
+
+  delete [] CompoundStmtList;
+
+  return CS;
+}
+
+void AppendAfterStmt(clang::ASTContext &C,
+                     clang::CompoundStmt *CS,
+                     clang::Stmt *S,
+                     std::list<clang::Stmt*> &StmtList) {
+  slangAssert(CS);
+  clang::CompoundStmt::body_iterator bI = CS->body_begin();
+  clang::CompoundStmt::body_iterator bE = CS->body_end();
+  clang::Stmt **UpdatedStmtList =
+      new clang::Stmt*[CS->size() + StmtList.size()];
+
+  unsigned UpdatedStmtCount = 0;
+  unsigned Once = 0;
+  for ( ; bI != bE; bI++) {
+    if (!S && ((*bI)->getStmtClass() == clang::Stmt::ReturnStmtClass)) {
+      // If we come across a return here, we don't have anything we can
+      // reasonably replace. We should have already inserted our destructor
+      // code in the proper spot, so we just clean up and return.
+      delete [] UpdatedStmtList;
+
+      return;
+    }
+
+    UpdatedStmtList[UpdatedStmtCount++] = *bI;
+
+    if ((*bI == S) && !Once) {
+      Once++;
+      std::list<clang::Stmt*>::const_iterator I = StmtList.begin();
+      std::list<clang::Stmt*>::const_iterator E = StmtList.end();
+      for ( ; I != E; I++) {
+        UpdatedStmtList[UpdatedStmtCount++] = *I;
+      }
+    }
+  }
+  slangAssert(Once <= 1);
+
+  // When S is nullptr, we are appending to the end of the CompoundStmt.
+  if (!S) {
+    slangAssert(Once == 0);
+    std::list<clang::Stmt*>::const_iterator I = StmtList.begin();
+    std::list<clang::Stmt*>::const_iterator E = StmtList.end();
+    for ( ; I != E; I++) {
+      UpdatedStmtList[UpdatedStmtCount++] = *I;
+    }
+  }
+
+  CS->setStmts(C, llvm::makeArrayRef(UpdatedStmtList, UpdatedStmtCount));
+
+  delete [] UpdatedStmtList;
+}
+
+// This class visits a compound statement and collects a list of all the exiting
+// statements, such as any return statement in any sub-block, and any
+// break/continue statement that would resume outside the current scope.
+// We do not handle the case for goto statements that leave a local scope.
+class DestructorVisitor : public clang::StmtVisitor<DestructorVisitor> {
+ private:
+  // The loop depth of the currently visited node.
+  int mLoopDepth;
+
+  // The switch statement depth of the currently visited node.
+  // Note that this is tracked separately from the loop depth because
+  // SwitchStmt-contained ContinueStmt's should have destructors for the
+  // corresponding loop scope.
+  int mSwitchDepth;
+
+  // Output of the visitor: the statements that should be replaced by compound
+  // statements, each of which contains rsClearObject() calls followed by the
+  // original statement.
+  std::vector<clang::Stmt*> mExitingStmts;
+
+ public:
+  DestructorVisitor() : mLoopDepth(0), mSwitchDepth(0) {}
+
+  const std::vector<clang::Stmt*>& getExitingStmts() const {
+    return mExitingStmts;
+  }
+
+  void VisitStmt(clang::Stmt *S);
+  void VisitBreakStmt(clang::BreakStmt *BS);
+  void VisitContinueStmt(clang::ContinueStmt *CS);
+  void VisitDoStmt(clang::DoStmt *DS);
+  void VisitForStmt(clang::ForStmt *FS);
+  void VisitReturnStmt(clang::ReturnStmt *RS);
+  void VisitSwitchStmt(clang::SwitchStmt *SS);
+  void VisitWhileStmt(clang::WhileStmt *WS);
+};
+
+void DestructorVisitor::VisitStmt(clang::Stmt *S) {
+  for (clang::Stmt* Child : S->children()) {
+    if (Child) {
+      Visit(Child);
+    }
+  }
+}
+
+void DestructorVisitor::VisitBreakStmt(clang::BreakStmt *BS) {
+  VisitStmt(BS);
+  if ((mLoopDepth == 0) && (mSwitchDepth == 0)) {
+    mExitingStmts.push_back(BS);
+  }
+}
+
+void DestructorVisitor::VisitContinueStmt(clang::ContinueStmt *CS) {
+  VisitStmt(CS);
+  if (mLoopDepth == 0) {
+    // Switch statements can have nested continues.
+    mExitingStmts.push_back(CS);
+  }
+}
+
+void DestructorVisitor::VisitDoStmt(clang::DoStmt *DS) {
+  mLoopDepth++;
+  VisitStmt(DS);
+  mLoopDepth--;
+}
+
+void DestructorVisitor::VisitForStmt(clang::ForStmt *FS) {
+  mLoopDepth++;
+  VisitStmt(FS);
+  mLoopDepth--;
+}
+
+void DestructorVisitor::VisitReturnStmt(clang::ReturnStmt *RS) {
+  mExitingStmts.push_back(RS);
+}
+
+void DestructorVisitor::VisitSwitchStmt(clang::SwitchStmt *SS) {
+  mSwitchDepth++;
+  VisitStmt(SS);
+  mSwitchDepth--;
+}
+
+void DestructorVisitor::VisitWhileStmt(clang::WhileStmt *WS) {
+  mLoopDepth++;
+  VisitStmt(WS);
+  mLoopDepth--;
+}
+
+clang::Expr *ClearSingleRSObject(clang::ASTContext &C,
+                                 clang::Expr *RefRSVar,
+                                 clang::SourceLocation Loc) {
+  slangAssert(RefRSVar);
+  const clang::Type *T = RefRSVar->getType().getTypePtr();
+  slangAssert(!T->isArrayType() &&
+              "Should not be destroying arrays with this function");
+
+  clang::FunctionDecl *ClearObjectFD = RSObjectRefCount::GetRSClearObjectFD(T);
+  slangAssert((ClearObjectFD != nullptr) &&
+              "rsClearObject doesn't cover all RS object types");
+
+  clang::QualType ClearObjectFDType = ClearObjectFD->getType();
+  clang::QualType ClearObjectFDArgType =
+      ClearObjectFD->getParamDecl(0)->getOriginalType();
+
+  // Example destructor for "rs_font localFont;"
+  //
+  // (CallExpr 'void'
+  //   (ImplicitCastExpr 'void (*)(rs_font *)' <FunctionToPointerDecay>
+  //     (DeclRefExpr 'void (rs_font *)' FunctionDecl='rsClearObject'))
+  //   (UnaryOperator 'rs_font *' prefix '&'
+  //     (DeclRefExpr 'rs_font':'rs_font' Var='localFont')))
+
+  // Get address of targeted RS object
+  clang::Expr *AddrRefRSVar =
+      new(C) clang::UnaryOperator(RefRSVar,
+                                  clang::UO_AddrOf,
+                                  ClearObjectFDArgType,
+                                  clang::VK_RValue,
+                                  clang::OK_Ordinary,
+                                  Loc);
+
+  clang::Expr *RefRSClearObjectFD =
+      clang::DeclRefExpr::Create(C,
+                                 clang::NestedNameSpecifierLoc(),
+                                 clang::SourceLocation(),
+                                 ClearObjectFD,
+                                 false,
+                                 ClearObjectFD->getLocation(),
+                                 ClearObjectFDType,
+                                 clang::VK_RValue,
+                                 nullptr);
+
+  clang::Expr *RSClearObjectFP =
+      clang::ImplicitCastExpr::Create(C,
+                                      C.getPointerType(ClearObjectFDType),
+                                      clang::CK_FunctionToPointerDecay,
+                                      RefRSClearObjectFD,
+                                      nullptr,
+                                      clang::VK_RValue);
+
+  llvm::SmallVector<clang::Expr*, 1> ArgList;
+  ArgList.push_back(AddrRefRSVar);
+
+  clang::CallExpr *RSClearObjectCall =
+      new(C) clang::CallExpr(C,
+                             RSClearObjectFP,
+                             ArgList,
+                             ClearObjectFD->getCallResultType(),
+                             clang::VK_RValue,
+                             Loc);
+
+  return RSClearObjectCall;
+}
+
+static int ArrayDim(const clang::Type *T) {
+  if (!T || !T->isArrayType()) {
+    return 0;
+  }
+
+  const clang::ConstantArrayType *CAT =
+    static_cast<const clang::ConstantArrayType *>(T);
+  return static_cast<int>(CAT->getSize().getSExtValue());
+}
+
+clang::Stmt *ClearStructRSObject(
+    clang::ASTContext &C,
+    clang::DeclContext *DC,
+    clang::Expr *RefRSStruct,
+    clang::SourceLocation StartLoc,
+    clang::SourceLocation Loc);
+
+clang::Stmt *ClearArrayRSObject(
+    clang::ASTContext &C,
+    clang::DeclContext *DC,
+    clang::Expr *RefRSArr,
+    clang::SourceLocation StartLoc,
+    clang::SourceLocation Loc) {
+  const clang::Type *BaseType = RefRSArr->getType().getTypePtr();
+  slangAssert(BaseType->isArrayType());
+
+  int NumArrayElements = ArrayDim(BaseType);
+  // Actually extract out the base RS object type for use later
+  BaseType = BaseType->getArrayElementTypeNoTypeQual();
+
+  if (NumArrayElements <= 0) {
+    return nullptr;
+  }
+
+  // Example destructor loop for "rs_font fontArr[10];"
+  //
+  // (ForStmt
+  //   (DeclStmt
+  //     (VarDecl used rsIntIter 'int' cinit
+  //       (IntegerLiteral 'int' 0)))
+  //   (BinaryOperator 'int' '<'
+  //     (ImplicitCastExpr int LValueToRValue
+  //       (DeclRefExpr 'int' Var='rsIntIter'))
+  //     (IntegerLiteral 'int' 10)
+  //   nullptr << CondVar >>
+  //   (UnaryOperator 'int' postfix '++'
+  //     (DeclRefExpr 'int' Var='rsIntIter'))
+  //   (CallExpr 'void'
+  //     (ImplicitCastExpr 'void (*)(rs_font *)' <FunctionToPointerDecay>
+  //       (DeclRefExpr 'void (rs_font *)' FunctionDecl='rsClearObject'))
+  //     (UnaryOperator 'rs_font *' prefix '&'
+  //       (ArraySubscriptExpr 'rs_font':'rs_font'
+  //         (ImplicitCastExpr 'rs_font *' <ArrayToPointerDecay>
+  //           (DeclRefExpr 'rs_font [10]' Var='fontArr'))
+  //         (DeclRefExpr 'int' Var='rsIntIter'))))))
+
+  // Create helper variable for iterating through elements
+  static unsigned sIterCounter = 0;
+  std::stringstream UniqueIterName;
+  UniqueIterName << "rsIntIter" << sIterCounter++;
+  clang::IdentifierInfo *II = &C.Idents.get(UniqueIterName.str());
+  clang::VarDecl *IIVD =
+      clang::VarDecl::Create(C,
+                             DC,
+                             StartLoc,
+                             Loc,
+                             II,
+                             C.IntTy,
+                             C.getTrivialTypeSourceInfo(C.IntTy),
+                             clang::SC_None);
+  // Mark "rsIntIter" as used
+  IIVD->markUsed(C);
+
+  // Form the actual destructor loop
+  // for (Init; Cond; Inc)
+  //   RSClearObjectCall;
+
+  // Init -> "int rsIntIter = 0"
+  clang::Expr *Int0 = clang::IntegerLiteral::Create(C,
+      llvm::APInt(C.getTypeSize(C.IntTy), 0), C.IntTy, Loc);
+  IIVD->setInit(Int0);
+
+  clang::Decl *IID = (clang::Decl *)IIVD;
+  clang::DeclGroupRef DGR = clang::DeclGroupRef::Create(C, &IID, 1);
+  clang::Stmt *Init = new(C) clang::DeclStmt(DGR, Loc, Loc);
+
+  // Cond -> "rsIntIter < NumArrayElements"
+  clang::DeclRefExpr *RefrsIntIterLValue =
+      clang::DeclRefExpr::Create(C,
+                                 clang::NestedNameSpecifierLoc(),
+                                 clang::SourceLocation(),
+                                 IIVD,
+                                 false,
+                                 Loc,
+                                 C.IntTy,
+                                 clang::VK_LValue,
+                                 nullptr);
+
+  clang::Expr *RefrsIntIterRValue =
+      clang::ImplicitCastExpr::Create(C,
+                                      RefrsIntIterLValue->getType(),
+                                      clang::CK_LValueToRValue,
+                                      RefrsIntIterLValue,
+                                      nullptr,
+                                      clang::VK_RValue);
+
+  clang::Expr *NumArrayElementsExpr = clang::IntegerLiteral::Create(C,
+      llvm::APInt(C.getTypeSize(C.IntTy), NumArrayElements), C.IntTy, Loc);
+
+  clang::BinaryOperator *Cond =
+      new(C) clang::BinaryOperator(RefrsIntIterRValue,
+                                   NumArrayElementsExpr,
+                                   clang::BO_LT,
+                                   C.IntTy,
+                                   clang::VK_RValue,
+                                   clang::OK_Ordinary,
+                                   Loc,
+                                   false);
+
+  // Inc -> "rsIntIter++"
+  clang::UnaryOperator *Inc =
+      new(C) clang::UnaryOperator(RefrsIntIterLValue,
+                                  clang::UO_PostInc,
+                                  C.IntTy,
+                                  clang::VK_RValue,
+                                  clang::OK_Ordinary,
+                                  Loc);
+
+  // Body -> "rsClearObject(&VD[rsIntIter]);"
+  // Destructor loop operates on individual array elements
+
+  clang::Expr *RefRSArrPtr =
+      clang::ImplicitCastExpr::Create(C,
+          C.getPointerType(BaseType->getCanonicalTypeInternal()),
+          clang::CK_ArrayToPointerDecay,
+          RefRSArr,
+          nullptr,
+          clang::VK_RValue);
+
+  clang::Expr *RefRSArrPtrSubscript =
+      new(C) clang::ArraySubscriptExpr(RefRSArrPtr,
+                                       RefrsIntIterRValue,
+                                       BaseType->getCanonicalTypeInternal(),
+                                       clang::VK_RValue,
+                                       clang::OK_Ordinary,
+                                       Loc);
+
+  DataType DT = RSExportPrimitiveType::GetRSSpecificType(BaseType);
+
+  clang::Stmt *RSClearObjectCall = nullptr;
+  if (BaseType->isArrayType()) {
+    RSClearObjectCall =
+        ClearArrayRSObject(C, DC, RefRSArrPtrSubscript, StartLoc, Loc);
+  } else if (DT == DataTypeUnknown) {
+    RSClearObjectCall =
+        ClearStructRSObject(C, DC, RefRSArrPtrSubscript, StartLoc, Loc);
+  } else {
+    RSClearObjectCall = ClearSingleRSObject(C, RefRSArrPtrSubscript, Loc);
+  }
+
+  clang::ForStmt *DestructorLoop =
+      new(C) clang::ForStmt(C,
+                            Init,
+                            Cond,
+                            nullptr,  // no condVar
+                            Inc,
+                            RSClearObjectCall,
+                            Loc,
+                            Loc,
+                            Loc);
+
+  return DestructorLoop;
+}
+
+unsigned CountRSObjectTypes(const clang::Type *T) {
+  slangAssert(T);
+  unsigned RSObjectCount = 0;
+
+  if (T->isArrayType()) {
+    return CountRSObjectTypes(T->getArrayElementTypeNoTypeQual());
+  }
+
+  DataType DT = RSExportPrimitiveType::GetRSSpecificType(T);
+  if (DT != DataTypeUnknown) {
+    return (RSExportPrimitiveType::IsRSObjectType(DT) ? 1 : 0);
+  }
+
+  if (T->isUnionType()) {
+    clang::RecordDecl *RD = T->getAsUnionType()->getDecl();
+    RD = RD->getDefinition();
+    for (clang::RecordDecl::field_iterator FI = RD->field_begin(),
+           FE = RD->field_end();
+         FI != FE;
+         FI++) {
+      const clang::FieldDecl *FD = *FI;
+      const clang::Type *FT = RSExportType::GetTypeOfDecl(FD);
+      if (CountRSObjectTypes(FT)) {
+        slangAssert(false && "can't have unions with RS object types!");
+        return 0;
+      }
+    }
+  }
+
+  if (!T->isStructureType()) {
+    return 0;
+  }
+
+  clang::RecordDecl *RD = T->getAsStructureType()->getDecl();
+  RD = RD->getDefinition();
+  for (clang::RecordDecl::field_iterator FI = RD->field_begin(),
+         FE = RD->field_end();
+       FI != FE;
+       FI++) {
+    const clang::FieldDecl *FD = *FI;
+    const clang::Type *FT = RSExportType::GetTypeOfDecl(FD);
+    if (CountRSObjectTypes(FT)) {
+      // Sub-structs should only count once (as should arrays, etc.)
+      RSObjectCount++;
+    }
+  }
+
+  return RSObjectCount;
+}
+
+clang::Stmt *ClearStructRSObject(
+    clang::ASTContext &C,
+    clang::DeclContext *DC,
+    clang::Expr *RefRSStruct,
+    clang::SourceLocation StartLoc,
+    clang::SourceLocation Loc) {
+  const clang::Type *BaseType = RefRSStruct->getType().getTypePtr();
+
+  slangAssert(!BaseType->isArrayType());
+
+  // Structs should show up as unknown primitive types
+  slangAssert(RSExportPrimitiveType::GetRSSpecificType(BaseType) ==
+              DataTypeUnknown);
+
+  unsigned FieldsToDestroy = CountRSObjectTypes(BaseType);
+  slangAssert(FieldsToDestroy != 0);
+
+  unsigned StmtCount = 0;
+  clang::Stmt **StmtArray = new clang::Stmt*[FieldsToDestroy];
+  for (unsigned i = 0; i < FieldsToDestroy; i++) {
+    StmtArray[i] = nullptr;
+  }
+
+  // Populate StmtArray by creating a destructor for each RS object field
+  clang::RecordDecl *RD = BaseType->getAsStructureType()->getDecl();
+  RD = RD->getDefinition();
+  for (clang::RecordDecl::field_iterator FI = RD->field_begin(),
+         FE = RD->field_end();
+       FI != FE;
+       FI++) {
+    // We just look through all field declarations to see if we find a
+    // declaration for an RS object type (or an array of one).
+    bool IsArrayType = false;
+    clang::FieldDecl *FD = *FI;
+    const clang::Type *FT = RSExportType::GetTypeOfDecl(FD);
+    const clang::Type *OrigType = FT;
+    while (FT && FT->isArrayType()) {
+      FT = FT->getArrayElementTypeNoTypeQual();
+      IsArrayType = true;
+    }
+
+    // Pass a DeclarationNameInfo with a valid DeclName, since name equality
+    // gets asserted during CodeGen.
+    clang::DeclarationNameInfo FDDeclNameInfo(FD->getDeclName(),
+                                              FD->getLocation());
+
+    if (RSExportPrimitiveType::IsRSObjectType(FT)) {
+      clang::DeclAccessPair FoundDecl =
+          clang::DeclAccessPair::make(FD, clang::AS_none);
+      clang::MemberExpr *RSObjectMember =
+          clang::MemberExpr::Create(C,
+                                    RefRSStruct,
+                                    false,
+                                    clang::SourceLocation(),
+                                    clang::NestedNameSpecifierLoc(),
+                                    clang::SourceLocation(),
+                                    FD,
+                                    FoundDecl,
+                                    FDDeclNameInfo,
+                                    nullptr,
+                                    OrigType->getCanonicalTypeInternal(),
+                                    clang::VK_RValue,
+                                    clang::OK_Ordinary);
+
+      slangAssert(StmtCount < FieldsToDestroy);
+
+      if (IsArrayType) {
+        StmtArray[StmtCount++] = ClearArrayRSObject(C,
+                                                    DC,
+                                                    RSObjectMember,
+                                                    StartLoc,
+                                                    Loc);
+      } else {
+        StmtArray[StmtCount++] = ClearSingleRSObject(C,
+                                                     RSObjectMember,
+                                                     Loc);
+      }
+    } else if (FT->isStructureType() && CountRSObjectTypes(FT)) {
+      // In this case, we have a nested struct. We may not end up filling all
+      // of the spaces in StmtArray (sub-structs should handle themselves
+      // with separate compound statements).
+      clang::DeclAccessPair FoundDecl =
+          clang::DeclAccessPair::make(FD, clang::AS_none);
+      clang::MemberExpr *RSObjectMember =
+          clang::MemberExpr::Create(C,
+                                    RefRSStruct,
+                                    false,
+                                    clang::SourceLocation(),
+                                    clang::NestedNameSpecifierLoc(),
+                                    clang::SourceLocation(),
+                                    FD,
+                                    FoundDecl,
+                                    clang::DeclarationNameInfo(),
+                                    nullptr,
+                                    OrigType->getCanonicalTypeInternal(),
+                                    clang::VK_RValue,
+                                    clang::OK_Ordinary);
+
+      if (IsArrayType) {
+        StmtArray[StmtCount++] = ClearArrayRSObject(C,
+                                                    DC,
+                                                    RSObjectMember,
+                                                    StartLoc,
+                                                    Loc);
+      } else {
+        StmtArray[StmtCount++] = ClearStructRSObject(C,
+                                                     DC,
+                                                     RSObjectMember,
+                                                     StartLoc,
+                                                     Loc);
+      }
+    }
+  }
+
+  slangAssert(StmtCount > 0);
+  clang::CompoundStmt *CS = new(C) clang::CompoundStmt(
+      C, llvm::makeArrayRef(StmtArray, StmtCount), Loc, Loc);
+
+  delete [] StmtArray;
+
+  return CS;
+}
+
+clang::Stmt *CreateSingleRSSetObject(clang::ASTContext &C,
+                                     clang::Expr *DstExpr,
+                                     clang::Expr *SrcExpr,
+                                     clang::SourceLocation StartLoc,
+                                     clang::SourceLocation Loc) {
+  const clang::Type *T = DstExpr->getType().getTypePtr();
+  clang::FunctionDecl *SetObjectFD = RSObjectRefCount::GetRSSetObjectFD(T);
+  slangAssert((SetObjectFD != nullptr) &&
+              "rsSetObject doesn't cover all RS object types");
+
+  clang::QualType SetObjectFDType = SetObjectFD->getType();
+  clang::QualType SetObjectFDArgType[2];
+  SetObjectFDArgType[0] = SetObjectFD->getParamDecl(0)->getOriginalType();
+  SetObjectFDArgType[1] = SetObjectFD->getParamDecl(1)->getOriginalType();
+
+  clang::Expr *RefRSSetObjectFD =
+      clang::DeclRefExpr::Create(C,
+                                 clang::NestedNameSpecifierLoc(),
+                                 clang::SourceLocation(),
+                                 SetObjectFD,
+                                 false,
+                                 Loc,
+                                 SetObjectFDType,
+                                 clang::VK_RValue,
+                                 nullptr);
+
+  clang::Expr *RSSetObjectFP =
+      clang::ImplicitCastExpr::Create(C,
+                                      C.getPointerType(SetObjectFDType),
+                                      clang::CK_FunctionToPointerDecay,
+                                      RefRSSetObjectFD,
+                                      nullptr,
+                                      clang::VK_RValue);
+
+  llvm::SmallVector<clang::Expr*, 2> ArgList;
+  ArgList.push_back(new(C) clang::UnaryOperator(DstExpr,
+                                                clang::UO_AddrOf,
+                                                SetObjectFDArgType[0],
+                                                clang::VK_RValue,
+                                                clang::OK_Ordinary,
+                                                Loc));
+  ArgList.push_back(SrcExpr);
+
+  clang::CallExpr *RSSetObjectCall =
+      new(C) clang::CallExpr(C,
+                             RSSetObjectFP,
+                             ArgList,
+                             SetObjectFD->getCallResultType(),
+                             clang::VK_RValue,
+                             Loc);
+
+  return RSSetObjectCall;
+}
+
+clang::Stmt *CreateStructRSSetObject(clang::ASTContext &C,
+                                     clang::Expr *LHS,
+                                     clang::Expr *RHS,
+                                     clang::SourceLocation StartLoc,
+                                     clang::SourceLocation Loc);
+
+/*static clang::Stmt *CreateArrayRSSetObject(clang::ASTContext &C,
+                                           clang::Expr *DstArr,
+                                           clang::Expr *SrcArr,
+                                           clang::SourceLocation StartLoc,
+                                           clang::SourceLocation Loc) {
+  clang::DeclContext *DC = nullptr;
+  const clang::Type *BaseType = DstArr->getType().getTypePtr();
+  slangAssert(BaseType->isArrayType());
+
+  int NumArrayElements = ArrayDim(BaseType);
+  // Actually extract out the base RS object type for use later
+  BaseType = BaseType->getArrayElementTypeNoTypeQual();
+
+  clang::Stmt *StmtArray[2] = {nullptr};
+  int StmtCtr = 0;
+
+  if (NumArrayElements <= 0) {
+    return nullptr;
+  }
+
+  // Create helper variable for iterating through elements
+  clang::IdentifierInfo& II = C.Idents.get("rsIntIter");
+  clang::VarDecl *IIVD =
+      clang::VarDecl::Create(C,
+                             DC,
+                             StartLoc,
+                             Loc,
+                             &II,
+                             C.IntTy,
+                             C.getTrivialTypeSourceInfo(C.IntTy),
+                             clang::SC_None,
+                             clang::SC_None);
+  clang::Decl *IID = (clang::Decl *)IIVD;
+
+  clang::DeclGroupRef DGR = clang::DeclGroupRef::Create(C, &IID, 1);
+  StmtArray[StmtCtr++] = new(C) clang::DeclStmt(DGR, Loc, Loc);
+
+  // Form the actual loop
+  // for (Init; Cond; Inc)
+  //   RSSetObjectCall;
+
+  // Init -> "rsIntIter = 0"
+  clang::DeclRefExpr *RefrsIntIter =
+      clang::DeclRefExpr::Create(C,
+                                 clang::NestedNameSpecifierLoc(),
+                                 IIVD,
+                                 Loc,
+                                 C.IntTy,
+                                 clang::VK_RValue,
+                                 nullptr);
+
+  clang::Expr *Int0 = clang::IntegerLiteral::Create(C,
+      llvm::APInt(C.getTypeSize(C.IntTy), 0), C.IntTy, Loc);
+
+  clang::BinaryOperator *Init =
+      new(C) clang::BinaryOperator(RefrsIntIter,
+                                   Int0,
+                                   clang::BO_Assign,
+                                   C.IntTy,
+                                   clang::VK_RValue,
+                                   clang::OK_Ordinary,
+                                   Loc);
+
+  // Cond -> "rsIntIter < NumArrayElements"
+  clang::Expr *NumArrayElementsExpr = clang::IntegerLiteral::Create(C,
+      llvm::APInt(C.getTypeSize(C.IntTy), NumArrayElements), C.IntTy, Loc);
+
+  clang::BinaryOperator *Cond =
+      new(C) clang::BinaryOperator(RefrsIntIter,
+                                   NumArrayElementsExpr,
+                                   clang::BO_LT,
+                                   C.IntTy,
+                                   clang::VK_RValue,
+                                   clang::OK_Ordinary,
+                                   Loc);
+
+  // Inc -> "rsIntIter++"
+  clang::UnaryOperator *Inc =
+      new(C) clang::UnaryOperator(RefrsIntIter,
+                                  clang::UO_PostInc,
+                                  C.IntTy,
+                                  clang::VK_RValue,
+                                  clang::OK_Ordinary,
+                                  Loc);
+
+  // Body -> "rsSetObject(&Dst[rsIntIter], Src[rsIntIter]);"
+  // Loop operates on individual array elements
+
+  clang::Expr *DstArrPtr =
+      clang::ImplicitCastExpr::Create(C,
+          C.getPointerType(BaseType->getCanonicalTypeInternal()),
+          clang::CK_ArrayToPointerDecay,
+          DstArr,
+          nullptr,
+          clang::VK_RValue);
+
+  clang::Expr *DstArrPtrSubscript =
+      new(C) clang::ArraySubscriptExpr(DstArrPtr,
+                                       RefrsIntIter,
+                                       BaseType->getCanonicalTypeInternal(),
+                                       clang::VK_RValue,
+                                       clang::OK_Ordinary,
+                                       Loc);
+
+  clang::Expr *SrcArrPtr =
+      clang::ImplicitCastExpr::Create(C,
+          C.getPointerType(BaseType->getCanonicalTypeInternal()),
+          clang::CK_ArrayToPointerDecay,
+          SrcArr,
+          nullptr,
+          clang::VK_RValue);
+
+  clang::Expr *SrcArrPtrSubscript =
+      new(C) clang::ArraySubscriptExpr(SrcArrPtr,
+                                       RefrsIntIter,
+                                       BaseType->getCanonicalTypeInternal(),
+                                       clang::VK_RValue,
+                                       clang::OK_Ordinary,
+                                       Loc);
+
+  DataType DT = RSExportPrimitiveType::GetRSSpecificType(BaseType);
+
+  clang::Stmt *RSSetObjectCall = nullptr;
+  if (BaseType->isArrayType()) {
+    RSSetObjectCall = CreateArrayRSSetObject(C, DstArrPtrSubscript,
+                                             SrcArrPtrSubscript,
+                                             StartLoc, Loc);
+  } else if (DT == DataTypeUnknown) {
+    RSSetObjectCall = CreateStructRSSetObject(C, DstArrPtrSubscript,
+                                              SrcArrPtrSubscript,
+                                              StartLoc, Loc);
+  } else {
+    RSSetObjectCall = CreateSingleRSSetObject(C, DstArrPtrSubscript,
+                                              SrcArrPtrSubscript,
+                                              StartLoc, Loc);
+  }
+
+  clang::ForStmt *DestructorLoop =
+      new(C) clang::ForStmt(C,
+                            Init,
+                            Cond,
+                            nullptr,  // no condVar
+                            Inc,
+                            RSSetObjectCall,
+                            Loc,
+                            Loc,
+                            Loc);
+
+  StmtArray[StmtCtr++] = DestructorLoop;
+  slangAssert(StmtCtr == 2);
+
+  clang::CompoundStmt *CS =
+      new(C) clang::CompoundStmt(C, StmtArray, StmtCtr, Loc, Loc);
+
+  return CS;
+} */
+
+clang::Stmt *CreateStructRSSetObject(clang::ASTContext &C,
+                                     clang::Expr *LHS,
+                                     clang::Expr *RHS,
+                                     clang::SourceLocation StartLoc,
+                                     clang::SourceLocation Loc) {
+  clang::QualType QT = LHS->getType();
+  const clang::Type *T = QT.getTypePtr();
+  slangAssert(T->isStructureType());
+  slangAssert(!RSExportPrimitiveType::IsRSObjectType(T));
+
+  // Keep an extra slot for the original copy (memcpy)
+  unsigned FieldsToSet = CountRSObjectTypes(T) + 1;
+
+  unsigned StmtCount = 0;
+  clang::Stmt **StmtArray = new clang::Stmt*[FieldsToSet];
+  for (unsigned i = 0; i < FieldsToSet; i++) {
+    StmtArray[i] = nullptr;
+  }
+
+  clang::RecordDecl *RD = T->getAsStructureType()->getDecl();
+  RD = RD->getDefinition();
+  for (clang::RecordDecl::field_iterator FI = RD->field_begin(),
+         FE = RD->field_end();
+       FI != FE;
+       FI++) {
+    bool IsArrayType = false;
+    clang::FieldDecl *FD = *FI;
+    const clang::Type *FT = RSExportType::GetTypeOfDecl(FD);
+    const clang::Type *OrigType = FT;
+
+    if (!CountRSObjectTypes(FT)) {
+      // Skip to next if we don't have any viable RS object types
+      continue;
+    }
+
+    clang::DeclAccessPair FoundDecl =
+        clang::DeclAccessPair::make(FD, clang::AS_none);
+    clang::MemberExpr *DstMember =
+        clang::MemberExpr::Create(C,
+                                  LHS,
+                                  false,
+                                  clang::SourceLocation(),
+                                  clang::NestedNameSpecifierLoc(),
+                                  clang::SourceLocation(),
+                                  FD,
+                                  FoundDecl,
+                                  clang::DeclarationNameInfo(),
+                                  nullptr,
+                                  OrigType->getCanonicalTypeInternal(),
+                                  clang::VK_RValue,
+                                  clang::OK_Ordinary);
+
+    clang::MemberExpr *SrcMember =
+        clang::MemberExpr::Create(C,
+                                  RHS,
+                                  false,
+                                  clang::SourceLocation(),
+                                  clang::NestedNameSpecifierLoc(),
+                                  clang::SourceLocation(),
+                                  FD,
+                                  FoundDecl,
+                                  clang::DeclarationNameInfo(),
+                                  nullptr,
+                                  OrigType->getCanonicalTypeInternal(),
+                                  clang::VK_RValue,
+                                  clang::OK_Ordinary);
+
+    if (FT->isArrayType()) {
+      FT = FT->getArrayElementTypeNoTypeQual();
+      IsArrayType = true;
+    }
+
+    DataType DT = RSExportPrimitiveType::GetRSSpecificType(FT);
+
+    if (IsArrayType) {
+      clang::DiagnosticsEngine &DiagEngine = C.getDiagnostics();
+      DiagEngine.Report(
+        clang::FullSourceLoc(Loc, C.getSourceManager()),
+        DiagEngine.getCustomDiagID(
+          clang::DiagnosticsEngine::Error,
+          "Arrays of RS object types within structures cannot be copied"));
+      // TODO(srhines): Support setting arrays of RS objects
+      // StmtArray[StmtCount++] =
+      //    CreateArrayRSSetObject(C, DstMember, SrcMember, StartLoc, Loc);
+    } else if (DT == DataTypeUnknown) {
+      StmtArray[StmtCount++] =
+          CreateStructRSSetObject(C, DstMember, SrcMember, StartLoc, Loc);
+    } else if (RSExportPrimitiveType::IsRSObjectType(DT)) {
+      StmtArray[StmtCount++] =
+          CreateSingleRSSetObject(C, DstMember, SrcMember, StartLoc, Loc);
+    } else {
+      slangAssert(false);
+    }
+  }
+
+  slangAssert(StmtCount < FieldsToSet);
+
+  // We still need to actually do the overall struct copy. For simplicity,
+  // we just do a straight-up assignment (which will still preserve all
+  // the proper RS object reference counts).
+  clang::BinaryOperator *CopyStruct =
+      new(C) clang::BinaryOperator(LHS, RHS, clang::BO_Assign, QT,
+                                   clang::VK_RValue, clang::OK_Ordinary, Loc,
+                                   false);
+  StmtArray[StmtCount++] = CopyStruct;
+
+  clang::CompoundStmt *CS = new(C) clang::CompoundStmt(
+      C, llvm::makeArrayRef(StmtArray, StmtCount), Loc, Loc);
+
+  delete [] StmtArray;
+
+  return CS;
+}
+
+}  // namespace
+
+void RSObjectRefCount::Scope::InsertStmt(const clang::ASTContext &C,
+                                         clang::Stmt *NewStmt) {
+  std::vector<clang::Stmt*> newBody;
+  for (clang::Stmt* S1 : mCS->body()) {
+    if (S1 == mCurrent) {
+      newBody.push_back(NewStmt);
+    }
+    newBody.push_back(S1);
+  }
+  mCS->setStmts(C, newBody);
+}
+
+void RSObjectRefCount::Scope::ReplaceStmt(const clang::ASTContext &C,
+                                          clang::Stmt *NewStmt) {
+  std::vector<clang::Stmt*> newBody;
+  for (clang::Stmt* S1 : mCS->body()) {
+    if (S1 == mCurrent) {
+      newBody.push_back(NewStmt);
+    } else {
+      newBody.push_back(S1);
+    }
+  }
+  mCS->setStmts(C, newBody);
+}
+
+void RSObjectRefCount::Scope::ReplaceExpr(const clang::ASTContext& C,
+                                          clang::Expr* OldExpr,
+                                          clang::Expr* NewExpr) {
+  RSASTReplace R(C);
+  R.ReplaceStmt(mCurrent, OldExpr, NewExpr);
+}
+
+void RSObjectRefCount::Scope::ReplaceRSObjectAssignment(
+    clang::BinaryOperator *AS) {
+
+  clang::QualType QT = AS->getType();
+
+  clang::ASTContext &C = RSObjectRefCount::GetRSSetObjectFD(
+      DataTypeRSAllocation)->getASTContext();
+
+  clang::SourceLocation Loc = AS->getExprLoc();
+  clang::SourceLocation StartLoc = AS->getLHS()->getExprLoc();
+  clang::Stmt *UpdatedStmt = nullptr;
+
+  if (!RSExportPrimitiveType::IsRSObjectType(QT.getTypePtr())) {
+    // By definition, this is a struct assignment if we get here
+    UpdatedStmt =
+        CreateStructRSSetObject(C, AS->getLHS(), AS->getRHS(), StartLoc, Loc);
+  } else {
+    UpdatedStmt =
+        CreateSingleRSSetObject(C, AS->getLHS(), AS->getRHS(), StartLoc, Loc);
+  }
+
+  RSASTReplace R(C);
+  R.ReplaceStmt(mCS, AS, UpdatedStmt);
+}
+
+void RSObjectRefCount::Scope::AppendRSObjectInit(
+    clang::VarDecl *VD,
+    clang::DeclStmt *DS,
+    DataType DT,
+    clang::Expr *InitExpr) {
+  slangAssert(VD);
+
+  if (!InitExpr) {
+    return;
+  }
+
+  clang::ASTContext &C = RSObjectRefCount::GetRSSetObjectFD(
+      DataTypeRSAllocation)->getASTContext();
+  clang::SourceLocation Loc = RSObjectRefCount::GetRSSetObjectFD(
+      DataTypeRSAllocation)->getLocation();
+  clang::SourceLocation StartLoc = RSObjectRefCount::GetRSSetObjectFD(
+      DataTypeRSAllocation)->getInnerLocStart();
+
+  if (DT == DataTypeIsStruct) {
+    const clang::Type *T = RSExportType::GetTypeOfDecl(VD);
+    clang::DeclRefExpr *RefRSVar =
+        clang::DeclRefExpr::Create(C,
+                                   clang::NestedNameSpecifierLoc(),
+                                   clang::SourceLocation(),
+                                   VD,
+                                   false,
+                                   Loc,
+                                   T->getCanonicalTypeInternal(),
+                                   clang::VK_RValue,
+                                   nullptr);
+
+    clang::Stmt *RSSetObjectOps =
+        CreateStructRSSetObject(C, RefRSVar, InitExpr, StartLoc, Loc);
+
+    std::list<clang::Stmt*> StmtList;
+    StmtList.push_back(RSSetObjectOps);
+    AppendAfterStmt(C, mCS, DS, StmtList);
+    return;
+  }
+
+  clang::FunctionDecl *SetObjectFD = RSObjectRefCount::GetRSSetObjectFD(DT);
+  slangAssert((SetObjectFD != nullptr) &&
+              "rsSetObject doesn't cover all RS object types");
+
+  clang::QualType SetObjectFDType = SetObjectFD->getType();
+  clang::QualType SetObjectFDArgType[2];
+  SetObjectFDArgType[0] = SetObjectFD->getParamDecl(0)->getOriginalType();
+  SetObjectFDArgType[1] = SetObjectFD->getParamDecl(1)->getOriginalType();
+
+  clang::Expr *RefRSSetObjectFD =
+      clang::DeclRefExpr::Create(C,
+                                 clang::NestedNameSpecifierLoc(),
+                                 clang::SourceLocation(),
+                                 SetObjectFD,
+                                 false,
+                                 Loc,
+                                 SetObjectFDType,
+                                 clang::VK_RValue,
+                                 nullptr);
+
+  clang::Expr *RSSetObjectFP =
+      clang::ImplicitCastExpr::Create(C,
+                                      C.getPointerType(SetObjectFDType),
+                                      clang::CK_FunctionToPointerDecay,
+                                      RefRSSetObjectFD,
+                                      nullptr,
+                                      clang::VK_RValue);
+
+  const clang::Type *T = RSExportType::GetTypeOfDecl(VD);
+  clang::DeclRefExpr *RefRSVar =
+      clang::DeclRefExpr::Create(C,
+                                 clang::NestedNameSpecifierLoc(),
+                                 clang::SourceLocation(),
+                                 VD,
+                                 false,
+                                 Loc,
+                                 T->getCanonicalTypeInternal(),
+                                 clang::VK_RValue,
+                                 nullptr);
+
+  llvm::SmallVector<clang::Expr*, 2> ArgList;
+  ArgList.push_back(new(C) clang::UnaryOperator(RefRSVar,
+                                                clang::UO_AddrOf,
+                                                SetObjectFDArgType[0],
+                                                clang::VK_RValue,
+                                                clang::OK_Ordinary,
+                                                Loc));
+  ArgList.push_back(InitExpr);
+
+  clang::CallExpr *RSSetObjectCall =
+      new(C) clang::CallExpr(C,
+                             RSSetObjectFP,
+                             ArgList,
+                             SetObjectFD->getCallResultType(),
+                             clang::VK_RValue,
+                             Loc);
+
+  std::list<clang::Stmt*> StmtList;
+  StmtList.push_back(RSSetObjectCall);
+  AppendAfterStmt(C, mCS, DS, StmtList);
+}
+
+void RSObjectRefCount::Scope::InsertLocalVarDestructors() {
+  if (mRSO.empty()) {
+    return;
+  }
+
+  clang::DeclContext* DC = mRSO.front()->getDeclContext();
+  clang::ASTContext& C = DC->getParentASTContext();
+  clang::SourceManager& SM = C.getSourceManager();
+
+  const auto& OccursBefore = [&SM] (clang::SourceLocation L1, clang::SourceLocation L2)->bool {
+    return SM.isBeforeInTranslationUnit(L1, L2);
+  };
+  typedef std::map<clang::SourceLocation, clang::Stmt*, decltype(OccursBefore)> DMap;
+
+  DMap dtors(OccursBefore);
+
+  // Create rsClearObject calls. Note the DMap entries are sorted by the SourceLocation.
+  for (clang::VarDecl* VD : mRSO) {
+    clang::SourceLocation Loc = VD->getSourceRange().getBegin();
+    clang::Stmt* RSClearObjectCall = ClearRSObject(VD, DC);
+    dtors.insert(std::make_pair(Loc, RSClearObjectCall));
+  }
+
+  DestructorVisitor Visitor;
+  Visitor.Visit(mCS);
+
+  // Replace each exiting statement with a block that contains the original statement
+  // and added rsClearObject() calls before it.
+  for (clang::Stmt* S : Visitor.getExitingStmts()) {
+
+    const clang::SourceLocation currentLoc = S->getLocStart();
+
+    DMap::iterator firstDtorIter = dtors.begin();
+    DMap::iterator currentDtorIter = firstDtorIter;
+    DMap::iterator lastDtorIter = dtors.end();
+
+    while (currentDtorIter != lastDtorIter &&
+           OccursBefore(currentDtorIter->first, currentLoc)) {
+      currentDtorIter++;
+    }
+
+    if (currentDtorIter == firstDtorIter) {
+      continue;
+    }
+
+    std::list<clang::Stmt*> Stmts;
+
+    // Insert rsClearObject() calls for all rsObjects declared before the current statement
+    for(DMap::iterator it = firstDtorIter; it != currentDtorIter; it++) {
+      Stmts.push_back(it->second);
+    }
+    Stmts.push_back(S);
+
+    RSASTReplace R(C);
+    clang::CompoundStmt* CS = BuildCompoundStmt(C, Stmts, S->getLocEnd());
+    R.ReplaceStmt(mCS, S, CS);
+  }
+
+  std::list<clang::Stmt*> Stmts;
+  for(auto LocCallPair : dtors) {
+    Stmts.push_back(LocCallPair.second);
+  }
+  AppendAfterStmt(C, mCS, nullptr, Stmts);
+}
+
+clang::Stmt *RSObjectRefCount::Scope::ClearRSObject(
+    clang::VarDecl *VD,
+    clang::DeclContext *DC) {
+  slangAssert(VD);
+  clang::ASTContext &C = VD->getASTContext();
+  clang::SourceLocation Loc = VD->getLocation();
+  clang::SourceLocation StartLoc = VD->getInnerLocStart();
+  const clang::Type *T = RSExportType::GetTypeOfDecl(VD);
+
+  // Reference expr to target RS object variable
+  clang::DeclRefExpr *RefRSVar =
+      clang::DeclRefExpr::Create(C,
+                                 clang::NestedNameSpecifierLoc(),
+                                 clang::SourceLocation(),
+                                 VD,
+                                 false,
+                                 Loc,
+                                 T->getCanonicalTypeInternal(),
+                                 clang::VK_RValue,
+                                 nullptr);
+
+  if (T->isArrayType()) {
+    return ClearArrayRSObject(C, DC, RefRSVar, StartLoc, Loc);
+  }
+
+  DataType DT = RSExportPrimitiveType::GetRSSpecificType(T);
+
+  if (DT == DataTypeUnknown ||
+      DT == DataTypeIsStruct) {
+    return ClearStructRSObject(C, DC, RefRSVar, StartLoc, Loc);
+  }
+
+  slangAssert((RSExportPrimitiveType::IsRSObjectType(DT)) &&
+              "Should be RS object");
+
+  return ClearSingleRSObject(C, RefRSVar, Loc);
+}
+
+bool RSObjectRefCount::InitializeRSObject(clang::VarDecl *VD,
+                                          DataType *DT,
+                                          clang::Expr **InitExpr) {
+  slangAssert(VD && DT && InitExpr);
+  const clang::Type *T = RSExportType::GetTypeOfDecl(VD);
+
+  // Loop through array types to get to base type
+  while (T && T->isArrayType()) {
+    T = T->getArrayElementTypeNoTypeQual();
+  }
+
+  bool DataTypeIsStructWithRSObject = false;
+  *DT = RSExportPrimitiveType::GetRSSpecificType(T);
+
+  if (*DT == DataTypeUnknown) {
+    if (RSExportPrimitiveType::IsStructureTypeWithRSObject(T)) {
+      *DT = DataTypeIsStruct;
+      DataTypeIsStructWithRSObject = true;
+    } else {
+      return false;
+    }
+  }
+
+  bool DataTypeIsRSObject = false;
+  if (DataTypeIsStructWithRSObject) {
+    DataTypeIsRSObject = true;
+  } else {
+    DataTypeIsRSObject = RSExportPrimitiveType::IsRSObjectType(*DT);
+  }
+  *InitExpr = VD->getInit();
+
+  if (!DataTypeIsRSObject && *InitExpr) {
+    // If we already have an initializer for a matrix type, we are done.
+    return DataTypeIsRSObject;
+  }
+
+  clang::Expr *ZeroInitializer =
+      CreateEmptyInitListExpr(VD->getASTContext(), VD->getLocation());
+
+  if (ZeroInitializer) {
+    ZeroInitializer->setType(T->getCanonicalTypeInternal());
+    VD->setInit(ZeroInitializer);
+  }
+
+  return DataTypeIsRSObject;
+}
+
+clang::Expr *RSObjectRefCount::CreateEmptyInitListExpr(
+    clang::ASTContext &C,
+    const clang::SourceLocation &Loc) {
+
+  // We can cheaply construct a zero initializer by just creating an empty
+  // initializer list. Clang supports this extension to C(99), and will create
+  // any necessary constructs to zero out the entire variable.
+  llvm::SmallVector<clang::Expr*, 1> EmptyInitList;
+  return new(C) clang::InitListExpr(C, Loc, EmptyInitList, Loc);
+}
+
+clang::CompoundStmt* RSObjectRefCount::CreateRetStmtWithTempVar(
+    clang::ASTContext& C,
+    clang::DeclContext* DC,
+    clang::ReturnStmt* RS,
+    const unsigned id) {
+  std::list<clang::Stmt*> NewStmts;
+  // Since we insert rsClearObj() calls before the return statement, we need
+  // to make sure none of the cleared RS objects are referenced in the
+  // return statement.
+  // For that, we create a new local variable named .rs.retval, assign the
+  // original return expression to it, make all necessary rsClearObj()
+  // calls, then return .rs.retval. Note rsClearObj() is not called on
+  // .rs.retval.
+
+  clang::SourceLocation Loc = RS->getLocStart();
+  std::stringstream ss;
+  ss << ".rs.retval" << id;
+  llvm::StringRef VarName(ss.str());
+
+  clang::Expr* RetVal = RS->getRetValue();
+  const clang::QualType RetTy = RetVal->getType();
+  clang::VarDecl* RSRetValDecl = clang::VarDecl::Create(
+      C,                                     // AST context
+      DC,                                    // Decl context
+      Loc,                                   // Start location
+      Loc,                                   // Id location
+      &C.Idents.get(VarName),                // Id
+      RetTy,                                 // Type
+      C.getTrivialTypeSourceInfo(RetTy),     // Type info
+      clang::SC_None                         // Storage class
+  );
+  const clang::Type *T = RetTy.getTypePtr();
+  clang::Expr *ZeroInitializer =
+      RSObjectRefCount::CreateEmptyInitListExpr(C, Loc);
+  ZeroInitializer->setType(T->getCanonicalTypeInternal());
+  RSRetValDecl->setInit(ZeroInitializer);
+  RSRetValDecl->markUsed(C);
+  clang::Decl* Decls[] = { RSRetValDecl };
+  const clang::DeclGroupRef DGR = clang::DeclGroupRef::Create(
+      C, Decls, sizeof(Decls) / sizeof(*Decls));
+  clang::DeclStmt* DS = new (C) clang::DeclStmt(DGR, Loc, Loc);
+  NewStmts.push_back(DS);
+
+  clang::DeclRefExpr* DRE = clang::DeclRefExpr::Create(
+      C,
+      clang::NestedNameSpecifierLoc(),       // QualifierLoc
+      Loc,                                   // TemplateKWLoc
+      RSRetValDecl,
+      false,                                 // RefersToEnclosingVariableOrCapture
+      Loc,                                   // NameLoc
+      RetTy,
+      clang::VK_LValue
+  );
+  clang::Stmt* SetRetTempVar = CreateSingleRSSetObject(C, DRE, RetVal, Loc, Loc);
+  NewStmts.push_back(SetRetTempVar);
+
+  // Creates a new return statement
+  clang::ReturnStmt* NewRet = new (C) clang::ReturnStmt(RS->getReturnLoc());
+  clang::Expr* CastExpr = clang::ImplicitCastExpr::Create(
+      C,
+      RetTy,
+      clang::CK_LValueToRValue,
+      DRE,
+      nullptr,
+      clang::VK_RValue
+  );
+  NewRet->setRetValue(CastExpr);
+  NewStmts.push_back(NewRet);
+
+  return BuildCompoundStmt(C, NewStmts, Loc);
+}
+
+void RSObjectRefCount::VisitDeclStmt(clang::DeclStmt *DS) {
+  VisitStmt(DS);
+  getCurrentScope()->setCurrentStmt(DS);
+  for (clang::DeclStmt::decl_iterator I = DS->decl_begin(), E = DS->decl_end();
+       I != E;
+       I++) {
+    clang::Decl *D = *I;
+    if (D->getKind() == clang::Decl::Var) {
+      clang::VarDecl *VD = static_cast<clang::VarDecl*>(D);
+      DataType DT = DataTypeUnknown;
+      clang::Expr *InitExpr = nullptr;
+      if (InitializeRSObject(VD, &DT, &InitExpr)) {
+        // We need to zero-init all RS object types (including matrices), ...
+        getCurrentScope()->AppendRSObjectInit(VD, DS, DT, InitExpr);
+        // ... but, only add to the list of RS objects if we have some
+        // non-matrix RS object fields.
+        if (CountRSObjectTypes(VD->getType().getTypePtr())) {
+          getCurrentScope()->addRSObject(VD);
+        }
+      }
+    }
+  }
+}
+
+void RSObjectRefCount::VisitCallExpr(clang::CallExpr* CE) {
+  clang::QualType RetTy;
+  const clang::FunctionDecl* FD = CE->getDirectCallee();
+
+  if (FD) {
+    // Direct calls
+
+    RetTy = FD->getReturnType();
+  } else {
+    // Indirect calls through function pointers
+
+    const clang::Expr* Callee = CE->getCallee();
+    const clang::Type* CalleeType = Callee->getType().getTypePtr();
+    const clang::PointerType* PtrType = CalleeType->getAs<clang::PointerType>();
+
+    if (!PtrType) {
+      return;
+    }
+
+    const clang::Type* PointeeType = PtrType->getPointeeType().getTypePtr();
+    const clang::FunctionType* FuncType = PointeeType->getAs<clang::FunctionType>();
+
+    if (!FuncType) {
+      return;
+    }
+
+    RetTy = FuncType->getReturnType();
+  }
+
+  if (CountRSObjectTypes(RetTy.getTypePtr())==0) {
+    return;
+  }
+
+  clang::SourceLocation Loc = CE->getSourceRange().getBegin();
+  std::stringstream ss;
+  ss << ".rs.tmp" << getNextID();
+  llvm::StringRef VarName(ss.str());
+
+  clang::VarDecl* TempVarDecl = clang::VarDecl::Create(
+      mCtx,                                  // AST context
+      GetDeclContext(),                      // Decl context
+      Loc,                                   // Start location
+      Loc,                                   // Id location
+      &mCtx.Idents.get(VarName),             // Id
+      RetTy,                                 // Type
+      mCtx.getTrivialTypeSourceInfo(RetTy),  // Type info
+      clang::SC_None                         // Storage class
+  );
+  TempVarDecl->setInit(CE);
+  TempVarDecl->markUsed(mCtx);
+  clang::Decl* Decls[] = { TempVarDecl };
+  const clang::DeclGroupRef DGR = clang::DeclGroupRef::Create(
+      mCtx, Decls, sizeof(Decls) / sizeof(*Decls));
+  clang::DeclStmt* DS = new (mCtx) clang::DeclStmt(DGR, Loc, Loc);
+
+  getCurrentScope()->InsertStmt(mCtx, DS);
+
+  clang::DeclRefExpr* DRE = clang::DeclRefExpr::Create(
+      mCtx,                                  // AST context
+      clang::NestedNameSpecifierLoc(),       // QualifierLoc
+      Loc,                                   // TemplateKWLoc
+      TempVarDecl,
+      false,                                 // RefersToEnclosingVariableOrCapture
+      Loc,                                   // NameLoc
+      RetTy,
+      clang::VK_LValue
+  );
+  clang::Expr* CastExpr = clang::ImplicitCastExpr::Create(
+      mCtx,
+      RetTy,
+      clang::CK_LValueToRValue,
+      DRE,
+      nullptr,
+      clang::VK_RValue
+  );
+
+  getCurrentScope()->ReplaceExpr(mCtx, CE, CastExpr);
+
+  // Register TempVarDecl for destruction call (rsClearObj).
+  getCurrentScope()->addRSObject(TempVarDecl);
+}
+
+void RSObjectRefCount::VisitCompoundStmt(clang::CompoundStmt *CS) {
+  if (!emptyScope()) {
+    getCurrentScope()->setCurrentStmt(CS);
+  }
+
+  if (!CS->body_empty()) {
+    // Push a new scope
+    Scope *S = new Scope(CS);
+    mScopeStack.push_back(S);
+
+    VisitStmt(CS);
+
+    // Destroy the scope
+    slangAssert((getCurrentScope() == S) && "Corrupted scope stack!");
+    S->InsertLocalVarDestructors();
+    mScopeStack.pop_back();
+    delete S;
+  }
+}
+
+void RSObjectRefCount::VisitBinAssign(clang::BinaryOperator *AS) {
+  getCurrentScope()->setCurrentStmt(AS);
+  clang::QualType QT = AS->getType();
+
+  if (CountRSObjectTypes(QT.getTypePtr())) {
+    getCurrentScope()->ReplaceRSObjectAssignment(AS);
+  }
+}
+
+void RSObjectRefCount::VisitReturnStmt(clang::ReturnStmt *RS) {
+  getCurrentScope()->setCurrentStmt(RS);
+
+  // If there is no local rsObject declared so far, no need to transform the
+  // return statement.
+
+  bool RSObjDeclared = false;
+
+  for (const Scope* S : mScopeStack) {
+    if (S->hasRSObject()) {
+      RSObjDeclared = true;
+      break;
+    }
+  }
+
+  if (!RSObjDeclared) {
+    return;
+  }
+
+  // If the return statement does not return anything, or if it does not return
+  // a rsObject, no need to transform it.
+
+  clang::Expr* RetVal = RS->getRetValue();
+  if (!RetVal || CountRSObjectTypes(RetVal->getType().getTypePtr()) == 0) {
+    return;
+  }
+
+  // Transform the return statement so that it does not potentially return or
+  // reference a rsObject that has been cleared.
+
+  clang::CompoundStmt* NewRS;
+  NewRS = CreateRetStmtWithTempVar(mCtx, GetDeclContext(), RS, getNextID());
+
+  getCurrentScope()->ReplaceStmt(mCtx, NewRS);
+}
+
+void RSObjectRefCount::VisitStmt(clang::Stmt *S) {
+  getCurrentScope()->setCurrentStmt(S);
+  for (clang::Stmt::child_iterator I = S->child_begin(), E = S->child_end();
+       I != E;
+       I++) {
+    if (clang::Stmt *Child = *I) {
+      Visit(Child);
+    }
+  }
+}
+
+// This function walks the list of global variables and (potentially) creates
+// a single global static destructor function that properly decrements
+// reference counts on the contained RS object types.
+clang::FunctionDecl *RSObjectRefCount::CreateStaticGlobalDtor() {
+  Init();
+
+  clang::DeclContext *DC = mCtx.getTranslationUnitDecl();
+  clang::SourceLocation loc;
+
+  llvm::StringRef SR(".rs.dtor");
+  clang::IdentifierInfo &II = mCtx.Idents.get(SR);
+  clang::DeclarationName N(&II);
+  clang::FunctionProtoType::ExtProtoInfo EPI;
+  clang::QualType T = mCtx.getFunctionType(mCtx.VoidTy,
+      llvm::ArrayRef<clang::QualType>(), EPI);
+  clang::FunctionDecl *FD = nullptr;
+
+  // Generate rsClearObject() call chains for every global variable
+  // (whether static or extern).
+  std::list<clang::Stmt *> StmtList;
+  for (clang::DeclContext::decl_iterator I = DC->decls_begin(),
+          E = DC->decls_end(); I != E; I++) {
+    clang::VarDecl *VD = llvm::dyn_cast<clang::VarDecl>(*I);
+    if (VD) {
+      if (CountRSObjectTypes(VD->getType().getTypePtr())) {
+        if (!FD) {
+          // Only create FD if we are going to use it.
+          FD = clang::FunctionDecl::Create(mCtx, DC, loc, loc, N, T, nullptr,
+                                           clang::SC_None);
+        }
+        // Mark VD as used.  It might be unused, except for the destructor.
+        // 'markUsed' has side-effects that are caused only if VD is not already
+        // used.  Hence no need for an extra check here.
+        VD->markUsed(mCtx);
+        // Make sure to create any helpers within the function's DeclContext,
+        // not the one associated with the global translation unit.
+        clang::Stmt *RSClearObjectCall = Scope::ClearRSObject(VD, FD);
+        StmtList.push_back(RSClearObjectCall);
+      }
+    }
+  }
+
+  // Nothing needs to be destroyed, so don't emit a dtor.
+  if (StmtList.empty()) {
+    return nullptr;
+  }
+
+  clang::CompoundStmt *CS = BuildCompoundStmt(mCtx, StmtList, loc);
+
+  FD->setBody(CS);
+
+  return FD;
+}
+
+bool HasRSObjectType(const clang::Type *T) {
+  return CountRSObjectTypes(T) != 0;
+}
+
+}  // namespace slang
diff --git a/slang/slang_rs_object_ref_count.h b/slang/slang_rs_object_ref_count.h
new file mode 100644
index 0000000..5de60d1
--- /dev/null
+++ b/slang/slang_rs_object_ref_count.h
@@ -0,0 +1,213 @@
+/*
+ * Copyright 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_OBJECT_REF_COUNT_H_  // NOLINT
+#define _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_OBJECT_REF_COUNT_H_
+
+#include <list>
+#include <stack>
+
+#include "clang/AST/StmtVisitor.h"
+
+#include "slang_assert.h"
+#include "slang_rs_export_type.h"
+
+namespace clang {
+  class Expr;
+  class Stmt;
+}
+
+namespace slang {
+
+// Recursive check
+bool HasRSObjectType(const clang::Type *T);
+
+// This class provides the overall reference counting mechanism for handling
+// local variables of RS object types (rs_font, rs_allocation, ...). This
+// class ensures that appropriate functions (rsSetObject, rsClearObject) are
+// called at proper points in the object's lifetime.
+// 1) Each local object of appropriate type must be zero-initialized to
+// prevent corruption during subsequent rsSetObject()/rsClearObject() calls.
+// 2) Assignments using these types must also be converted into the
+// appropriate (possibly a series of) rsSetObject() calls.
+// 3) Finally, rsClearObject() must be called for each local object when it goes
+// out of scope.
+class RSObjectRefCount : public clang::StmtVisitor<RSObjectRefCount> {
+ private:
+  class Scope {
+   private:
+    clang::CompoundStmt *mCS;         // Associated compound statement ({ ... })
+    clang::Stmt *mCurrent;            // The statement currently being analyzed
+    std::list<clang::VarDecl*> mRSO;  // Declared RS objects in this scope (but
+                                      // not any scopes nested)
+
+   public:
+    explicit Scope(clang::CompoundStmt *CS) : mCS(CS) {
+    }
+
+    bool hasRSObject() const { return !mRSO.empty(); }
+
+    inline void addRSObject(clang::VarDecl* VD) {
+      mRSO.push_back(VD);
+    }
+
+    void ReplaceRSObjectAssignment(clang::BinaryOperator *AS);
+
+    void AppendRSObjectInit(clang::VarDecl *VD,
+                            clang::DeclStmt *DS,
+                            DataType DT,
+                            clang::Expr *InitExpr);
+
+    // Inserts rsClearObject() calls at the end and at all exiting points of the
+    // current scope. At each statement that exits the current scope -- e.g.,
+    // a return, break, or continue statement in the current or a nested scope
+    // -- rsClearObject() calls are inserted for local variables defined in the
+    // current scope before that point.
+    // Note goto statements are not handled. (See the DestructorVisitor class in
+    // the .cpp file.)
+    // Also note this function is called for every nested scope. As a result, for a
+    // return statement, each rsObject declared in all its (nested) enclosing
+    // scopes would have a rsClearObject() call properly inserted before
+    // the return statement.
+    void InsertLocalVarDestructors();
+
+    // Sets the current statement being analyzed
+    void setCurrentStmt(clang::Stmt *S) { mCurrent = S; }
+
+    // Inserts a statement before the current statement
+    void InsertStmt(const clang::ASTContext &C, clang::Stmt *NewStmt);
+
+    // Replaces the current statement with NewStmt;
+    void ReplaceStmt(const clang::ASTContext &C, clang::Stmt *NewStmt);
+
+    // Replaces OldExpr with NewExpr in the current statement
+    void ReplaceExpr(const clang::ASTContext& C, clang::Expr* OldExpr,
+                     clang::Expr* NewExpr);
+
+    static clang::Stmt *ClearRSObject(clang::VarDecl *VD,
+                                      clang::DeclContext *DC);
+  };
+
+  clang::ASTContext &mCtx;
+  std::deque<Scope*> mScopeStack;  // A deque used as a stack to store scopes, but also
+                                   // accessed through its iterator in read-only mode.
+  clang::DeclContext* mCurrentDC;
+  bool RSInitFD;
+  unsigned mTempID;  // A unique id that can be used to distinguish temporary variables
+
+  // RSSetObjectFD and RSClearObjectFD holds FunctionDecl of rsSetObject()
+  // and rsClearObject() in the current ASTContext.
+  static clang::FunctionDecl *RSSetObjectFD[];
+  static clang::FunctionDecl *RSClearObjectFD[];
+
+  inline bool emptyScope() const { return mScopeStack.empty(); }
+
+  inline Scope *getCurrentScope() {
+    return mScopeStack.back();
+  }
+
+  // Returns the next available unique id for temporary variables
+  unsigned getNextID() { return mTempID++; }
+
+  // Initialize RSSetObjectFD and RSClearObjectFD.
+  static void GetRSRefCountingFunctions(clang::ASTContext &C);
+
+  // Return false if the type of variable declared in VD does not contain
+  // an RS object type.
+  static bool InitializeRSObject(clang::VarDecl *VD,
+                                 DataType *DT,
+                                 clang::Expr **InitExpr);
+
+  // Return an empty list initializer expression at the appropriate location.
+  // This construct can then be used to cheaply construct a zero-initializer
+  // for any RenderScript objects (like rs_allocation) or rs_matrix* types
+  // (possibly even embedded within other types). These types are expected to
+  // be zero-initialized always, and so we can use this helper to ensure that
+  // they at least have an empty initializer.
+  static clang::Expr *CreateEmptyInitListExpr(
+      clang::ASTContext &C,
+      const clang::SourceLocation &Loc);
+
+  // Given a return statement RS that returns an rsObject, creates a temporary
+  // variable, and sets it to the original return expression using rsSetObject().
+  // Creates a new return statement that returns the temporary variable.
+  // Returns a new compound statement that contains the new variable declaration,
+  // the rsSetOjbect() call, and the new return statement.
+  static clang::CompoundStmt* CreateRetStmtWithTempVar(
+      clang::ASTContext& C,
+      clang::DeclContext* DC,
+      clang::ReturnStmt* RS,
+      const unsigned id);
+
+ public:
+  explicit RSObjectRefCount(clang::ASTContext &C)
+      : mCtx(C), RSInitFD(false), mTempID(0) {
+  }
+
+  void Init() {
+    if (!RSInitFD) {
+      GetRSRefCountingFunctions(mCtx);
+      RSInitFD = true;
+    }
+  }
+
+  static clang::FunctionDecl *GetRSSetObjectFD(DataType DT) {
+    slangAssert(RSExportPrimitiveType::IsRSObjectType(DT));
+    if (DT >= 0 && DT < DataTypeMax) {
+      return RSSetObjectFD[DT];
+    } else {
+      slangAssert(false && "incorrect type");
+      return nullptr;
+    }
+  }
+
+  static clang::FunctionDecl *GetRSSetObjectFD(const clang::Type *T) {
+    return GetRSSetObjectFD(RSExportPrimitiveType::GetRSSpecificType(T));
+  }
+
+  static clang::FunctionDecl *GetRSClearObjectFD(DataType DT) {
+    slangAssert(RSExportPrimitiveType::IsRSObjectType(DT));
+    if (DT >= 0 && DT < DataTypeMax) {
+      return RSClearObjectFD[DT];
+    } else {
+      slangAssert(false && "incorrect type");
+      return nullptr;
+    }
+  }
+
+  static clang::FunctionDecl *GetRSClearObjectFD(const clang::Type *T) {
+    return GetRSClearObjectFD(RSExportPrimitiveType::GetRSSpecificType(T));
+  }
+
+  void SetDeclContext(clang::DeclContext* DC) { mCurrentDC = DC; }
+  clang::DeclContext* GetDeclContext() const { return mCurrentDC; }
+
+  void VisitStmt(clang::Stmt *S);
+  void VisitCallExpr(clang::CallExpr *CE);
+  void VisitDeclStmt(clang::DeclStmt *DS);
+  void VisitCompoundStmt(clang::CompoundStmt *CS);
+  void VisitBinAssign(clang::BinaryOperator *AS);
+  void VisitReturnStmt(clang::ReturnStmt *RS);
+  // We believe that RS objects are never involved in CompoundAssignOperator.
+  // I.e., rs_allocation foo; foo += bar;
+
+  // Emit a global destructor to clean up RS objects.
+  clang::FunctionDecl *CreateStaticGlobalDtor();
+};
+
+}  // namespace slang
+
+#endif  // _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_OBJECT_REF_COUNT_H_  NOLINT
diff --git a/slang/slang_rs_pragma_handler.cpp b/slang/slang_rs_pragma_handler.cpp
new file mode 100644
index 0000000..de9ba92
--- /dev/null
+++ b/slang/slang_rs_pragma_handler.cpp
@@ -0,0 +1,592 @@
+/*
+ * Copyright 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "slang_rs_pragma_handler.h"
+
+#include <map>
+#include <sstream>
+#include <string>
+
+#include "clang/AST/ASTContext.h"
+
+#include "clang/Basic/TokenKinds.h"
+
+#include "clang/Lex/LiteralSupport.h"
+#include "clang/Lex/Preprocessor.h"
+#include "clang/Lex/Token.h"
+
+#include "slang_assert.h"
+#include "slang_rs_context.h"
+#include "slang_rs_export_reduce.h"
+#include "slang_version.h"
+
+namespace slang {
+
+namespace {  // Anonymous namespace
+
+class RSExportTypePragmaHandler : public RSPragmaHandler {
+ private:
+  void handleItem(const std::string &Item) {
+    mContext->addPragma(this->getName(), Item);
+    mContext->addExportType(Item);
+  }
+
+ public:
+  RSExportTypePragmaHandler(llvm::StringRef Name, RSContext *Context)
+      : RSPragmaHandler(Name, Context) { }
+
+  void HandlePragma(clang::Preprocessor &PP,
+                    clang::PragmaIntroducerKind Introducer,
+                    clang::Token &FirstToken) {
+    this->handleItemListPragma(PP, FirstToken);
+  }
+};
+
+class RSJavaPackageNamePragmaHandler : public RSPragmaHandler {
+ public:
+  RSJavaPackageNamePragmaHandler(llvm::StringRef Name, RSContext *Context)
+      : RSPragmaHandler(Name, Context) { }
+
+  void HandlePragma(clang::Preprocessor &PP,
+                    clang::PragmaIntroducerKind Introducer,
+                    clang::Token &FirstToken) {
+    // FIXME: Need to validate the extracted package name from pragma.
+    // Currently "all chars" specified in pragma will be treated as package
+    // name.
+    //
+    // 18.1 The Grammar of the Java Programming Language
+    // (http://java.sun.com/docs/books/jls/third_edition/html/syntax.html#18.1)
+    //
+    // CompilationUnit:
+    //     [[Annotations] package QualifiedIdentifier   ;  ] {ImportDeclaration}
+    //     {TypeDeclaration}
+    //
+    // QualifiedIdentifier:
+    //     Identifier { . Identifier }
+    //
+    // Identifier:
+    //     IDENTIFIER
+    //
+    // 3.8 Identifiers
+    // (http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.8)
+    //
+    //
+
+    clang::Token &PragmaToken = FirstToken;
+    std::string PackageName;
+
+    // Skip first token, "java_package_name"
+    PP.LexUnexpandedToken(PragmaToken);
+
+    // Now, the current token must be clang::tok::lpara
+    if (PragmaToken.isNot(clang::tok::l_paren))
+      return;
+
+    while (PragmaToken.isNot(clang::tok::eod)) {
+      // Lex package name
+      PP.LexUnexpandedToken(PragmaToken);
+
+      bool Invalid;
+      std::string Spelling = PP.getSpelling(PragmaToken, &Invalid);
+      if (!Invalid)
+        PackageName.append(Spelling);
+
+      // Pre-mature end (syntax error will be triggered by preprocessor later)
+      if (PragmaToken.is(clang::tok::eod) || PragmaToken.is(clang::tok::eof)) {
+        break;
+      } else {
+        // Next token is ')' (end of pragma)
+        const clang::Token &NextTok = PP.LookAhead(0);
+        if (NextTok.is(clang::tok::r_paren)) {
+          mContext->addPragma(this->getName(), PackageName);
+          mContext->setReflectJavaPackageName(PackageName);
+          // Lex until meets clang::tok::eod
+          do {
+            PP.LexUnexpandedToken(PragmaToken);
+          } while (PragmaToken.isNot(clang::tok::eod));
+          break;
+        }
+      }
+    }
+  }
+};
+
+class RSReducePragmaHandler : public RSPragmaHandler {
+ public:
+  RSReducePragmaHandler(llvm::StringRef Name, RSContext *Context)
+      : RSPragmaHandler(Name, Context) { }
+
+  void HandlePragma(clang::Preprocessor &PP,
+                    clang::PragmaIntroducerKind Introducer,
+                    clang::Token &FirstToken) override {
+    // #pragma rs reduce(name)
+    //   initializer(initializename)
+    //   accumulator(accumulatename)
+    //   combiner(combinename)
+    //   outconverter(outconvertname)
+    //   halter(haltname)
+
+    const clang::SourceLocation PragmaLocation = FirstToken.getLocation();
+
+    clang::Token &PragmaToken = FirstToken;
+
+    // Grab "reduce(name)" ("reduce" is already known to be the first
+    // token) and all the "keyword(value)" contributions
+    KeywordValueMapType KeywordValueMap({std::make_pair(RSExportReduce::KeyReduce, ""),
+                                         std::make_pair(RSExportReduce::KeyInitializer, ""),
+                                         std::make_pair(RSExportReduce::KeyAccumulator, ""),
+                                         std::make_pair(RSExportReduce::KeyCombiner, ""),
+                                         std::make_pair(RSExportReduce::KeyOutConverter, "")});
+    if (mContext->getTargetAPI() >= SLANG_FEATURE_GENERAL_REDUCTION_HALTER_API) {
+      // Halter functionality has not been released, nor has its
+      // specification been finalized with partners.  We do not have a
+      // specification that extends through the full RenderScript
+      // software stack, either.
+      KeywordValueMap.insert(std::make_pair(RSExportReduce::KeyHalter, ""));
+    }
+    while (PragmaToken.is(clang::tok::identifier)) {
+      if (!ProcessKeywordAndValue(PP, PragmaToken, KeywordValueMap))
+        return;
+    }
+
+    // Make sure there's no end-of-line garbage
+    if (PragmaToken.isNot(clang::tok::eod)) {
+      PP.Diag(PragmaToken.getLocation(),
+              PP.getDiagnostics().getCustomDiagID(
+                clang::DiagnosticsEngine::Error,
+                "did not expect '%0' here for '#pragma rs %1'"))
+          << PP.getSpelling(PragmaToken) << getName();
+      return;
+    }
+
+    // Make sure we have an accumulator
+    if (KeywordValueMap[RSExportReduce::KeyAccumulator].empty()) {
+      PP.Diag(PragmaLocation, PP.getDiagnostics().getCustomDiagID(
+                                clang::DiagnosticsEngine::Error,
+                                "missing '%0' for '#pragma rs %1'"))
+          << RSExportReduce::KeyAccumulator << getName();
+      return;
+    }
+
+    // Make sure the reduction kernel name is unique.  (If we were
+    // worried there might be a VERY large number of pragmas, then we
+    // could do something more efficient than walking a list to search
+    // for duplicates.)
+    for (auto I = mContext->export_reduce_begin(),
+              E = mContext->export_reduce_end();
+         I != E; ++I) {
+      if ((*I)->getNameReduce() == KeywordValueMap[RSExportReduce::KeyReduce]) {
+        PP.Diag(PragmaLocation, PP.getDiagnostics().getCustomDiagID(
+                                  clang::DiagnosticsEngine::Error,
+                                  "reduction kernel '%0' declared multiple "
+                                  "times (first one is at %1)"))
+            << KeywordValueMap[RSExportReduce::KeyReduce]
+            << (*I)->getLocation().printToString(PP.getSourceManager());
+        return;
+      }
+    }
+
+    // Check API version.
+    if (mContext->getTargetAPI() < SLANG_FEATURE_GENERAL_REDUCTION_API) {
+      PP.Diag(PragmaLocation,
+              PP.getDiagnostics().getCustomDiagID(
+                clang::DiagnosticsEngine::Error,
+                "reduction kernels are not supported in SDK levels %0-%1"))
+          << SLANG_MINIMUM_TARGET_API
+          << (SLANG_FEATURE_GENERAL_REDUCTION_API - 1);
+      return;
+    }
+
+    // Handle backward reference from pragma (see Backend::HandleTopLevelDecl for forward reference).
+    MarkUsed(PP, KeywordValueMap[RSExportReduce::KeyInitializer]);
+    MarkUsed(PP, KeywordValueMap[RSExportReduce::KeyAccumulator]);
+    MarkUsed(PP, KeywordValueMap[RSExportReduce::KeyCombiner]);
+    MarkUsed(PP, KeywordValueMap[RSExportReduce::KeyOutConverter]);
+    MarkUsed(PP, KeywordValueMap[RSExportReduce::KeyHalter]);
+
+    mContext->addExportReduce(RSExportReduce::Create(mContext, PragmaLocation,
+                                                     KeywordValueMap[RSExportReduce::KeyReduce],
+                                                     KeywordValueMap[RSExportReduce::KeyInitializer],
+                                                     KeywordValueMap[RSExportReduce::KeyAccumulator],
+                                                     KeywordValueMap[RSExportReduce::KeyCombiner],
+                                                     KeywordValueMap[RSExportReduce::KeyOutConverter],
+                                                     KeywordValueMap[RSExportReduce::KeyHalter]));
+  }
+
+ private:
+  typedef std::map<std::string, std::string> KeywordValueMapType;
+
+  void MarkUsed(clang::Preprocessor &PP, const std::string &FunctionName) {
+    if (FunctionName.empty())
+      return;
+
+    clang::ASTContext &ASTC = mContext->getASTContext();
+    clang::TranslationUnitDecl *TUDecl = ASTC.getTranslationUnitDecl();
+    slangAssert(TUDecl);
+    if (const clang::IdentifierInfo *II = PP.getIdentifierInfo(FunctionName)) {
+      for (auto Decl : TUDecl->lookup(II)) {
+        clang::FunctionDecl *FDecl = Decl->getAsFunction();
+        if (!FDecl || !FDecl->isThisDeclarationADefinition())
+          continue;
+        // Handle backward reference from pragma (see
+        // Backend::HandleTopLevelDecl for forward reference).
+        mContext->markUsedByReducePragma(FDecl, RSContext::CheckNameNo);
+      }
+    }
+  }
+
+  // Return comma-separated list of all keys in the map
+  static std::string ListKeywords(const KeywordValueMapType &KeywordValueMap) {
+    std::string Ret;
+    bool First = true;
+    for (auto const &entry : KeywordValueMap) {
+      if (First)
+        First = false;
+      else
+        Ret += ", ";
+      Ret += "'";
+      Ret += entry.first;
+      Ret += "'";
+    }
+    return Ret;
+  }
+
+  // Parse "keyword(value)" and set KeywordValueMap[keyword] = value.  (Both
+  // "keyword" and "value" are identifiers.)
+  // Does both syntactic validation and the following semantic validation:
+  // - The keyword must be present in the map.
+  // - The map entry for the keyword must not contain a value.
+  bool ProcessKeywordAndValue(clang::Preprocessor &PP,
+                              clang::Token &PragmaToken,
+                              KeywordValueMapType &KeywordValueMap) {
+    // The current token must be an identifier in KeywordValueMap
+    KeywordValueMapType::iterator Entry;
+    if (PragmaToken.isNot(clang::tok::identifier) ||
+        ((Entry = KeywordValueMap.find(
+            PragmaToken.getIdentifierInfo()->getName())) ==
+         KeywordValueMap.end())) {
+      // Note that we should never get here for the "reduce" token
+      // itself, which should already have been recognized.
+      PP.Diag(PragmaToken.getLocation(),
+              PP.getDiagnostics().getCustomDiagID(
+                clang::DiagnosticsEngine::Error,
+                "did not recognize '%0' for '#pragma %1'; expected one of "
+                "the following keywords: %2"))
+          << PragmaToken.getIdentifierInfo()->getName() << getName()
+          << ListKeywords(KeywordValueMap);
+      return false;
+    }
+    // ... and there must be no value for this keyword yet
+    if (!Entry->second.empty()) {
+      PP.Diag(PragmaToken.getLocation(),
+              PP.getDiagnostics().getCustomDiagID(
+                clang::DiagnosticsEngine::Error,
+                "more than one '%0' for '#pragma rs %1'"))
+          << Entry->first << getName();
+      return false;
+    }
+    PP.LexUnexpandedToken(PragmaToken);
+
+    // The current token must be clang::tok::l_paren
+    if (PragmaToken.isNot(clang::tok::l_paren)) {
+      PP.Diag(PragmaToken.getLocation(),
+              PP.getDiagnostics().getCustomDiagID(
+                clang::DiagnosticsEngine::Error,
+                "missing '(' after '%0' for '#pragma rs %1'"))
+          << Entry->first << getName();
+      return false;
+    }
+    PP.LexUnexpandedToken(PragmaToken);
+
+    // The current token must be an identifier (a name)
+    if (PragmaToken.isNot(clang::tok::identifier)) {
+      PP.Diag(PragmaToken.getLocation(),
+              PP.getDiagnostics().getCustomDiagID(
+                clang::DiagnosticsEngine::Error,
+                "missing name after '%0(' for '#pragma rs %1'"))
+          << Entry->first << getName();
+      return false;
+    }
+    const std::string Name = PragmaToken.getIdentifierInfo()->getName();
+    PP.LexUnexpandedToken(PragmaToken);
+
+    // The current token must be clang::tok::r_paren
+    if (PragmaToken.isNot(clang::tok::r_paren)) {
+      PP.Diag(PragmaToken.getLocation(),
+              PP.getDiagnostics().getCustomDiagID(
+                clang::DiagnosticsEngine::Error,
+                "missing ')' after '%0(%1' for '#pragma rs %2'"))
+          << Entry->first << Name << getName();
+      return false;
+    }
+    PP.LexUnexpandedToken(PragmaToken);
+
+    // Success
+    Entry->second = Name;
+    return true;
+  }
+};
+
+class RSReflectLicensePragmaHandler : public RSPragmaHandler {
+ private:
+  void handleItem(const std::string &Item) {
+    mContext->addPragma(this->getName(), Item);
+    mContext->setLicenseNote(Item);
+  }
+
+ public:
+  RSReflectLicensePragmaHandler(llvm::StringRef Name, RSContext *Context)
+      : RSPragmaHandler(Name, Context) { }
+
+  void HandlePragma(clang::Preprocessor &PP,
+                    clang::PragmaIntroducerKind Introducer,
+                    clang::Token &FirstToken) {
+    this->handleOptionalStringLiteralParamPragma(PP, FirstToken);
+  }
+};
+
+class RSVersionPragmaHandler : public RSPragmaHandler {
+ private:
+  void handleInt(clang::Preprocessor &PP,
+                 clang::Token &Tok,
+                 const int v) {
+    if (v != 1) {
+      PP.Diag(Tok,
+              PP.getDiagnostics().getCustomDiagID(
+                  clang::DiagnosticsEngine::Error,
+                  "pragma for version in source file must be set to 1"));
+      mContext->setVersion(1);
+      return;
+    }
+    std::stringstream ss;
+    ss << v;
+    mContext->addPragma(this->getName(), ss.str());
+    mContext->setVersion(v);
+  }
+
+ public:
+  RSVersionPragmaHandler(llvm::StringRef Name, RSContext *Context)
+      : RSPragmaHandler(Name, Context) { }
+
+  void HandlePragma(clang::Preprocessor &PP,
+                    clang::PragmaIntroducerKind Introducer,
+                    clang::Token &FirstToken) {
+    this->handleIntegerParamPragma(PP, FirstToken);
+  }
+};
+
+// Handles the pragmas rs_fp_full, rs_fp_relaxed, and rs_fp_imprecise.
+// There's one instance of this handler for each of the above values.
+// Only getName() differs between the instances.
+class RSPrecisionPragmaHandler : public RSPragmaHandler {
+public:
+  RSPrecisionPragmaHandler(llvm::StringRef Name, RSContext *Context)
+      : RSPragmaHandler(Name, Context) {}
+
+  void HandlePragma(clang::Preprocessor &PP,
+                    clang::PragmaIntroducerKind Introducer,
+                    clang::Token &Token) {
+    std::string Precision = getName();
+    // We are deprecating rs_fp_imprecise.
+    if (Precision == "rs_fp_imprecise") {
+      PP.Diag(Token, PP.getDiagnostics().getCustomDiagID(
+                         clang::DiagnosticsEngine::Warning,
+                         "rs_fp_imprecise is deprecated.  Assuming "
+                         "rs_fp_relaxed instead."));
+      Precision = "rs_fp_relaxed";
+    }
+    // Check if we have already encountered a precision pragma already.
+    std::string PreviousPrecision = mContext->getPrecision();
+    if (!PreviousPrecision.empty()) {
+      // If the previous specified a different value, it's an error.
+      if (PreviousPrecision != Precision) {
+        PP.Diag(Token, PP.getDiagnostics().getCustomDiagID(
+                           clang::DiagnosticsEngine::Error,
+                           "Multiple float precisions specified.  Encountered "
+                           "%0 previously."))
+            << PreviousPrecision;
+      }
+      // Otherwise we ignore redundant entries.
+      return;
+    }
+
+    mContext->addPragma(Precision, "");
+    mContext->setPrecision(Precision);
+  }
+};
+
+}  // namespace
+
+void RSPragmaHandler::handleItemListPragma(clang::Preprocessor &PP,
+                                           clang::Token &FirstToken) {
+  clang::Token &PragmaToken = FirstToken;
+
+  // Skip first token, like "export_var"
+  PP.LexUnexpandedToken(PragmaToken);
+
+  // Now, the current token must be clang::tok::lpara
+  if (PragmaToken.isNot(clang::tok::l_paren))
+    return;
+
+  while (PragmaToken.isNot(clang::tok::eod)) {
+    // Lex variable name
+    PP.LexUnexpandedToken(PragmaToken);
+    if (PragmaToken.is(clang::tok::identifier))
+      this->handleItem(PP.getSpelling(PragmaToken));
+    else
+      break;
+
+    slangAssert(PragmaToken.isNot(clang::tok::eod));
+
+    PP.LexUnexpandedToken(PragmaToken);
+
+    if (PragmaToken.isNot(clang::tok::comma))
+      break;
+  }
+}
+
+void RSPragmaHandler::handleNonParamPragma(clang::Preprocessor &PP,
+                                           clang::Token &FirstToken) {
+  clang::Token &PragmaToken = FirstToken;
+
+  // Skip first token, like "export_var_all"
+  PP.LexUnexpandedToken(PragmaToken);
+
+  // Should be end immediately
+  if (PragmaToken.isNot(clang::tok::eod))
+    if (PragmaToken.isNot(clang::tok::r_paren)) {
+      PP.Diag(PragmaToken,
+              PP.getDiagnostics().getCustomDiagID(
+                  clang::DiagnosticsEngine::Error,
+                  "expected a ')'"));
+      return;
+    }
+}
+
+void RSPragmaHandler::handleOptionalStringLiteralParamPragma(
+    clang::Preprocessor &PP, clang::Token &FirstToken) {
+  clang::Token &PragmaToken = FirstToken;
+
+  // Skip first token, like "set_reflect_license"
+  PP.LexUnexpandedToken(PragmaToken);
+
+  // Now, the current token must be clang::tok::lpara
+  if (PragmaToken.isNot(clang::tok::l_paren))
+    return;
+
+  // If not ')', eat the following string literal as the license
+  PP.LexUnexpandedToken(PragmaToken);
+  if (PragmaToken.isNot(clang::tok::r_paren)) {
+    // Eat the whole string literal
+    clang::StringLiteralParser StringLiteral(PragmaToken, PP);
+    if (StringLiteral.hadError) {
+      // Diagnostics will be generated automatically
+      return;
+    } else {
+      this->handleItem(std::string(StringLiteral.GetString()));
+    }
+
+    // The current token should be clang::tok::r_para
+    PP.LexUnexpandedToken(PragmaToken);
+    if (PragmaToken.isNot(clang::tok::r_paren)) {
+      PP.Diag(PragmaToken,
+              PP.getDiagnostics().getCustomDiagID(
+                  clang::DiagnosticsEngine::Error,
+                  "expected a ')'"));
+      return;
+    }
+  } else {
+    // If no argument, remove the license
+    this->handleItem("");
+  }
+}
+
+void RSPragmaHandler::handleIntegerParamPragma(
+    clang::Preprocessor &PP, clang::Token &FirstToken) {
+  clang::Token &PragmaToken = FirstToken;
+
+  // Skip first token, like "version"
+  PP.LexUnexpandedToken(PragmaToken);
+
+  // Now, the current token must be clang::tok::lpara
+  if (PragmaToken.isNot(clang::tok::l_paren)) {
+    // If no argument, set the version to 0
+    this->handleInt(PP, PragmaToken, 0);
+    return;
+  }
+  PP.LexUnexpandedToken(PragmaToken);
+
+  if (PragmaToken.is(clang::tok::numeric_constant)) {
+    llvm::SmallString<128> SpellingBuffer;
+    SpellingBuffer.resize(PragmaToken.getLength() + 1);
+    llvm::StringRef TokSpelling = PP.getSpelling(PragmaToken, SpellingBuffer);
+    clang::NumericLiteralParser NumericLiteral(TokSpelling,
+        PragmaToken.getLocation(), PP);
+    if (NumericLiteral.hadError) {
+      // Diagnostics will be generated automatically
+      return;
+    } else {
+      llvm::APInt Val(32, 0);
+      NumericLiteral.GetIntegerValue(Val);
+      this->handleInt(PP, PragmaToken, static_cast<int>(Val.getSExtValue()));
+    }
+    PP.LexUnexpandedToken(PragmaToken);
+  } else {
+    // If no argument, set the version to 0
+    this->handleInt(PP, PragmaToken, 0);
+  }
+
+  if (PragmaToken.isNot(clang::tok::r_paren)) {
+    PP.Diag(PragmaToken,
+            PP.getDiagnostics().getCustomDiagID(
+                clang::DiagnosticsEngine::Error,
+                "expected a ')'"));
+    return;
+  }
+
+  do {
+    PP.LexUnexpandedToken(PragmaToken);
+  } while (PragmaToken.isNot(clang::tok::eod));
+}
+
+void AddPragmaHandlers(clang::Preprocessor &PP, RSContext *RsContext) {
+  // For #pragma rs export_type
+  PP.AddPragmaHandler("rs",
+                      new RSExportTypePragmaHandler("export_type", RsContext));
+
+  // For #pragma rs java_package_name
+  PP.AddPragmaHandler(
+      "rs", new RSJavaPackageNamePragmaHandler("java_package_name", RsContext));
+
+  // For #pragma rs reduce
+  PP.AddPragmaHandler(
+      "rs", new RSReducePragmaHandler(RSExportReduce::KeyReduce, RsContext));
+
+  // For #pragma rs set_reflect_license
+  PP.AddPragmaHandler(
+      "rs", new RSReflectLicensePragmaHandler("set_reflect_license", RsContext));
+
+  // For #pragma version
+  PP.AddPragmaHandler(new RSVersionPragmaHandler("version", RsContext));
+
+  // For #pragma rs_fp*
+  PP.AddPragmaHandler(new RSPrecisionPragmaHandler("rs_fp_full", RsContext));
+  PP.AddPragmaHandler(new RSPrecisionPragmaHandler("rs_fp_relaxed", RsContext));
+  PP.AddPragmaHandler(new RSPrecisionPragmaHandler("rs_fp_imprecise", RsContext));
+}
+
+
+}  // namespace slang
diff --git a/slang/slang_rs_pragma_handler.h b/slang/slang_rs_pragma_handler.h
new file mode 100644
index 0000000..1b6fbe6
--- /dev/null
+++ b/slang/slang_rs_pragma_handler.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_PRAGMA_HANDLER_H_  // NOLINT
+#define _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_PRAGMA_HANDLER_H_
+
+#include <string>
+
+#include "clang/Lex/Pragma.h"
+
+namespace clang {
+  class Token;
+  class IdentifierInfo;
+  class Preprocessor;
+}
+
+namespace slang {
+
+  class RSContext;
+
+class RSPragmaHandler : public clang::PragmaHandler {
+ protected:
+  RSContext *mContext;
+
+  RSPragmaHandler(llvm::StringRef Name, RSContext *Context)
+      : clang::PragmaHandler(Name),
+        mContext(Context) {
+  }
+  RSContext *getContext() const {
+    return this->mContext;
+  }
+
+  virtual void handleItem(const std::string &Item) { }
+  virtual void handleInt(clang::Preprocessor &PP, clang::Token &Tok,
+                         const int v) { }
+
+  // Handle pragma like #pragma rs [name] ([item #1],[item #2],...,[item #i])
+  void handleItemListPragma(clang::Preprocessor &PP,
+                            clang::Token &FirstToken);
+
+  // Handle pragma like #pragma rs [name]
+  void handleNonParamPragma(clang::Preprocessor &PP,
+                            clang::Token &FirstToken);
+
+  // Handle pragma like #pragma rs [name] ("string literal")
+  void handleOptionalStringLiteralParamPragma(clang::Preprocessor &PP,
+                                              clang::Token &FirstToken);
+
+  // Handle pragma like #pragma version (integer)
+  void handleIntegerParamPragma(clang::Preprocessor &PP,
+                                clang::Token &FirstToken);
+
+ public:
+  virtual void HandlePragma(clang::Preprocessor &PP,
+                            clang::PragmaIntroducerKind Introducer,
+                            clang::Token &FirstToken) = 0;
+};
+
+// Add handlers for the RS pragmas to the preprocessor.  These handlers
+// validate the pragmas and, if valid, set fields of the RSContext.
+void AddPragmaHandlers(clang::Preprocessor &PP, RSContext *RsContext);
+
+}   // namespace slang
+
+#endif  // _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_PRAGMA_HANDLER_H_  NOLINT
diff --git a/slang/slang_rs_reflect_utils.cpp b/slang/slang_rs_reflect_utils.cpp
new file mode 100644
index 0000000..c67a1a8
--- /dev/null
+++ b/slang/slang_rs_reflect_utils.cpp
@@ -0,0 +1,439 @@
+/*
+ * Copyright 2010-2014, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "slang_rs_reflect_utils.h"
+
+#include <cstdio>
+#include <cstring>
+#include <string>
+#include <iomanip>
+
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/FileSystem.h"
+#include "llvm/Support/Path.h"
+
+#include "os_sep.h"
+#include "slang_assert.h"
+
+namespace slang {
+
+using std::string;
+
+string RSSlangReflectUtils::GetFileNameStem(const char *fileName) {
+  const char *dot = fileName + strlen(fileName);
+  const char *slash = dot - 1;
+  while (slash >= fileName) {
+    if (*slash == OS_PATH_SEPARATOR) {
+      break;
+    }
+    if ((*slash == '.') && (*dot == 0)) {
+      dot = slash;
+    }
+    --slash;
+  }
+  ++slash;
+  return string(slash, dot - slash);
+}
+
+string RSSlangReflectUtils::ComputePackagedPath(const char *prefixPath,
+                                                const char *packageName) {
+  string packaged_path(prefixPath);
+  if (!packaged_path.empty() &&
+      (packaged_path[packaged_path.length() - 1] != OS_PATH_SEPARATOR)) {
+    packaged_path += OS_PATH_SEPARATOR_STR;
+  }
+  size_t s = packaged_path.length();
+  packaged_path += packageName;
+  while (s < packaged_path.length()) {
+    if (packaged_path[s] == '.') {
+      packaged_path[s] = OS_PATH_SEPARATOR;
+    }
+    ++s;
+  }
+  return packaged_path;
+}
+
+static string InternalFileNameConvert(const char *rsFileName, bool toLower) {
+  const char *dot = rsFileName + strlen(rsFileName);
+  const char *slash = dot - 1;
+  while (slash >= rsFileName) {
+    if (*slash == OS_PATH_SEPARATOR) {
+      break;
+    }
+    if ((*slash == '.') && (*dot == 0)) {
+      dot = slash;
+    }
+    --slash;
+  }
+  ++slash;
+  char ret[256];
+  int i = 0;
+  for (; (i < 255) && (slash < dot); ++slash) {
+    if (isalnum(*slash) || *slash == '_') {
+      if (toLower) {
+        ret[i] = tolower(*slash);
+      } else {
+        ret[i] = *slash;
+      }
+      ++i;
+    }
+  }
+  ret[i] = 0;
+  return string(ret);
+}
+
+std::string
+RSSlangReflectUtils::JavaClassNameFromRSFileName(const char *rsFileName) {
+  return InternalFileNameConvert(rsFileName, false);
+}
+
+std::string RootNameFromRSFileName(const std::string &rsFileName) {
+  return InternalFileNameConvert(rsFileName.c_str(), false);
+}
+
+std::string
+RSSlangReflectUtils::BCFileNameFromRSFileName(const char *rsFileName) {
+  return InternalFileNameConvert(rsFileName, true);
+}
+
+std::string RSSlangReflectUtils::JavaBitcodeClassNameFromRSFileName(
+    const char *rsFileName) {
+  std::string tmp(InternalFileNameConvert(rsFileName, false));
+  return tmp.append("BitCode");
+}
+
+static bool GenerateAccessorMethod(
+    const RSSlangReflectUtils::BitCodeAccessorContext &context,
+    int bitwidth, GeneratedFile &out) {
+  // the prototype of the accessor method
+  out.indent() << "// return byte array representation of the " << bitwidth
+               << "-bit bitcode.\n";
+  out.indent() << "public static byte[] getBitCode" << bitwidth << "()";
+  out.startBlock();
+  out.indent() << "return getBitCode" << bitwidth << "Internal();\n";
+  out.endBlock(true);
+  return true;
+}
+
+// Java method size must not exceed 64k,
+// so we have to split the bitcode into multiple segments.
+static bool GenerateSegmentMethod(const char *buff, int blen, int bitwidth,
+                                  int seg_num, GeneratedFile &out) {
+  out.indent() << "private static byte[] getSegment" << bitwidth << "_"
+               << seg_num << "()";
+  out.startBlock();
+  out.indent() << "byte[] data = {";
+  out.increaseIndent();
+
+  const int kEntriesPerLine = 16;
+  int position = kEntriesPerLine;  // We start with a new line and indent.
+  for (int written = 0; written < blen; written++) {
+    if (++position >= kEntriesPerLine) {
+      out << "\n";
+      out.indent();
+      position = 0;
+    } else {
+      out << " ";
+    }
+    out << std::setw(4) << static_cast<int>(buff[written]) << ",";
+  }
+  out << "\n";
+
+  out.decreaseIndent();
+  out.indent() << "};\n";
+  out.indent() << "return data;\n";
+  out.endBlock();
+
+  return true;
+}
+
+static bool GenerateJavaCodeAccessorMethodForBitwidth(
+    const RSSlangReflectUtils::BitCodeAccessorContext &context,
+    int bitwidth, GeneratedFile &out) {
+
+  std::string filename(context.bc32FileName);
+  if (bitwidth == 64) {
+    filename = context.bc64FileName;
+  }
+
+  FILE *pfin = fopen(filename.c_str(), "rb");
+  if (pfin == nullptr) {
+    fprintf(stderr, "Error: could not read file %s\n", filename.c_str());
+    return false;
+  }
+
+  // start the accessor method
+  GenerateAccessorMethod(context, bitwidth, out);
+
+  // output the data
+  // make sure the generated function for a segment won't break the Javac
+  // size limitation (64K).
+  static const int SEG_SIZE = 0x2000;
+  char *buff = new char[SEG_SIZE];
+  int read_length;
+  int seg_num = 0;
+  int total_length = 0;
+  while ((read_length = fread(buff, 1, SEG_SIZE, pfin)) > 0) {
+    GenerateSegmentMethod(buff, read_length, bitwidth, seg_num, out);
+    ++seg_num;
+    total_length += read_length;
+  }
+  delete[] buff;
+  fclose(pfin);
+
+  // output the internal accessor method
+  out.indent() << "private static int bitCode" << bitwidth << "Length = "
+               << total_length << ";\n\n";
+  out.indent() << "private static byte[] getBitCode" << bitwidth
+               << "Internal()";
+  out.startBlock();
+  out.indent() << "byte[] bc = new byte[bitCode" << bitwidth << "Length];\n";
+  out.indent() << "int offset = 0;\n";
+  out.indent() << "byte[] seg;\n";
+  for (int i = 0; i < seg_num; ++i) {
+    out.indent() << "seg = getSegment" << bitwidth << "_" << i << "();\n";
+    out.indent() << "System.arraycopy(seg, 0, bc, offset, seg.length);\n";
+    out.indent() << "offset += seg.length;\n";
+  }
+  out.indent() << "return bc;\n";
+  out.endBlock();
+
+  return true;
+}
+
+static bool GenerateJavaCodeAccessorMethod(
+    const RSSlangReflectUtils::BitCodeAccessorContext &context,
+    GeneratedFile &out) {
+  if (!GenerateJavaCodeAccessorMethodForBitwidth(context, 32, out)) {
+    slangAssert(false && "Couldn't generate 32-bit embedded bitcode!");
+    return false;
+  }
+  if (!GenerateJavaCodeAccessorMethodForBitwidth(context, 64, out)) {
+    slangAssert(false && "Couldn't generate 64-bit embedded bitcode!");
+    return false;
+  }
+
+  return true;
+}
+
+static bool GenerateAccessorClass(
+    const RSSlangReflectUtils::BitCodeAccessorContext &context,
+    const char *clazz_name, GeneratedFile &out) {
+  // begin the class.
+  out << "/**\n";
+  out << " * @hide\n";
+  out << " */\n";
+  out << "public class " << clazz_name;
+  out.startBlock();
+
+  bool ret = true;
+  switch (context.bcStorage) {
+  case BCST_APK_RESOURCE:
+    slangAssert(false &&
+                "Invalid generation of bitcode accessor with resource");
+    break;
+  case BCST_JAVA_CODE:
+    ret = GenerateJavaCodeAccessorMethod(context, out);
+    break;
+  default:
+    ret = false;
+  }
+
+  // end the class.
+  out.endBlock();
+
+  return ret;
+}
+
+bool RSSlangReflectUtils::GenerateJavaBitCodeAccessor(
+    const BitCodeAccessorContext &context) {
+  string output_path =
+      ComputePackagedPath(context.reflectPath, context.packageName);
+  if (std::error_code EC = llvm::sys::fs::create_directories(
+          llvm::sys::path::parent_path(output_path))) {
+    fprintf(stderr, "Error: could not create dir %s: %s\n",
+            output_path.c_str(), EC.message().c_str());
+    return false;
+  }
+
+  string clazz_name(JavaBitcodeClassNameFromRSFileName(context.rsFileName));
+  string filename(clazz_name);
+  filename += ".java";
+
+  GeneratedFile out;
+  if (!out.startFile(output_path, filename, context.rsFileName,
+                     context.licenseNote, true, context.verbose)) {
+    return false;
+  }
+
+  out << "package " << context.packageName << ";\n\n";
+
+  bool ret = GenerateAccessorClass(context, clazz_name.c_str(), out);
+
+  out.closeFile();
+  return ret;
+}
+
+std::string JoinPath(const std::string &path1, const std::string &path2) {
+  if (path1.empty()) {
+    return path2;
+  }
+  if (path2.empty()) {
+    return path1;
+  }
+  std::string fullPath = path1;
+  if (fullPath[fullPath.length() - 1] != OS_PATH_SEPARATOR) {
+    fullPath += OS_PATH_SEPARATOR;
+  }
+  if (path2[0] == OS_PATH_SEPARATOR) {
+    fullPath += path2.substr(1, string::npos);
+  } else {
+    fullPath += path2;
+  }
+  return fullPath;
+}
+
+// Replace all instances of "\" with "\\" in a single string to prevent
+// formatting errors.  In Java, this can happen even within comments, as
+// Java processes \u before the comments are stripped.  E.g. if the generated
+// file in Windows contains the note:
+//     /* Do not modify!  Generated from \Users\MyName\MyDir\foo.cs */
+// Java will think that \U tells of a Unicode character.
+static void SanitizeString(std::string *s) {
+  size_t p = 0;
+  while ((p = s->find('\\', p)) != std::string::npos) {
+    s->replace(p, 1, "\\\\");
+    p += 2;
+  }
+}
+
+static const char *const gApacheLicenseNote =
+    "/*\n"
+    " * Copyright (C) 2011-2014 The Android Open Source Project\n"
+    " *\n"
+    " * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
+    " * you may not use this file except in compliance with the License.\n"
+    " * You may obtain a copy of the License at\n"
+    " *\n"
+    " *      http://www.apache.org/licenses/LICENSE-2.0\n"
+    " *\n"
+    " * Unless required by applicable law or agreed to in writing, software\n"
+    " * distributed under the License is distributed on an \"AS IS\" BASIS,\n"
+    " * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or "
+    "implied.\n"
+    " * See the License for the specific language governing permissions and\n"
+    " * limitations under the License.\n"
+    " */\n"
+    "\n";
+
+bool GeneratedFile::startFile(const string &outDirectory,
+                              const string &outFileName,
+                              const string &sourceFileName,
+                              const string *optionalLicense, bool isJava,
+                              bool verbose) {
+  if (verbose) {
+    printf("Generating %s\n", outFileName.c_str());
+  }
+
+  // Create the parent directories.
+  if (!outDirectory.empty()) {
+    if (std::error_code EC = llvm::sys::fs::create_directories(
+            llvm::sys::path::parent_path(outDirectory))) {
+      fprintf(stderr, "Error: %s\n", EC.message().c_str());
+      return false;
+    }
+  }
+
+  std::string FilePath = JoinPath(outDirectory, outFileName);
+
+  // Open the file.
+  open(FilePath.c_str());
+  if (!good()) {
+    fprintf(stderr, "Error: could not write file %s\n", outFileName.c_str());
+    return false;
+  }
+
+  // Write the license.
+  if (optionalLicense != nullptr) {
+    *this << *optionalLicense;
+  } else {
+    *this << gApacheLicenseNote;
+  }
+
+  // Write a notice that this is a generated file.
+  std::string source(sourceFileName);
+  if (isJava) {
+    SanitizeString(&source);
+  }
+
+  *this << "/*\n"
+        << " * This file is auto-generated. DO NOT MODIFY!\n"
+        << " * The source Renderscript file: " << source << "\n"
+        << " */\n\n";
+
+  return true;
+}
+
+void GeneratedFile::closeFile() { close(); }
+
+void GeneratedFile::increaseIndent() { mIndent.append("    "); }
+
+void GeneratedFile::decreaseIndent() {
+  slangAssert(!mIndent.empty() && "No indent");
+  mIndent.erase(0, 4);
+}
+
+void GeneratedFile::comment(const std::string &s) {
+  indent() << "/* ";
+  // +3 for the " * " starting each line.
+  std::size_t indentLength = mIndent.length() + 3;
+  std::size_t lengthOfCommentOnLine = 0;
+  const std::size_t maxPerLine = 80;
+  for (std::size_t start = 0, length = s.length(), nextStart = 0;
+       start < length; start = nextStart) {
+    std::size_t p = s.find_first_of(" \n", start);
+    std::size_t toCopy = 1;
+    bool forceBreak = false;
+    if (p == std::string::npos) {
+      toCopy = length - start;
+      nextStart = length;
+    } else {
+      toCopy = p - start;
+      nextStart = p + 1;
+      forceBreak = s[p] == '\n';
+    }
+    if (lengthOfCommentOnLine > 0) {
+      if (indentLength + lengthOfCommentOnLine + toCopy >= maxPerLine) {
+        *this << "\n";
+        indent() << " * ";
+        lengthOfCommentOnLine = 0;
+      } else {
+        *this << " ";
+      }
+    }
+
+    *this << s.substr(start, toCopy);
+    if (forceBreak) {
+      lengthOfCommentOnLine = maxPerLine;
+    } else {
+      lengthOfCommentOnLine += toCopy;
+    }
+  }
+  *this << "\n";
+  indent() << " */\n";
+}
+
+} // namespace slang
diff --git a/slang/slang_rs_reflect_utils.h b/slang/slang_rs_reflect_utils.h
new file mode 100644
index 0000000..1cbc098
--- /dev/null
+++ b/slang/slang_rs_reflect_utils.h
@@ -0,0 +1,151 @@
+/*
+ * Copyright 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_REFLECT_UTILS_H_ // NOLINT
+#define _FRAMEWORKS_COMPILE_SLANG_SLANG_REFLECT_UTILS_H_
+
+#include <fstream>
+#include <string>
+
+namespace slang {
+
+// BitCode storage type
+enum BitCodeStorageType { BCST_APK_RESOURCE, BCST_JAVA_CODE, BCST_CPP_CODE };
+
+class RSSlangReflectUtils {
+public:
+  // Encode a binary bitcode file into a Java source file.
+  // rsFileName: the original .rs file name (with or without path).
+  // bc32FileName: path of the 32-bit bitcode file
+  // bc64FileName: path of the 64-bit bitcode file
+  // reflectPath: where to output the generated Java file, no package name in
+  // it.
+  // packageName: the package of the output Java file.
+  // verbose: whether or not to print out additional info about compilation.
+  // bcStorage: where to emit bitcode to (resource file or embedded).
+  struct BitCodeAccessorContext {
+    const char *rsFileName;
+    const char *bc32FileName;
+    const char *bc64FileName;
+    const char *reflectPath;
+    const char *packageName;
+    const std::string *licenseNote;
+    bool verbose;
+    BitCodeStorageType bcStorage;
+  };
+
+  // Return the stem of the file name, i.e., remove the dir and the extension.
+  // Eg, foo.ext -> foo
+  //     foo.bar.ext -> foo.bar
+  //     ./path/foo.ext -> foo
+  static std::string GetFileNameStem(const char *fileName);
+
+  // Compute a Java source file path from a given prefixPath and its package.
+  // Eg, given prefixPath=./foo/bar and packageName=com.x.y, then it returns
+  // ./foo/bar/com/x/y
+  static std::string ComputePackagedPath(const char *prefixPath,
+                                         const char *packageName);
+
+  // Compute Java class name from a .rs file name.
+  // Any non-alnum, non-underscore characters will be discarded.
+  // E.g. with rsFileName=./foo/bar/my-Renderscript_file.rs it returns
+  // "myRenderscript_file".
+  // rsFileName: the input .rs file name (with or without path).
+  static std::string JavaClassNameFromRSFileName(const char *rsFileName);
+
+  // Compute a bitcode file name (no extension) from a .rs file name.
+  // Because the bitcode file name may be used as Resource ID in the generated
+  // class (something like R.raw.<bitcode_filename>), Any non-alnum,
+  // non-underscore character will be discarded.
+  // The difference from JavaClassNameFromRSFileName() is that the result is
+  // converted to lowercase.
+  // E.g. with rsFileName=./foo/bar/my-Renderscript_file.rs it returns
+  // "myrenderscript_file"
+  // rsFileName: the input .rs file name (with or without path).
+  static std::string BCFileNameFromRSFileName(const char *rsFileName);
+
+  // Compute the bitcode-containing class name from a .rs filename.
+  // Any non-alnum, non-underscore characters will be discarded.
+  // E.g. with rsFileName=./foo/bar/my-Renderscript_file.rs it returns
+  // "myRenderscript_fileBitCode".
+  // rsFileName: the input .rs file name (with or without path).
+  static std::string JavaBitcodeClassNameFromRSFileName(const char *rsFileName);
+
+  // Generate the bit code accessor Java source file.
+  static bool GenerateJavaBitCodeAccessor(const BitCodeAccessorContext &context);
+};
+
+// Joins two sections of a path, inserting a separator if needed.
+// E.g. JoinPath("foo/bar", "baz/a.java") returns "foo/bar/baz/a.java",
+// JoinPath("foo", "/bar/baz") returns "foo/bar/baz", and
+// JoinPath("foo/", "/bar") returns "foo/bar".
+std::string JoinPath(const std::string &path1, const std::string &path2);
+
+/* Compute a safe root name from a .rs file name.  Any non-alphanumeric,
+ * non-underscore characters will be discarded.
+ * E.g. RootNameFromRSFileName("./foo/bar/my-Renderscript_file.rs") returns
+ * "myRenderscript_file".
+ */
+std::string RootNameFromRSFileName(const std::string &rsFileName);
+
+/* This class is used to generate one source file.  There will be one instance
+ * for each generated file.
+ */
+class GeneratedFile : public std::ofstream {
+public:
+  /* Starts the file by:
+   * - creating the parent directories (if needed),
+   * - opening the stream,
+   * - writing out the license,
+   * - writing a message that this file has been auto-generated.
+   * If optionalLicense is nullptr, a default license is used.
+   */
+  bool startFile(const std::string &outPath, const std::string &outFileName,
+                 const std::string &sourceFileName,
+                 const std::string *optionalLicense, bool isJava, bool verbose);
+  void closeFile();
+
+  void increaseIndent(); // Increases the new line indentation by 4.
+  void decreaseIndent(); // Decreases the new line indentation by 4.
+  void comment(const std::string& s); // Outputs a multiline comment.
+
+  // Starts a control block.  This works both for Java and C++.
+  void startBlock() {
+    *this << " {\n";
+    increaseIndent();
+  }
+
+  // Ends a control block.
+  void endBlock(bool addSemicolon = false) {
+    decreaseIndent();
+    indent() << "}" << (addSemicolon ? ";" : "") << "\n\n";
+  }
+
+  /* Indents the line.  By returning *this, we can use like this:
+   *  mOut.ident() << "a = b;\n";
+   */
+  std::ofstream &indent() {
+    *this << mIndent;
+    return *this;
+  }
+
+private:
+  std::string mIndent; // The correct spacing at the beginning of each line.
+};
+
+} // namespace slang
+
+#endif // _FRAMEWORKS_COMPILE_SLANG_SLANG_REFLECT_UTILS_H_  NOLINT
diff --git a/slang/slang_rs_reflection.cpp b/slang/slang_rs_reflection.cpp
new file mode 100644
index 0000000..0e1894f
--- /dev/null
+++ b/slang/slang_rs_reflection.cpp
@@ -0,0 +1,2829 @@
+/*
+ * Copyright 2010-2014, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "slang_rs_reflection.h"
+
+#include <sys/stat.h>
+
+#include <cstdarg>
+#include <cctype>
+
+#include <algorithm>
+#include <sstream>
+#include <string>
+#include <utility>
+
+#include "llvm/ADT/APFloat.h"
+#include "llvm/ADT/StringExtras.h"
+
+#include "os_sep.h"
+#include "slang_rs_context.h"
+#include "slang_rs_export_var.h"
+#include "slang_rs_export_foreach.h"
+#include "slang_rs_export_func.h"
+#include "slang_rs_export_reduce.h"
+#include "slang_rs_reflect_utils.h"
+#include "slang_version.h"
+
+#define RS_SCRIPT_CLASS_NAME_PREFIX "ScriptC_"
+#define RS_SCRIPT_CLASS_SUPER_CLASS_NAME "ScriptC"
+
+#define RS_TYPE_CLASS_SUPER_CLASS_NAME ".Script.FieldBase"
+
+#define RS_TYPE_ITEM_CLASS_NAME "Item"
+
+#define RS_TYPE_ITEM_SIZEOF_LEGACY "Item.sizeof"
+#define RS_TYPE_ITEM_SIZEOF_CURRENT "mElement.getBytesSize()"
+
+#define RS_TYPE_ITEM_BUFFER_NAME "mItemArray"
+#define RS_TYPE_ITEM_BUFFER_PACKER_NAME "mIOBuffer"
+#define RS_TYPE_ELEMENT_REF_NAME "mElementCache"
+
+#define RS_EXPORT_VAR_INDEX_PREFIX "mExportVarIdx_"
+#define RS_EXPORT_VAR_PREFIX "mExportVar_"
+#define RS_EXPORT_VAR_ELEM_PREFIX "mExportVarElem_"
+#define RS_EXPORT_VAR_DIM_PREFIX "mExportVarDim_"
+#define RS_EXPORT_VAR_CONST_PREFIX "const_"
+
+#define RS_ELEM_PREFIX "__"
+
+#define RS_FP_PREFIX "__rs_fp_"
+
+#define RS_RESOURCE_NAME "__rs_resource_name"
+
+#define RS_EXPORT_FUNC_INDEX_PREFIX "mExportFuncIdx_"
+#define RS_EXPORT_FOREACH_INDEX_PREFIX "mExportForEachIdx_"
+#define RS_EXPORT_REDUCE_INDEX_PREFIX "mExportReduceIdx_"
+
+#define RS_EXPORT_VAR_ALLOCATION_PREFIX "mAlloction_"
+#define RS_EXPORT_VAR_DATA_STORAGE_PREFIX "mData_"
+
+#define SAVED_RS_REFERENCE "mRSLocal"
+
+namespace slang {
+
+class RSReflectionJavaElementBuilder {
+public:
+  RSReflectionJavaElementBuilder(const char *ElementBuilderName,
+                                 const RSExportRecordType *ERT,
+                                 const char *RenderScriptVar,
+                                 GeneratedFile *Out, const RSContext *RSContext,
+                                 RSReflectionJava *Reflection);
+  void generate();
+
+private:
+  void genAddElement(const RSExportType *ET, const std::string &VarName,
+                     unsigned ArraySize);
+  void genAddStatementStart();
+  void genAddStatementEnd(const std::string &VarName, unsigned ArraySize);
+  void genAddPadding(int PaddingSize);
+  // TODO Will remove later due to field name information is not necessary for
+  // C-reflect-to-Java
+  std::string createPaddingField() {
+    return mPaddingPrefix + llvm::itostr(mPaddingFieldIndex++);
+  }
+
+  const char *mElementBuilderName;
+  const RSExportRecordType *mERT;
+  const char *mRenderScriptVar;
+  GeneratedFile *mOut;
+  std::string mPaddingPrefix;
+  int mPaddingFieldIndex;
+  const RSContext *mRSContext;
+  RSReflectionJava *mReflection;
+};
+
+static const char *GetMatrixTypeName(const RSExportMatrixType *EMT) {
+  static const char *MatrixTypeJavaNameMap[] = {/* 2x2 */ "Matrix2f",
+                                                /* 3x3 */ "Matrix3f",
+                                                /* 4x4 */ "Matrix4f",
+  };
+  unsigned Dim = EMT->getDim();
+
+  if ((Dim - 2) < (sizeof(MatrixTypeJavaNameMap) / sizeof(const char *)))
+    return MatrixTypeJavaNameMap[EMT->getDim() - 2];
+
+  slangAssert(false && "GetMatrixTypeName : Unsupported matrix dimension");
+  return nullptr;
+}
+
+static const char *GetVectorAccessor(unsigned Index) {
+  static const char *VectorAccessorMap[] = {/* 0 */ "x",
+                                            /* 1 */ "y",
+                                            /* 2 */ "z",
+                                            /* 3 */ "w",
+  };
+
+  slangAssert((Index < (sizeof(VectorAccessorMap) / sizeof(const char *))) &&
+              "Out-of-bound index to access vector member");
+
+  return VectorAccessorMap[Index];
+}
+
+static const char *GetPackerAPIName(const RSExportPrimitiveType *EPT) {
+  static const char *PrimitiveTypePackerAPINameMap[] = {
+      "addI16",     // DataTypeFloat16
+      "addF32",     // DataTypeFloat32
+      "addF64",     // DataTypeFloat64
+      "addI8",      // DataTypeSigned8
+      "addI16",     // DataTypeSigned16
+      "addI32",     // DataTypeSigned32
+      "addI64",     // DataTypeSigned64
+      "addU8",      // DataTypeUnsigned8
+      "addU16",     // DataTypeUnsigned16
+      "addU32",     // DataTypeUnsigned32
+      "addU64",     // DataTypeUnsigned64
+      "addBoolean", // DataTypeBoolean
+      "addU16",     // DataTypeUnsigned565
+      "addU16",     // DataTypeUnsigned5551
+      "addU16",     // DataTypeUnsigned4444
+      "addMatrix",  // DataTypeRSMatrix2x2
+      "addMatrix",  // DataTypeRSMatrix3x3
+      "addMatrix",  // DataTypeRSMatrix4x4
+      "addObj",     // DataTypeRSElement
+      "addObj",     // DataTypeRSType
+      "addObj",     // DataTypeRSAllocation
+      "addObj",     // DataTypeRSSampler
+      "addObj",     // DataTypeRSScript
+      "addObj",     // DataTypeRSMesh
+      "addObj",     // DataTypeRSPath
+      "addObj",     // DataTypeRSProgramFragment
+      "addObj",     // DataTypeRSProgramVertex
+      "addObj",     // DataTypeRSProgramRaster
+      "addObj",     // DataTypeRSProgramStore
+      "addObj",     // DataTypeRSFont
+  };
+  unsigned TypeId = EPT->getType();
+
+  if (TypeId < (sizeof(PrimitiveTypePackerAPINameMap) / sizeof(const char *)))
+    return PrimitiveTypePackerAPINameMap[EPT->getType()];
+
+  slangAssert(false && "GetPackerAPIName : Unknown primitive data type");
+  return nullptr;
+}
+
+namespace {
+
+enum {
+  TypeNameWithConstantArrayBrackets = 0x01,
+  TypeNameWithRecordElementName     = 0x02,
+  TypeNameC                         = 0x04, // else Java
+  TypeNameDefault                   = TypeNameWithConstantArrayBrackets|TypeNameWithRecordElementName
+};
+
+std::string GetTypeName(const RSExportType *ET, unsigned Style = TypeNameDefault) {
+  switch (ET->getClass()) {
+  case RSExportType::ExportClassPrimitive: {
+    const auto ReflectionType =
+        RSExportPrimitiveType::getRSReflectionType(static_cast<const RSExportPrimitiveType *>(ET));
+    return (Style & TypeNameC ? ReflectionType->s_name : ReflectionType->java_name);
+  }
+  case RSExportType::ExportClassPointer: {
+    slangAssert(!(Style & TypeNameC) &&
+                "No need to support C type names for pointer types yet");
+    const RSExportType *PointeeType =
+        static_cast<const RSExportPointerType *>(ET)->getPointeeType();
+
+    if (PointeeType->getClass() != RSExportType::ExportClassRecord)
+      return "Allocation";
+    else
+      return PointeeType->getElementName();
+  }
+  case RSExportType::ExportClassVector: {
+    const RSExportVectorType *EVT = static_cast<const RSExportVectorType *>(ET);
+    const auto ReflectionType = EVT->getRSReflectionType(EVT);
+    std::stringstream VecName;
+    VecName << (Style & TypeNameC ? ReflectionType->s_name : ReflectionType->rs_java_vector_prefix)
+            << EVT->getNumElement();
+    return VecName.str();
+  }
+  case RSExportType::ExportClassMatrix: {
+    slangAssert(!(Style & TypeNameC) &&
+                "No need to support C type names for matrix types yet");
+    return GetMatrixTypeName(static_cast<const RSExportMatrixType *>(ET));
+  }
+  case RSExportType::ExportClassConstantArray: {
+    const RSExportConstantArrayType *CAT =
+        static_cast<const RSExportConstantArrayType *>(ET);
+    std::string ElementTypeName = GetTypeName(CAT->getElementType(), Style);
+    if (Style & TypeNameWithConstantArrayBrackets) {
+      slangAssert(!(Style & TypeNameC) &&
+                  "No need to support C type names for array types with brackets yet");
+      ElementTypeName.append("[]");
+    }
+    return ElementTypeName;
+  }
+  case RSExportType::ExportClassRecord: {
+    slangAssert(!(Style & TypeNameC) &&
+                "No need to support C type names for record types yet");
+    if (Style & TypeNameWithRecordElementName)
+      return ET->getElementName() + "." RS_TYPE_ITEM_CLASS_NAME;
+    else
+      return ET->getName();
+  }
+  default: { slangAssert(false && "Unknown class of type"); }
+  }
+
+  return "";
+}
+
+std::string GetReduceResultTypeName(const RSExportType *ET) {
+  switch (ET->getClass()) {
+    case RSExportType::ExportClassConstantArray: {
+      const RSExportConstantArrayType *const CAT = static_cast<const RSExportConstantArrayType *>(ET);
+      return "resultArray" + std::to_string(CAT->getNumElement()) + "_" +
+          GetTypeName(CAT->getElementType(),
+                      (TypeNameDefault & ~TypeNameWithRecordElementName) | TypeNameC);
+    }
+    case RSExportType::ExportClassRecord:
+      return "resultStruct_" + GetTypeName(ET,
+                                           (TypeNameDefault & ~TypeNameWithRecordElementName) | TypeNameC);
+    default:
+      return "result_" + GetTypeName(ET, TypeNameDefault | TypeNameC);
+  }
+}
+
+std::string GetReduceResultTypeName(const RSExportReduce *ER) {
+  return GetReduceResultTypeName(ER->getResultType());
+}
+
+} // end anonymous namespace
+
+static const char *GetTypeNullValue(const RSExportType *ET) {
+  switch (ET->getClass()) {
+  case RSExportType::ExportClassPrimitive: {
+    const RSExportPrimitiveType *EPT =
+        static_cast<const RSExportPrimitiveType *>(ET);
+    if (EPT->isRSObjectType())
+      return "null";
+    else if (EPT->getType() == DataTypeBoolean)
+      return "false";
+    else
+      return "0";
+    break;
+  }
+  case RSExportType::ExportClassPointer:
+  case RSExportType::ExportClassVector:
+  case RSExportType::ExportClassMatrix:
+  case RSExportType::ExportClassConstantArray:
+  case RSExportType::ExportClassRecord: {
+    return "null";
+    break;
+  }
+  default: { slangAssert(false && "Unknown class of type"); }
+  }
+  return "";
+}
+
+static std::string GetBuiltinElementConstruct(const RSExportType *ET) {
+  if (ET->getClass() == RSExportType::ExportClassPrimitive) {
+    return std::string("Element.") + ET->getElementName();
+  } else if (ET->getClass() == RSExportType::ExportClassVector) {
+    const RSExportVectorType *EVT = static_cast<const RSExportVectorType *>(ET);
+    if (EVT->getType() == DataTypeFloat32) {
+      if (EVT->getNumElement() == 2) {
+        return "Element.F32_2";
+      } else if (EVT->getNumElement() == 3) {
+        return "Element.F32_3";
+      } else if (EVT->getNumElement() == 4) {
+        return "Element.F32_4";
+      } else {
+        slangAssert(false && "Vectors should be size 2, 3, 4");
+      }
+    } else if (EVT->getType() == DataTypeUnsigned8) {
+      if (EVT->getNumElement() == 4)
+        return "Element.U8_4";
+    }
+  } else if (ET->getClass() == RSExportType::ExportClassMatrix) {
+    const RSExportMatrixType *EMT = static_cast<const RSExportMatrixType *>(ET);
+    switch (EMT->getDim()) {
+    case 2:
+      return "Element.MATRIX_2X2";
+    case 3:
+      return "Element.MATRIX_3X3";
+    case 4:
+      return "Element.MATRIX_4X4";
+    default:
+      slangAssert(false && "Unsupported dimension of matrix");
+    }
+  }
+  // RSExportType::ExportClassPointer can't be generated in a struct.
+
+  return "";
+}
+
+// If FromIntegerType == DestIntegerType, then Value is returned.
+// Otherwise, return a Java expression that zero-extends the value
+// Value, assumed to be of type FromIntegerType, to the integer type
+// DestIntegerType.
+//
+// Intended operations:
+//  byte  -> {byte,int,short,long}
+//  short -> {short,int,long}
+//  int   -> {int,long}
+//  long  -> long
+static std::string ZeroExtendValue(const std::string &Value,
+                                   const std::string &FromIntegerType,
+                                   const std::string &DestIntegerType) {
+#ifndef __DISABLE_ASSERTS
+  // Integer types arranged in increasing order by width
+  const std::vector<std::string> ValidTypes{"byte", "short", "int", "long"};
+  auto FromTypeLoc = std::find(ValidTypes.begin(), ValidTypes.end(), FromIntegerType);
+  auto DestTypeLoc = std::find(ValidTypes.begin(), ValidTypes.end(), DestIntegerType);
+  // Check that both types are valid.
+  slangAssert(FromTypeLoc != ValidTypes.end());
+  slangAssert(DestTypeLoc != ValidTypes.end());
+  // Check that DestIntegerType is at least as wide as FromIntegerType.
+  slangAssert(FromTypeLoc - ValidTypes.begin() <= DestTypeLoc - ValidTypes.begin());
+#endif
+
+  if (FromIntegerType == DestIntegerType) {
+    return Value;
+  }
+
+  std::string Mask, MaskLiteralType;
+  if (FromIntegerType == "byte") {
+    Mask = "0xff";
+    MaskLiteralType = "int";
+  } else if (FromIntegerType == "short") {
+    Mask = "0xffff";
+    MaskLiteralType = "int";
+  } else if (FromIntegerType == "int") {
+    Mask = "0xffffffffL";
+    MaskLiteralType = "long";
+  } else {
+    // long -> long casts should have already been handled.
+    slangAssert(false && "Unknown integer type");
+  }
+
+  // Cast the mask to the appropriate type.
+  if (MaskLiteralType != DestIntegerType) {
+    Mask = "(" + DestIntegerType + ") " + Mask;
+  }
+  return "((" + DestIntegerType + ") ((" + Value + ") & " + Mask + "))";
+}
+
+/********************** Methods to generate script class **********************/
+RSReflectionJava::RSReflectionJava(const RSContext *Context,
+                                   std::vector<std::string> *GeneratedFileNames,
+                                   const std::string &OutputBaseDirectory,
+                                   const std::string &RSSourceFileName,
+                                   const std::string &BitCodeFileName,
+                                   bool EmbedBitcodeInJava)
+    : mRSContext(Context), mPackageName(Context->getReflectJavaPackageName()),
+      mRSPackageName(Context->getRSPackageName()),
+      mOutputBaseDirectory(OutputBaseDirectory),
+      mRSSourceFileName(RSSourceFileName), mBitCodeFileName(BitCodeFileName),
+      mResourceId(RSSlangReflectUtils::JavaClassNameFromRSFileName(
+          mBitCodeFileName.c_str())),
+      mScriptClassName(RS_SCRIPT_CLASS_NAME_PREFIX +
+                       RSSlangReflectUtils::JavaClassNameFromRSFileName(
+                           mRSSourceFileName.c_str())),
+      mEmbedBitcodeInJava(EmbedBitcodeInJava), mNextExportVarSlot(0),
+      mNextExportFuncSlot(0), mNextExportForEachSlot(0),
+      mNextExportReduceSlot(0), mLastError(""),
+      mGeneratedFileNames(GeneratedFileNames), mFieldIndex(0) {
+  slangAssert(mGeneratedFileNames && "Must supply GeneratedFileNames");
+  slangAssert(!mPackageName.empty() && mPackageName != "-");
+
+  mOutputDirectory = RSSlangReflectUtils::ComputePackagedPath(
+                         OutputBaseDirectory.c_str(), mPackageName.c_str()) +
+                     OS_PATH_SEPARATOR_STR;
+
+  // mElement.getBytesSize only exists on JB+
+  if (mRSContext->getTargetAPI() >= SLANG_JB_TARGET_API) {
+      mItemSizeof = RS_TYPE_ITEM_SIZEOF_CURRENT;
+  } else {
+      mItemSizeof = RS_TYPE_ITEM_SIZEOF_LEGACY;
+  }
+}
+
+bool RSReflectionJava::genScriptClass(const std::string &ClassName,
+                                      std::string &ErrorMsg) {
+  if (!startClass(AM_Public, false, ClassName, RS_SCRIPT_CLASS_SUPER_CLASS_NAME,
+                  ErrorMsg))
+    return false;
+
+  genScriptClassConstructor();
+
+  // Reflect exported variables
+  for (auto I = mRSContext->export_vars_begin(),
+            E = mRSContext->export_vars_end();
+       I != E; I++)
+    genExportVariable(*I);
+
+  // Reflect exported forEach functions (only available on ICS+)
+  if (mRSContext->getTargetAPI() >= SLANG_ICS_TARGET_API) {
+    for (auto I = mRSContext->export_foreach_begin(),
+              E = mRSContext->export_foreach_end();
+         I != E; I++) {
+      genExportForEach(*I);
+    }
+  }
+
+  // Reflect exported new-style reduce functions
+  for (const RSExportType *ResultType : mRSContext->getReduceResultTypes(
+           // FilterIn
+           exportableReduce,
+
+           // Compare
+           [](const RSExportType *A, const RSExportType *B)
+           { return GetReduceResultTypeName(A) < GetReduceResultTypeName(B); }))
+    genExportReduceResultType(ResultType);
+  for (auto I = mRSContext->export_reduce_begin(),
+            E = mRSContext->export_reduce_end();
+       I != E; ++I)
+    genExportReduce(*I);
+
+  // Reflect exported functions (invokable)
+  for (auto I = mRSContext->export_funcs_begin(),
+            E = mRSContext->export_funcs_end();
+       I != E; ++I)
+    genExportFunction(*I);
+
+  endClass();
+
+  return true;
+}
+
+void RSReflectionJava::genScriptClassConstructor() {
+  std::string className(RSSlangReflectUtils::JavaBitcodeClassNameFromRSFileName(
+      mRSSourceFileName.c_str()));
+  // Provide a simple way to reference this object.
+  mOut.indent() << "private static final String " RS_RESOURCE_NAME " = \""
+                << getResourceId() << "\";\n";
+
+  // Generate a simple constructor with only a single parameter (the rest
+  // can be inferred from information we already have).
+  mOut.indent() << "// Constructor\n";
+  startFunction(AM_Public, false, nullptr, getClassName(), 1, "RenderScript",
+                "rs");
+
+  const bool haveReduceExportables =
+    mRSContext->export_reduce_begin() != mRSContext->export_reduce_end();
+
+  if (getEmbedBitcodeInJava()) {
+    // Call new single argument Java-only constructor
+    mOut.indent() << "super(rs,\n";
+    mOut.indent() << "      " << RS_RESOURCE_NAME ",\n";
+    mOut.indent() << "      " << className << ".getBitCode32(),\n";
+    mOut.indent() << "      " << className << ".getBitCode64());\n";
+  } else {
+    // Call alternate constructor with required parameters.
+    // Look up the proper raw bitcode resource id via the context.
+    mOut.indent() << "this(rs,\n";
+    mOut.indent() << "     rs.getApplicationContext().getResources(),\n";
+    mOut.indent() << "     rs.getApplicationContext().getResources()."
+                     "getIdentifier(\n";
+    mOut.indent() << "         " RS_RESOURCE_NAME ", \"raw\",\n";
+    mOut.indent()
+        << "         rs.getApplicationContext().getPackageName()));\n";
+    endFunction();
+
+    // Alternate constructor (legacy) with 3 original parameters.
+    startFunction(AM_Public, false, nullptr, getClassName(), 3, "RenderScript",
+                  "rs", "Resources", "resources", "int", "id");
+    // Call constructor of super class
+    mOut.indent() << "super(rs, resources, id);\n";
+  }
+
+  // If an exported variable has initial value, reflect it
+
+  for (auto I = mRSContext->export_vars_begin(),
+            E = mRSContext->export_vars_end();
+       I != E; I++) {
+    const RSExportVar *EV = *I;
+    if (!EV->getInit().isUninit()) {
+      genInitExportVariable(EV->getType(), EV->getName(), EV->getInit());
+    } else if (EV->getArraySize()) {
+      // Always create an initial zero-init array object.
+      mOut.indent() << RS_EXPORT_VAR_PREFIX << EV->getName() << " = new "
+                    << GetTypeName(EV->getType(), TypeNameDefault & ~TypeNameWithConstantArrayBrackets) << "["
+                    << EV->getArraySize() << "];\n";
+      size_t NumInits = EV->getNumInits();
+      const RSExportConstantArrayType *ECAT =
+          static_cast<const RSExportConstantArrayType *>(EV->getType());
+      const RSExportType *ET = ECAT->getElementType();
+      for (size_t i = 0; i < NumInits; i++) {
+        std::stringstream Name;
+        Name << EV->getName() << "[" << i << "]";
+        genInitExportVariable(ET, Name.str(), EV->getInitArray(i));
+      }
+    }
+    if (mRSContext->getTargetAPI() >= SLANG_JB_TARGET_API) {
+      genTypeInstance(EV->getType());
+    }
+    genFieldPackerInstance(EV->getType());
+  }
+
+  if (haveReduceExportables) {
+    mOut.indent() << SAVED_RS_REFERENCE << " = rs;\n";
+  }
+
+  // Reflect argument / return types in kernels
+
+  for (auto I = mRSContext->export_foreach_begin(),
+            E = mRSContext->export_foreach_end();
+       I != E; I++) {
+    const RSExportForEach *EF = *I;
+
+    const RSExportForEach::InTypeVec &InTypes = EF->getInTypes();
+    for (RSExportForEach::InTypeIter BI = InTypes.begin(), EI = InTypes.end();
+         BI != EI; BI++) {
+      if (*BI != nullptr) {
+        genTypeInstanceFromPointer(*BI);
+      }
+    }
+
+    const RSExportType *OET = EF->getOutType();
+    if (OET) {
+      genTypeInstanceFromPointer(OET);
+    }
+  }
+
+  for (auto I = mRSContext->export_reduce_begin(),
+            E = mRSContext->export_reduce_end();
+       I != E; I++) {
+    const RSExportReduce *ER = *I;
+
+    const RSExportType *RT = ER->getResultType();
+    slangAssert(RT != nullptr);
+    if (!exportableReduce(RT))
+      continue;
+
+    genTypeInstance(RT);
+
+    const RSExportReduce::InTypeVec &InTypes = ER->getAccumulatorInTypes();
+    for (RSExportReduce::InTypeIter BI = InTypes.begin(), EI = InTypes.end();
+         BI != EI; BI++) {
+      slangAssert(*BI != nullptr);
+      genTypeInstance(*BI);
+    }
+  }
+
+  endFunction();
+
+  for (std::set<std::string>::iterator I = mTypesToCheck.begin(),
+                                       E = mTypesToCheck.end();
+       I != E; I++) {
+    mOut.indent() << "private Element " RS_ELEM_PREFIX << *I << ";\n";
+  }
+
+  for (std::set<std::string>::iterator I = mFieldPackerTypes.begin(),
+                                       E = mFieldPackerTypes.end();
+       I != E; I++) {
+    mOut.indent() << "private FieldPacker " RS_FP_PREFIX << *I << ";\n";
+  }
+
+  if (haveReduceExportables) {
+    // We save a private copy of rs in order to create temporary
+    // allocations in the reduce_* entry points.
+    mOut.indent() << "private RenderScript " << SAVED_RS_REFERENCE << ";\n";
+  }
+}
+
+void RSReflectionJava::genInitBoolExportVariable(const std::string &VarName,
+                                                 const clang::APValue &Val) {
+  slangAssert(!Val.isUninit() && "Not a valid initializer");
+  slangAssert((Val.getKind() == clang::APValue::Int) &&
+              "Bool type has wrong initial APValue");
+
+  mOut.indent() << RS_EXPORT_VAR_PREFIX << VarName << " = ";
+
+  mOut << ((Val.getInt().getSExtValue() == 0) ? "false" : "true") << ";\n";
+}
+
+void
+RSReflectionJava::genInitPrimitiveExportVariable(const std::string &VarName,
+                                                 const clang::APValue &Val) {
+  slangAssert(!Val.isUninit() && "Not a valid initializer");
+
+  mOut.indent() << RS_EXPORT_VAR_PREFIX << VarName << " = ";
+  genInitValue(Val, false);
+  mOut << ";\n";
+}
+
+void RSReflectionJava::genInitExportVariable(const RSExportType *ET,
+                                             const std::string &VarName,
+                                             const clang::APValue &Val) {
+  slangAssert(!Val.isUninit() && "Not a valid initializer");
+
+  switch (ET->getClass()) {
+  case RSExportType::ExportClassPrimitive: {
+    const RSExportPrimitiveType *EPT =
+        static_cast<const RSExportPrimitiveType *>(ET);
+    if (EPT->getType() == DataTypeBoolean) {
+      genInitBoolExportVariable(VarName, Val);
+    } else {
+      genInitPrimitiveExportVariable(VarName, Val);
+    }
+    break;
+  }
+  case RSExportType::ExportClassPointer: {
+    if (!Val.isInt() || Val.getInt().getSExtValue() != 0)
+      std::cout << "Initializer which is non-NULL to pointer type variable "
+                   "will be ignored\n";
+    break;
+  }
+  case RSExportType::ExportClassVector: {
+    const RSExportVectorType *EVT = static_cast<const RSExportVectorType *>(ET);
+    switch (Val.getKind()) {
+    case clang::APValue::Int:
+    case clang::APValue::Float: {
+      for (unsigned i = 0; i < EVT->getNumElement(); i++) {
+        std::string Name = VarName + "." + GetVectorAccessor(i);
+        genInitPrimitiveExportVariable(Name, Val);
+      }
+      break;
+    }
+    case clang::APValue::Vector: {
+      std::stringstream VecName;
+      VecName << EVT->getRSReflectionType(EVT)->rs_java_vector_prefix
+              << EVT->getNumElement();
+      mOut.indent() << RS_EXPORT_VAR_PREFIX << VarName << " = new "
+                    << VecName.str() << "();\n";
+
+      unsigned NumElements = std::min(
+          static_cast<unsigned>(EVT->getNumElement()), Val.getVectorLength());
+      for (unsigned i = 0; i < NumElements; i++) {
+        const clang::APValue &ElementVal = Val.getVectorElt(i);
+        std::string Name = VarName + "." + GetVectorAccessor(i);
+        genInitPrimitiveExportVariable(Name, ElementVal);
+      }
+      break;
+    }
+    case clang::APValue::MemberPointer:
+    case clang::APValue::Uninitialized:
+    case clang::APValue::ComplexInt:
+    case clang::APValue::ComplexFloat:
+    case clang::APValue::LValue:
+    case clang::APValue::Array:
+    case clang::APValue::Struct:
+    case clang::APValue::Union:
+    case clang::APValue::AddrLabelDiff: {
+      slangAssert(false && "Unexpected type of value of initializer.");
+    }
+    }
+    break;
+  }
+  // TODO(zonr): Resolving initializer of a record (and matrix) type variable
+  // is complex. It cannot obtain by just simply evaluating the initializer
+  // expression.
+  case RSExportType::ExportClassMatrix:
+  case RSExportType::ExportClassConstantArray:
+  case RSExportType::ExportClassRecord: {
+#if 0
+      unsigned InitIndex = 0;
+      const RSExportRecordType *ERT =
+          static_cast<const RSExportRecordType*>(ET);
+
+      slangAssert((Val.getKind() == clang::APValue::Vector) &&
+          "Unexpected type of initializer for record type variable");
+
+      mOut.indent() << RS_EXPORT_VAR_PREFIX << VarName
+                 << " = new " << ERT->getElementName()
+                 <<  "." RS_TYPE_ITEM_CLASS_NAME"();\n";
+
+      for (RSExportRecordType::const_field_iterator I = ERT->fields_begin(),
+               E = ERT->fields_end();
+           I != E;
+           I++) {
+        const RSExportRecordType::Field *F = *I;
+        std::string FieldName = VarName + "." + F->getName();
+
+        if (InitIndex > Val.getVectorLength())
+          break;
+
+        genInitPrimitiveExportVariable(FieldName,
+                                       Val.getVectorElt(InitIndex++));
+      }
+#endif
+    slangAssert(false && "Unsupported initializer for record/matrix/constant "
+                         "array type variable currently");
+    break;
+  }
+  default: { slangAssert(false && "Unknown class of type"); }
+  }
+}
+
+void RSReflectionJava::genExportVariable(const RSExportVar *EV) {
+  const RSExportType *ET = EV->getType();
+
+  mOut.indent() << "private final static int " << RS_EXPORT_VAR_INDEX_PREFIX
+                << EV->getName() << " = " << getNextExportVarSlot() << ";\n";
+
+  switch (ET->getClass()) {
+  case RSExportType::ExportClassPrimitive: {
+    genPrimitiveTypeExportVariable(EV);
+    break;
+  }
+  case RSExportType::ExportClassPointer: {
+    genPointerTypeExportVariable(EV);
+    break;
+  }
+  case RSExportType::ExportClassVector: {
+    genVectorTypeExportVariable(EV);
+    break;
+  }
+  case RSExportType::ExportClassMatrix: {
+    genMatrixTypeExportVariable(EV);
+    break;
+  }
+  case RSExportType::ExportClassConstantArray: {
+    genConstantArrayTypeExportVariable(EV);
+    break;
+  }
+  case RSExportType::ExportClassRecord: {
+    genRecordTypeExportVariable(EV);
+    break;
+  }
+  default: { slangAssert(false && "Unknown class of type"); }
+  }
+}
+
+void RSReflectionJava::genExportFunction(const RSExportFunc *EF) {
+  mOut.indent() << "private final static int " << RS_EXPORT_FUNC_INDEX_PREFIX
+                << EF->getName() << " = " << getNextExportFuncSlot() << ";\n";
+
+  // invoke_*()
+  ArgTy Args;
+
+  if (EF->hasParam()) {
+    for (RSExportFunc::const_param_iterator I = EF->params_begin(),
+                                            E = EF->params_end();
+         I != E; I++) {
+      Args.push_back(
+          std::make_pair(GetTypeName((*I)->getType()), (*I)->getName()));
+    }
+  }
+
+  if (mRSContext->getTargetAPI() >= SLANG_M_TARGET_API) {
+    startFunction(AM_Public, false, "Script.InvokeID",
+                  "getInvokeID_" + EF->getName(), 0);
+
+    mOut.indent() << "return createInvokeID(" << RS_EXPORT_FUNC_INDEX_PREFIX
+                  << EF->getName() << ");\n";
+
+    endFunction();
+  }
+
+  startFunction(AM_Public, false, "void",
+                "invoke_" + EF->getName(/*Mangle=*/false),
+                // We are using un-mangled name since Java
+                // supports method overloading.
+                Args);
+
+  if (!EF->hasParam()) {
+    mOut.indent() << "invoke(" << RS_EXPORT_FUNC_INDEX_PREFIX << EF->getName()
+                  << ");\n";
+  } else {
+    const RSExportRecordType *ERT = EF->getParamPacketType();
+    std::string FieldPackerName = EF->getName() + "_fp";
+
+    if (genCreateFieldPacker(ERT, FieldPackerName.c_str()))
+      genPackVarOfType(ERT, nullptr, FieldPackerName.c_str());
+
+    mOut.indent() << "invoke(" << RS_EXPORT_FUNC_INDEX_PREFIX << EF->getName()
+                  << ", " << FieldPackerName << ");\n";
+  }
+
+  endFunction();
+}
+
+void RSReflectionJava::genPairwiseDimCheck(const std::string &name0,
+                                           const std::string &name1) {
+
+  mOut.indent() << "// Verify dimensions\n";
+  mOut.indent() << "t0 = " << name0 << ".getType();\n";
+  mOut.indent() << "t1 = " << name1 << ".getType();\n";
+  mOut.indent() << "if ((t0.getCount() != t1.getCount()) ||\n";
+  mOut.indent() << "    (t0.getX() != t1.getX()) ||\n";
+  mOut.indent() << "    (t0.getY() != t1.getY()) ||\n";
+  mOut.indent() << "    (t0.getZ() != t1.getZ()) ||\n";
+  mOut.indent() << "    (t0.hasFaces()   != t1.hasFaces()) ||\n";
+  mOut.indent() << "    (t0.hasMipmaps() != t1.hasMipmaps())) {\n";
+  mOut.indent() << "    throw new RSRuntimeException(\"Dimension mismatch "
+                << "between parameters " << name0 << " and " << name1
+                << "!\");\n";
+  mOut.indent() << "}\n\n";
+}
+
+void RSReflectionJava::genNullArrayCheck(const std::string &ArrayName) {
+  mOut.indent() << "// Verify that \"" << ArrayName << "\" is non-null.\n";
+  mOut.indent() << "if (" << ArrayName << " == null) {\n";
+  mOut.indent() << "    throw new RSIllegalArgumentException(\"Array \\\""
+                << ArrayName << "\\\" is null!\");\n";
+  mOut.indent() << "}\n";
+}
+
+void RSReflectionJava::genVectorLengthCompatibilityCheck(const std::string &ArrayName,
+                                                         unsigned VecSize) {
+  mOut.indent() << "// Verify that the array length is a multiple of the vector size.\n";
+  mOut.indent() << "if (" << ArrayName << ".length % " << std::to_string(VecSize)
+                << " != 0) {\n";
+  mOut.indent() << "    throw new RSIllegalArgumentException(\"Array \\\"" << ArrayName
+                << "\\\" is not a multiple of " << std::to_string(VecSize)
+                << " in length!\");\n";
+  mOut.indent() << "}\n";
+}
+
+void RSReflectionJava::genExportForEach(const RSExportForEach *EF) {
+  if (EF->isDummyRoot()) {
+    // Skip reflection for dummy root() kernels. Note that we have to
+    // advance the next slot number for ForEach, however.
+    mOut.indent() << "//private final static int "
+                  << RS_EXPORT_FOREACH_INDEX_PREFIX << EF->getName() << " = "
+                  << getNextExportForEachSlot() << ";\n";
+    return;
+  }
+
+  mOut.indent() << "private final static int " << RS_EXPORT_FOREACH_INDEX_PREFIX
+                << EF->getName() << " = " << getNextExportForEachSlot()
+                << ";\n";
+
+  // forEach_*()
+  ArgTy Args;
+  bool HasAllocation = false; // at least one in/out allocation?
+
+  const RSExportForEach::InVec     &Ins     = EF->getIns();
+  const RSExportForEach::InTypeVec &InTypes = EF->getInTypes();
+  const RSExportType               *OET     = EF->getOutType();
+
+  if (Ins.size() == 1) {
+    HasAllocation = true;
+    Args.push_back(std::make_pair("Allocation", "ain"));
+
+  } else if (Ins.size() > 1) {
+    HasAllocation = true;
+    for (RSExportForEach::InIter BI = Ins.begin(), EI = Ins.end(); BI != EI;
+         BI++) {
+
+      Args.push_back(std::make_pair("Allocation",
+                                    "ain_" + (*BI)->getName().str()));
+    }
+  }
+
+  if (EF->hasOut() || EF->hasReturn()) {
+    HasAllocation = true;
+    Args.push_back(std::make_pair("Allocation", "aout"));
+  }
+
+  const RSExportRecordType *ERT = EF->getParamPacketType();
+  if (ERT) {
+    for (RSExportForEach::const_param_iterator I = EF->params_begin(),
+                                               E = EF->params_end();
+         I != E; I++) {
+      Args.push_back(
+          std::make_pair(GetTypeName((*I)->getType()), (*I)->getName()));
+    }
+  }
+
+  if (mRSContext->getTargetAPI() >= SLANG_JB_MR1_TARGET_API) {
+    startFunction(AM_Public, false, "Script.KernelID",
+                  "getKernelID_" + EF->getName(), 0);
+
+    // TODO: add element checking
+    mOut.indent() << "return createKernelID(" << RS_EXPORT_FOREACH_INDEX_PREFIX
+                  << EF->getName() << ", " << EF->getSignatureMetadata()
+                  << ", null, null);\n";
+
+    endFunction();
+  }
+
+  if (mRSContext->getTargetAPI() >= SLANG_JB_MR2_TARGET_API) {
+    if (HasAllocation) {
+      startFunction(AM_Public, false, "void", "forEach_" + EF->getName(), Args);
+
+      mOut.indent() << "forEach_" << EF->getName();
+      mOut << "(";
+
+      if (Ins.size() == 1) {
+        mOut << "ain, ";
+
+      } else if (Ins.size() > 1) {
+        for (RSExportForEach::InIter BI = Ins.begin(), EI = Ins.end(); BI != EI;
+             BI++) {
+
+          mOut << "ain_" << (*BI)->getName().str() << ", ";
+        }
+      }
+
+      if (EF->hasOut() || EF->hasReturn()) {
+        mOut << "aout, ";
+      }
+
+      if (EF->hasUsrData()) {
+        mOut << Args.back().second << ", ";
+      }
+
+      // No clipped bounds to pass in.
+      mOut << "null);\n";
+
+      endFunction();
+    }
+
+    // Add the clipped kernel parameters to the Args list.
+    Args.push_back(std::make_pair("Script.LaunchOptions", "sc"));
+  }
+
+  startFunction(AM_Public, false, "void", "forEach_" + EF->getName(), Args);
+
+  if (InTypes.size() == 1) {
+    if (InTypes.front() != nullptr) {
+      genTypeCheck(InTypes.front(), "ain");
+    }
+
+  } else if (InTypes.size() > 1) {
+    size_t Index = 0;
+    for (RSExportForEach::InTypeIter BI = InTypes.begin(), EI = InTypes.end();
+         BI != EI; BI++, ++Index) {
+
+      if (*BI != nullptr) {
+        genTypeCheck(*BI, ("ain_" + Ins[Index]->getName()).str().c_str());
+      }
+    }
+  }
+
+  if (OET) {
+    genTypeCheck(OET, "aout");
+  }
+
+  if (Ins.size() == 1 && (EF->hasOut() || EF->hasReturn())) {
+    mOut.indent() << "Type t0, t1;";
+    genPairwiseDimCheck("ain", "aout");
+
+  } else if (Ins.size() > 1) {
+    mOut.indent() << "Type t0, t1;";
+
+    std::string In0Name = "ain_" + Ins[0]->getName().str();
+
+    for (size_t index = 1; index < Ins.size(); ++index) {
+      genPairwiseDimCheck(In0Name, "ain_" + Ins[index]->getName().str());
+    }
+
+    if (EF->hasOut() || EF->hasReturn()) {
+      genPairwiseDimCheck(In0Name, "aout");
+    }
+  }
+
+  std::string FieldPackerName = EF->getName() + "_fp";
+  if (ERT) {
+    if (genCreateFieldPacker(ERT, FieldPackerName.c_str())) {
+      genPackVarOfType(ERT, nullptr, FieldPackerName.c_str());
+    }
+  }
+  mOut.indent() << "forEach(" << RS_EXPORT_FOREACH_INDEX_PREFIX
+                << EF->getName();
+
+  if (Ins.size() == 1) {
+    mOut << ", ain";
+  } else if (Ins.size() > 1) {
+    mOut << ", new Allocation[]{ain_" << Ins[0]->getName().str();
+
+    for (size_t index = 1; index < Ins.size(); ++index) {
+      mOut << ", ain_" << Ins[index]->getName().str();
+    }
+
+    mOut << "}";
+
+  } else {
+    mOut << ", (Allocation) null";
+  }
+
+  if (EF->hasOut() || EF->hasReturn())
+    mOut << ", aout";
+  else
+    mOut << ", null";
+
+  if (EF->hasUsrData())
+    mOut << ", " << FieldPackerName;
+  else
+    mOut << ", null";
+
+  if (mRSContext->getTargetAPI() >= SLANG_JB_MR2_TARGET_API) {
+    mOut << ", sc);\n";
+  } else {
+    mOut << ");\n";
+  }
+
+  endFunction();
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// Reductions with certain legal result types can only be reflected for NDK, not for Java.
+bool RSReflectionJava::exportableReduce(const RSExportType *ResultType) {
+  const RSExportType *CheckType = ResultType;
+  if (ResultType->getClass() == RSExportType::ExportClassConstantArray)
+    CheckType = static_cast<const RSExportConstantArrayType *>(ResultType)->getElementType();
+  if (CheckType->getClass() == RSExportType::ExportClassRecord) {
+    // No Java reflection for struct until http://b/22236498 is resolved.
+    return false;
+  }
+
+  return true;
+}
+
+namespace {
+enum MappingComment { MappingCommentWithoutType, MappingCommentWithCType };
+
+// OUTPUTS
+//   InputParamName      = name to use for input parameter
+//   InputMappingComment = text showing the mapping from InputParamName to the corresponding
+//                           accumulator function parameter name (and possibly type)
+// INPUTS
+//   NamePrefix          = beginning of parameter name (e.g., "in")
+//   MappingComment      = whether or not InputMappingComment should contain type
+//   ER                  = description of the reduction
+//   InIdx               = which input (numbered from zero)
+void getReduceInputStrings(std::string &InputParamName, std::string &InputMappingComment,
+                           const std::string &NamePrefix, MappingComment Mapping,
+                           const RSExportReduce *ER, size_t InIdx) {
+  InputParamName = NamePrefix + std::to_string(InIdx+1);
+  std::string TypeString;
+  if (Mapping == MappingCommentWithCType) {
+    const RSExportType *InType = ER->getAccumulatorInTypes()[InIdx];
+    if (InType->getClass() == RSExportType::ExportClassRecord) {
+      // convertToRTD doesn't understand this type
+      TypeString = "/* struct <> */ ";
+    } else {
+      RSReflectionTypeData InTypeData;
+      ER->getAccumulatorInTypes()[InIdx]->convertToRTD(&InTypeData);
+      slangAssert(InTypeData.type->s_name != nullptr);
+      if (InTypeData.vecSize > 1) {
+        TypeString = InTypeData.type->s_name + std::to_string(InTypeData.vecSize) + " ";
+      } else {
+        TypeString = InTypeData.type->s_name + std::string(" ");
+      }
+    }
+  }
+  InputMappingComment = InputParamName + " = \"" + TypeString + std::string(ER->getAccumulatorIns()[InIdx]->getName()) + "\"";
+}
+
+} // end anonymous namespace
+
+void RSReflectionJava::genExportReduce(const RSExportReduce *ER) {
+  if (!exportableReduce(ER->getResultType()))
+    return;
+
+  // Generate the reflected function index.
+  mOut.indent() << "private final static int " << RS_EXPORT_REDUCE_INDEX_PREFIX
+                << ER->getNameReduce() << " = " << getNextExportReduceSlot()
+                << ";\n";
+
+  /****** remember resultSvType generation **********************************************************/
+
+  // Two variants of reduce_* entry points get generated.
+  // Array variant:
+  //   result_<resultSvType> reduce_<name>(<devecSiIn1Type>[] in1, ..., <devecSiInNType>[] inN)
+  // Allocation variant:
+  //   result_<resultSvType> reduce_<name>(Allocation in1, ..., Allocation inN)
+  //   result_<resultSvType> reduce_<name>(Allocation in1, ..., Allocation inN, Script.LaunchOptions sc)
+
+  genExportReduceArrayVariant(ER);
+  genExportReduceAllocationVariant(ER);
+}
+
+void RSReflectionJava::genExportReduceArrayVariant(const RSExportReduce *ER) {
+  // Analysis of result type.  Returns early if result type is not
+  // suitable for array method reflection.
+  const RSExportType *const ResultType = ER->getResultType();
+  auto ResultTypeClass = ResultType->getClass();
+  switch (ResultTypeClass) {
+      case RSExportType::ExportClassConstantArray:
+      case RSExportType::ExportClassMatrix:
+      case RSExportType::ExportClassPrimitive:
+      case RSExportType::ExportClassVector:
+        // Ok
+        break;
+
+      case RSExportType::ExportClassPointer:
+        slangAssert(!"Should not get here with pointer type");
+        return;
+
+      case RSExportType::ExportClassRecord:
+        // TODO: convertToRTD() cannot handle this.  Why not?
+        return;
+
+      default:
+        slangAssert(!"Unknown export class");
+        return;
+  }
+  RSReflectionTypeData ResultTypeData;
+  ResultType->convertToRTD(&ResultTypeData);
+  if (!ResultTypeData.type->java_name || !ResultTypeData.type->java_array_element_name ||
+      (ResultTypeData.vecSize > 1 && !ResultTypeData.type->rs_java_vector_prefix)) {
+    slangAssert(false);
+    return;
+  }
+  const std::string ResultTypeName = GetReduceResultTypeName(ER);
+
+  // Analysis of inputs.  Returns early if some input type is not
+  // suitable for array method reflection.
+  llvm::SmallVector<RSReflectionTypeData, 1> InsTypeData;
+  ArgTy Args;
+  const auto &Ins = ER->getAccumulatorIns();
+  const auto &InTypes = ER->getAccumulatorInTypes();
+  slangAssert(Ins.size() == InTypes.size());
+  InsTypeData.resize(Ins.size());
+  llvm::SmallVector<std::string, 1> InComments;
+  for (size_t InIdx = 0, InEnd = Ins.size(); InIdx < InEnd; ++InIdx) {
+    const RSExportType *const InType = InTypes[InIdx];
+    switch (InType->getClass()) {
+      case RSExportType::ExportClassMatrix:
+      case RSExportType::ExportClassPrimitive:
+      case RSExportType::ExportClassVector:
+        // Ok
+        break;
+
+      case RSExportType::ExportClassConstantArray:
+        // No
+        return;
+
+      case RSExportType::ExportClassPointer:
+        slangAssert(!"Should not get here with pointer type");
+        return;
+
+      case RSExportType::ExportClassRecord:
+        // TODO: convertToRTD() cannot handle this.  Why not?
+        return;
+
+      default:
+        slangAssert(!"Unknown export class");
+        return;
+    }
+
+    RSReflectionTypeData &InTypeData = InsTypeData[InIdx];
+    InType->convertToRTD(&InTypeData);
+    if (!InTypeData.type->java_name || !InTypeData.type->java_array_element_name ||
+        (InTypeData.vecSize > 1 && !InTypeData.type->rs_java_vector_prefix)) {
+      return;
+    }
+
+    std::string InputParamName, InputComment;
+    getReduceInputStrings(InputParamName, InputComment, "in", MappingCommentWithoutType, ER, InIdx);
+    if (InTypeData.vecSize > 1)
+      InputComment += (", flattened " + std::to_string(InTypeData.vecSize) + "-vectors");
+    InComments.push_back(InputComment);
+
+    const std::string InputTypeName = std::string(InTypeData.type->java_array_element_name) + "[]";
+    Args.push_back(std::make_pair(InputTypeName, InputParamName));
+  }
+
+  const std::string MethodName = "reduce_" + ER->getNameReduce();
+
+  // result_<resultSvType> reduce_<name>(<devecSiIn1Type>[] in1, ..., <devecSiInNType>[] inN)
+
+  for (const std::string &InComment : InComments)
+    mOut.indent() << "// " << InComment << "\n";
+  startFunction(AM_Public, false, ResultTypeName.c_str(), MethodName, Args);
+  slangAssert(Ins.size() == InTypes.size());
+  slangAssert(Ins.size() == InsTypeData.size());
+  slangAssert(Ins.size() == Args.size());
+  std::string In1Length;
+  std::string InputAllocationOutgoingArgumentList;
+  std::vector<std::string> InputAllocationNames;
+  for (size_t InIdx = 0, InEnd = Ins.size(); InIdx < InEnd; ++InIdx) {
+    const std::string &ArgName = Args[InIdx].second;
+    genNullArrayCheck(ArgName);
+    std::string InLength = ArgName + ".length";
+    const uint32_t VecSize = InsTypeData[InIdx].vecSize;
+    if (VecSize > 1) {
+      InLength += " / " + std::to_string(VecSize);
+      genVectorLengthCompatibilityCheck(ArgName, VecSize);
+    }
+    if (InIdx == 0) {
+      In1Length = InLength;
+    } else {
+      mOut.indent() << "// Verify that input array lengths are the same.\n";
+      mOut.indent() << "if (" << In1Length << " != " << InLength << ") {\n";
+      mOut.indent() << "    throw new RSRuntimeException(\"Array length mismatch "
+                    << "between parameters \\\"" << Args[0].second << "\\\" and \\\"" << ArgName
+                    << "\\\"!\");\n";
+      mOut.indent() << "}\n";
+    }
+    // Create a temporary input allocation
+    const std::string TempName = "a" + ArgName;
+    mOut.indent() << "Allocation " << TempName << " = Allocation.createSized("
+                  << SAVED_RS_REFERENCE << ", "
+                  << RS_ELEM_PREFIX << InTypes[InIdx]->getElementName() << ", "
+                  << InLength << ");\n";
+    mOut.indent() << TempName << ".setAutoPadding(true);\n";
+    mOut.indent() << TempName << ".copyFrom(" << ArgName << ");\n";
+    // ... and put that input allocation on the outgoing argument list
+    if (!InputAllocationOutgoingArgumentList.empty())
+      InputAllocationOutgoingArgumentList += ", ";
+    InputAllocationOutgoingArgumentList += TempName;
+    // ... and keep track of it for setting result.mTempIns
+    InputAllocationNames.push_back(TempName);
+  }
+
+  mOut << "\n";
+  mOut.indent() << ResultTypeName << " result = " << MethodName << "(" << InputAllocationOutgoingArgumentList << ", null);\n";
+  if (!InputAllocationNames.empty()) {
+    mOut.indent() << "result.mTempIns = new Allocation[]{";
+    bool EmittedFirst = false;
+    for (const std::string &InputAllocationName : InputAllocationNames) {
+      if (!EmittedFirst) {
+        EmittedFirst = true;
+      } else {
+        mOut << ", ";
+      }
+      mOut << InputAllocationName;
+    }
+    mOut << "};\n";
+  }
+  mOut.indent() << "return result;\n";
+  endFunction();
+}
+
+void RSReflectionJava::genExportReduceAllocationVariant(const RSExportReduce *ER) {
+  const auto &Ins = ER->getAccumulatorIns();
+  const auto &InTypes = ER->getAccumulatorInTypes();
+  const RSExportType *ResultType = ER->getResultType();
+
+  llvm::SmallVector<std::string, 1> InComments;
+  ArgTy Args;
+  for (size_t InIdx = 0, InEnd = Ins.size(); InIdx < InEnd; ++InIdx) {
+    std::string InputParamName, InputComment;
+    getReduceInputStrings(InputParamName, InputComment, "ain", MappingCommentWithCType, ER, InIdx);
+    InComments.push_back(InputComment);
+    Args.push_back(std::make_pair("Allocation", InputParamName));
+  }
+
+  const std::string MethodName = "reduce_" + ER->getNameReduce();
+  const std::string ResultTypeName = GetReduceResultTypeName(ER);
+
+  // result_<resultSvType> reduce_<name>(Allocation in1, ..., Allocation inN)
+
+  for (const std::string &InComment : InComments)
+    mOut.indent() << "// " << InComment << "\n";
+  startFunction(AM_Public, false, ResultTypeName.c_str(), MethodName, Args);
+  mOut.indent() << "return " << MethodName << "(";
+  bool EmittedFirstArg = false;
+  for (const auto &Arg : Args) {
+    if (!EmittedFirstArg) {
+      EmittedFirstArg = true;
+    } else {
+      mOut << ", ";
+    }
+    mOut << Arg.second;
+  }
+  mOut << ", null);\n";
+  endFunction();
+
+  // result_<resultSvType> reduce_<name>(Allocation in1, ..., Allocation inN, Script.LaunchOptions sc)
+
+  static const char FormalOptionsName[] = "sc";
+  Args.push_back(std::make_pair("Script.LaunchOptions", FormalOptionsName));
+  for (const std::string &InComment : InComments)
+    mOut.indent() << "// " << InComment << "\n";
+  startFunction(AM_Public, false, ResultTypeName.c_str(), MethodName, Args);
+  const std::string &In0Name = Args[0].second;
+  // Sanity-check inputs
+  if (Ins.size() > 1)
+    mOut.indent() << "Type t0, t1;\n";
+  for (size_t InIdx = 0, InEnd = Ins.size(); InIdx < InEnd; ++InIdx) {
+    const std::string &InName = Args[InIdx].second;
+    genTypeCheck(InTypes[InIdx], InName.c_str());
+    if (InIdx > 0)
+      genPairwiseDimCheck(In0Name.c_str(), InName.c_str());
+  }
+  // Create a temporary output allocation
+  const char OutputAllocName[] = "aout";
+  const size_t OutputAllocLength =
+      ResultType->getClass() == RSExportType::ExportClassConstantArray
+      ? static_cast<const RSExportConstantArrayType *>(ResultType)->getNumElement()
+      : 1;
+  mOut.indent() << "Allocation " << OutputAllocName << " = Allocation.createSized("
+                << SAVED_RS_REFERENCE << ", "
+                << RS_ELEM_PREFIX << ResultType->getElementName() << ", "
+                << OutputAllocLength << ");\n";
+  mOut.indent() << OutputAllocName << ".setAutoPadding(true);\n";
+  // Call the underlying reduce entry point
+  mOut.indent() << "reduce(" << RS_EXPORT_REDUCE_INDEX_PREFIX << ER->getNameReduce()
+                << ", new Allocation[]{" << In0Name;
+  for (size_t InIdx = 1, InEnd = Ins.size(); InIdx < InEnd; ++InIdx)
+    mOut << ", " << Args[InIdx].second;
+  mOut << "}, " << OutputAllocName << ", " << FormalOptionsName << ");\n";
+  mOut.indent() << "return new " << ResultTypeName << "(" << OutputAllocName << ");\n";
+  endFunction();
+}
+
+namespace {
+
+// When we've copied the Allocation to a Java array, how do we
+// further process the elements of that array?
+enum MapFromAllocation {
+  MapFromAllocationTrivial,  // no further processing
+  MapFromAllocationPositive, // need to ensure elements are positive (range check)
+  MapFromAllocationBoolean,  // need to convert elements from byte to boolean
+  MapFromAllocationPromote   // need to zero extend elements
+};
+
+// Return Java expression that maps from an Allocation element to a Java non-vector result.
+//
+// MFA                     = mapping kind
+// ArrayElementTypeName    = type of InVal (having been copied out of Allocation to Java array)
+// ReflectedScalarTypeName = type of mapped value
+// InVal                   = input value that must be mapped
+//
+std::string genReduceResultMapping(MapFromAllocation MFA,
+                                   const std::string &ArrayElementTypeName,
+                                   const std::string &ReflectedScalarTypeName,
+                                   const char *InVal) {
+  switch (MFA) {
+    default:
+      slangAssert(!"Unknown MapFromAllocation");
+      // and fall through
+    case MapFromAllocationPositive: // range checking must be done separately
+    case MapFromAllocationTrivial:
+      return InVal;
+    case MapFromAllocationBoolean:
+      return std::string(InVal) + std::string(" != 0");
+    case MapFromAllocationPromote:
+      return ZeroExtendValue(InVal,
+                             ArrayElementTypeName,
+                             ReflectedScalarTypeName);
+  }
+}
+
+// Return Java expression that maps from an Allocation element to a Java vector result.
+//
+// MFA                     = mapping kind
+// ArrayElementTypeName    = type of InVal (having been copied out of Allocation to Java array)
+// ReflectedScalarTypeName = type of mapped value
+// VectorTypeName          = type of vector
+// VectorElementCount      = number of elements in the vector
+// InArray                 = input array containing vector elements
+// InIdx                   = index of first vector element within InArray (or nullptr, if 0)
+//
+std::string genReduceResultVectorMapping(MapFromAllocation MFA,
+                                         const std::string &ArrayElementTypeName,
+                                         const std::string &ReflectedScalarTypeName,
+                                         const std::string &VectorTypeName,
+                                         unsigned VectorElementCount,
+                                         const char *InArray, const char *InIdx = nullptr) {
+  std::string result = "new " + VectorTypeName + "(";
+  for (unsigned VectorElementIdx = 0; VectorElementIdx < VectorElementCount; ++VectorElementIdx) {
+    if (VectorElementIdx)
+     result += ", ";
+
+    std::string ArrayElementName = std::string(InArray) + "[";
+    if (InIdx)
+      ArrayElementName += std::string(InIdx) + "+";
+    ArrayElementName += std::to_string(VectorElementIdx) + "]";
+
+    result += genReduceResultMapping(MFA, ArrayElementTypeName, ReflectedScalarTypeName,
+                                     ArrayElementName.c_str());
+  }
+  result += ")";
+  return result;
+}
+
+void genReduceResultRangeCheck(GeneratedFile &Out, const char *InVal) {
+  Out.indent() << "if (" << InVal << " < 0)\n";
+  Out.indent() << "    throw new RSRuntimeException(\"Result is not representible in Java\");\n";
+}
+
+} // end anonymous namespace
+
+void RSReflectionJava::genExportReduceResultType(const RSExportType *ResultType) {
+  if (!exportableReduce(ResultType))
+    return;
+
+  const std::string ClassName = GetReduceResultTypeName(ResultType);
+  const std::string GetMethodReturnTypeName = GetTypeName(ResultType);
+  mOut.indent() << "// To obtain the result, invoke get(), which blocks\n";
+  mOut.indent() << "// until the asynchronously-launched operation has completed.\n";
+  mOut.indent() << "public static class " << ClassName;
+  mOut.startBlock();
+  startFunction(AM_Public, false, GetMethodReturnTypeName.c_str(), "get", 0);
+
+  RSReflectionTypeData TypeData;
+  ResultType->convertToRTD(&TypeData);
+
+  const std::string UnbracketedResultTypeName =
+      GetTypeName(ResultType, TypeNameDefault & ~TypeNameWithConstantArrayBrackets);
+  const std::string ReflectedScalarTypeName = TypeData.type->java_name;
+  // Note: MATRIX* types do not have a java_array_element_name
+  const std::string ArrayElementTypeName =
+      TypeData.type->java_array_element_name
+      ? std::string(TypeData.type->java_array_element_name)
+      : ReflectedScalarTypeName;
+
+  MapFromAllocation MFA = MapFromAllocationTrivial;
+  if (std::string(TypeData.type->rs_type) == "UNSIGNED_64")
+    MFA = MapFromAllocationPositive;
+  else if (ReflectedScalarTypeName == "boolean")
+    MFA = MapFromAllocationBoolean;
+  else if (ReflectedScalarTypeName != ArrayElementTypeName)
+    MFA = MapFromAllocationPromote;
+
+  mOut.indent() << "if (!mGotResult)";
+  mOut.startBlock();
+
+  if (TypeData.vecSize == 1) { // result type is non-vector
+    // <ArrayElementType>[] outArray = new <ArrayElementType>[1];
+    // mOut.copyTo(outArray);
+    mOut.indent() << ArrayElementTypeName << "[] outArray = new " << ArrayElementTypeName
+                  << "[" << std::max(TypeData.arraySize, 1U) << "];\n";
+    mOut.indent() << "mOut.copyTo(outArray);\n";
+    if (TypeData.arraySize == 0) { // result type is non-array non-vector
+      // mResult = outArray[0]; // but there are several special cases
+      if (MFA == MapFromAllocationPositive)
+        genReduceResultRangeCheck(mOut, "outArray[0]");
+      mOut.indent() << "mResult = "
+                    << genReduceResultMapping(MFA, ArrayElementTypeName, ReflectedScalarTypeName,
+                                              "outArray[0]")
+                    << ";\n";
+    } else { // result type is array of non-vector
+      if (MFA == MapFromAllocationTrivial) {
+        // mResult = outArray;
+        mOut.indent() << "mResult = outArray;\n";
+      } else {
+        // <ResultType> result = new <UnbracketedResultType>[<ArrayElementCount>];
+        // for (unsigned Idx = 0; Idx < <ArrayElementCount>; ++Idx)
+        //   result[Idx] = <Transform>(outArray[Idx]);
+        // mResult = result; // but there are several special cases
+        if (MFA != MapFromAllocationPositive) {
+          mOut.indent() << GetTypeName(ResultType) << " result = new "
+                        << UnbracketedResultTypeName
+                        << "[" << TypeData.arraySize << "];\n";
+        }
+        mOut.indent() << "for (int Idx = 0; Idx < " << TypeData.arraySize << "; ++Idx)";
+        mOut.startBlock();
+        if (MFA == MapFromAllocationPositive) {
+          genReduceResultRangeCheck(mOut, "outArray[Idx]");
+        } else {
+          mOut.indent() << "result[Idx] = "
+                        << genReduceResultMapping(MFA, ArrayElementTypeName, ReflectedScalarTypeName,
+                                                     "outArray[Idx]")
+                        << ";\n";
+        }
+        mOut.endBlock();
+        mOut.indent() << "mResult = " << (MFA == MapFromAllocationPositive ? "outArray" : "result") << ";\n";
+      }
+    }
+  } else { // result type is vector or array of vector
+    // <ArrayElementType>[] outArray = new <ArrayElementType>[<VectorElementCount> * <ArrayElementCount>];
+    // mOut.copyTo(outArray);
+    const unsigned VectorElementCount = TypeData.vecSize;
+    const unsigned OutArrayElementCount = VectorElementCount * std::max(TypeData.arraySize, 1U);
+    mOut.indent() << ArrayElementTypeName << "[] outArray = new " << ArrayElementTypeName
+                  << "[" << OutArrayElementCount << "];\n";
+    mOut.indent() << "mOut.copyTo(outArray);\n";
+    if (MFA == MapFromAllocationPositive) {
+      mOut.indent() << "for (int Idx = 0; Idx < " << OutArrayElementCount << "; ++Idx)";
+      mOut.startBlock();
+      genReduceResultRangeCheck(mOut, "outArray[Idx]");
+      mOut.endBlock();
+    }
+    if (TypeData.arraySize == 0) { // result type is vector
+      // mResult = new <ResultType>(outArray[0], outArray[1] ...); // but there are several special cases
+      mOut.indent() << "mResult = "
+                    << genReduceResultVectorMapping(MFA,
+                                                    ArrayElementTypeName, ReflectedScalarTypeName,
+                                                    GetTypeName(ResultType), VectorElementCount,
+                                                    "outArray")
+                    << ";\n";
+    } else { // result type is array of vector
+      // <ResultType> result = new <UnbracketedResultType>[<ArrayElementCount>];
+      // for (unsigned Idx = 0; Idx < <ArrayElementCount>; ++Idx)
+      //   result[Idx] = new <UnbracketedResultType>(outArray[<ArrayElementCount>*Idx+0],
+      //                                             outArray[<ArrayElementCount>*Idx+1]...);
+      // mResult = result; // but there are several special cases
+      mOut.indent() << GetTypeName(ResultType) << " result = new "
+                    << UnbracketedResultTypeName
+                    << "[" << TypeData.arraySize << "];\n";
+      mOut.indent() << "for (int Idx = 0; Idx < " << TypeData.arraySize << "; ++Idx)";
+      mOut.startBlock();
+      mOut.indent() << "result[Idx] = "
+                    << genReduceResultVectorMapping(MFA,
+                                                    ArrayElementTypeName, ReflectedScalarTypeName,
+                                                    UnbracketedResultTypeName, VectorElementCount,
+                                                    "outArray", (std::to_string(VectorElementCount) + "*Idx").c_str())
+                    << ";\n";
+      mOut.endBlock();
+      mOut.indent() << "mResult = result;\n";
+    }
+  }
+
+  mOut.indent() << "mOut.destroy();\n";
+  mOut.indent() << "mOut = null;  // make Java object eligible for garbage collection\n";
+  mOut.indent() << "if (mTempIns != null)";
+  mOut.startBlock();
+  mOut.indent() << "for (Allocation tempIn : mTempIns)";
+  mOut.startBlock();
+  mOut.indent() << "tempIn.destroy();\n";
+  mOut.endBlock();
+  mOut.indent() << "mTempIns = null;  // make Java objects eligible for garbage collection\n";
+  mOut.endBlock();
+  mOut.indent() << "mGotResult = true;\n";
+  mOut.endBlock();
+
+  mOut.indent() << "return mResult;\n";
+  endFunction();
+
+  startFunction(AM_Private, false, nullptr, ClassName, 1, "Allocation", "out");
+  // TODO: Generate allocation type check and size check?  Or move
+  // responsibility for instantiating the Allocation here, instead of
+  // the reduce_* method?
+  mOut.indent() << "mTempIns = null;\n";
+  mOut.indent() << "mOut = out;\n";
+  mOut.indent() << "mGotResult = false;\n";
+  endFunction();
+  mOut.indent() << "private Allocation[] mTempIns;\n";
+  mOut.indent() << "private Allocation mOut;\n";
+  // TODO: If result is reference type rather than primitive type, we
+  // could omit mGotResult and use mResult==null to indicate that we
+  // haven't obtained the result yet.
+  mOut.indent() << "private boolean mGotResult;\n";
+  mOut.indent() << "private " << GetMethodReturnTypeName << " mResult;\n";
+  mOut.endBlock();
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////
+
+void RSReflectionJava::genTypeInstanceFromPointer(const RSExportType *ET) {
+  if (ET->getClass() == RSExportType::ExportClassPointer) {
+    // For pointer parameters to original forEach kernels.
+    const RSExportPointerType *EPT =
+        static_cast<const RSExportPointerType *>(ET);
+    genTypeInstance(EPT->getPointeeType());
+  } else {
+    // For handling pass-by-value kernel parameters.
+    genTypeInstance(ET);
+  }
+}
+
+void RSReflectionJava::genTypeInstance(const RSExportType *ET) {
+  switch (ET->getClass()) {
+  case RSExportType::ExportClassPrimitive:
+  case RSExportType::ExportClassVector:
+  case RSExportType::ExportClassConstantArray: {
+    std::string TypeName = ET->getElementName();
+    if (addTypeNameForElement(TypeName)) {
+      mOut.indent() << RS_ELEM_PREFIX << TypeName << " = Element." << TypeName
+                    << "(rs);\n";
+    }
+    break;
+  }
+
+  case RSExportType::ExportClassRecord: {
+    std::string ClassName = ET->getElementName();
+    if (addTypeNameForElement(ClassName)) {
+      mOut.indent() << RS_ELEM_PREFIX << ClassName << " = " << ClassName
+                    << ".createElement(rs);\n";
+    }
+    break;
+  }
+
+  default:
+    break;
+  }
+}
+
+void RSReflectionJava::genFieldPackerInstance(const RSExportType *ET) {
+  switch (ET->getClass()) {
+  case RSExportType::ExportClassPrimitive:
+  case RSExportType::ExportClassVector:
+  case RSExportType::ExportClassConstantArray:
+  case RSExportType::ExportClassRecord: {
+    std::string TypeName = ET->getElementName();
+    addTypeNameForFieldPacker(TypeName);
+    break;
+  }
+
+  default:
+    break;
+  }
+}
+
+void RSReflectionJava::genTypeCheck(const RSExportType *ET,
+                                    const char *VarName) {
+  mOut.indent() << "// check " << VarName << "\n";
+
+  if (ET->getClass() == RSExportType::ExportClassPointer) {
+    const RSExportPointerType *EPT =
+        static_cast<const RSExportPointerType *>(ET);
+    ET = EPT->getPointeeType();
+  }
+
+  std::string TypeName;
+
+  switch (ET->getClass()) {
+  case RSExportType::ExportClassPrimitive:
+  case RSExportType::ExportClassVector:
+  case RSExportType::ExportClassRecord: {
+    TypeName = ET->getElementName();
+    break;
+  }
+
+  default:
+    break;
+  }
+
+  if (!TypeName.empty()) {
+    mOut.indent() << "if (!" << VarName
+                  << ".getType().getElement().isCompatible(" RS_ELEM_PREFIX
+                  << TypeName << ")) {\n";
+    mOut.indent() << "    throw new RSRuntimeException(\"Type mismatch with "
+                  << TypeName << "!\");\n";
+    mOut.indent() << "}\n";
+  }
+}
+
+void RSReflectionJava::genPrimitiveTypeExportVariable(const RSExportVar *EV) {
+  slangAssert(
+      (EV->getType()->getClass() == RSExportType::ExportClassPrimitive) &&
+      "Variable should be type of primitive here");
+
+  const RSExportPrimitiveType *EPT =
+      static_cast<const RSExportPrimitiveType *>(EV->getType());
+  std::string TypeName = GetTypeName(EPT);
+  const std::string &VarName = EV->getName();
+
+  genPrivateExportVariable(TypeName, EV->getName());
+
+  if (EV->isConst()) {
+    mOut.indent() << "public final static " << TypeName
+                  << " " RS_EXPORT_VAR_CONST_PREFIX << VarName << " = ";
+    const clang::APValue &Val = EV->getInit();
+    genInitValue(Val, EPT->getType() == DataTypeBoolean);
+    mOut << ";\n";
+  } else {
+    // set_*()
+    // This must remain synchronized, since multiple Dalvik threads may
+    // be calling setters.
+    startFunction(AM_PublicSynchronized, false, "void", "set_" + VarName, 1,
+                  TypeName.c_str(), "v");
+    if ((EPT->getElementSizeInBytes() < 4) || EV->isUnsigned()) {
+      // We create/cache a per-type FieldPacker. This allows us to reuse the
+      // validation logic (for catching negative inputs from Dalvik, as well
+      // as inputs that are too large to be represented in the unsigned type).
+      // Sub-integer types are also handled specially here, so that we don't
+      // overwrite bytes accidentally.
+      std::string ElemName = EPT->getElementName();
+      std::string FPName;
+      FPName = RS_FP_PREFIX + ElemName;
+      mOut.indent() << "if (" << FPName << "!= null) {\n";
+      mOut.increaseIndent();
+      mOut.indent() << FPName << ".reset();\n";
+      mOut.decreaseIndent();
+      mOut.indent() << "} else {\n";
+      mOut.increaseIndent();
+      mOut.indent() << FPName << " = new FieldPacker(" << EPT->getElementSizeInBytes()
+                    << ");\n";
+      mOut.decreaseIndent();
+      mOut.indent() << "}\n";
+
+      genPackVarOfType(EPT, "v", FPName.c_str());
+      mOut.indent() << "setVar(" << RS_EXPORT_VAR_INDEX_PREFIX << VarName
+                    << ", " << FPName << ");\n";
+    } else {
+      mOut.indent() << "setVar(" << RS_EXPORT_VAR_INDEX_PREFIX << VarName
+                    << ", v);\n";
+    }
+
+    // Dalvik update comes last, since the input may be invalid (and hence
+    // throw an exception).
+    mOut.indent() << RS_EXPORT_VAR_PREFIX << VarName << " = v;\n";
+
+    endFunction();
+  }
+
+  genGetExportVariable(TypeName, VarName);
+  genGetFieldID(VarName);
+}
+
+void RSReflectionJava::genInitValue(const clang::APValue &Val, bool asBool) {
+  switch (Val.getKind()) {
+  case clang::APValue::Int: {
+    const llvm::APInt &api = Val.getInt();
+    if (asBool) {
+      mOut << ((api.getSExtValue() == 0) ? "false" : "true");
+    } else {
+      // TODO: Handle unsigned correctly
+      mOut << api.getSExtValue();
+      if (api.getBitWidth() > 32) {
+        mOut << "L";
+      }
+    }
+    break;
+  }
+
+  case clang::APValue::Float: {
+    const llvm::APFloat &apf = Val.getFloat();
+    llvm::SmallString<30> s;
+    apf.toString(s);
+    mOut << s.c_str();
+    if (&apf.getSemantics() == &llvm::APFloat::IEEEsingle) {
+      if (s.count('.') == 0) {
+        mOut << ".f";
+      } else {
+        mOut << "f";
+      }
+    }
+    break;
+  }
+
+  case clang::APValue::ComplexInt:
+  case clang::APValue::ComplexFloat:
+  case clang::APValue::LValue:
+  case clang::APValue::Vector: {
+    slangAssert(false && "Primitive type cannot have such kind of initializer");
+    break;
+  }
+
+  default: { slangAssert(false && "Unknown kind of initializer"); }
+  }
+}
+
+void RSReflectionJava::genPointerTypeExportVariable(const RSExportVar *EV) {
+  const RSExportType *ET = EV->getType();
+  const RSExportType *PointeeType;
+
+  slangAssert((ET->getClass() == RSExportType::ExportClassPointer) &&
+              "Variable should be type of pointer here");
+
+  PointeeType = static_cast<const RSExportPointerType *>(ET)->getPointeeType();
+  std::string TypeName = GetTypeName(ET);
+  const std::string &VarName = EV->getName();
+
+  genPrivateExportVariable(TypeName, VarName);
+
+  // bind_*()
+  startFunction(AM_Public, false, "void", "bind_" + VarName, 1,
+                TypeName.c_str(), "v");
+
+  mOut.indent() << RS_EXPORT_VAR_PREFIX << VarName << " = v;\n";
+  mOut.indent() << "if (v == null) bindAllocation(null, "
+                << RS_EXPORT_VAR_INDEX_PREFIX << VarName << ");\n";
+
+  if (PointeeType->getClass() == RSExportType::ExportClassRecord) {
+    mOut.indent() << "else bindAllocation(v.getAllocation(), "
+                  << RS_EXPORT_VAR_INDEX_PREFIX << VarName << ");\n";
+  } else {
+    mOut.indent() << "else bindAllocation(v, " << RS_EXPORT_VAR_INDEX_PREFIX
+                  << VarName << ");\n";
+  }
+
+  endFunction();
+
+  genGetExportVariable(TypeName, VarName);
+}
+
+void RSReflectionJava::genVectorTypeExportVariable(const RSExportVar *EV) {
+  slangAssert((EV->getType()->getClass() == RSExportType::ExportClassVector) &&
+              "Variable should be type of vector here");
+
+  std::string TypeName = GetTypeName(EV->getType());
+  std::string VarName = EV->getName();
+
+  genPrivateExportVariable(TypeName, VarName);
+  genSetExportVariable(TypeName, EV, 1);
+  genGetExportVariable(TypeName, VarName);
+  genGetFieldID(VarName);
+}
+
+void RSReflectionJava::genMatrixTypeExportVariable(const RSExportVar *EV) {
+  slangAssert((EV->getType()->getClass() == RSExportType::ExportClassMatrix) &&
+              "Variable should be type of matrix here");
+
+  const RSExportType *ET = EV->getType();
+  std::string TypeName = GetTypeName(ET);
+  const std::string &VarName = EV->getName();
+
+  genPrivateExportVariable(TypeName, VarName);
+
+  // set_*()
+  if (!EV->isConst()) {
+    const char *FieldPackerName = "fp";
+    startFunction(AM_PublicSynchronized, false, "void", "set_" + VarName, 1,
+                  TypeName.c_str(), "v");
+    mOut.indent() << RS_EXPORT_VAR_PREFIX << VarName << " = v;\n";
+
+    if (genCreateFieldPacker(ET, FieldPackerName))
+      genPackVarOfType(ET, "v", FieldPackerName);
+    mOut.indent() << "setVar(" RS_EXPORT_VAR_INDEX_PREFIX << VarName << ", "
+                  << FieldPackerName << ");\n";
+
+    endFunction();
+  }
+
+  genGetExportVariable(TypeName, VarName);
+  genGetFieldID(VarName);
+}
+
+void
+RSReflectionJava::genConstantArrayTypeExportVariable(const RSExportVar *EV) {
+  const RSExportType *const ET = EV->getType();
+  slangAssert(
+      (ET->getClass() == RSExportType::ExportClassConstantArray) &&
+      "Variable should be type of constant array here");
+
+  std::string TypeName = GetTypeName(EV->getType());
+  std::string VarName = EV->getName();
+
+  genPrivateExportVariable(TypeName, VarName);
+  genSetExportVariable(TypeName, EV, static_cast<const RSExportConstantArrayType *>(ET)->getNumElement());
+  genGetExportVariable(TypeName, VarName);
+  genGetFieldID(VarName);
+}
+
+void RSReflectionJava::genRecordTypeExportVariable(const RSExportVar *EV) {
+  slangAssert((EV->getType()->getClass() == RSExportType::ExportClassRecord) &&
+              "Variable should be type of struct here");
+
+  std::string TypeName = GetTypeName(EV->getType());
+  std::string VarName = EV->getName();
+
+  genPrivateExportVariable(TypeName, VarName);
+  genSetExportVariable(TypeName, EV, 1);
+  genGetExportVariable(TypeName, VarName);
+  genGetFieldID(VarName);
+}
+
+void RSReflectionJava::genPrivateExportVariable(const std::string &TypeName,
+                                                const std::string &VarName) {
+  mOut.indent() << "private " << TypeName << " " << RS_EXPORT_VAR_PREFIX
+                << VarName << ";\n";
+}
+
+// Dimension = array element count; otherwise, 1.
+void RSReflectionJava::genSetExportVariable(const std::string &TypeName,
+                                            const RSExportVar *EV,
+                                            unsigned Dimension) {
+  if (!EV->isConst()) {
+    const char *FieldPackerName = "fp";
+    const std::string &VarName = EV->getName();
+    const RSExportType *ET = EV->getType();
+    startFunction(AM_PublicSynchronized, false, "void", "set_" + VarName, 1,
+                  TypeName.c_str(), "v");
+    mOut.indent() << RS_EXPORT_VAR_PREFIX << VarName << " = v;\n";
+
+    if (genCreateFieldPacker(ET, FieldPackerName))
+      genPackVarOfType(ET, "v", FieldPackerName);
+
+    if (mRSContext->getTargetAPI() < SLANG_JB_TARGET_API) {
+      // Legacy apps must use the old setVar() without Element/dim components.
+      mOut.indent() << "setVar(" << RS_EXPORT_VAR_INDEX_PREFIX << VarName
+                    << ", " << FieldPackerName << ");\n";
+    } else {
+      // We only have support for one-dimensional array reflection today,
+      // but the entry point (i.e. setVar()) takes an array of dimensions.
+      mOut.indent() << "int []__dimArr = new int[1];\n";
+      mOut.indent() << "__dimArr[0] = " << Dimension << ";\n";
+      mOut.indent() << "setVar(" << RS_EXPORT_VAR_INDEX_PREFIX << VarName
+                    << ", " << FieldPackerName << ", " << RS_ELEM_PREFIX
+                    << ET->getElementName() << ", __dimArr);\n";
+    }
+
+    endFunction();
+  }
+}
+
+void RSReflectionJava::genGetExportVariable(const std::string &TypeName,
+                                            const std::string &VarName) {
+  startFunction(AM_Public, false, TypeName.c_str(), "get_" + VarName, 0);
+
+  mOut.indent() << "return " << RS_EXPORT_VAR_PREFIX << VarName << ";\n";
+
+  endFunction();
+}
+
+void RSReflectionJava::genGetFieldID(const std::string &VarName) {
+  // We only generate getFieldID_*() for non-Pointer (bind) types.
+  if (mRSContext->getTargetAPI() >= SLANG_JB_MR1_TARGET_API) {
+    startFunction(AM_Public, false, "Script.FieldID", "getFieldID_" + VarName,
+                  0);
+
+    mOut.indent() << "return createFieldID(" << RS_EXPORT_VAR_INDEX_PREFIX
+                  << VarName << ", null);\n";
+
+    endFunction();
+  }
+}
+
+/******************* Methods to generate script class /end *******************/
+
+bool RSReflectionJava::genCreateFieldPacker(const RSExportType *ET,
+                                            const char *FieldPackerName) {
+  size_t AllocSize = ET->getAllocSize();
+  if (AllocSize > 0)
+    mOut.indent() << "FieldPacker " << FieldPackerName << " = new FieldPacker("
+                  << AllocSize << ");\n";
+  else
+    return false;
+  return true;
+}
+
+void RSReflectionJava::genPackVarOfType(const RSExportType *ET,
+                                        const char *VarName,
+                                        const char *FieldPackerName) {
+  switch (ET->getClass()) {
+  case RSExportType::ExportClassPrimitive:
+  case RSExportType::ExportClassVector: {
+    mOut.indent() << FieldPackerName << "."
+                  << GetPackerAPIName(
+                         static_cast<const RSExportPrimitiveType *>(ET)) << "("
+                  << VarName << ");\n";
+    break;
+  }
+  case RSExportType::ExportClassPointer: {
+    // Must reflect as type Allocation in Java
+    const RSExportType *PointeeType =
+        static_cast<const RSExportPointerType *>(ET)->getPointeeType();
+
+    if (PointeeType->getClass() != RSExportType::ExportClassRecord) {
+      mOut.indent() << FieldPackerName << ".addI32(" << VarName
+                    << ".getPtr());\n";
+    } else {
+      mOut.indent() << FieldPackerName << ".addI32(" << VarName
+                    << ".getAllocation().getPtr());\n";
+    }
+    break;
+  }
+  case RSExportType::ExportClassMatrix: {
+    mOut.indent() << FieldPackerName << ".addMatrix(" << VarName << ");\n";
+    break;
+  }
+  case RSExportType::ExportClassConstantArray: {
+    const RSExportConstantArrayType *ECAT =
+        static_cast<const RSExportConstantArrayType *>(ET);
+
+    // TODO(zonr): more elegant way. Currently, we obtain the unique index
+    //             variable (this method involves recursive call which means
+    //             we may have more than one level loop, therefore we can't
+    //             always use the same index variable name here) name given
+    //             in the for-loop from counting the '.' in @VarName.
+    unsigned Level = 0;
+    size_t LastDotPos = 0;
+    std::string ElementVarName(VarName);
+
+    while (LastDotPos != std::string::npos) {
+      LastDotPos = ElementVarName.find_first_of('.', LastDotPos + 1);
+      Level++;
+    }
+    std::string IndexVarName("ct");
+    IndexVarName.append(llvm::utostr_32(Level));
+
+    mOut.indent() << "for (int " << IndexVarName << " = 0; " << IndexVarName
+                  << " < " << ECAT->getNumElement() << "; " << IndexVarName << "++)";
+    mOut.startBlock();
+
+    ElementVarName.append("[" + IndexVarName + "]");
+    genPackVarOfType(ECAT->getElementType(), ElementVarName.c_str(),
+                     FieldPackerName);
+
+    mOut.endBlock();
+    break;
+  }
+  case RSExportType::ExportClassRecord: {
+    const RSExportRecordType *ERT = static_cast<const RSExportRecordType *>(ET);
+    // Relative pos from now on in field packer
+    unsigned Pos = 0;
+
+    for (RSExportRecordType::const_field_iterator I = ERT->fields_begin(),
+                                                  E = ERT->fields_end();
+         I != E; I++) {
+      const RSExportRecordType::Field *F = *I;
+      std::string FieldName;
+      size_t FieldOffset = F->getOffsetInParent();
+      const RSExportType *T = F->getType();
+      size_t FieldStoreSize = T->getStoreSize();
+      size_t FieldAllocSize = T->getAllocSize();
+
+      if (VarName != nullptr)
+        FieldName = VarName + ("." + F->getName());
+      else
+        FieldName = F->getName();
+
+      if (FieldOffset > Pos) {
+        mOut.indent() << FieldPackerName << ".skip(" << (FieldOffset - Pos)
+                      << ");\n";
+      }
+
+      genPackVarOfType(F->getType(), FieldName.c_str(), FieldPackerName);
+
+      // There is padding in the field type
+      if (FieldAllocSize > FieldStoreSize) {
+        mOut.indent() << FieldPackerName << ".skip("
+                      << (FieldAllocSize - FieldStoreSize) << ");\n";
+      }
+
+      Pos = FieldOffset + FieldAllocSize;
+    }
+
+    // There maybe some padding after the struct
+    if (ERT->getAllocSize() > Pos) {
+      mOut.indent() << FieldPackerName << ".skip(" << ERT->getAllocSize() - Pos
+                    << ");\n";
+    }
+    break;
+  }
+  default: { slangAssert(false && "Unknown class of type"); }
+  }
+}
+
+void RSReflectionJava::genAllocateVarOfType(const RSExportType *T,
+                                            const std::string &VarName) {
+  switch (T->getClass()) {
+  case RSExportType::ExportClassPrimitive: {
+    // Primitive type like int in Java has its own storage once it's declared.
+    //
+    // FIXME: Should we allocate storage for RS object?
+    // if (static_cast<const RSExportPrimitiveType *>(T)->isRSObjectType())
+    //  mOut.indent() << VarName << " = new " << GetTypeName(T) << "();\n";
+    break;
+  }
+  case RSExportType::ExportClassPointer: {
+    // Pointer type is an instance of Allocation or a TypeClass whose value is
+    // expected to be assigned by programmer later in Java program. Therefore
+    // we don't reflect things like [VarName] = new Allocation();
+    mOut.indent() << VarName << " = null;\n";
+    break;
+  }
+  case RSExportType::ExportClassConstantArray: {
+    const RSExportConstantArrayType *ECAT =
+        static_cast<const RSExportConstantArrayType *>(T);
+    const RSExportType *ElementType = ECAT->getElementType();
+
+    mOut.indent() << VarName << " = new " << GetTypeName(ElementType) << "["
+                  << ECAT->getNumElement() << "];\n";
+
+    // Primitive type element doesn't need allocation code.
+    if (ElementType->getClass() != RSExportType::ExportClassPrimitive) {
+      mOut.indent() << "for (int $ct = 0; $ct < " << ECAT->getNumElement()
+                    << "; $ct++)";
+      mOut.startBlock();
+
+      std::string ElementVarName(VarName);
+      ElementVarName.append("[$ct]");
+      genAllocateVarOfType(ElementType, ElementVarName);
+
+      mOut.endBlock();
+    }
+    break;
+  }
+  case RSExportType::ExportClassVector:
+  case RSExportType::ExportClassMatrix:
+  case RSExportType::ExportClassRecord: {
+    mOut.indent() << VarName << " = new " << GetTypeName(T) << "();\n";
+    break;
+  }
+  }
+}
+
+void RSReflectionJava::genNewItemBufferIfNull(const char *Index) {
+  mOut.indent() << "if (" << RS_TYPE_ITEM_BUFFER_NAME " == null) ";
+  mOut << RS_TYPE_ITEM_BUFFER_NAME << " = new " << RS_TYPE_ITEM_CLASS_NAME
+       << "[getType().getX() /* count */];\n";
+  if (Index != nullptr) {
+    mOut.indent() << "if (" << RS_TYPE_ITEM_BUFFER_NAME << "[" << Index
+                  << "] == null) ";
+    mOut << RS_TYPE_ITEM_BUFFER_NAME << "[" << Index << "] = new "
+         << RS_TYPE_ITEM_CLASS_NAME << "();\n";
+  }
+}
+
+void RSReflectionJava::genNewItemBufferPackerIfNull() {
+  mOut.indent() << "if (" << RS_TYPE_ITEM_BUFFER_PACKER_NAME << " == null) ";
+  mOut << RS_TYPE_ITEM_BUFFER_PACKER_NAME " = new FieldPacker("
+       <<  mItemSizeof << " * getType().getX()/* count */);\n";
+}
+
+/********************** Methods to generate type class  **********************/
+bool RSReflectionJava::genTypeClass(const RSExportRecordType *ERT,
+                                    std::string &ErrorMsg) {
+  std::string ClassName = ERT->getElementName();
+  std::string superClassName = getRSPackageName();
+  superClassName += RS_TYPE_CLASS_SUPER_CLASS_NAME;
+
+  if (!startClass(AM_Public, false, ClassName, superClassName.c_str(),
+                  ErrorMsg))
+    return false;
+
+  mGeneratedFileNames->push_back(ClassName);
+
+  genTypeItemClass(ERT);
+
+  // Declare item buffer and item buffer packer
+  mOut.indent() << "private " << RS_TYPE_ITEM_CLASS_NAME << " "
+                << RS_TYPE_ITEM_BUFFER_NAME << "[];\n";
+  mOut.indent() << "private FieldPacker " << RS_TYPE_ITEM_BUFFER_PACKER_NAME
+                << ";\n";
+  mOut.indent() << "private static java.lang.ref.WeakReference<Element> "
+                << RS_TYPE_ELEMENT_REF_NAME
+                << " = new java.lang.ref.WeakReference<Element>(null);\n";
+
+  genTypeClassConstructor(ERT);
+  genTypeClassCopyToArrayLocal(ERT);
+  genTypeClassCopyToArray(ERT);
+  genTypeClassItemSetter(ERT);
+  genTypeClassItemGetter(ERT);
+  genTypeClassComponentSetter(ERT);
+  genTypeClassComponentGetter(ERT);
+  genTypeClassCopyAll(ERT);
+  if (!mRSContext->isCompatLib()) {
+    // Skip the resize method if we are targeting a compatibility library.
+    genTypeClassResize();
+  }
+
+  endClass();
+
+  resetFieldIndex();
+  clearFieldIndexMap();
+
+  return true;
+}
+
+void RSReflectionJava::genTypeItemClass(const RSExportRecordType *ERT) {
+  mOut.indent() << "static public class " RS_TYPE_ITEM_CLASS_NAME;
+  mOut.startBlock();
+
+  // Sizeof should not be exposed for 64-bit; it is not accurate
+  if (mRSContext->getTargetAPI() < 21) {
+      mOut.indent() << "public static final int sizeof = " << ERT->getAllocSize()
+                    << ";\n";
+  }
+
+  // Member elements
+  mOut << "\n";
+  for (RSExportRecordType::const_field_iterator FI = ERT->fields_begin(),
+                                                FE = ERT->fields_end();
+       FI != FE; FI++) {
+    mOut.indent() << GetTypeName((*FI)->getType()) << " " << (*FI)->getName()
+                  << ";\n";
+  }
+
+  // Constructor
+  mOut << "\n";
+  mOut.indent() << RS_TYPE_ITEM_CLASS_NAME << "()";
+  mOut.startBlock();
+
+  for (RSExportRecordType::const_field_iterator FI = ERT->fields_begin(),
+                                                FE = ERT->fields_end();
+       FI != FE; FI++) {
+    const RSExportRecordType::Field *F = *FI;
+    genAllocateVarOfType(F->getType(), F->getName());
+  }
+
+  // end Constructor
+  mOut.endBlock();
+
+  // end Item class
+  mOut.endBlock();
+}
+
+void RSReflectionJava::genTypeClassConstructor(const RSExportRecordType *ERT) {
+  const char *RenderScriptVar = "rs";
+
+  startFunction(AM_Public, true, "Element", "createElement", 1, "RenderScript",
+                RenderScriptVar);
+
+  // TODO(all): Fix weak-refs + multi-context issue.
+  // mOut.indent() << "Element e = " << RS_TYPE_ELEMENT_REF_NAME
+  //            << ".get();\n";
+  // mOut.indent() << "if (e != null) return e;\n";
+  RSReflectionJavaElementBuilder builder("eb", ERT, RenderScriptVar, &mOut,
+                                         mRSContext, this);
+  builder.generate();
+
+  mOut.indent() << "return eb.create();\n";
+  // mOut.indent() << "e = eb.create();\n";
+  // mOut.indent() << RS_TYPE_ELEMENT_REF_NAME
+  //            << " = new java.lang.ref.WeakReference<Element>(e);\n";
+  // mOut.indent() << "return e;\n";
+  endFunction();
+
+  // private with element
+  startFunction(AM_Private, false, nullptr, getClassName(), 1, "RenderScript",
+                RenderScriptVar);
+  mOut.indent() << RS_TYPE_ITEM_BUFFER_NAME << " = null;\n";
+  mOut.indent() << RS_TYPE_ITEM_BUFFER_PACKER_NAME << " = null;\n";
+  mOut.indent() << "mElement = createElement(" << RenderScriptVar << ");\n";
+  endFunction();
+
+  // 1D without usage
+  startFunction(AM_Public, false, nullptr, getClassName(), 2, "RenderScript",
+                RenderScriptVar, "int", "count");
+
+  mOut.indent() << RS_TYPE_ITEM_BUFFER_NAME << " = null;\n";
+  mOut.indent() << RS_TYPE_ITEM_BUFFER_PACKER_NAME << " = null;\n";
+  mOut.indent() << "mElement = createElement(" << RenderScriptVar << ");\n";
+  // Call init() in super class
+  mOut.indent() << "init(" << RenderScriptVar << ", count);\n";
+  endFunction();
+
+  // 1D with usage
+  startFunction(AM_Public, false, nullptr, getClassName(), 3, "RenderScript",
+                RenderScriptVar, "int", "count", "int", "usages");
+
+  mOut.indent() << RS_TYPE_ITEM_BUFFER_NAME << " = null;\n";
+  mOut.indent() << RS_TYPE_ITEM_BUFFER_PACKER_NAME << " = null;\n";
+  mOut.indent() << "mElement = createElement(" << RenderScriptVar << ");\n";
+  // Call init() in super class
+  mOut.indent() << "init(" << RenderScriptVar << ", count, usages);\n";
+  endFunction();
+
+  // create1D with usage
+  startFunction(AM_Public, true, getClassName().c_str(), "create1D", 3,
+                "RenderScript", RenderScriptVar, "int", "dimX", "int",
+                "usages");
+  mOut.indent() << getClassName() << " obj = new " << getClassName() << "("
+                << RenderScriptVar << ");\n";
+  mOut.indent() << "obj.mAllocation = Allocation.createSized("
+                   "rs, obj.mElement, dimX, usages);\n";
+  mOut.indent() << "return obj;\n";
+  endFunction();
+
+  // create1D without usage
+  startFunction(AM_Public, true, getClassName().c_str(), "create1D", 2,
+                "RenderScript", RenderScriptVar, "int", "dimX");
+  mOut.indent() << "return create1D(" << RenderScriptVar
+                << ", dimX, Allocation.USAGE_SCRIPT);\n";
+  endFunction();
+
+  // create2D without usage
+  startFunction(AM_Public, true, getClassName().c_str(), "create2D", 3,
+                "RenderScript", RenderScriptVar, "int", "dimX", "int", "dimY");
+  mOut.indent() << "return create2D(" << RenderScriptVar
+                << ", dimX, dimY, Allocation.USAGE_SCRIPT);\n";
+  endFunction();
+
+  // create2D with usage
+  startFunction(AM_Public, true, getClassName().c_str(), "create2D", 4,
+                "RenderScript", RenderScriptVar, "int", "dimX", "int", "dimY",
+                "int", "usages");
+
+  mOut.indent() << getClassName() << " obj = new " << getClassName() << "("
+                << RenderScriptVar << ");\n";
+  mOut.indent() << "Type.Builder b = new Type.Builder(rs, obj.mElement);\n";
+  mOut.indent() << "b.setX(dimX);\n";
+  mOut.indent() << "b.setY(dimY);\n";
+  mOut.indent() << "Type t = b.create();\n";
+  mOut.indent() << "obj.mAllocation = Allocation.createTyped(rs, t, usages);\n";
+  mOut.indent() << "return obj;\n";
+  endFunction();
+
+  // createTypeBuilder
+  startFunction(AM_Public, true, "Type.Builder", "createTypeBuilder", 1,
+                "RenderScript", RenderScriptVar);
+  mOut.indent() << "Element e = createElement(" << RenderScriptVar << ");\n";
+  mOut.indent() << "return new Type.Builder(rs, e);\n";
+  endFunction();
+
+  // createCustom with usage
+  startFunction(AM_Public, true, getClassName().c_str(), "createCustom", 3,
+                "RenderScript", RenderScriptVar, "Type.Builder", "tb", "int",
+                "usages");
+  mOut.indent() << getClassName() << " obj = new " << getClassName() << "("
+                << RenderScriptVar << ");\n";
+  mOut.indent() << "Type t = tb.create();\n";
+  mOut.indent() << "if (t.getElement() != obj.mElement) {\n";
+  mOut.indent() << "    throw new RSIllegalArgumentException("
+                   "\"Type.Builder did not match expected element type.\");\n";
+  mOut.indent() << "}\n";
+  mOut.indent() << "obj.mAllocation = Allocation.createTyped(rs, t, usages);\n";
+  mOut.indent() << "return obj;\n";
+  endFunction();
+}
+
+void RSReflectionJava::genTypeClassCopyToArray(const RSExportRecordType *ERT) {
+  startFunction(AM_Private, false, "void", "copyToArray", 2,
+                RS_TYPE_ITEM_CLASS_NAME, "i", "int", "index");
+
+  genNewItemBufferPackerIfNull();
+  mOut.indent() << RS_TYPE_ITEM_BUFFER_PACKER_NAME << ".reset(index * "
+                << mItemSizeof << ");\n";
+
+  mOut.indent() << "copyToArrayLocal(i, " RS_TYPE_ITEM_BUFFER_PACKER_NAME
+                   ");\n";
+
+  endFunction();
+}
+
+void
+RSReflectionJava::genTypeClassCopyToArrayLocal(const RSExportRecordType *ERT) {
+  startFunction(AM_Private, false, "void", "copyToArrayLocal", 2,
+                RS_TYPE_ITEM_CLASS_NAME, "i", "FieldPacker", "fp");
+
+  genPackVarOfType(ERT, "i", "fp");
+
+  endFunction();
+}
+
+void RSReflectionJava::genTypeClassItemSetter(const RSExportRecordType *ERT) {
+  startFunction(AM_PublicSynchronized, false, "void", "set", 3,
+                RS_TYPE_ITEM_CLASS_NAME, "i", "int", "index", "boolean",
+                "copyNow");
+  genNewItemBufferIfNull(nullptr);
+  mOut.indent() << RS_TYPE_ITEM_BUFFER_NAME << "[index] = i;\n";
+
+  mOut.indent() << "if (copyNow) ";
+  mOut.startBlock();
+
+  mOut.indent() << "copyToArray(i, index);\n";
+  mOut.indent() << "FieldPacker fp = new FieldPacker(" << mItemSizeof << ");\n";
+  mOut.indent() << "copyToArrayLocal(i, fp);\n";
+  mOut.indent() << "mAllocation.setFromFieldPacker(index, fp);\n";
+
+  // End of if (copyNow)
+  mOut.endBlock();
+
+  endFunction();
+}
+
+void RSReflectionJava::genTypeClassItemGetter(const RSExportRecordType *ERT) {
+  startFunction(AM_PublicSynchronized, false, RS_TYPE_ITEM_CLASS_NAME, "get", 1,
+                "int", "index");
+  mOut.indent() << "if (" << RS_TYPE_ITEM_BUFFER_NAME
+                << " == null) return null;\n";
+  mOut.indent() << "return " << RS_TYPE_ITEM_BUFFER_NAME << "[index];\n";
+  endFunction();
+}
+
+void
+RSReflectionJava::genTypeClassComponentSetter(const RSExportRecordType *ERT) {
+  for (RSExportRecordType::const_field_iterator FI = ERT->fields_begin(),
+                                                FE = ERT->fields_end();
+       FI != FE; FI++) {
+    const RSExportRecordType::Field *F = *FI;
+    size_t FieldOffset = F->getOffsetInParent();
+    size_t FieldStoreSize = F->getType()->getStoreSize();
+    unsigned FieldIndex = getFieldIndex(F);
+
+    startFunction(AM_PublicSynchronized, false, "void", "set_" + F->getName(),
+                  3, "int", "index", GetTypeName(F->getType()).c_str(), "v",
+                  "boolean", "copyNow");
+    genNewItemBufferPackerIfNull();
+    genNewItemBufferIfNull("index");
+    mOut.indent() << RS_TYPE_ITEM_BUFFER_NAME << "[index]." << F->getName()
+                  << " = v;\n";
+
+    mOut.indent() << "if (copyNow) ";
+    mOut.startBlock();
+
+    if (FieldOffset > 0) {
+      mOut.indent() << RS_TYPE_ITEM_BUFFER_PACKER_NAME << ".reset(index * "
+                    << mItemSizeof << " + " << FieldOffset
+                    << ");\n";
+    } else {
+      mOut.indent() << RS_TYPE_ITEM_BUFFER_PACKER_NAME << ".reset(index * "
+                    << mItemSizeof << ");\n";
+    }
+    genPackVarOfType(F->getType(), "v", RS_TYPE_ITEM_BUFFER_PACKER_NAME);
+
+    mOut.indent() << "FieldPacker fp = new FieldPacker(" << FieldStoreSize
+                  << ");\n";
+    genPackVarOfType(F->getType(), "v", "fp");
+    mOut.indent() << "mAllocation.setFromFieldPacker(index, " << FieldIndex
+                  << ", fp);\n";
+
+    // End of if (copyNow)
+    mOut.endBlock();
+
+    endFunction();
+  }
+}
+
+void
+RSReflectionJava::genTypeClassComponentGetter(const RSExportRecordType *ERT) {
+  for (RSExportRecordType::const_field_iterator FI = ERT->fields_begin(),
+                                                FE = ERT->fields_end();
+       FI != FE; FI++) {
+    const RSExportRecordType::Field *F = *FI;
+    startFunction(AM_PublicSynchronized, false,
+                  GetTypeName(F->getType()).c_str(), "get_" + F->getName(), 1,
+                  "int", "index");
+    mOut.indent() << "if (" RS_TYPE_ITEM_BUFFER_NAME << " == null) return "
+                  << GetTypeNullValue(F->getType()) << ";\n";
+    mOut.indent() << "return " RS_TYPE_ITEM_BUFFER_NAME << "[index]."
+                  << F->getName() << ";\n";
+    endFunction();
+  }
+}
+
+void RSReflectionJava::genTypeClassCopyAll(const RSExportRecordType *ERT) {
+  startFunction(AM_PublicSynchronized, false, "void", "copyAll", 0);
+
+  mOut.indent() << "for (int ct = 0; ct < " << RS_TYPE_ITEM_BUFFER_NAME
+                << ".length; ct++)"
+                << " copyToArray(" << RS_TYPE_ITEM_BUFFER_NAME
+                << "[ct], ct);\n";
+  mOut.indent() << "mAllocation.setFromFieldPacker(0, "
+                << RS_TYPE_ITEM_BUFFER_PACKER_NAME ");\n";
+
+  endFunction();
+}
+
+void RSReflectionJava::genTypeClassResize() {
+  startFunction(AM_PublicSynchronized, false, "void", "resize", 1, "int",
+                "newSize");
+
+  mOut.indent() << "if (mItemArray != null) ";
+  mOut.startBlock();
+  mOut.indent() << "int oldSize = mItemArray.length;\n";
+  mOut.indent() << "int copySize = Math.min(oldSize, newSize);\n";
+  mOut.indent() << "if (newSize == oldSize) return;\n";
+  mOut.indent() << "Item ni[] = new Item[newSize];\n";
+  mOut.indent() << "System.arraycopy(mItemArray, 0, ni, 0, copySize);\n";
+  mOut.indent() << "mItemArray = ni;\n";
+  mOut.endBlock();
+  mOut.indent() << "mAllocation.resize(newSize);\n";
+
+  mOut.indent() << "if (" RS_TYPE_ITEM_BUFFER_PACKER_NAME
+                   " != null) " RS_TYPE_ITEM_BUFFER_PACKER_NAME " = "
+                   "new FieldPacker(" << mItemSizeof << " * getType().getX()/* count */);\n";
+
+  endFunction();
+}
+
+/******************** Methods to generate type class /end ********************/
+
+/********** Methods to create Element in Java of given record type ***********/
+
+RSReflectionJavaElementBuilder::RSReflectionJavaElementBuilder(
+    const char *ElementBuilderName, const RSExportRecordType *ERT,
+    const char *RenderScriptVar, GeneratedFile *Out, const RSContext *RSContext,
+    RSReflectionJava *Reflection)
+    : mElementBuilderName(ElementBuilderName), mERT(ERT),
+      mRenderScriptVar(RenderScriptVar), mOut(Out), mPaddingFieldIndex(1),
+      mRSContext(RSContext), mReflection(Reflection) {
+  if (mRSContext->getTargetAPI() < SLANG_ICS_TARGET_API) {
+    mPaddingPrefix = "#padding_";
+  } else {
+    mPaddingPrefix = "#rs_padding_";
+  }
+}
+
+void RSReflectionJavaElementBuilder::generate() {
+  mOut->indent() << "Element.Builder " << mElementBuilderName
+                 << " = new Element.Builder(" << mRenderScriptVar << ");\n";
+  genAddElement(mERT, "", /* ArraySize = */ 0);
+}
+
+void RSReflectionJavaElementBuilder::genAddElement(const RSExportType *ET,
+                                                   const std::string &VarName,
+                                                   unsigned ArraySize) {
+  std::string ElementConstruct = GetBuiltinElementConstruct(ET);
+
+  if (ElementConstruct != "") {
+    genAddStatementStart();
+    *mOut << ElementConstruct << "(" << mRenderScriptVar << ")";
+    genAddStatementEnd(VarName, ArraySize);
+  } else {
+
+    switch (ET->getClass()) {
+    case RSExportType::ExportClassPrimitive: {
+      const RSExportPrimitiveType *EPT =
+          static_cast<const RSExportPrimitiveType *>(ET);
+      const char *DataTypeName =
+          RSExportPrimitiveType::getRSReflectionType(EPT)->rs_type;
+      genAddStatementStart();
+      *mOut << "Element.createUser(" << mRenderScriptVar
+            << ", Element.DataType." << DataTypeName << ")";
+      genAddStatementEnd(VarName, ArraySize);
+      break;
+    }
+    case RSExportType::ExportClassVector: {
+      const RSExportVectorType *EVT =
+          static_cast<const RSExportVectorType *>(ET);
+      const char *DataTypeName =
+          RSExportPrimitiveType::getRSReflectionType(EVT)->rs_type;
+      genAddStatementStart();
+      *mOut << "Element.createVector(" << mRenderScriptVar
+            << ", Element.DataType." << DataTypeName << ", "
+            << EVT->getNumElement() << ")";
+      genAddStatementEnd(VarName, ArraySize);
+      break;
+    }
+    case RSExportType::ExportClassPointer:
+      // Pointer type variable should be resolved in
+      // GetBuiltinElementConstruct()
+      slangAssert(false && "??");
+      break;
+    case RSExportType::ExportClassMatrix:
+      // Matrix type variable should be resolved
+      // in GetBuiltinElementConstruct()
+      slangAssert(false && "??");
+      break;
+    case RSExportType::ExportClassConstantArray: {
+      const RSExportConstantArrayType *ECAT =
+          static_cast<const RSExportConstantArrayType *>(ET);
+
+      const RSExportType *ElementType = ECAT->getElementType();
+      if (ElementType->getClass() != RSExportType::ExportClassRecord) {
+        genAddElement(ECAT->getElementType(), VarName, ECAT->getNumElement());
+      } else {
+        std::string NewElementBuilderName(mElementBuilderName);
+        NewElementBuilderName.append(1, '_');
+
+        RSReflectionJavaElementBuilder builder(
+            NewElementBuilderName.c_str(),
+            static_cast<const RSExportRecordType *>(ElementType),
+            mRenderScriptVar, mOut, mRSContext, mReflection);
+        builder.generate();
+
+        ArraySize = ECAT->getNumElement();
+        genAddStatementStart();
+        *mOut << NewElementBuilderName << ".create()";
+        genAddStatementEnd(VarName, ArraySize);
+      }
+      break;
+    }
+    case RSExportType::ExportClassRecord: {
+      // Simalar to case of RSExportType::ExportClassRecord in genPackVarOfType.
+      //
+      // TODO(zonr): Generalize these two function such that there's no
+      //             duplicated codes.
+      const RSExportRecordType *ERT =
+          static_cast<const RSExportRecordType *>(ET);
+      int Pos = 0; // relative pos from now on
+
+      for (RSExportRecordType::const_field_iterator I = ERT->fields_begin(),
+                                                    E = ERT->fields_end();
+           I != E; I++) {
+        const RSExportRecordType::Field *F = *I;
+        int FieldOffset = F->getOffsetInParent();
+        const RSExportType *T = F->getType();
+        int FieldStoreSize = T->getStoreSize();
+        int FieldAllocSize = T->getAllocSize();
+
+        std::string FieldName;
+        if (!VarName.empty())
+          FieldName = VarName + "." + F->getName();
+        else
+          FieldName = F->getName();
+
+        // Alignment
+        genAddPadding(FieldOffset - Pos);
+
+        // eb.add(...)
+        mReflection->addFieldIndexMapping(F);
+        if (F->getType()->getClass() != RSExportType::ExportClassRecord) {
+          genAddElement(F->getType(), FieldName, 0);
+        } else {
+          std::string NewElementBuilderName(mElementBuilderName);
+          NewElementBuilderName.append(1, '_');
+
+          RSReflectionJavaElementBuilder builder(
+              NewElementBuilderName.c_str(),
+              static_cast<const RSExportRecordType *>(F->getType()),
+              mRenderScriptVar, mOut, mRSContext, mReflection);
+          builder.generate();
+
+          genAddStatementStart();
+          *mOut << NewElementBuilderName << ".create()";
+          genAddStatementEnd(FieldName, ArraySize);
+        }
+
+        if (mRSContext->getTargetAPI() < SLANG_ICS_TARGET_API) {
+          // There is padding within the field type. This is only necessary
+          // for HC-targeted APIs.
+          genAddPadding(FieldAllocSize - FieldStoreSize);
+        }
+
+        Pos = FieldOffset + FieldAllocSize;
+      }
+
+      // There maybe some padding after the struct
+      size_t RecordAllocSize = ERT->getAllocSize();
+
+      genAddPadding(RecordAllocSize - Pos);
+      break;
+    }
+    default:
+      slangAssert(false && "Unknown class of type");
+      break;
+    }
+  }
+}
+
+void RSReflectionJavaElementBuilder::genAddPadding(int PaddingSize) {
+  while (PaddingSize > 0) {
+    const std::string &VarName = createPaddingField();
+    genAddStatementStart();
+    if (PaddingSize >= 4) {
+      *mOut << "Element.U32(" << mRenderScriptVar << ")";
+      PaddingSize -= 4;
+    } else if (PaddingSize >= 2) {
+      *mOut << "Element.U16(" << mRenderScriptVar << ")";
+      PaddingSize -= 2;
+    } else if (PaddingSize >= 1) {
+      *mOut << "Element.U8(" << mRenderScriptVar << ")";
+      PaddingSize -= 1;
+    }
+    genAddStatementEnd(VarName, 0);
+  }
+}
+
+void RSReflectionJavaElementBuilder::genAddStatementStart() {
+  mOut->indent() << mElementBuilderName << ".add(";
+}
+
+void
+RSReflectionJavaElementBuilder::genAddStatementEnd(const std::string &VarName,
+                                                   unsigned ArraySize) {
+  *mOut << ", \"" << VarName << "\"";
+  if (ArraySize > 0) {
+    *mOut << ", " << ArraySize;
+  }
+  *mOut << ");\n";
+  // TODO Review incFieldIndex.  It's probably better to assign the numbers at
+  // the start rather
+  // than as we're generating the code.
+  mReflection->incFieldIndex();
+}
+
+/******** Methods to create Element in Java of given record type /end ********/
+
+bool RSReflectionJava::reflect() {
+  std::string ErrorMsg;
+  if (!genScriptClass(mScriptClassName, ErrorMsg)) {
+    std::cerr << "Failed to generate class " << mScriptClassName << " ("
+              << ErrorMsg << ")\n";
+    return false;
+  }
+
+  mGeneratedFileNames->push_back(mScriptClassName);
+
+  // class ScriptField_<TypeName>
+  for (RSContext::const_export_type_iterator
+           TI = mRSContext->export_types_begin(),
+           TE = mRSContext->export_types_end();
+       TI != TE; TI++) {
+    const RSExportType *ET = TI->getValue();
+
+    if (ET->getClass() == RSExportType::ExportClassRecord) {
+      const RSExportRecordType *ERT =
+          static_cast<const RSExportRecordType *>(ET);
+
+      if (!ERT->isArtificial() && !genTypeClass(ERT, ErrorMsg)) {
+        std::cerr << "Failed to generate type class for struct '"
+                  << ERT->getName() << "' (" << ErrorMsg << ")\n";
+        return false;
+      }
+    }
+  }
+
+  return true;
+}
+
+const char *RSReflectionJava::AccessModifierStr(AccessModifier AM) {
+  switch (AM) {
+  case AM_Public:
+    return "public";
+    break;
+  case AM_Protected:
+    return "protected";
+    break;
+  case AM_Private:
+    return "private";
+    break;
+  case AM_PublicSynchronized:
+    return "public synchronized";
+    break;
+  default:
+    return "";
+    break;
+  }
+}
+
+bool RSReflectionJava::startClass(AccessModifier AM, bool IsStatic,
+                                  const std::string &ClassName,
+                                  const char *SuperClassName,
+                                  std::string &ErrorMsg) {
+  // Open file for class
+  std::string FileName = ClassName + ".java";
+  if (!mOut.startFile(mOutputDirectory, FileName, mRSSourceFileName,
+                      mRSContext->getLicenseNote(), true,
+                      mRSContext->getVerbose())) {
+    return false;
+  }
+
+  // Package
+  if (!mPackageName.empty()) {
+    mOut << "package " << mPackageName << ";\n";
+  }
+  mOut << "\n";
+
+  // Imports
+  mOut << "import " << mRSPackageName << ".*;\n";
+  if (getEmbedBitcodeInJava()) {
+    mOut << "import " << mPackageName << "."
+          << RSSlangReflectUtils::JavaBitcodeClassNameFromRSFileName(
+                 mRSSourceFileName.c_str()) << ";\n";
+  } else {
+    mOut << "import android.content.res.Resources;\n";
+  }
+  mOut << "\n";
+
+  // All reflected classes should be annotated as hidden, so that they won't
+  // be exposed in SDK.
+  mOut << "/**\n";
+  mOut << " * @hide\n";
+  mOut << " */\n";
+
+  mOut << AccessModifierStr(AM) << ((IsStatic) ? " static" : "") << " class "
+       << ClassName;
+  if (SuperClassName != nullptr)
+    mOut << " extends " << SuperClassName;
+
+  mOut.startBlock();
+
+  mClassName = ClassName;
+
+  return true;
+}
+
+void RSReflectionJava::endClass() {
+  mOut.endBlock();
+  mOut.closeFile();
+  clear();
+}
+
+void RSReflectionJava::startTypeClass(const std::string &ClassName) {
+  mOut.indent() << "public static class " << ClassName;
+  mOut.startBlock();
+}
+
+void RSReflectionJava::endTypeClass() { mOut.endBlock(); }
+
+void RSReflectionJava::startFunction(AccessModifier AM, bool IsStatic,
+                                     const char *ReturnType,
+                                     const std::string &FunctionName, int Argc,
+                                     ...) {
+  ArgTy Args;
+  va_list vl;
+  va_start(vl, Argc);
+
+  for (int i = 0; i < Argc; i++) {
+    const char *ArgType = va_arg(vl, const char *);
+    const char *ArgName = va_arg(vl, const char *);
+
+    Args.push_back(std::make_pair(ArgType, ArgName));
+  }
+  va_end(vl);
+
+  startFunction(AM, IsStatic, ReturnType, FunctionName, Args);
+}
+
+void RSReflectionJava::startFunction(AccessModifier AM, bool IsStatic,
+                                     const char *ReturnType,
+                                     const std::string &FunctionName,
+                                     const ArgTy &Args) {
+  mOut.indent() << AccessModifierStr(AM) << ((IsStatic) ? " static " : " ")
+                << ((ReturnType) ? ReturnType : "") << " " << FunctionName
+                << "(";
+
+  bool FirstArg = true;
+  for (ArgTy::const_iterator I = Args.begin(), E = Args.end(); I != E; I++) {
+    if (!FirstArg)
+      mOut << ", ";
+    else
+      FirstArg = false;
+
+    mOut << I->first << " " << I->second;
+  }
+
+  mOut << ")";
+  mOut.startBlock();
+}
+
+void RSReflectionJava::endFunction() { mOut.endBlock(); }
+
+bool RSReflectionJava::addTypeNameForElement(const std::string &TypeName) {
+  if (mTypesToCheck.find(TypeName) == mTypesToCheck.end()) {
+    mTypesToCheck.insert(TypeName);
+    return true;
+  } else {
+    return false;
+  }
+}
+
+bool RSReflectionJava::addTypeNameForFieldPacker(const std::string &TypeName) {
+  if (mFieldPackerTypes.find(TypeName) == mFieldPackerTypes.end()) {
+    mFieldPackerTypes.insert(TypeName);
+    return true;
+  } else {
+    return false;
+  }
+}
+
+} // namespace slang
diff --git a/slang/slang_rs_reflection.h b/slang/slang_rs_reflection.h
new file mode 100644
index 0000000..7d54a6a
--- /dev/null
+++ b/slang/slang_rs_reflection.h
@@ -0,0 +1,270 @@
+/*
+ * Copyright 2010-2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_REFLECTION_H_ // NOLINT
+#define _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_REFLECTION_H_
+
+#include <fstream>
+#include <iostream>
+#include <map>
+#include <set>
+#include <string>
+#include <vector>
+
+#include "llvm/ADT/StringExtras.h"
+
+#include "slang_assert.h"
+#include "slang_rs_export_type.h"
+#include "slang_rs_reflect_utils.h"
+
+namespace slang {
+
+class RSContext;
+class RSExportVar;
+class RSExportFunc;
+class RSExportForEach;
+
+class RSReflectionJava {
+private:
+  const RSContext *mRSContext;
+
+  // The name of the Java package name we're creating this file for,
+  // e.g. com.example.android.rs.flashlight
+  std::string mPackageName;
+  // The name of the Java Renderscript package we'll be using,
+  // e.g. android.renderscript
+  // e.g. android.support.v8.renderscript
+  std::string mRSPackageName;
+
+  // The directory under which we'll create the Java files, in appropriate subdirectories,
+  // e.g. /tmp/myout
+  std::string mOutputBaseDirectory;
+  // The output directory for the specfied package (mPackageName),
+  // e.g. /tmp/myout/com/example/android/rs/flashlight/
+  // TODO This includes the terminating separator.  Needed?
+  std::string mOutputDirectory;
+
+  // The full path of the .rs file that we are reflecting.
+  std::string mRSSourceFileName;
+  // The full path where the generated bit code can be read.
+  std::string mBitCodeFileName;
+
+  // The name of the resource we pass to the RenderScript constructor
+  // e.g. flashlight
+  std::string mResourceId;
+  // The name of the Java class we are generating for this script.
+  // e.g. ScriptC_flashlight
+  std::string mScriptClassName;
+
+
+  // This is set by startClass() and will change for the multiple classes generated.
+  std::string mClassName;
+
+  // This is the token used for determining the size of a given ScriptField.Item.
+  std::string mItemSizeof;
+
+  bool mEmbedBitcodeInJava;
+
+  int mNextExportVarSlot;
+  int mNextExportFuncSlot;
+  int mNextExportForEachSlot;
+  int mNextExportReduceSlot;
+
+  GeneratedFile mOut;
+
+  std::string mLastError;
+  std::vector<std::string> *mGeneratedFileNames;
+
+  // A mapping from a field in a record type to its index in the rsType
+  // instance. Only used when generates TypeClass (ScriptField_*).
+  typedef std::map<const RSExportRecordType::Field *, unsigned> FieldIndexMapTy;
+  FieldIndexMapTy mFieldIndexMap;
+  // Field index of current processing TypeClass.
+  unsigned mFieldIndex;
+
+  inline void setError(const std::string &Error) { mLastError = Error; }
+
+  inline void clear() {
+    mClassName = "";
+    mNextExportVarSlot = 0;
+    mNextExportFuncSlot = 0;
+    mNextExportForEachSlot = 0;
+    mNextExportReduceSlot = 0;
+  }
+
+public:
+  typedef enum {
+    AM_Public,
+    AM_Protected,
+    AM_Private,
+    AM_PublicSynchronized
+  } AccessModifier;
+
+  // Generated RS Elements for type-checking code.
+  std::set<std::string> mTypesToCheck;
+
+  // Generated FieldPackers for unsigned setters/validation.
+  std::set<std::string> mFieldPackerTypes;
+
+  bool addTypeNameForElement(const std::string &TypeName);
+  bool addTypeNameForFieldPacker(const std::string &TypeName);
+
+  static const char *AccessModifierStr(AccessModifier AM);
+
+  inline bool getEmbedBitcodeInJava() const { return mEmbedBitcodeInJava; }
+
+  inline int getNextExportVarSlot() { return mNextExportVarSlot++; }
+  inline int getNextExportFuncSlot() { return mNextExportFuncSlot++; }
+  inline int getNextExportForEachSlot() { return mNextExportForEachSlot++; }
+  inline int getNextExportReduceSlot() { return mNextExportReduceSlot++; }
+
+  bool startClass(AccessModifier AM, bool IsStatic,
+                  const std::string &ClassName, const char *SuperClassName,
+                  std::string &ErrorMsg);
+  void endClass();
+
+  void startFunction(AccessModifier AM, bool IsStatic, const char *ReturnType,
+                     const std::string &FunctionName, int Argc, ...);
+
+  typedef std::vector<std::pair<std::string, std::string>> ArgTy;
+  void startFunction(AccessModifier AM, bool IsStatic, const char *ReturnType,
+                     const std::string &FunctionName, const ArgTy &Args);
+  void endFunction();
+
+  inline const std::string &getPackageName() const { return mPackageName; }
+  inline const std::string &getRSPackageName() const { return mRSPackageName; }
+  inline const std::string &getClassName() const { return mClassName; }
+  inline const std::string &getResourceId() const { return mResourceId; }
+
+  void startTypeClass(const std::string &ClassName);
+  void endTypeClass();
+
+  inline void incFieldIndex() { mFieldIndex++; }
+
+  inline void resetFieldIndex() { mFieldIndex = 0; }
+
+  inline void addFieldIndexMapping(const RSExportRecordType::Field *F) {
+    slangAssert((mFieldIndexMap.find(F) == mFieldIndexMap.end()) &&
+                "Nested structure never occurs in C language.");
+    mFieldIndexMap.insert(std::make_pair(F, mFieldIndex));
+  }
+
+  inline unsigned getFieldIndex(const RSExportRecordType::Field *F) const {
+    FieldIndexMapTy::const_iterator I = mFieldIndexMap.find(F);
+    slangAssert((I != mFieldIndexMap.end()) &&
+                "Requesting field is out of scope.");
+    return I->second;
+  }
+
+  inline void clearFieldIndexMap() { mFieldIndexMap.clear(); }
+
+private:
+  static bool exportableReduce(const RSExportType *ResultType);
+
+  bool genScriptClass(const std::string &ClassName, std::string &ErrorMsg);
+  void genScriptClassConstructor();
+
+  void genInitBoolExportVariable(const std::string &VarName,
+                                 const clang::APValue &Val);
+  void genInitPrimitiveExportVariable(const std::string &VarName,
+                                      const clang::APValue &Val);
+  void genInitExportVariable(const RSExportType *ET, const std::string &VarName,
+                             const clang::APValue &Val);
+  void genInitValue(const clang::APValue &Val, bool asBool);
+  void genExportVariable(const RSExportVar *EV);
+  void genPrimitiveTypeExportVariable(const RSExportVar *EV);
+  void genPointerTypeExportVariable(const RSExportVar *EV);
+  void genVectorTypeExportVariable(const RSExportVar *EV);
+  void genMatrixTypeExportVariable(const RSExportVar *EV);
+  void genConstantArrayTypeExportVariable(const RSExportVar *EV);
+  void genRecordTypeExportVariable(const RSExportVar *EV);
+  void genPrivateExportVariable(const std::string &TypeName,
+                                const std::string &VarName);
+  void genSetExportVariable(const std::string &TypeName, const RSExportVar *EV, unsigned Dimension);
+  void genGetExportVariable(const std::string &TypeName,
+                            const std::string &VarName);
+  void genGetFieldID(const std::string &VarName);
+
+  void genExportFunction(const RSExportFunc *EF);
+
+  void genExportForEach(const RSExportForEach *EF);
+
+  void genExportReduce(const RSExportReduce *ER);
+  void genExportReduceAllocationVariant(const RSExportReduce *ER);
+  void genExportReduceArrayVariant(const RSExportReduce *ER);
+  void genExportReduceResultType(const RSExportType *ResultType);
+
+  void genTypeCheck(const RSExportType *ET, const char *VarName);
+
+  void genTypeInstanceFromPointer(const RSExportType *ET);
+
+  void genTypeInstance(const RSExportType *ET);
+
+  void genFieldPackerInstance(const RSExportType *ET);
+
+  bool genTypeClass(const RSExportRecordType *ERT, std::string &ErrorMsg);
+  void genTypeItemClass(const RSExportRecordType *ERT);
+  void genTypeClassConstructor(const RSExportRecordType *ERT);
+  void genTypeClassCopyToArray(const RSExportRecordType *ERT);
+  void genTypeClassCopyToArrayLocal(const RSExportRecordType *ERT);
+  void genTypeClassItemSetter(const RSExportRecordType *ERT);
+  void genTypeClassItemGetter(const RSExportRecordType *ERT);
+  void genTypeClassComponentSetter(const RSExportRecordType *ERT);
+  void genTypeClassComponentGetter(const RSExportRecordType *ERT);
+  void genTypeClassCopyAll(const RSExportRecordType *ERT);
+  void genTypeClassResize();
+
+  void genBuildElement(const char *ElementBuilderName,
+                       const RSExportRecordType *ERT,
+                       const char *RenderScriptVar, bool IsInline);
+  void genAddElementToElementBuilder(const RSExportType *ERT,
+                                     const std::string &VarName,
+                                     const char *ElementBuilderName,
+                                     const char *RenderScriptVar,
+                                     unsigned ArraySize);
+
+  bool genCreateFieldPacker(const RSExportType *T, const char *FieldPackerName);
+  void genPackVarOfType(const RSExportType *T, const char *VarName,
+                        const char *FieldPackerName);
+  void genAllocateVarOfType(const RSExportType *T, const std::string &VarName);
+  void genNewItemBufferIfNull(const char *Index);
+  void genNewItemBufferPackerIfNull();
+
+  void genPairwiseDimCheck(const std::string &name0, const std::string &name1);
+  void genVectorLengthCompatibilityCheck(const std::string &ArrayName, unsigned VecSize);
+  void genNullArrayCheck(const std::string &ArrayName);
+
+public:
+  RSReflectionJava(const RSContext *Context,
+                   std::vector<std::string> *GeneratedFileNames,
+                   const std::string &OutputBaseDirectory,
+                   const std::string &RSSourceFilename,
+                   const std::string &BitCodeFileName,
+                   bool EmbedBitcodeInJava);
+
+  bool reflect();
+
+  inline const char *getLastError() const {
+    if (mLastError.empty())
+      return nullptr;
+    else
+      return mLastError.c_str();
+  }
+}; // class RSReflectionJava
+
+} // namespace slang
+
+#endif // _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_REFLECTION_H_  NOLINT
diff --git a/slang/slang_rs_reflection_cpp.cpp b/slang/slang_rs_reflection_cpp.cpp
new file mode 100644
index 0000000..e0a78f2
--- /dev/null
+++ b/slang/slang_rs_reflection_cpp.cpp
@@ -0,0 +1,1066 @@
+/*
+ * Copyright 2013, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <sys/stat.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <iostream>
+
+#include <cstdarg>
+#include <cctype>
+
+#include <algorithm>
+#include <sstream>
+#include <string>
+
+#include "os_sep.h"
+#include "slang_rs_context.h"
+#include "slang_rs_export_var.h"
+#include "slang_rs_export_foreach.h"
+#include "slang_rs_export_func.h"
+#include "slang_rs_reflect_utils.h"
+#include "slang_version.h"
+
+#include "slang_rs_reflection_cpp.h"
+
+using namespace std;
+
+namespace slang {
+
+const char kRsTypeItemClassName[] = "Item";
+const char kRsElemPrefix[] = "__rs_elem_";
+// The name of the Allocation type that is reflected in C++
+const char kAllocationSp[] = "android::RSC::sp<android::RSC::Allocation>";
+
+static const char *GetMatrixTypeName(const RSExportMatrixType *EMT) {
+  static const char *MatrixTypeCNameMap[] = {
+      "rs_matrix2x2", "rs_matrix3x3", "rs_matrix4x4",
+  };
+  unsigned Dim = EMT->getDim();
+
+  if ((Dim - 2) < (sizeof(MatrixTypeCNameMap) / sizeof(const char *)))
+    return MatrixTypeCNameMap[EMT->getDim() - 2];
+
+  slangAssert(false && "GetMatrixTypeName : Unsupported matrix dimension");
+  return nullptr;
+}
+
+static std::string GetTypeName(const RSExportType *ET, bool PreIdentifier = true) {
+  if((!PreIdentifier) && (ET->getClass() != RSExportType::ExportClassConstantArray)) {
+    slangAssert(false && "Non-array type post identifier?");
+    return "";
+  }
+  switch (ET->getClass()) {
+  case RSExportType::ExportClassPrimitive: {
+    const RSExportPrimitiveType *EPT =
+        static_cast<const RSExportPrimitiveType *>(ET);
+    if (EPT->isRSObjectType()) {
+      return std::string("android::RSC::sp<const android::RSC::") +
+             RSExportPrimitiveType::getRSReflectionType(EPT)->c_name + ">";
+    } else {
+      return RSExportPrimitiveType::getRSReflectionType(EPT)->c_name;
+    }
+  }
+  case RSExportType::ExportClassPointer: {
+    const RSExportType *PointeeType =
+        static_cast<const RSExportPointerType *>(ET)->getPointeeType();
+
+    if (PointeeType->getClass() != RSExportType::ExportClassRecord)
+      return kAllocationSp;
+    else
+      return PointeeType->getElementName();
+  }
+  case RSExportType::ExportClassVector: {
+    const RSExportVectorType *EVT = static_cast<const RSExportVectorType *>(ET);
+    std::stringstream VecName;
+    VecName << EVT->getRSReflectionType(EVT)->rs_c_vector_prefix
+            << EVT->getNumElement();
+    return VecName.str();
+  }
+  case RSExportType::ExportClassMatrix: {
+    return GetMatrixTypeName(static_cast<const RSExportMatrixType *>(ET));
+  }
+  case RSExportType::ExportClassConstantArray: {
+    const RSExportConstantArrayType *CAT =
+        static_cast<const RSExportConstantArrayType *>(ET);
+    if (PreIdentifier) {
+      std::string ElementTypeName = GetTypeName(CAT->getElementType());
+      return ElementTypeName;
+    }
+    else {
+      std::stringstream ArraySpec;
+      ArraySpec << "[" << CAT->getNumElement() << "]";
+      return ArraySpec.str();
+    }
+  }
+  case RSExportType::ExportClassRecord: {
+    // TODO: Fix for C structs!
+    return ET->getElementName() + "." + kRsTypeItemClassName;
+  }
+  default: { slangAssert(false && "Unknown class of type"); }
+  }
+
+  return "";
+}
+
+RSReflectionCpp::RSReflectionCpp(const RSContext *Context,
+                                 const string &OutputDirectory,
+                                 const string &RSSourceFileName,
+                                 const string &BitCodeFileName)
+    : mRSContext(Context), mRSSourceFilePath(RSSourceFileName),
+      mBitCodeFilePath(BitCodeFileName), mOutputDirectory(OutputDirectory),
+      mNextExportVarSlot(0), mNextExportFuncSlot(0), mNextExportForEachSlot(0) {
+  mCleanedRSFileName = RootNameFromRSFileName(mRSSourceFilePath);
+  mClassName = "ScriptC_" + mCleanedRSFileName;
+}
+
+RSReflectionCpp::~RSReflectionCpp() {}
+
+bool RSReflectionCpp::reflect() {
+  writeHeaderFile();
+  writeImplementationFile();
+
+  return true;
+}
+
+#define RS_TYPE_CLASS_NAME_PREFIX "ScriptField_"
+
+bool RSReflectionCpp::writeHeaderFile() {
+  // Create the file and write the license note.
+  if (!mOut.startFile(mOutputDirectory, mClassName + ".h", mRSSourceFilePath,
+                      mRSContext->getLicenseNote(), false,
+                      mRSContext->getVerbose())) {
+    return false;
+  }
+
+  mOut.indent() << "#include \"RenderScript.h\"\n\n";
+  mOut.indent() << "using namespace android::RSC;\n\n";
+
+  mOut.comment("This class encapsulates access to the exported elements of the script.  "
+               "Typically, you would instantiate this class once, call the set_* methods "
+               "for each of the exported global variables you want to change, then call "
+               "one of the forEach_ methods to invoke a kernel.");
+  mOut.indent() << "class " << mClassName << " : public android::RSC::ScriptC";
+  mOut.startBlock();
+
+  mOut.decreaseIndent();
+  mOut.indent() << "private:\n";
+  mOut.increaseIndent();
+
+  genFieldsToStoreExportVariableValues();
+  genTypeInstancesUsedInForEach();
+  genFieldsForAllocationTypeVerification();
+
+  mOut.decreaseIndent();
+  mOut.indent() << "public:\n";
+  mOut.increaseIndent();
+
+  // Generate the constructor and destructor declarations.
+  mOut.indent() << mClassName << "(android::RSC::sp<android::RSC::RS> rs);\n";
+  mOut.indent() << "virtual ~" << mClassName << "();\n\n";
+
+  genExportVariablesGetterAndSetter();
+  genForEachDeclarations();
+  genExportFunctionDeclarations();
+
+  mOut.endBlock(true);
+  mOut.closeFile();
+  return true;
+}
+
+void RSReflectionCpp::genTypeInstancesUsedInForEach() {
+  for (auto I = mRSContext->export_foreach_begin(),
+            E = mRSContext->export_foreach_end();
+       I != E; I++) {
+    const RSExportForEach *EF = *I;
+    const RSExportType *OET = EF->getOutType();
+
+    if (OET) {
+      genTypeInstanceFromPointer(OET);
+    }
+
+    const RSExportForEach::InTypeVec &InTypes = EF->getInTypes();
+
+    for (RSExportForEach::InTypeIter BI = InTypes.begin(),
+         EI = InTypes.end(); BI != EI; BI++) {
+
+      genTypeInstanceFromPointer(*BI);
+    }
+  }
+}
+
+void RSReflectionCpp::genFieldsForAllocationTypeVerification() {
+  bool CommentAdded = false;
+  for (std::set<std::string>::iterator I = mTypesToCheck.begin(),
+                                       E = mTypesToCheck.end();
+       I != E; I++) {
+    if (!CommentAdded) {
+      mOut.comment("The following elements are used to verify the types of "
+                   "allocations passed to kernels.");
+      CommentAdded = true;
+    }
+    mOut.indent() << "android::RSC::sp<const android::RSC::Element> "
+                  << kRsElemPrefix << *I << ";\n";
+  }
+}
+
+void RSReflectionCpp::genFieldsToStoreExportVariableValues() {
+  bool CommentAdded = false;
+  for (RSContext::const_export_var_iterator I = mRSContext->export_vars_begin(),
+                                            E = mRSContext->export_vars_end();
+       I != E; I++) {
+    const RSExportVar *ev = *I;
+    if (ev->isConst()) {
+      continue;
+    }
+    if (!CommentAdded) {
+      mOut.comment("For each non-const variable exported by the script, we "
+                   "have an equivalent field.  This field contains the last "
+                   "value this variable was set to using the set_ method.  "
+                   "This may not be current value of the variable in the "
+                   "script, as the script is free to modify its internal "
+                   "variable without changing this field.  If the script "
+                   "initializes the exported variable, the constructor will "
+                   "initialize this field to the same value.");
+      CommentAdded = true;
+    }
+    mOut.indent() << GetTypeName(ev->getType()) << " " RS_EXPORT_VAR_PREFIX
+                  << ev->getName() << ";\n";
+  }
+}
+
+void RSReflectionCpp::genForEachDeclarations() {
+  bool CommentAdded = false;
+  for (RSContext::const_export_foreach_iterator
+           I = mRSContext->export_foreach_begin(),
+           E = mRSContext->export_foreach_end();
+       I != E; I++) {
+    const RSExportForEach *ForEach = *I;
+
+    if (ForEach->isDummyRoot()) {
+      mOut.indent() << "// No forEach_root(...)\n";
+      continue;
+    }
+
+    if (!CommentAdded) {
+      mOut.comment("For each kernel of the script corresponds one method.  "
+                   "That method queues the kernel for execution.  The kernel "
+                   "may not have completed nor even started by the time this "
+                   "function returns.  Calls that extract the data out of the "
+                   "output allocation will wait for the kernels to complete.");
+      CommentAdded = true;
+    }
+
+    std::string FunctionStart = "void forEach_" + ForEach->getName() + "(";
+    mOut.indent() << FunctionStart;
+
+    ArgumentList Arguments;
+    const RSExportForEach::InVec &Ins = ForEach->getIns();
+    for (RSExportForEach::InIter BI = Ins.begin(), EI = Ins.end();
+         BI != EI; BI++) {
+
+      Arguments.push_back(Argument(kAllocationSp, (*BI)->getName()));
+    }
+
+    if (ForEach->hasOut() || ForEach->hasReturn()) {
+      Arguments.push_back(Argument(kAllocationSp, "aout"));
+    }
+
+    const RSExportRecordType *ERT = ForEach->getParamPacketType();
+    if (ERT) {
+      for (RSExportForEach::const_param_iterator i = ForEach->params_begin(),
+                                                 e = ForEach->params_end();
+           i != e; i++) {
+        RSReflectionTypeData rtd;
+        (*i)->getType()->convertToRTD(&rtd);
+        Arguments.push_back(Argument(rtd.type->c_name, (*i)->getName()));
+      }
+    }
+    genArguments(Arguments, FunctionStart.length());
+    mOut << ");\n";
+  }
+}
+
+void RSReflectionCpp::genExportFunctionDeclarations() {
+  for (RSContext::const_export_func_iterator
+           I = mRSContext->export_funcs_begin(),
+           E = mRSContext->export_funcs_end();
+       I != E; I++) {
+    const RSExportFunc *ef = *I;
+
+    makeFunctionSignature(false, ef);
+  }
+}
+
+// forEach_* implementation
+void RSReflectionCpp::genExportForEachBodies() {
+  uint32_t slot = 0;
+  for (auto I = mRSContext->export_foreach_begin(),
+            E = mRSContext->export_foreach_end();
+       I != E; I++, slot++) {
+    const RSExportForEach *ef = *I;
+    if (ef->isDummyRoot()) {
+      mOut.indent() << "// No forEach_root(...)\n";
+      continue;
+    }
+
+    ArgumentList Arguments;
+    std::string FunctionStart =
+        "void " + mClassName + "::forEach_" + ef->getName() + "(";
+    mOut.indent() << FunctionStart;
+
+    if (ef->hasIns()) {
+      // FIXME: Add support for kernels with multiple inputs.
+      slangAssert(ef->getIns().size() == 1);
+      Arguments.push_back(Argument(kAllocationSp, "ain"));
+    }
+
+    if (ef->hasOut() || ef->hasReturn()) {
+      Arguments.push_back(Argument(kAllocationSp, "aout"));
+    }
+
+    const RSExportRecordType *ERT = ef->getParamPacketType();
+    if (ERT) {
+      for (RSExportForEach::const_param_iterator i = ef->params_begin(),
+                                                 e = ef->params_end();
+           i != e; i++) {
+        RSReflectionTypeData rtd;
+        (*i)->getType()->convertToRTD(&rtd);
+        Arguments.push_back(Argument(rtd.type->c_name, (*i)->getName()));
+      }
+    }
+    genArguments(Arguments, FunctionStart.length());
+    mOut << ")";
+    mOut.startBlock();
+
+    const RSExportType *OET = ef->getOutType();
+    const RSExportForEach::InTypeVec &InTypes = ef->getInTypes();
+    if (ef->hasIns()) {
+      // FIXME: Add support for kernels with multiple inputs.
+      slangAssert(ef->getIns().size() == 1);
+      genTypeCheck(InTypes[0], "ain");
+    }
+    if (OET) {
+      genTypeCheck(OET, "aout");
+    }
+
+    // TODO Add the appropriate dimension checking code, as seen in
+    // slang_rs_reflection.cpp.
+
+    std::string FieldPackerName = ef->getName() + "_fp";
+    if (ERT) {
+      if (genCreateFieldPacker(ERT, FieldPackerName.c_str())) {
+        genPackVarOfType(ERT, nullptr, FieldPackerName.c_str());
+      }
+    }
+    mOut.indent() << "forEach(" << slot << ", ";
+
+    if (ef->hasIns()) {
+      // FIXME: Add support for kernels with multiple inputs.
+      slangAssert(ef->getIns().size() == 1);
+      mOut << "ain, ";
+    } else {
+      mOut << "NULL, ";
+    }
+
+    if (ef->hasOut() || ef->hasReturn()) {
+      mOut << "aout, ";
+    } else {
+      mOut << "NULL, ";
+    }
+
+    // FIXME (no support for usrData with C++ kernels)
+    mOut << "NULL, 0);\n";
+    mOut.endBlock();
+  }
+}
+
+// invoke_* implementation
+void RSReflectionCpp::genExportFunctionBodies() {
+  uint32_t slot = 0;
+  // Reflect export function
+  for (auto I = mRSContext->export_funcs_begin(),
+            E = mRSContext->export_funcs_end();
+       I != E; I++) {
+    const RSExportFunc *ef = *I;
+
+    makeFunctionSignature(true, ef);
+    mOut.startBlock();
+    const RSExportRecordType *params = ef->getParamPacketType();
+    size_t param_len = 0;
+    if (params) {
+      param_len = params->getAllocSize();
+      if (genCreateFieldPacker(params, "__fp")) {
+        genPackVarOfType(params, nullptr, "__fp");
+      }
+    }
+
+    mOut.indent() << "invoke(" << slot;
+    if (params) {
+      mOut << ", __fp.getData(), " << param_len << ");\n";
+    } else {
+      mOut << ", NULL, 0);\n";
+    }
+    mOut.endBlock();
+
+    slot++;
+  }
+}
+
+bool RSReflectionCpp::genEncodedBitCode() {
+  FILE *pfin = fopen(mBitCodeFilePath.c_str(), "rb");
+  if (pfin == nullptr) {
+    fprintf(stderr, "Error: could not read file %s\n",
+            mBitCodeFilePath.c_str());
+    return false;
+  }
+
+  unsigned char buf[16];
+  int read_length;
+  mOut.indent() << "static const unsigned char __txt[] =";
+  mOut.startBlock();
+  while ((read_length = fread(buf, 1, sizeof(buf), pfin)) > 0) {
+    mOut.indent();
+    for (int i = 0; i < read_length; i++) {
+      char buf2[16];
+      snprintf(buf2, sizeof(buf2), "0x%02x,", buf[i]);
+      mOut << buf2;
+    }
+    mOut << "\n";
+  }
+  mOut.endBlock(true);
+  mOut << "\n";
+  return true;
+}
+
+bool RSReflectionCpp::writeImplementationFile() {
+  if (!mOut.startFile(mOutputDirectory, mClassName + ".cpp", mRSSourceFilePath,
+                      mRSContext->getLicenseNote(), false,
+                      mRSContext->getVerbose())) {
+    return false;
+  }
+
+  // Front matter
+  mOut.indent() << "#include \"" << mClassName << ".h\"\n\n";
+
+  genEncodedBitCode();
+  mOut.indent() << "\n\n";
+
+  // Constructor
+  const std::string &packageName = mRSContext->getReflectJavaPackageName();
+  mOut.indent() << mClassName << "::" << mClassName
+                << "(android::RSC::sp<android::RSC::RS> rs):\n"
+                   "        ScriptC(rs, __txt, sizeof(__txt), \""
+                << mCleanedRSFileName << "\", " << mCleanedRSFileName.length()
+                << ", \"/data/data/" << packageName << "/app\", sizeof(\""
+                << packageName << "\"))";
+  mOut.startBlock();
+  for (std::set<std::string>::iterator I = mTypesToCheck.begin(),
+                                       E = mTypesToCheck.end();
+       I != E; I++) {
+    mOut.indent() << kRsElemPrefix << *I << " = android::RSC::Element::" << *I
+                  << "(mRS);\n";
+  }
+
+  for (RSContext::const_export_var_iterator I = mRSContext->export_vars_begin(),
+                                            E = mRSContext->export_vars_end();
+       I != E; I++) {
+    const RSExportVar *EV = *I;
+    if (!EV->getInit().isUninit()) {
+      genInitExportVariable(EV->getType(), EV->getName(), EV->getInit());
+    } else {
+      genZeroInitExportVariable(EV->getName());
+    }
+  }
+  mOut.endBlock();
+
+  // Destructor
+  mOut.indent() << mClassName << "::~" << mClassName << "()";
+  mOut.startBlock();
+  mOut.endBlock();
+
+  // Function bodies
+  genExportForEachBodies();
+  genExportFunctionBodies();
+
+  mOut.closeFile();
+  return true;
+}
+
+void RSReflectionCpp::genExportVariablesGetterAndSetter() {
+  mOut.comment("Methods to set and get the variables exported by the script. "
+               "Const variables will not have a setter.\n\n"
+               "Note that the value returned by the getter may not be the "
+               "current value of the variable in the script.  The getter will "
+               "return the initial value of the variable (as defined in the "
+               "script) or the the last value set by using the setter method.  "
+               "The script is free to modify its value independently.");
+  for (RSContext::const_export_var_iterator I = mRSContext->export_vars_begin(),
+                                            E = mRSContext->export_vars_end();
+       I != E; I++) {
+    const RSExportVar *EV = *I;
+    const RSExportType *ET = EV->getType();
+
+    switch (ET->getClass()) {
+    case RSExportType::ExportClassPrimitive: {
+      genGetterAndSetter(static_cast<const RSExportPrimitiveType *>(ET), EV);
+      break;
+    }
+    case RSExportType::ExportClassPointer: {
+      // TODO Deprecate this.
+      genPointerTypeExportVariable(EV);
+      break;
+    }
+    case RSExportType::ExportClassVector: {
+      genGetterAndSetter(static_cast<const RSExportVectorType *>(ET), EV);
+      break;
+    }
+    case RSExportType::ExportClassMatrix: {
+      genMatrixTypeExportVariable(EV);
+      break;
+    }
+    case RSExportType::ExportClassConstantArray: {
+      genGetterAndSetter(static_cast<const RSExportConstantArrayType *>(ET),
+                         EV);
+      break;
+    }
+    case RSExportType::ExportClassRecord: {
+      genGetterAndSetter(static_cast<const RSExportRecordType *>(ET), EV);
+      break;
+    }
+    default: { slangAssert(false && "Unknown class of type"); }
+    }
+  }
+}
+
+void RSReflectionCpp::genGetterAndSetter(const RSExportPrimitiveType *EPT,
+                                         const RSExportVar *EV) {
+  RSReflectionTypeData rtd;
+  EPT->convertToRTD(&rtd);
+  std::string TypeName = GetTypeName(EPT);
+
+  if (!EV->isConst()) {
+    mOut.indent() << "void set_" << EV->getName() << "(" << TypeName << " v)";
+    mOut.startBlock();
+    mOut.indent() << "setVar(" << getNextExportVarSlot() << ", ";
+    if (EPT->isRSObjectType()) {
+      mOut << "v";
+   } else {
+      mOut << "&v, sizeof(v)";
+    }
+    mOut << ");\n";
+    mOut.indent() << RS_EXPORT_VAR_PREFIX << EV->getName() << " = v;\n";
+    mOut.endBlock();
+  }
+  mOut.indent() << TypeName << " get_" << EV->getName() << "() const";
+  mOut.startBlock();
+  if (EV->isConst()) {
+    const clang::APValue &val = EV->getInit();
+    bool isBool = !strcmp(TypeName.c_str(), "bool");
+    mOut.indent() << "return ";
+    genInitValue(val, isBool);
+    mOut << ";\n";
+  } else {
+    mOut.indent() << "return " << RS_EXPORT_VAR_PREFIX << EV->getName()
+                  << ";\n";
+  }
+  mOut.endBlock();
+}
+
+void RSReflectionCpp::genPointerTypeExportVariable(const RSExportVar *EV) {
+  const RSExportType *ET = EV->getType();
+
+  slangAssert((ET->getClass() == RSExportType::ExportClassPointer) &&
+              "Variable should be type of pointer here");
+
+  std::string TypeName = GetTypeName(ET);
+  const std::string &VarName = EV->getName();
+
+  RSReflectionTypeData rtd;
+  EV->getType()->convertToRTD(&rtd);
+  uint32_t slot = getNextExportVarSlot();
+
+  if (!EV->isConst()) {
+    mOut.indent() << "void bind_" << VarName << "(" << TypeName << " v)";
+    mOut.startBlock();
+    mOut.indent() << "bindAllocation(v, " << slot << ");\n";
+    mOut.indent() << RS_EXPORT_VAR_PREFIX << VarName << " = v;\n";
+    mOut.endBlock();
+  }
+  mOut.indent() << TypeName << " get_" << VarName << "() const";
+  mOut.startBlock();
+  if (EV->isConst()) {
+    const clang::APValue &val = EV->getInit();
+    bool isBool = !strcmp(TypeName.c_str(), "bool");
+    mOut.indent() << "return ";
+    genInitValue(val, isBool);
+    mOut << ";\n";
+  } else {
+    mOut.indent() << "return " << RS_EXPORT_VAR_PREFIX << VarName << ";\n";
+  }
+  mOut.endBlock();
+}
+
+void RSReflectionCpp::genGetterAndSetter(const RSExportVectorType *EVT,
+                                         const RSExportVar *EV) {
+  slangAssert(EVT != nullptr);
+
+  RSReflectionTypeData rtd;
+  EVT->convertToRTD(&rtd);
+
+  if (!EV->isConst()) {
+    mOut.indent() << "void set_" << EV->getName() << "("
+                  << rtd.type->rs_c_vector_prefix << EVT->getNumElement()
+                  << " v)";
+    mOut.startBlock();
+    mOut.indent() << "setVar(" << getNextExportVarSlot()
+                  << ", &v, sizeof(v));\n";
+    mOut.indent() << RS_EXPORT_VAR_PREFIX << EV->getName() << " = v;\n";
+    mOut.endBlock();
+  }
+  mOut.indent() << rtd.type->rs_c_vector_prefix << EVT->getNumElement()
+                << " get_" << EV->getName() << "() const";
+  mOut.startBlock();
+  if (EV->isConst()) {
+    const clang::APValue &val = EV->getInit();
+    mOut.indent() << "return ";
+    genInitValue(val, false);
+    mOut << ";\n";
+  } else {
+    mOut.indent() << "return " << RS_EXPORT_VAR_PREFIX << EV->getName()
+                  << ";\n";
+  }
+  mOut.endBlock();
+}
+
+void RSReflectionCpp::genMatrixTypeExportVariable(const RSExportVar *EV) {
+  uint32_t slot = getNextExportVarSlot();
+  stringstream tmp;
+  tmp << slot;
+
+  const RSExportType *ET = EV->getType();
+  if (ET->getName() == "rs_matrix4x4") {
+    mOut.indent() << "void set_" << EV->getName() << "(float v[16])";
+    mOut.startBlock();
+    mOut.indent() << "setVar(" << tmp.str() << ", v, sizeof(float)*16);\n";
+    mOut.endBlock();
+  } else if (ET->getName() == "rs_matrix3x3") {
+    mOut.indent() << "void set_" << EV->getName() << "(float v[9])";
+    mOut.startBlock();
+    mOut.indent() << "setVar(" << tmp.str() << ", v, sizeof(float)*9);";
+    mOut.endBlock();
+  } else if (ET->getName() == "rs_matrix2x2") {
+    mOut.indent() << "void set_" << EV->getName() << "(float v[4])";
+    mOut.startBlock();
+    mOut.indent() << "setVar(" << tmp.str() << ", v, sizeof(float)*4);";
+    mOut.endBlock();
+  } else {
+    mOut.indent() << "#error: TODO: " << ET->getName();
+    slangAssert(false);
+  }
+}
+
+void RSReflectionCpp::genGetterAndSetter(const RSExportConstantArrayType *AT,
+                                         const RSExportVar *EV) {
+  std::stringstream ArraySpec;
+  const RSExportType *ET = EV->getType();
+
+  const RSExportConstantArrayType *CAT =
+      static_cast<const RSExportConstantArrayType *>(ET);
+
+  uint32_t slot = getNextExportVarSlot();
+  stringstream tmp;
+  tmp << slot;
+
+  ArraySpec << CAT->getNumElement();
+  mOut.indent() << "void set_" << EV->getName() << "(" << GetTypeName(EV->getType()) << " v "
+      << GetTypeName(EV->getType(), false) << ")";
+  mOut.startBlock();
+  mOut.indent() << "setVar(" << tmp.str() << ", v, sizeof(" << GetTypeName(EV->getType()) + ") *"
+      << ArraySpec.str() << ");";
+  mOut.endBlock();
+}
+
+void RSReflectionCpp::genGetterAndSetter(const RSExportRecordType *ERT,
+                                         const RSExportVar *EV) {
+  slangAssert(false);
+}
+
+void RSReflectionCpp::makeFunctionSignature(bool isDefinition,
+                                            const RSExportFunc *ef) {
+  mOut.indent() << "void ";
+  if (isDefinition) {
+    mOut << mClassName << "::";
+  }
+  mOut << "invoke_" << ef->getName() << "(";
+
+  if (ef->getParamPacketType()) {
+    bool FirstArg = true;
+    for (RSExportFunc::const_param_iterator i = ef->params_begin(),
+                                            e = ef->params_end();
+         i != e; i++) {
+      if (!FirstArg) {
+        mOut << ", ";
+      } else {
+        FirstArg = false;
+      }
+      mOut << GetTypeName((*i)->getType()) << " " << (*i)->getName();
+    }
+  }
+
+  if (isDefinition) {
+    mOut << ")";
+  } else {
+    mOut << ");\n";
+  }
+}
+
+void RSReflectionCpp::genArguments(const ArgumentList &Arguments, int Offset) {
+  bool FirstArg = true;
+
+  for (ArgumentList::const_iterator I = Arguments.begin(), E = Arguments.end();
+       I != E; I++) {
+    if (!FirstArg) {
+      mOut << ",\n";
+      mOut.indent() << string(Offset, ' ');
+    } else {
+      FirstArg = false;
+    }
+
+    mOut << I->Type << " " << I->Name;
+    if (!I->DefaultValue.empty()) {
+      mOut << " = " << I->DefaultValue;
+    }
+  }
+}
+
+bool RSReflectionCpp::genCreateFieldPacker(const RSExportType *ET,
+                                           const char *FieldPackerName) {
+  size_t AllocSize = ET->getAllocSize();
+
+  if (AllocSize > 0) {
+    mOut.indent() << "android::RSC::FieldPacker " << FieldPackerName << "("
+                  << AllocSize << ");\n";
+    return true;
+  }
+
+  return false;
+}
+
+void RSReflectionCpp::genPackVarOfType(const RSExportType *ET,
+                                       const char *VarName,
+                                       const char *FieldPackerName) {
+  switch (ET->getClass()) {
+  case RSExportType::ExportClassPrimitive:
+  case RSExportType::ExportClassVector:
+  case RSExportType::ExportClassPointer:
+  case RSExportType::ExportClassMatrix: {
+    mOut.indent() << FieldPackerName << ".add(" << VarName << ");\n";
+    break;
+  }
+  case RSExportType::ExportClassConstantArray: {
+    /*const RSExportConstantArrayType *ECAT =
+        static_cast<const RSExportConstantArrayType *>(ET);
+
+    // TODO(zonr): more elegant way. Currently, we obtain the unique index
+    //             variable (this method involves recursive call which means
+    //             we may have more than one level loop, therefore we can't
+    //             always use the same index variable name here) name given
+    //             in the for-loop from counting the '.' in @VarName.
+    unsigned Level = 0;
+    size_t LastDotPos = 0;
+    std::string ElementVarName(VarName);
+
+  while (LastDotPos != std::string::npos) {
+    LastDotPos = ElementVarName.find_first_of('.', LastDotPos + 1);
+    Level++;
+  }
+  std::string IndexVarName("ct");
+  IndexVarName.append(llvm::utostr_32(Level));
+
+  C.indent() << "for (int " << IndexVarName << " = 0; " <<
+                      IndexVarName << " < " << ECAT->getSize() << "; " <<
+                      IndexVarName << "++)";
+  C.startBlock();
+
+  ElementVarName.append("[" + IndexVarName + "]");
+  genPackVarOfType(C, ECAT->getElementType(), ElementVarName.c_str(),
+                   FieldPackerName);
+
+  C.endBlock();*/
+    break;
+  }
+  case RSExportType::ExportClassRecord: {
+    const RSExportRecordType *ERT = static_cast<const RSExportRecordType *>(ET);
+    // Relative pos from now on in field packer
+    unsigned Pos = 0;
+
+    for (RSExportRecordType::const_field_iterator I = ERT->fields_begin(),
+                                                  E = ERT->fields_end();
+         I != E; I++) {
+      const RSExportRecordType::Field *F = *I;
+      std::string FieldName;
+      size_t FieldOffset = F->getOffsetInParent();
+      const RSExportType *T = F->getType();
+      size_t FieldStoreSize = T->getStoreSize();
+      size_t FieldAllocSize = T->getAllocSize();
+
+      if (VarName != nullptr)
+        FieldName = VarName + ("." + F->getName());
+      else
+        FieldName = F->getName();
+
+      if (FieldOffset > Pos) {
+        mOut.indent() << FieldPackerName << ".skip(" << (FieldOffset - Pos)
+                      << ");\n";
+      }
+
+      genPackVarOfType(F->getType(), FieldName.c_str(), FieldPackerName);
+
+      // There is padding in the field type
+      if (FieldAllocSize > FieldStoreSize) {
+        mOut.indent() << FieldPackerName << ".skip("
+                      << (FieldAllocSize - FieldStoreSize) << ");\n";
+      }
+
+      Pos = FieldOffset + FieldAllocSize;
+    }
+
+    // There maybe some padding after the struct
+    if (ERT->getAllocSize() > Pos) {
+      mOut.indent() << FieldPackerName << ".skip(" << ERT->getAllocSize() - Pos
+                    << ");\n";
+    }
+    break;
+  }
+  default: { slangAssert(false && "Unknown class of type"); }
+  }
+}
+
+void RSReflectionCpp::genTypeCheck(const RSExportType *ET,
+                                   const char *VarName) {
+  mOut.indent() << "// Type check for " << VarName << "\n";
+
+  if (ET->getClass() == RSExportType::ExportClassPointer) {
+    const RSExportPointerType *EPT =
+        static_cast<const RSExportPointerType *>(ET);
+    ET = EPT->getPointeeType();
+  }
+
+  std::string TypeName;
+  switch (ET->getClass()) {
+  case RSExportType::ExportClassPrimitive:
+  case RSExportType::ExportClassVector:
+  case RSExportType::ExportClassRecord: {
+    TypeName = ET->getElementName();
+    break;
+  }
+
+  default:
+    break;
+  }
+
+  if (!TypeName.empty()) {
+    mOut.indent() << "if (!" << VarName
+                  << "->getType()->getElement()->isCompatible("
+                  << kRsElemPrefix << TypeName << "))";
+    mOut.startBlock();
+    mOut.indent() << "mRS->throwError(RS_ERROR_RUNTIME_ERROR, "
+                     "\"Incompatible type\");\n";
+    mOut.indent() << "return;\n";
+    mOut.endBlock();
+  }
+}
+
+void RSReflectionCpp::genTypeInstanceFromPointer(const RSExportType *ET) {
+  if (ET->getClass() == RSExportType::ExportClassPointer) {
+    // For pointer parameters to original forEach kernels.
+    const RSExportPointerType *EPT =
+        static_cast<const RSExportPointerType *>(ET);
+    genTypeInstance(EPT->getPointeeType());
+  } else {
+    // For handling pass-by-value kernel parameters.
+    genTypeInstance(ET);
+  }
+}
+
+void RSReflectionCpp::genTypeInstance(const RSExportType *ET) {
+  switch (ET->getClass()) {
+  case RSExportType::ExportClassPrimitive:
+  case RSExportType::ExportClassVector:
+  case RSExportType::ExportClassConstantArray:
+  case RSExportType::ExportClassRecord: {
+    std::string TypeName = ET->getElementName();
+    mTypesToCheck.insert(TypeName);
+    break;
+  }
+
+  default:
+    break;
+  }
+}
+
+void RSReflectionCpp::genInitExportVariable(const RSExportType *ET,
+                                            const std::string &VarName,
+                                            const clang::APValue &Val) {
+  slangAssert(!Val.isUninit() && "Not a valid initializer");
+
+  switch (ET->getClass()) {
+  case RSExportType::ExportClassPrimitive: {
+    const RSExportPrimitiveType *EPT =
+        static_cast<const RSExportPrimitiveType *>(ET);
+    if (EPT->getType() == DataTypeBoolean) {
+      genInitBoolExportVariable(VarName, Val);
+    } else {
+      genInitPrimitiveExportVariable(VarName, Val);
+    }
+    break;
+  }
+  case RSExportType::ExportClassPointer: {
+    if (!Val.isInt() || Val.getInt().getSExtValue() != 0)
+      std::cerr << "Initializer which is non-NULL to pointer type variable "
+                   "will be ignored" << std::endl;
+    break;
+  }
+  case RSExportType::ExportClassVector: {
+    const RSExportVectorType *EVT = static_cast<const RSExportVectorType *>(ET);
+    switch (Val.getKind()) {
+    case clang::APValue::Int:
+    case clang::APValue::Float: {
+      for (unsigned i = 0; i < EVT->getNumElement(); i++) {
+        std::string Name = VarName + "." + getVectorAccessor(i);
+        genInitPrimitiveExportVariable(Name, Val);
+      }
+      break;
+    }
+    case clang::APValue::Vector: {
+      unsigned NumElements = std::min(
+          static_cast<unsigned>(EVT->getNumElement()), Val.getVectorLength());
+      for (unsigned i = 0; i < NumElements; i++) {
+        const clang::APValue &ElementVal = Val.getVectorElt(i);
+        std::string Name = VarName + "." + getVectorAccessor(i);
+        genInitPrimitiveExportVariable(Name, ElementVal);
+      }
+      break;
+    }
+    case clang::APValue::MemberPointer:
+    case clang::APValue::Uninitialized:
+    case clang::APValue::ComplexInt:
+    case clang::APValue::ComplexFloat:
+    case clang::APValue::LValue:
+    case clang::APValue::Array:
+    case clang::APValue::Struct:
+    case clang::APValue::Union:
+    case clang::APValue::AddrLabelDiff: {
+      slangAssert(false && "Unexpected type of value of initializer.");
+    }
+    }
+    break;
+  }
+  case RSExportType::ExportClassMatrix:
+  case RSExportType::ExportClassConstantArray:
+  case RSExportType::ExportClassRecord: {
+    slangAssert(false && "Unsupported initializer for record/matrix/constant "
+                         "array type variable currently");
+    break;
+  }
+  default: { slangAssert(false && "Unknown class of type"); }
+  }
+}
+
+const char *RSReflectionCpp::getVectorAccessor(unsigned Index) {
+  static const char *VectorAccessorMap[] = {/* 0 */ "x",
+                                            /* 1 */ "y",
+                                            /* 2 */ "z",
+                                            /* 3 */ "w",
+  };
+
+  slangAssert((Index < (sizeof(VectorAccessorMap) / sizeof(const char *))) &&
+              "Out-of-bound index to access vector member");
+
+  return VectorAccessorMap[Index];
+}
+
+void RSReflectionCpp::genZeroInitExportVariable(const std::string &VarName) {
+  mOut.indent() << "memset(&" << RS_EXPORT_VAR_PREFIX << VarName
+                << ", 0, sizeof(" << RS_EXPORT_VAR_PREFIX << VarName << "));\n";
+}
+
+void
+RSReflectionCpp::genInitPrimitiveExportVariable(const std::string &VarName,
+                                                const clang::APValue &Val) {
+  slangAssert(!Val.isUninit() && "Not a valid initializer");
+
+  mOut.indent() << RS_EXPORT_VAR_PREFIX << VarName << " = ";
+  genInitValue(Val);
+  mOut << ";\n";
+}
+
+void RSReflectionCpp::genInitValue(const clang::APValue &Val, bool asBool) {
+  switch (Val.getKind()) {
+  case clang::APValue::Int: {
+    const llvm::APInt &api = Val.getInt();
+    if (asBool) {
+      mOut << ((api.getSExtValue() == 0) ? "false" : "true");
+    } else {
+      // TODO: Handle unsigned correctly for C++
+      mOut << api.getSExtValue();
+      if (api.getBitWidth() > 32) {
+        mOut << "L";
+      }
+    }
+    break;
+  }
+
+  case clang::APValue::Float: {
+    const llvm::APFloat &apf = Val.getFloat();
+    llvm::SmallString<30> s;
+    apf.toString(s);
+    mOut << s.c_str();
+    if (&apf.getSemantics() == &llvm::APFloat::IEEEsingle) {
+      if (s.count('.') == 0) {
+        mOut << ".f";
+      } else {
+        mOut << "f";
+      }
+    }
+    break;
+  }
+
+  case clang::APValue::ComplexInt:
+  case clang::APValue::ComplexFloat:
+  case clang::APValue::LValue:
+  case clang::APValue::Vector: {
+    slangAssert(false && "Primitive type cannot have such kind of initializer");
+    break;
+  }
+
+  default: { slangAssert(false && "Unknown kind of initializer"); }
+  }
+}
+
+void RSReflectionCpp::genInitBoolExportVariable(const std::string &VarName,
+                                                const clang::APValue &Val) {
+  slangAssert(!Val.isUninit() && "Not a valid initializer");
+  slangAssert((Val.getKind() == clang::APValue::Int) &&
+              "Bool type has wrong initial APValue");
+
+  mOut.indent() << RS_EXPORT_VAR_PREFIX << VarName << " = "
+                << ((Val.getInt().getSExtValue() == 0) ? "false" : "true")
+                << ";";
+}
+
+} // namespace slang
diff --git a/slang/slang_rs_reflection_cpp.h b/slang/slang_rs_reflection_cpp.h
new file mode 100644
index 0000000..c613d79
--- /dev/null
+++ b/slang/slang_rs_reflection_cpp.h
@@ -0,0 +1,156 @@
+/*
+ * Copyright 2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_REFLECTION_CPP_H_  // NOLINT
+#define _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_REFLECTION_CPP_H_
+
+#include "slang_rs_reflect_utils.h"
+
+#include <set>
+#include <string>
+
+#define RS_EXPORT_VAR_PREFIX "mExportVar_"
+
+namespace slang {
+
+class RSReflectionCpp {
+ public:
+  RSReflectionCpp(const RSContext *Context, const std::string &OutputDirectory,
+                  const std::string &RSSourceFileName,
+                  const std::string &BitCodeFileName);
+  virtual ~RSReflectionCpp();
+
+  bool reflect();
+
+ private:
+  struct Argument {
+    std::string Type;
+    std::string Name;
+    std::string DefaultValue;
+    Argument(std::string Type, std::string Name, std::string DefaultValue = "")
+      : Type(Type), Name(Name), DefaultValue(DefaultValue) {}
+  };
+  typedef std::vector<Argument> ArgumentList;
+
+  // Information coming from the compiler about the code we're reflecting.
+  const RSContext *mRSContext;
+
+  // Path to the *.rs file for which we're generating C++ code.
+  std::string mRSSourceFilePath;
+  // Path to the file that contains the byte code generated from the *.rs file.
+  std::string mBitCodeFilePath;
+  // The directory where we'll generate the C++ files.
+  std::string mOutputDirectory;
+  // A cleaned up version of the *.rs file name that can be used in generating
+  // C++ identifiers.
+  std::string mCleanedRSFileName;
+  // The name of the generated C++ class.
+  std::string mClassName;
+
+  // TODO document
+  unsigned int mNextExportVarSlot;
+  unsigned int mNextExportFuncSlot;
+  unsigned int mNextExportForEachSlot;
+
+  // Generated RS Elements for type-checking code.
+  std::set<std::string> mTypesToCheck;
+
+  inline void clear() {
+    mNextExportVarSlot = 0;
+    mNextExportFuncSlot = 0;
+    mNextExportForEachSlot = 0;
+    mTypesToCheck.clear();
+  }
+
+  // The file we are currently generating, either the header or the
+  // implementation file.
+  GeneratedFile mOut;
+
+  void genInitValue(const clang::APValue &Val, bool asBool = false);
+  static const char *getVectorAccessor(unsigned index);
+
+  inline unsigned int getNextExportVarSlot() { return mNextExportVarSlot++; }
+
+  inline unsigned int getNextExportFuncSlot() { return mNextExportFuncSlot++; }
+
+  inline unsigned int getNextExportForEachSlot() {
+    return mNextExportForEachSlot++;
+  }
+
+  bool writeHeaderFile();
+  bool writeImplementationFile();
+
+  // Write out signatures both in the header and implementation.
+  void makeFunctionSignature(bool isDefinition, const RSExportFunc *ef);
+
+  bool genEncodedBitCode();
+  void genFieldsToStoreExportVariableValues();
+  void genTypeInstancesUsedInForEach();
+  void genFieldsForAllocationTypeVerification();
+
+  // Write out the code for the getters and setters.
+  void genExportVariablesGetterAndSetter();
+
+  // Write out the code for the declaration of the kernel entry points.
+  void genForEachDeclarations();
+  void genExportFunctionDeclarations();
+
+  // Write out code for the definitions of the kernel entry points.
+  void genExportForEachBodies();
+  void genExportFunctionBodies();
+
+  bool startScriptHeader();
+
+  // Write out code for an export variable initialization.
+  void genInitExportVariable(const RSExportType *ET, const std::string &VarName,
+                             const clang::APValue &Val);
+  void genZeroInitExportVariable(const std::string &VarName);
+  void genInitBoolExportVariable(const std::string &VarName,
+                                 const clang::APValue &Val);
+  void genInitPrimitiveExportVariable(const std::string &VarName,
+                                      const clang::APValue &Val);
+
+  // Produce an argument string of the form "T1 t, T2 u, T3 v".
+  void genArguments(const ArgumentList &Args, int Offset);
+
+  void genPointerTypeExportVariable(const RSExportVar *EV);
+  void genMatrixTypeExportVariable(const RSExportVar *EV);
+  void genRecordTypeExportVariable(const RSExportVar *EV);
+
+  void genGetterAndSetter(const RSExportPrimitiveType *EPT, const RSExportVar* EV);
+  void genGetterAndSetter(const RSExportVectorType *EVT, const RSExportVar* EV);
+  void genGetterAndSetter(const RSExportConstantArrayType *AT, const RSExportVar* EV);
+  void genGetterAndSetter(const RSExportRecordType *ERT, const RSExportVar *EV);
+
+  // Write out a local FieldPacker (if necessary).
+  bool genCreateFieldPacker(const RSExportType *T, const char *FieldPackerName);
+
+  // Populate (write) the FieldPacker with add() operations.
+  void genPackVarOfType(const RSExportType *ET, const char *VarName,
+                        const char *FieldPackerName);
+
+  // Generate a runtime type check for VarName.
+  void genTypeCheck(const RSExportType *ET, const char *VarName);
+
+  // Generate a type instance for a given type.
+  void genTypeInstanceFromPointer(const RSExportType *ET);
+  void genTypeInstance(const RSExportType *ET);
+
+}; // class RSReflectionCpp
+
+} // namespace slang
+
+#endif // _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_REFLECTION_CPP_H_  NOLINT
diff --git a/slang/slang_rs_special_func.cpp b/slang/slang_rs_special_func.cpp
new file mode 100644
index 0000000..56ae590
--- /dev/null
+++ b/slang/slang_rs_special_func.cpp
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2015, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "slang_rs_special_func.h"
+
+#include "clang/AST/ASTContext.h"
+#include "clang/AST/Attr.h"
+
+#include "slang_assert.h"
+#include "slang_version.h"
+
+namespace slang {
+
+bool RSSpecialFunc::isGraphicsRootRSFunc(unsigned int targetAPI,
+                                         const clang::FunctionDecl *FD) {
+  if (FD->hasAttr<clang::KernelAttr>()) {
+    return false;
+  }
+
+  if (!FD->getName().equals("root")) {
+    return false;
+  }
+
+  if (FD->getNumParams() == 0) {
+    // Graphics root function
+    return true;
+  }
+
+  // Check for legacy graphics root function (with single parameter).
+  if ((targetAPI < SLANG_ICS_TARGET_API) && (FD->getNumParams() == 1)) {
+    const clang::QualType &IntType = FD->getASTContext().IntTy;
+    if (FD->getReturnType().getCanonicalType() == IntType) {
+      return true;
+    }
+  }
+
+  return false;
+}
+
+bool
+RSSpecialFunc::validateSpecialFuncDecl(unsigned int targetAPI,
+                                       slang::RSContext *Context,
+                                       clang::FunctionDecl const *FD) {
+  slangAssert(Context && FD);
+  bool valid = true;
+  const clang::ASTContext &C = FD->getASTContext();
+  const clang::QualType &IntType = FD->getASTContext().IntTy;
+
+  if (isGraphicsRootRSFunc(targetAPI, FD)) {
+    if ((targetAPI < SLANG_ICS_TARGET_API) && (FD->getNumParams() == 1)) {
+      // Legacy graphics root function
+      const clang::ParmVarDecl *PVD = FD->getParamDecl(0);
+      clang::QualType QT = PVD->getType().getCanonicalType();
+      if (QT != IntType) {
+        Context->ReportError(PVD->getLocation(),
+                             "invalid parameter type for legacy "
+                             "graphics root() function: %0")
+            << PVD->getType();
+        valid = false;
+      }
+    }
+
+    // Graphics root function, so verify that it returns an int
+    if (FD->getReturnType().getCanonicalType() != IntType) {
+      Context->ReportError(FD->getLocation(),
+                           "root() is required to return "
+                           "an int for graphics usage");
+      valid = false;
+    }
+  } else if (isInitRSFunc(FD) || isDtorRSFunc(FD)) {
+    if (FD->getNumParams() != 0) {
+      Context->ReportError(FD->getLocation(),
+                           "%0(void) is required to have no "
+                           "parameters")
+          << FD->getName();
+      valid = false;
+    }
+
+    if (FD->getReturnType().getCanonicalType() != C.VoidTy) {
+      Context->ReportError(FD->getLocation(),
+                           "%0(void) is required to have a void "
+                           "return type")
+          << FD->getName();
+      valid = false;
+    }
+  } else {
+    slangAssert(false && "must be called on root, init or .rs.dtor function!");
+  }
+
+  return valid;
+}
+
+}  // namespace slang
diff --git a/slang/slang_rs_special_func.h b/slang/slang_rs_special_func.h
new file mode 100644
index 0000000..7390871
--- /dev/null
+++ b/slang/slang_rs_special_func.h
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2015, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_SPECIAL_FUNC_H_
+#define _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_SPECIAL_FUNC_H_
+
+#include "llvm/ADT/StringRef.h"
+
+#include "clang/AST/Decl.h"
+
+#include "slang_rs_context.h"
+
+namespace slang {
+
+namespace RSSpecialFunc {
+
+inline bool isInitRSFunc(const clang::FunctionDecl *FD) {
+  if (!FD) {
+    return false;
+  }
+  const llvm::StringRef Name = FD->getName();
+  static llvm::StringRef FuncInit("init");
+  return Name.equals(FuncInit);
+}
+
+inline bool isDtorRSFunc(const clang::FunctionDecl *FD) {
+  if (!FD) {
+    return false;
+  }
+  const llvm::StringRef Name = FD->getName();
+  static llvm::StringRef FuncDtor(".rs.dtor");
+  return Name.equals(FuncDtor);
+}
+
+bool isGraphicsRootRSFunc(unsigned int targetAPI,
+                          const clang::FunctionDecl *FD);
+
+inline bool isSpecialRSFunc(unsigned int targetAPI,
+                                   const clang::FunctionDecl *FD) {
+  return isGraphicsRootRSFunc(targetAPI, FD) || isInitRSFunc(FD) ||
+         isDtorRSFunc(FD);
+}
+
+bool validateSpecialFuncDecl(unsigned int targetAPI,
+                             slang::RSContext *Context,
+                             const clang::FunctionDecl *FD);
+
+} // namespace RSSpecialFunc
+
+} // namespace slang
+
+#endif  // _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_SPECIAL_FUNC_H
diff --git a/slang/slang_rs_special_kernel_param.cpp b/slang/slang_rs_special_kernel_param.cpp
new file mode 100644
index 0000000..aa67d81
--- /dev/null
+++ b/slang/slang_rs_special_kernel_param.cpp
@@ -0,0 +1,234 @@
+/*
+ * Copyright 2015, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "slang_rs_special_kernel_param.h"
+
+#include "clang/AST/ASTContext.h"
+
+#include "bcinfo/MetadataExtractor.h"
+
+#include "slang_assert.h"
+#include "slang_rs_context.h"
+#include "slang_version.h"
+
+namespace {
+
+enum SpecialParameterKind {
+  SPK_LOCATION, // 'int' or 'unsigned int'
+  SPK_CONTEXT,  // rs_kernel_context
+};
+
+struct SpecialParameter {
+  const char *name;
+  bcinfo::MetadataSignatureBitval bitval;
+  SpecialParameterKind kind;
+  SlangTargetAPI minAPI;
+};
+
+// Table entries are in the order parameters must occur in a kernel parameter list.
+const SpecialParameter specialParameterTable[] = {
+  { "context", bcinfo::MD_SIG_Ctxt, SPK_CONTEXT, SLANG_M_TARGET_API },
+  { "x", bcinfo::MD_SIG_X, SPK_LOCATION, SLANG_MINIMUM_TARGET_API },
+  { "y", bcinfo::MD_SIG_Y, SPK_LOCATION, SLANG_MINIMUM_TARGET_API },
+  { "z", bcinfo::MD_SIG_Z, SPK_LOCATION, SLANG_M_TARGET_API },
+  { nullptr, bcinfo::MD_SIG_None, SPK_LOCATION, SLANG_MINIMUM_TARGET_API }, // marks end of table
+};
+
+// If the specified name matches the name of an entry in
+// specialParameterTable, return the corresponding table index.
+// Return -1 if not found.
+int lookupSpecialKernelParameter(const llvm::StringRef name) {
+  for (int i = 0; specialParameterTable[i].name != nullptr; ++i) {
+    if (name.equals(specialParameterTable[i].name)) {
+      return i;
+    }
+  }
+
+  return -1;
+}
+
+} // end anonymous namespace
+
+namespace slang {
+
+// Is the specified name the name of an entry in the specialParameterTable?
+bool isSpecialKernelParameter(const llvm::StringRef Name) {
+  return lookupSpecialKernelParameter(Name) >= 0;
+}
+
+// Return a comma-separated list of names in specialParameterTable
+// that are available at the specified API level.
+std::string listSpecialKernelParameters(unsigned int api) {
+  std::string ret;
+  bool first = true;
+  for (int i = 0; specialParameterTable[i].name != nullptr; ++i) {
+    if (specialParameterTable[i].minAPI > api)
+      continue;
+    if (first)
+      first = false;
+    else
+      ret += ", ";
+    ret += "'";
+    ret += specialParameterTable[i].name;
+    ret += "'";
+  }
+  return ret;
+}
+
+// Process the optional special parameters:
+// - Sets *IndexOfFirstSpecialParameter to the index of the first special parameter, or
+//     FD->getNumParams() if none are found.
+// - Add bits to *SignatureMetadata for the found special parameters.
+// Returns true if no errors.
+bool processSpecialKernelParameters(
+  slang::RSContext *Context,
+  const std::function<std::string ()> &DiagnosticDescription,
+  const clang::FunctionDecl *FD,
+  size_t *IndexOfFirstSpecialParameter,
+  unsigned int *SignatureMetadata) {
+  slangAssert(IndexOfFirstSpecialParameter != nullptr);
+  slangAssert(SignatureMetadata != nullptr);
+  slangAssert(*SignatureMetadata == 0);
+  clang::ASTContext &C = Context->getASTContext();
+
+  // Find all special parameters if present.
+  int LastSpecialParameterIdx = -1; // index into specialParameterTable
+  int FirstLocationSpecialParameterIdx = -1; // index into specialParameterTable
+  clang::QualType FirstLocationSpecialParameterType;
+  size_t NumParams = FD->getNumParams();
+  *IndexOfFirstSpecialParameter = NumParams;
+  bool valid = true;
+  for (size_t i = 0; i < NumParams; i++) {
+    const clang::ParmVarDecl *PVD = FD->getParamDecl(i);
+    const llvm::StringRef ParamName = PVD->getName();
+    const clang::QualType Type = PVD->getType();
+    const clang::QualType QT = Type.getCanonicalType();
+    const clang::QualType UT = QT.getUnqualifiedType();
+    int SpecialParameterIdx = lookupSpecialKernelParameter(ParamName);
+
+    static const char KernelContextUnqualifiedTypeName[] =
+        "const struct rs_kernel_context_t *";
+    static const char KernelContextTypeName[] = "rs_kernel_context";
+
+    // If the type is rs_context, it should have been named "context" and classified
+    // as a special parameter.
+    if (SpecialParameterIdx < 0 && UT.getAsString() == KernelContextUnqualifiedTypeName) {
+      Context->ReportError(
+          PVD->getLocation(),
+          "The special parameter of type '%0' must be called "
+          "'context' instead of '%1'.")
+          << KernelContextTypeName << ParamName;
+      SpecialParameterIdx = lookupSpecialKernelParameter("context");
+    }
+
+    // If it's not a special parameter, check that it appears before any special
+    // parameter.
+    if (SpecialParameterIdx < 0) {
+      if (*IndexOfFirstSpecialParameter < NumParams) {
+        Context->ReportError(PVD->getLocation(),
+                             "In %0, parameter '%1' cannot "
+                             "appear after any of the special parameters (%2).")
+            << DiagnosticDescription()
+            << ParamName
+            << listSpecialKernelParameters(Context->getTargetAPI());
+        valid = false;
+      }
+      continue;
+    }
+
+    const SpecialParameter &SP = specialParameterTable[SpecialParameterIdx];
+
+    // Verify that this special parameter is OK for the current API level.
+    if (Context->getTargetAPI() < SP.minAPI) {
+      Context->ReportError(PVD->getLocation(),
+                           "%0 targeting SDK levels "
+                           "%1-%2 may not use special parameter '%3'.")
+          << DiagnosticDescription()
+          << SLANG_MINIMUM_TARGET_API << (SP.minAPI - 1)
+          << SP.name;
+      valid = false;
+    }
+
+    // Check that the order of the special parameters is correct.
+    if (SpecialParameterIdx < LastSpecialParameterIdx) {
+      Context->ReportError(
+          PVD->getLocation(),
+          "In %0, special parameter '%1' must "
+          "be defined before special parameter '%2'.")
+          << DiagnosticDescription()
+          << SP.name
+          << specialParameterTable[LastSpecialParameterIdx].name;
+      valid = false;
+    }
+
+    // Validate the data type of the special parameter.
+    switch (SP.kind) {
+    case SPK_LOCATION: {
+      // Location special parameters can only be int or uint.
+      if (UT != C.UnsignedIntTy && UT != C.IntTy) {
+        Context->ReportError(PVD->getLocation(),
+                             "Special parameter '%0' must be of type 'int' or "
+                             "'unsigned int'. It is of type '%1'.")
+            << ParamName << Type.getAsString();
+        valid = false;
+      }
+
+      // Ensure that all location special parameters have the same type.
+      if (FirstLocationSpecialParameterIdx >= 0) {
+        if (Type != FirstLocationSpecialParameterType) {
+          Context->ReportError(
+              PVD->getLocation(),
+              "Special parameters '%0' and '%1' must be of the same type. "
+              "'%0' is of type '%2' while '%1' is of type '%3'.")
+              << specialParameterTable[FirstLocationSpecialParameterIdx].name
+              << SP.name << FirstLocationSpecialParameterType.getAsString()
+              << Type.getAsString();
+          valid = false;
+        }
+      } else {
+        FirstLocationSpecialParameterIdx = SpecialParameterIdx;
+        FirstLocationSpecialParameterType = Type;
+      }
+    } break;
+    case SPK_CONTEXT: {
+      // Check that variables named "context" are of type rs_context.
+      if (UT.getAsString() != KernelContextUnqualifiedTypeName) {
+        Context->ReportError(PVD->getLocation(),
+                             "Special parameter '%0' must be of type '%1'. "
+                             "It is of type '%2'.")
+            << ParamName << KernelContextTypeName
+            << Type.getAsString();
+        valid = false;
+      }
+    } break;
+    default:
+      slangAssert(!"Unexpected special parameter type");
+    }
+
+    // We should not be invoked if two parameters of the same name are present.
+    slangAssert(!(*SignatureMetadata & SP.bitval));
+    *SignatureMetadata |= SP.bitval;
+
+    LastSpecialParameterIdx = SpecialParameterIdx;
+    // If this is the first time we find a special parameter, save it.
+    if (*IndexOfFirstSpecialParameter >= NumParams) {
+      *IndexOfFirstSpecialParameter = i;
+    }
+  }
+  return valid;
+}
+
+} // namespace slang
diff --git a/slang/slang_rs_special_kernel_param.h b/slang/slang_rs_special_kernel_param.h
new file mode 100644
index 0000000..b753c74
--- /dev/null
+++ b/slang/slang_rs_special_kernel_param.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2015, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_SPECIAL_KERNEL_PARAM_H_
+#define _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_SPECIAL_KERNEL_PARAM_H_
+
+#include <functional>
+#include <string>
+
+#include "clang/AST/Decl.h"
+
+namespace slang {
+
+class RSContext;
+
+bool isSpecialKernelParameter(const llvm::StringRef Name);
+
+std::string listSpecialKernelParameters(unsigned int api);
+
+bool processSpecialKernelParameters(
+  RSContext *Context,
+  const std::function<std::string ()> &DiagnosticDescription,
+  const clang::FunctionDecl *FD,
+  size_t *IndexOfFirstSpecialParameter,
+  unsigned int *SignatureMetadata);
+}
+
+#endif  // _FRAMEWORKS_COMPILE_SLANG_SLANG_RS_SPECIAL_KERNEL_PARAM_H_
diff --git a/slang/slang_version.h b/slang/slang_version.h
new file mode 100644
index 0000000..74cd09e
--- /dev/null
+++ b/slang/slang_version.h
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2011-2012, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _FRAMEWORKS_COMPILE_SLANG_SLANG_VERSION_H_  // NOLINT
+#define _FRAMEWORKS_COMPILE_SLANG_SLANG_VERSION_H_
+
+#include <climits>
+
+#define RS_DEVELOPMENT_API UINT_MAX
+
+// API levels used by the standard Android SDK.
+// MR -> Maintenance Release
+// HC -> Honeycomb
+// ICS -> Ice Cream Sandwich
+// JB -> Jelly Bean
+// KK -> KitKat
+// M -> Marshmallow
+enum SlangTargetAPI {
+  SLANG_MINIMUM_TARGET_API = 11,
+  SLANG_HC_TARGET_API = 11,
+  SLANG_HC_MR1_TARGET_API = 12,
+  SLANG_HC_MR2_TARGET_API = 13,
+  SLANG_ICS_TARGET_API = 14,
+  SLANG_ICS_MR1_TARGET_API = 15,
+  SLANG_JB_TARGET_API = 16,
+  SLANG_JB_MR1_TARGET_API = 17,
+  SLANG_JB_MR2_TARGET_API = 18,
+  SLANG_KK_TARGET_API = 19,
+  SLANG_M_TARGET_API = 23,
+  SLANG_N_TARGET_API = 24,
+  SLANG_MAXIMUM_TARGET_API = RS_VERSION,
+  SLANG_DEVELOPMENT_TARGET_API = RS_DEVELOPMENT_API
+};
+// Note that RS_VERSION is defined at build time (see Android.mk for details).
+
+// API levels where particular features exist.
+// . Open (feature appears at a particular level and continues to exist):
+//     SLANG_FEAT_FOO_API
+// . Closed (feature exists only through a particular range of API levels):
+//     SLANG_FEAT_BAR_API_MIN, SLANG_FEAT_BAR_API_MAX
+enum SlangFeatureAPI {
+  SLANG_FEATURE_GENERAL_REDUCTION_API = SLANG_N_TARGET_API,
+  SLANG_FEATURE_GENERAL_REDUCTION_HALTER_API = SLANG_DEVELOPMENT_TARGET_API,
+  SLANG_FEATURE_SINGLE_SOURCE_API = SLANG_N_TARGET_API,
+};
+
+// SlangVersion refers to the released compiler version (for which certain
+// behaviors could change - i.e. critical bugs fixed that may require
+// additional workarounds in the backend compiler).
+namespace SlangVersion {
+enum {
+  LEGACY = 0,
+  ICS = 1400,
+  JB = 1600,
+  JB_MR1 = 1700,
+  JB_MR2 = 1800,
+  KK = 1900,
+  KK_P1 = 1901,
+  L = 2100,
+  M = 2300,
+  M_RS_OBJECT = 2310,
+  N = 2400,
+  CURRENT = N
+};
+}  // namespace SlangVersion
+
+#endif  // _FRAMEWORKS_COMPILE_SLANG_SLANG_VERSION_H_  NOLINT
diff --git a/slang/strip_unknown_attributes.cpp b/slang/strip_unknown_attributes.cpp
new file mode 100644
index 0000000..d41dd8f
--- /dev/null
+++ b/slang/strip_unknown_attributes.cpp
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2013, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "strip_unknown_attributes.h"
+
+namespace slang {
+
+StripUnknownAttributes::StripUnknownAttributes() : ModulePass(ID) {
+}
+
+
+bool StripUnknownAttributes::runOnFunction(llvm::Function &F) {
+  bool changed = false;
+  for (llvm::Function::arg_iterator I = F.arg_begin(), E = F.arg_end();
+       I != E; ++I) {
+    llvm::Argument &A = *I;
+    // Remove any readnone/readonly attributes from function parameters.
+    if (A.onlyReadsMemory()) {
+      llvm::AttrBuilder B;
+      B.addAttribute(llvm::Attribute::ReadNone);
+      B.addAttribute(llvm::Attribute::ReadOnly);
+      llvm::AttributeSet ToStrip = llvm::AttributeSet::get(F.getContext(),
+          A.getArgNo() + 1, B);
+      A.removeAttr(ToStrip);
+      changed = true;
+    }
+  }
+  F.removeFnAttr(llvm::Attribute::ArgMemOnly);
+  return changed;
+}
+
+
+bool StripUnknownAttributes::runOnModule(llvm::Module &M) {
+  bool Changed = false;
+  for (llvm::Module::iterator I = M.begin(), E = M.end(); I != E; ++I) {
+    Changed |= runOnFunction(*I);
+  }
+  return Changed;
+}
+
+
+llvm::ModulePass * createStripUnknownAttributesPass() {
+  return new StripUnknownAttributes();
+}
+
+
+char StripUnknownAttributes::ID = 0;
+static llvm::RegisterPass<StripUnknownAttributes> RPSUA(
+    "StripUnknownAttributes", "Strip Unknown Attributes Pass");
+
+}  // namespace slang
diff --git a/slang/strip_unknown_attributes.h b/slang/strip_unknown_attributes.h
new file mode 100644
index 0000000..8610cd5
--- /dev/null
+++ b/slang/strip_unknown_attributes.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2013, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "llvm/IR/Module.h"
+#include "llvm/Pass.h"
+
+namespace slang {
+
+// Remove any readnone/readonly attributes from function parameters.
+// Jellybean's LLVM version didn't support readnone/readonly as anything
+// other than function attributes, so it will fail verification otherwise.
+// Since we never ran the verifier in Jellybean, it ends up with potential
+// crashes deeper in CodeGen.
+class StripUnknownAttributes : public llvm::ModulePass {
+public:
+  static char ID;
+
+  StripUnknownAttributes();
+
+  bool runOnFunction(llvm::Function &F);
+
+  // We have to use a ModulePass, since a FunctionPass only gets run on
+  // defined Functions (and not declared Functions).
+  virtual bool runOnModule(llvm::Module &M);
+};
+
+llvm::ModulePass * createStripUnknownAttributesPass();
+
+}  // namespace slang
diff --git a/slang/tests/F_Werror/Werror.rs b/slang/tests/F_Werror/Werror.rs
new file mode 100644
index 0000000..f069d88
--- /dev/null
+++ b/slang/tests/F_Werror/Werror.rs
@@ -0,0 +1,7 @@
+// -Werror
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+static int foo() {
+}
+
diff --git a/slang/tests/F_Werror/stderr.txt.expect b/slang/tests/F_Werror/stderr.txt.expect
new file mode 100644
index 0000000..b58dd9f
--- /dev/null
+++ b/slang/tests/F_Werror/stderr.txt.expect
@@ -0,0 +1 @@
+Werror.rs:6:1: error: control reaches end of non-void function
diff --git a/slang/tests/F_Werror/stdout.txt.expect b/slang/tests/F_Werror/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_Werror/stdout.txt.expect
diff --git a/slang/tests/F_anon_struct/anon_struct.rs b/slang/tests/F_anon_struct/anon_struct.rs
new file mode 100644
index 0000000..46bd8cb
--- /dev/null
+++ b/slang/tests/F_anon_struct/anon_struct.rs
@@ -0,0 +1,6 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+struct {
+    int i;
+} myStruct;
diff --git a/slang/tests/F_anon_struct/stderr.txt.expect b/slang/tests/F_anon_struct/stderr.txt.expect
new file mode 100644
index 0000000..efc6f94
--- /dev/null
+++ b/slang/tests/F_anon_struct/stderr.txt.expect
@@ -0,0 +1 @@
+anon_struct.rs:4:1: error: anonymous structures cannot be exported
diff --git a/slang/tests/F_anon_struct/stdout.txt.expect b/slang/tests/F_anon_struct/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_anon_struct/stdout.txt.expect
diff --git a/slang/tests/F_anon_struct_kernel_sig/anon_struct_kernel_sig.rs b/slang/tests/F_anon_struct_kernel_sig/anon_struct_kernel_sig.rs
new file mode 100644
index 0000000..028a328
--- /dev/null
+++ b/slang/tests/F_anon_struct_kernel_sig/anon_struct_kernel_sig.rs
@@ -0,0 +1,21 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+typedef struct {
+  int i;
+} myStruct;
+
+/* Test old-style kernel */
+void root(const myStruct *in, int *out) {
+  *out = in->i;
+}
+
+/* Test new-style kernel */
+myStruct RS_KERNEL kernel_returning_myStruct(int in) {
+  myStruct out = { in };
+  return out;
+}
+
+int RS_KERNEL kernel_with_myStruct_param(myStruct in) {
+  return in.i;
+}
diff --git a/slang/tests/F_anon_struct_kernel_sig/stderr.txt.expect b/slang/tests/F_anon_struct_kernel_sig/stderr.txt.expect
new file mode 100644
index 0000000..276aaaf
--- /dev/null
+++ b/slang/tests/F_anon_struct_kernel_sig/stderr.txt.expect
@@ -0,0 +1 @@
+anon_struct_kernel_sig.rs:4:9: error: anonymous structures cannot be exported
diff --git a/slang/tests/F_anon_struct_kernel_sig/stdout.txt.expect b/slang/tests/F_anon_struct_kernel_sig/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_anon_struct_kernel_sig/stdout.txt.expect
diff --git a/slang/tests/F_anon_struct_typedef/anon_struct_typedef.rs b/slang/tests/F_anon_struct_typedef/anon_struct_typedef.rs
new file mode 100644
index 0000000..dcd12f4
--- /dev/null
+++ b/slang/tests/F_anon_struct_typedef/anon_struct_typedef.rs
@@ -0,0 +1,9 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+typedef struct {
+    int i;
+} anon;
+
+anon myStruct;
+
diff --git a/slang/tests/F_anon_struct_typedef/stderr.txt.expect b/slang/tests/F_anon_struct_typedef/stderr.txt.expect
new file mode 100644
index 0000000..88df47d
--- /dev/null
+++ b/slang/tests/F_anon_struct_typedef/stderr.txt.expect
@@ -0,0 +1 @@
+anon_struct_typedef.rs:4:9: error: anonymous structures cannot be exported
diff --git a/slang/tests/F_anon_struct_typedef/stdout.txt.expect b/slang/tests/F_anon_struct_typedef/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_anon_struct_typedef/stdout.txt.expect
diff --git a/slang/tests/F_bad_pragmas/bad_pragmas.rs b/slang/tests/F_bad_pragmas/bad_pragmas.rs
new file mode 100644
index 0000000..2ccd9a9
--- /dev/null
+++ b/slang/tests/F_bad_pragmas/bad_pragmas.rs
@@ -0,0 +1,11 @@
+// -Wall -Werror
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+#pragma ok(ok)
+#pragma ok()
+#pragma ok
+#pragma
+#pragma onlyLeft(
+#pragma missingRight(paren
+#pragma ok(not ok)
diff --git a/slang/tests/F_bad_pragmas/stderr.txt.expect b/slang/tests/F_bad_pragmas/stderr.txt.expect
new file mode 100644
index 0000000..cc2e564
--- /dev/null
+++ b/slang/tests/F_bad_pragmas/stderr.txt.expect
@@ -0,0 +1,7 @@
+bad_pragmas.rs:5:9: error: unknown pragma ignored
+bad_pragmas.rs:6:9: error: unknown pragma ignored
+bad_pragmas.rs:7:9: error: unknown pragma ignored
+bad_pragmas.rs:8:8: error: unknown pragma ignored
+bad_pragmas.rs:9:9: error: unknown pragma ignored
+bad_pragmas.rs:10:9: error: unknown pragma ignored
+bad_pragmas.rs:11:9: error: unknown pragma ignored
diff --git a/slang/tests/F_bad_pragmas/stdout.txt.expect b/slang/tests/F_bad_pragmas/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_bad_pragmas/stdout.txt.expect
diff --git a/slang/tests/F_bad_version_pragma/bad_version_pragma.rs b/slang/tests/F_bad_version_pragma/bad_version_pragma.rs
new file mode 100644
index 0000000..10bdf7e
--- /dev/null
+++ b/slang/tests/F_bad_version_pragma/bad_version_pragma.rs
@@ -0,0 +1,6 @@
+#pragma version(2000)
+#pragma version
+#pragma version(1
+#pragma version(1a)
+#pragma rs java_package_name(foo)
+
diff --git a/slang/tests/F_bad_version_pragma/stderr.txt.expect b/slang/tests/F_bad_version_pragma/stderr.txt.expect
new file mode 100644
index 0000000..68fc9ac
--- /dev/null
+++ b/slang/tests/F_bad_version_pragma/stderr.txt.expect
@@ -0,0 +1,4 @@
+bad_version_pragma.rs:1:17: error: pragma for version in source file must be set to 1
+bad_version_pragma.rs:2:16: error: pragma for version in source file must be set to 1
+bad_version_pragma.rs:3:18: error: expected a ')'
+bad_version_pragma.rs:4:18: error: invalid digit 'a' in decimal constant
diff --git a/slang/tests/F_bad_version_pragma/stdout.txt.expect b/slang/tests/F_bad_version_pragma/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_bad_version_pragma/stdout.txt.expect
diff --git a/slang/tests/F_const_array_arg/const_array_arg.rs b/slang/tests/F_const_array_arg/const_array_arg.rs
new file mode 100644
index 0000000..0cbb776
--- /dev/null
+++ b/slang/tests/F_const_array_arg/const_array_arg.rs
@@ -0,0 +1,9 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void foo(float arr[3]) {
+}
+
+void bar(float *ptr) {
+}
+
diff --git a/slang/tests/F_const_array_arg/stderr.txt.expect b/slang/tests/F_const_array_arg/stderr.txt.expect
new file mode 100644
index 0000000..9b7ad1d
--- /dev/null
+++ b/slang/tests/F_const_array_arg/stderr.txt.expect
@@ -0,0 +1 @@
+const_array_arg.rs:4:10: error: exported function parameters may not have array type: 'float [3]'
diff --git a/slang/tests/F_const_array_arg/stdout.txt.expect b/slang/tests/F_const_array_arg/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_const_array_arg/stdout.txt.expect
diff --git a/slang/tests/F_ctxt_wrong_api/ctxt_wrong_api.rs b/slang/tests/F_ctxt_wrong_api/ctxt_wrong_api.rs
new file mode 100644
index 0000000..cabf40e
--- /dev/null
+++ b/slang/tests/F_ctxt_wrong_api/ctxt_wrong_api.rs
@@ -0,0 +1,7 @@
+// -target-api 22
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+int RS_KERNEL good(int in, rs_kernel_context context) {
+  return 0;
+}
diff --git a/slang/tests/F_ctxt_wrong_api/stderr.txt.expect b/slang/tests/F_ctxt_wrong_api/stderr.txt.expect
new file mode 100644
index 0000000..1ab01a2
--- /dev/null
+++ b/slang/tests/F_ctxt_wrong_api/stderr.txt.expect
@@ -0,0 +1 @@
+ctxt_wrong_api.rs:5:28: error: unknown type name 'rs_kernel_context'
diff --git a/slang/tests/F_ctxt_wrong_api/stdout.txt.expect b/slang/tests/F_ctxt_wrong_api/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_ctxt_wrong_api/stdout.txt.expect
diff --git a/slang/tests/F_ctxt_wrong_name/context.rs b/slang/tests/F_ctxt_wrong_name/context.rs
new file mode 100644
index 0000000..d39fbed
--- /dev/null
+++ b/slang/tests/F_ctxt_wrong_name/context.rs
@@ -0,0 +1,7 @@
+// -target-api 23
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+int RS_KERNEL bad(int in, uint32_t x, rs_kernel_context ct) {
+  return 0;
+}
diff --git a/slang/tests/F_ctxt_wrong_name/stderr.txt.expect b/slang/tests/F_ctxt_wrong_name/stderr.txt.expect
new file mode 100644
index 0000000..b102ee6
--- /dev/null
+++ b/slang/tests/F_ctxt_wrong_name/stderr.txt.expect
@@ -0,0 +1,2 @@
+context.rs:5:57: error: The special parameter of type 'rs_kernel_context' must be called 'context' instead of 'ct'.
+context.rs:5:57: error: In compute kernel bad(), special parameter 'context' must be defined before special parameter 'x'.
diff --git a/slang/tests/F_ctxt_wrong_name/stdout.txt.expect b/slang/tests/F_ctxt_wrong_name/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_ctxt_wrong_name/stdout.txt.expect
diff --git a/slang/tests/F_ctxt_wrong_place/ctxt_wrong_place.rs b/slang/tests/F_ctxt_wrong_place/ctxt_wrong_place.rs
new file mode 100644
index 0000000..29298ff
--- /dev/null
+++ b/slang/tests/F_ctxt_wrong_place/ctxt_wrong_place.rs
@@ -0,0 +1,11 @@
+// -target-api 23
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+int RS_KERNEL good(int in, rs_kernel_context context, uint32_t x) {
+  return 0;
+}
+
+int RS_KERNEL bad(int in, uint32_t x, rs_kernel_context context) {
+  return 0;
+}
diff --git a/slang/tests/F_ctxt_wrong_place/stderr.txt.expect b/slang/tests/F_ctxt_wrong_place/stderr.txt.expect
new file mode 100644
index 0000000..fc2a67d
--- /dev/null
+++ b/slang/tests/F_ctxt_wrong_place/stderr.txt.expect
@@ -0,0 +1 @@
+ctxt_wrong_place.rs:9:57: error: In compute kernel bad(), special parameter 'context' must be defined before special parameter 'x'.
diff --git a/slang/tests/F_ctxt_wrong_place/stdout.txt.expect b/slang/tests/F_ctxt_wrong_place/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_ctxt_wrong_place/stdout.txt.expect
diff --git a/slang/tests/F_ctxt_wrong_type/ctxt_wrong_type.rs b/slang/tests/F_ctxt_wrong_type/ctxt_wrong_type.rs
new file mode 100644
index 0000000..11d2433
--- /dev/null
+++ b/slang/tests/F_ctxt_wrong_type/ctxt_wrong_type.rs
@@ -0,0 +1,15 @@
+// -target-api 23
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+int RS_KERNEL good1(int in, rs_kernel_context context) {
+  return 0;
+}
+
+int RS_KERNEL good2(int in, const rs_kernel_context context) {
+  return 0;
+}
+
+int RS_KERNEL bad3(int in, const rs_kernel_context *context) {
+  return 0;
+}
diff --git a/slang/tests/F_ctxt_wrong_type/stderr.txt.expect b/slang/tests/F_ctxt_wrong_type/stderr.txt.expect
new file mode 100644
index 0000000..ff2d98c
--- /dev/null
+++ b/slang/tests/F_ctxt_wrong_type/stderr.txt.expect
@@ -0,0 +1 @@
+ctxt_wrong_type.rs:13:53: error: Special parameter 'context' must be of type 'rs_kernel_context'. It is of type 'const rs_kernel_context *'.
diff --git a/slang/tests/F_ctxt_wrong_type/stdout.txt.expect b/slang/tests/F_ctxt_wrong_type/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_ctxt_wrong_type/stdout.txt.expect
diff --git a/slang/tests/F_extern_const/extern_const.rs b/slang/tests/F_extern_const/extern_const.rs
new file mode 100644
index 0000000..bf630de
--- /dev/null
+++ b/slang/tests/F_extern_const/extern_const.rs
@@ -0,0 +1,4 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+extern const int extern_const_int;
diff --git a/slang/tests/F_extern_const/stderr.txt.expect b/slang/tests/F_extern_const/stderr.txt.expect
new file mode 100644
index 0000000..567c9a5
--- /dev/null
+++ b/slang/tests/F_extern_const/stderr.txt.expect
@@ -0,0 +1 @@
+extern_const.rs:4:18: error: invalid declaration of uninitialized constant variable 'extern_const_int'
diff --git a/slang/tests/F_extern_const/stdout.txt.expect b/slang/tests/F_extern_const/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_extern_const/stdout.txt.expect
diff --git a/slang/tests/F_float3_array/float3_array.rs b/slang/tests/F_float3_array/float3_array.rs
new file mode 100644
index 0000000..b928569
--- /dev/null
+++ b/slang/tests/F_float3_array/float3_array.rs
@@ -0,0 +1,5 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+float3 f[2];
+
diff --git a/slang/tests/F_float3_array/stderr.txt.expect b/slang/tests/F_float3_array/stderr.txt.expect
new file mode 100644
index 0000000..c07208c
--- /dev/null
+++ b/slang/tests/F_float3_array/stderr.txt.expect
@@ -0,0 +1 @@
+float3_array.rs:4:8: error: arrays of width 3 vector types cannot be exported: 'f'
diff --git a/slang/tests/F_float3_array/stdout.txt.expect b/slang/tests/F_float3_array/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_float3_array/stdout.txt.expect
diff --git a/slang/tests/F_float3_v13/float3_v13.rs b/slang/tests/F_float3_v13/float3_v13.rs
new file mode 100644
index 0000000..6957222
--- /dev/null
+++ b/slang/tests/F_float3_v13/float3_v13.rs
@@ -0,0 +1,10 @@
+// -target-api 13
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+struct s {
+    float3 f;
+};
+
+struct s myStruct;
+
diff --git a/slang/tests/F_float3_v13/stderr.txt.expect b/slang/tests/F_float3_v13/stderr.txt.expect
new file mode 100644
index 0000000..6d84d10
--- /dev/null
+++ b/slang/tests/F_float3_v13/stderr.txt.expect
@@ -0,0 +1 @@
+float3_v13.rs:9:10: error: structs containing vectors of dimension 3 cannot be exported at this API level: 'myStruct'
diff --git a/slang/tests/F_float3_v13/stdout.txt.expect b/slang/tests/F_float3_v13/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_float3_v13/stdout.txt.expect
diff --git a/slang/tests/F_foreach_forward_reference/foreach_forward_reference.rs b/slang/tests/F_foreach_forward_reference/foreach_forward_reference.rs
new file mode 100644
index 0000000..904f6e9
--- /dev/null
+++ b/slang/tests/F_foreach_forward_reference/foreach_forward_reference.rs
@@ -0,0 +1,13 @@
+// -target-api 0
+#pragma version(1)
+#pragma rs java_package_name(com.example.foo)
+
+void testStart(rs_allocation in, rs_allocation out) {
+  rsForEach(goo, in, out);
+}
+
+int RS_KERNEL goo(int a) {
+  return a;
+}
+
+
diff --git a/slang/tests/F_foreach_forward_reference/stderr.txt.expect b/slang/tests/F_foreach_forward_reference/stderr.txt.expect
new file mode 100644
index 0000000..8e214b1
--- /dev/null
+++ b/slang/tests/F_foreach_forward_reference/stderr.txt.expect
@@ -0,0 +1,2 @@
+foreach_forward_reference.rs:6:13: error: use of undeclared identifier 'goo'; did you mean 'goto'?
+foreach_forward_reference.rs:6:13: error: expected expression
diff --git a/slang/tests/F_foreach_forward_reference/stdout.txt.expect b/slang/tests/F_foreach_forward_reference/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_foreach_forward_reference/stdout.txt.expect
diff --git a/slang/tests/F_foreach_from_kernel/foreach_from_kernel.rs b/slang/tests/F_foreach_from_kernel/foreach_from_kernel.rs
new file mode 100644
index 0000000..911170c
--- /dev/null
+++ b/slang/tests/F_foreach_from_kernel/foreach_from_kernel.rs
@@ -0,0 +1,21 @@
+// -target-api 0
+#pragma version(1)
+#pragma rs java_package_name(com.example.foo)
+
+int __attribute__((kernel)) foo(int a) {
+  return a;
+}
+
+rs_allocation g_in;
+rs_allocation g_out;
+
+int __attribute__((kernel)) goo(int a) {
+  rsForEach(foo, g_in, g_out);
+  return a;
+}
+
+void bar() {
+  rsForEach(foo, g_in, g_out);
+}
+
+
diff --git a/slang/tests/F_foreach_from_kernel/stderr.txt.expect b/slang/tests/F_foreach_from_kernel/stderr.txt.expect
new file mode 100644
index 0000000..d9b82b0
--- /dev/null
+++ b/slang/tests/F_foreach_from_kernel/stderr.txt.expect
@@ -0,0 +1 @@
+foreach_from_kernel.rs:13:3: error: Invalid kernel launch call made from inside another kernel.
diff --git a/slang/tests/F_foreach_from_kernel/stdout.txt.expect b/slang/tests/F_foreach_from_kernel/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_foreach_from_kernel/stdout.txt.expect
diff --git a/slang/tests/F_foreach_non_kernel/foreach_non_kernel.rs b/slang/tests/F_foreach_non_kernel/foreach_non_kernel.rs
new file mode 100644
index 0000000..dafce3c
--- /dev/null
+++ b/slang/tests/F_foreach_non_kernel/foreach_non_kernel.rs
@@ -0,0 +1,18 @@
+// -target-api 0
+#pragma version(1)
+#pragma rs java_package_name(com.example.foo)
+
+void oldFoo(const int* a, int *b) {
+  *b = *a;
+}
+
+int foo(int a) {
+  return a;
+}
+
+void testStart(rs_allocation in, rs_allocation out) {
+  rsForEach(oldFoo, in, out);
+  rsForEach(foo, in, out);
+}
+
+
diff --git a/slang/tests/F_foreach_non_kernel/stderr.txt.expect b/slang/tests/F_foreach_non_kernel/stderr.txt.expect
new file mode 100644
index 0000000..5ec8b50
--- /dev/null
+++ b/slang/tests/F_foreach_non_kernel/stderr.txt.expect
@@ -0,0 +1,2 @@
+foreach_non_kernel.rs:14:3: error: rsForEach applied to function oldFoo defined without "kernel" attribute
+foreach_non_kernel.rs:15:3: error: rsForEach applied to function foo defined without "kernel" attribute
diff --git a/slang/tests/F_foreach_non_kernel/stdout.txt.expect b/slang/tests/F_foreach_non_kernel/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_foreach_non_kernel/stdout.txt.expect
diff --git a/slang/tests/F_foreach_unexpected_allocs/foreach_unexpected_allocs.rs b/slang/tests/F_foreach_unexpected_allocs/foreach_unexpected_allocs.rs
new file mode 100644
index 0000000..c77b820
--- /dev/null
+++ b/slang/tests/F_foreach_unexpected_allocs/foreach_unexpected_allocs.rs
@@ -0,0 +1,12 @@
+// -target-api 0
+#pragma version(1)
+#pragma rs java_package_name(com.example.foo)
+
+int RS_KERNEL foo(int a) {
+  return a;
+}
+
+void testStart(rs_allocation in, rs_allocation out) {
+  rsForEach(foo, in);
+  rsForEach(foo, in, in, out);
+}
diff --git a/slang/tests/F_foreach_unexpected_allocs/stderr.txt.expect b/slang/tests/F_foreach_unexpected_allocs/stderr.txt.expect
new file mode 100644
index 0000000..0f5b389
--- /dev/null
+++ b/slang/tests/F_foreach_unexpected_allocs/stderr.txt.expect
@@ -0,0 +1,2 @@
+foreach_unexpected_allocs.rs:10:3: error: Number of input and output allocations unexpected for kernel function foo
+foreach_unexpected_allocs.rs:11:3: error: Number of input and output allocations unexpected for kernel function foo
diff --git a/slang/tests/F_foreach_unexpected_allocs/stdout.txt.expect b/slang/tests/F_foreach_unexpected_allocs/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_foreach_unexpected_allocs/stdout.txt.expect
diff --git a/slang/tests/F_foreach_unexpected_kernel_arg/foreach_unexpected_kernel_arg.rs b/slang/tests/F_foreach_unexpected_kernel_arg/foreach_unexpected_kernel_arg.rs
new file mode 100644
index 0000000..338d7f2
--- /dev/null
+++ b/slang/tests/F_foreach_unexpected_kernel_arg/foreach_unexpected_kernel_arg.rs
@@ -0,0 +1,17 @@
+// -target-api 0
+#pragma version(1)
+#pragma rs java_package_name(com.example.foo)
+
+int RS_KERNEL foo(int a) {
+  return a;
+}
+
+void testStart(rs_allocation in, rs_allocation out) {
+  int (*fp)(int) = &foo;
+  rsForEach(fp, in, out);
+  rsForEach(&foo, in, out);
+  rsForEachWithOptions(fp, NULL, in, out);
+  rsForEachWithOptions(&foo, NULL, in, out);
+}
+
+
diff --git a/slang/tests/F_foreach_unexpected_kernel_arg/stderr.txt.expect b/slang/tests/F_foreach_unexpected_kernel_arg/stderr.txt.expect
new file mode 100644
index 0000000..880117e
--- /dev/null
+++ b/slang/tests/F_foreach_unexpected_kernel_arg/stderr.txt.expect
@@ -0,0 +1,4 @@
+foreach_unexpected_kernel_arg.rs:11:13: error: Invalid kernel launch call. Expects a function designator for the first argument.
+foreach_unexpected_kernel_arg.rs:12:13: error: Invalid kernel launch call. Expects a function designator for the first argument.
+foreach_unexpected_kernel_arg.rs:13:24: error: Invalid kernel launch call. Expects a function designator for the first argument.
+foreach_unexpected_kernel_arg.rs:14:24: error: Invalid kernel launch call. Expects a function designator for the first argument.
diff --git a/slang/tests/F_foreach_unexpected_kernel_arg/stdout.txt.expect b/slang/tests/F_foreach_unexpected_kernel_arg/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_foreach_unexpected_kernel_arg/stdout.txt.expect
diff --git a/slang/tests/F_fp16_wrong_api/fp16_wrong_api.rs b/slang/tests/F_fp16_wrong_api/fp16_wrong_api.rs
new file mode 100644
index 0000000..f51b242
--- /dev/null
+++ b/slang/tests/F_fp16_wrong_api/fp16_wrong_api.rs
@@ -0,0 +1,7 @@
+// -target-api=22
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+__fp16 RS_KERNEL foo(__fp16 a) {
+  return (a+1);
+}
diff --git a/slang/tests/F_fp16_wrong_api/stderr.txt.expect b/slang/tests/F_fp16_wrong_api/stderr.txt.expect
new file mode 100644
index 0000000..9764b12
--- /dev/null
+++ b/slang/tests/F_fp16_wrong_api/stderr.txt.expect
@@ -0,0 +1,2 @@
+fp16_wrong_api.rs:5:18: error: function return value cannot have __fp16 type; did you forget * ?
+fp16_wrong_api.rs:5:29: error: parameters cannot have __fp16 type; did you forget * ?
diff --git a/slang/tests/F_fp16_wrong_api/stdout.txt.expect b/slang/tests/F_fp16_wrong_api/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_fp16_wrong_api/stdout.txt.expect
diff --git a/slang/tests/F_fs_oldkernel/fs_oldkernel.fs b/slang/tests/F_fs_oldkernel/fs_oldkernel.fs
new file mode 100644
index 0000000..4f607a5
--- /dev/null
+++ b/slang/tests/F_fs_oldkernel/fs_oldkernel.fs
@@ -0,0 +1,10 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void old_kernel(const uint32_t *ain, uint32_t x, uint32_t y) {
+}
+
+uint32_t* bad_kernel(const uint32_t *ain, uint32_t x, uint32_t y) {
+    return 0;
+}
+
diff --git a/slang/tests/F_fs_oldkernel/stderr.txt.expect b/slang/tests/F_fs_oldkernel/stderr.txt.expect
new file mode 100644
index 0000000..5b53b56
--- /dev/null
+++ b/slang/tests/F_fs_oldkernel/stderr.txt.expect
@@ -0,0 +1,3 @@
+fs_oldkernel.fs:4:17: error: Pointers are forbidden in Filterscript: 'ain'
+fs_oldkernel.fs:7:1: error: Pointers are forbidden in Filterscript: 'bad_kernel'
+fs_oldkernel.fs:7:22: error: Pointers are forbidden in Filterscript: 'ain'
diff --git a/slang/tests/F_fs_oldkernel/stdout.txt.expect b/slang/tests/F_fs_oldkernel/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_fs_oldkernel/stdout.txt.expect
diff --git a/slang/tests/F_fs_ptr/fs_ptr.fs b/slang/tests/F_fs_ptr/fs_ptr.fs
new file mode 100644
index 0000000..b6789ba
--- /dev/null
+++ b/slang/tests/F_fs_ptr/fs_ptr.fs
@@ -0,0 +1,39 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+int *i;
+
+struct f {
+    int i;
+    float *pf;
+    char c;
+    short *ps;
+};
+
+int ia[10];
+
+int RS_KERNEL root(uint32_t ain) {
+  char *c;
+
+  c = (char*) ain; // TODO(srhines): This is ok today.
+  return 0;
+}
+
+void RS_KERNEL in_only(uint32_t ain) {
+}
+
+int RS_KERNEL out_only() {
+  return 0;
+}
+
+int RS_KERNEL everything(uint32_t ain, uint32_t x, uint32_t y) {
+  return (int)&ain; // TODO(srhines): This is ok today.
+}
+
+void old_kernel(const uint32_t *ain, uint32_t x, uint32_t y) {
+}
+
+void test_call() {
+    int i = root(ia[4]);
+}
+
diff --git a/slang/tests/F_fs_ptr/stderr.txt.expect b/slang/tests/F_fs_ptr/stderr.txt.expect
new file mode 100644
index 0000000..2ff21f9
--- /dev/null
+++ b/slang/tests/F_fs_ptr/stderr.txt.expect
@@ -0,0 +1,3 @@
+fs_ptr.fs:4:6: error: Pointers are forbidden in Filterscript: 'i'
+fs_ptr.fs:16:9: error: Pointers are forbidden in Filterscript: 'c'
+fs_ptr.fs:33:17: error: Pointers are forbidden in Filterscript: 'ain'
diff --git a/slang/tests/F_fs_ptr/stdout.txt.expect b/slang/tests/F_fs_ptr/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_fs_ptr/stdout.txt.expect
diff --git a/slang/tests/F_fs_types/fs_types.fs b/slang/tests/F_fs_types/fs_types.fs
new file mode 100644
index 0000000..0fae063
--- /dev/null
+++ b/slang/tests/F_fs_types/fs_types.fs
@@ -0,0 +1,32 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+double d;
+
+struct s {
+    int i;
+    double d;
+    char c;
+    long l;
+};
+
+struct s myS;
+
+void foo_d(double d) {
+    double e;
+    float f = 0.0;
+    e = d;
+}
+
+void foo_l(long l) {
+    long m;
+    int i = 1l;
+    m = l;
+}
+
+void foo_ll(long long l) {
+    long long m;
+    int i = 1ll;
+    m = l;
+}
+
diff --git a/slang/tests/F_fs_types/stderr.txt.expect b/slang/tests/F_fs_types/stderr.txt.expect
new file mode 100644
index 0000000..f0d36a3
--- /dev/null
+++ b/slang/tests/F_fs_types/stderr.txt.expect
@@ -0,0 +1,14 @@
+fs_types.fs:4:8: error: Builtin types > 32 bits in size are forbidden in Filterscript: 'd'
+fs_types.fs:13:10: error: Builtin types > 32 bits in size are forbidden in Filterscript: 'myS'
+fs_types.fs:15:12: error: Builtin types > 32 bits in size are forbidden in Filterscript: 'd'
+fs_types.fs:16:12: error: Builtin types > 32 bits in size are forbidden in Filterscript: 'e'
+fs_types.fs:17:15: error: Builtin types > 32 bits in size are forbidden in Filterscript
+fs_types.fs:18:7: error: Builtin types > 32 bits in size are forbidden in Filterscript
+fs_types.fs:21:12: error: Builtin types > 32 bits in size are forbidden in Filterscript: 'l'
+fs_types.fs:22:10: error: Builtin types > 32 bits in size are forbidden in Filterscript: 'm'
+fs_types.fs:23:13: error: Builtin types > 32 bits in size are forbidden in Filterscript
+fs_types.fs:24:7: error: Builtin types > 32 bits in size are forbidden in Filterscript
+fs_types.fs:27:13: error: Builtin types > 32 bits in size are forbidden in Filterscript: 'l'
+fs_types.fs:28:15: error: Builtin types > 32 bits in size are forbidden in Filterscript: 'm'
+fs_types.fs:29:13: error: Builtin types > 32 bits in size are forbidden in Filterscript
+fs_types.fs:30:7: error: Builtin types > 32 bits in size are forbidden in Filterscript
diff --git a/slang/tests/F_fs_types/stdout.txt.expect b/slang/tests/F_fs_types/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_fs_types/stdout.txt.expect
diff --git a/slang/tests/F_global_init/global_init.rs b/slang/tests/F_global_init/global_init.rs
new file mode 100644
index 0000000..8d35184
--- /dev/null
+++ b/slang/tests/F_global_init/global_init.rs
@@ -0,0 +1,20 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+int ia[4] = {0, 1};
+int i = 2;
+int2 i2 = {3, 4};
+float fa[4] = {0.0, 1.0, 2.9999};
+char ca[2] = {'a', 7};
+bool ba[2] = {false, true};
+
+const int ic = 99;
+
+int ica[2] = {ic, 1000};
+
+struct s {
+    int i;
+};
+
+struct s myS = {9};
+
diff --git a/slang/tests/F_global_init/stderr.txt.expect b/slang/tests/F_global_init/stderr.txt.expect
new file mode 100644
index 0000000..19360f4
--- /dev/null
+++ b/slang/tests/F_global_init/stderr.txt.expect
@@ -0,0 +1 @@
+global_init.rs:19:10: error: Reflection of initializer to variable 'myS' (of type 's') is unsupported currently.
diff --git a/slang/tests/F_global_init/stdout.txt.expect b/slang/tests/F_global_init/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_global_init/stdout.txt.expect
diff --git a/slang/tests/F_incompatible_handles/incompatible_handles.rs b/slang/tests/F_incompatible_handles/incompatible_handles.rs
new file mode 100644
index 0000000..13f24fd
--- /dev/null
+++ b/slang/tests/F_incompatible_handles/incompatible_handles.rs
@@ -0,0 +1,8 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void foo() {
+  rs_allocation a;
+  rs_element e;
+  a = e;
+}
diff --git a/slang/tests/F_incompatible_handles/stderr.txt.expect b/slang/tests/F_incompatible_handles/stderr.txt.expect
new file mode 100644
index 0000000..a0cb2f3
--- /dev/null
+++ b/slang/tests/F_incompatible_handles/stderr.txt.expect
@@ -0,0 +1 @@
+incompatible_handles.rs:7:5: error: assigning to 'rs_allocation' (aka 'struct rs_allocation') from incompatible type 'rs_element' (aka 'struct rs_element')
diff --git a/slang/tests/F_incompatible_handles/stdout.txt.expect b/slang/tests/F_incompatible_handles/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_incompatible_handles/stdout.txt.expect
diff --git a/slang/tests/F_init_nonvoid/init_nonvoid.rs b/slang/tests/F_init_nonvoid/init_nonvoid.rs
new file mode 100644
index 0000000..7a1295c
--- /dev/null
+++ b/slang/tests/F_init_nonvoid/init_nonvoid.rs
@@ -0,0 +1,6 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+int init(void) {
+    return 0;
+}
diff --git a/slang/tests/F_init_nonvoid/stderr.txt.expect b/slang/tests/F_init_nonvoid/stderr.txt.expect
new file mode 100644
index 0000000..c47c6b6
--- /dev/null
+++ b/slang/tests/F_init_nonvoid/stderr.txt.expect
@@ -0,0 +1 @@
+init_nonvoid.rs:4:5: error: init(void) is required to have a void return type
diff --git a/slang/tests/F_init_nonvoid/stdout.txt.expect b/slang/tests/F_init_nonvoid/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_init_nonvoid/stdout.txt.expect
diff --git a/slang/tests/F_init_params/init_params.rs b/slang/tests/F_init_params/init_params.rs
new file mode 100644
index 0000000..1438c45
--- /dev/null
+++ b/slang/tests/F_init_params/init_params.rs
@@ -0,0 +1,6 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void init(int i) {
+    return;
+}
diff --git a/slang/tests/F_init_params/stderr.txt.expect b/slang/tests/F_init_params/stderr.txt.expect
new file mode 100644
index 0000000..7f2e8d0
--- /dev/null
+++ b/slang/tests/F_init_params/stderr.txt.expect
@@ -0,0 +1 @@
+init_params.rs:4:6: error: init(void) is required to have no parameters
diff --git a/slang/tests/F_init_params/stdout.txt.expect b/slang/tests/F_init_params/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_init_params/stdout.txt.expect
diff --git a/slang/tests/F_int_ptr_ptr/int_ptr_ptr.rs b/slang/tests/F_int_ptr_ptr/int_ptr_ptr.rs
new file mode 100644
index 0000000..8ab7bb8
--- /dev/null
+++ b/slang/tests/F_int_ptr_ptr/int_ptr_ptr.rs
@@ -0,0 +1,6 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+int** myPtr;
+static int **okPtr;
+
diff --git a/slang/tests/F_int_ptr_ptr/stderr.txt.expect b/slang/tests/F_int_ptr_ptr/stderr.txt.expect
new file mode 100644
index 0000000..5a6da69
--- /dev/null
+++ b/slang/tests/F_int_ptr_ptr/stderr.txt.expect
@@ -0,0 +1 @@
+int_ptr_ptr.rs:4:7: error: multiple levels of pointers cannot be exported: 'myPtr'
diff --git a/slang/tests/F_int_ptr_ptr/stdout.txt.expect b/slang/tests/F_int_ptr_ptr/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_int_ptr_ptr/stdout.txt.expect
diff --git a/slang/tests/F_invoke_return/invoke_return.rs b/slang/tests/F_invoke_return/invoke_return.rs
new file mode 100644
index 0000000..906b1f0
--- /dev/null
+++ b/slang/tests/F_invoke_return/invoke_return.rs
@@ -0,0 +1,6 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+int foo() {
+    return 0;
+}
diff --git a/slang/tests/F_invoke_return/stderr.txt.expect b/slang/tests/F_invoke_return/stderr.txt.expect
new file mode 100644
index 0000000..abfd902
--- /dev/null
+++ b/slang/tests/F_invoke_return/stderr.txt.expect
@@ -0,0 +1 @@
+invoke_return.rs:4:5: error: invokable non-static functions are required to return void
diff --git a/slang/tests/F_invoke_return/stdout.txt.expect b/slang/tests/F_invoke_return/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_invoke_return/stdout.txt.expect
diff --git a/slang/tests/F_kernel_16/kernel_16.rs b/slang/tests/F_kernel_16/kernel_16.rs
new file mode 100644
index 0000000..77bd718
--- /dev/null
+++ b/slang/tests/F_kernel_16/kernel_16.rs
@@ -0,0 +1,7 @@
+// -target-api 16
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void RS_KERNEL root(int i) {
+}
+
diff --git a/slang/tests/F_kernel_16/stderr.txt.expect b/slang/tests/F_kernel_16/stderr.txt.expect
new file mode 100644
index 0000000..ef61120
--- /dev/null
+++ b/slang/tests/F_kernel_16/stderr.txt.expect
@@ -0,0 +1 @@
+kernel_16.rs:5:16: error: Compute kernel root() targeting SDK levels 11-16 may not use pass-by-value with __attribute__((kernel))
diff --git a/slang/tests/F_kernel_16/stdout.txt.expect b/slang/tests/F_kernel_16/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_kernel_16/stdout.txt.expect
diff --git a/slang/tests/F_kernel_badattr/kernel_badattr.rs b/slang/tests/F_kernel_badattr/kernel_badattr.rs
new file mode 100644
index 0000000..ef43d44
--- /dev/null
+++ b/slang/tests/F_kernel_badattr/kernel_badattr.rs
@@ -0,0 +1,18 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+int __attribute__((kernel("unimplemented"))) kernel(int arg) {
+  return 0;
+}
+
+int __attribute__((kernel(7))) kernel2(int arg) {
+  return 0;
+}
+
+int __attribute__((kernel("reduce", 1))) kernel3(int arg) {
+  return 0;
+}
+
+int __attribute__((kernel("reduce"))) kernel4(int arg) {
+  return 0;
+}
diff --git a/slang/tests/F_kernel_badattr/stderr.txt.expect b/slang/tests/F_kernel_badattr/stderr.txt.expect
new file mode 100644
index 0000000..0d206ad
--- /dev/null
+++ b/slang/tests/F_kernel_badattr/stderr.txt.expect
@@ -0,0 +1,4 @@
+kernel_badattr.rs:8:27: error: 'kernel' attribute requires a string
+kernel_badattr.rs:12:20: error: 'kernel' attribute takes no more than 1 argument
+kernel_badattr.rs:4:46: error: Unknown kernel attribute argument 'unimplemented' in declaration of function 'kernel'
+kernel_badattr.rs:16:39: error: Unknown kernel attribute argument 'reduce' in declaration of function 'kernel4'
diff --git a/slang/tests/F_kernel_badattr/stdout.txt.expect b/slang/tests/F_kernel_badattr/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_kernel_badattr/stdout.txt.expect
diff --git a/slang/tests/F_kernel_badsig/kernel_badsig.rs b/slang/tests/F_kernel_badsig/kernel_badsig.rs
new file mode 100644
index 0000000..394e9c9
--- /dev/null
+++ b/slang/tests/F_kernel_badsig/kernel_badsig.rs
@@ -0,0 +1,7 @@
+// -target-api 22
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void RS_KERNEL root(uint32_t x) {
+}
+
diff --git a/slang/tests/F_kernel_badsig/stderr.txt.expect b/slang/tests/F_kernel_badsig/stderr.txt.expect
new file mode 100644
index 0000000..ca771ad
--- /dev/null
+++ b/slang/tests/F_kernel_badsig/stderr.txt.expect
@@ -0,0 +1 @@
+kernel_badsig.rs:5:16: error: Compute kernel root() targeting SDK levels 11-22 must have at least one input parameter or a non-void return type
diff --git a/slang/tests/F_kernel_badsig/stdout.txt.expect b/slang/tests/F_kernel_badsig/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_kernel_badsig/stdout.txt.expect
diff --git a/slang/tests/F_kernel_noattr/kernel_noattr.rs b/slang/tests/F_kernel_noattr/kernel_noattr.rs
new file mode 100644
index 0000000..27c5dcd
--- /dev/null
+++ b/slang/tests/F_kernel_noattr/kernel_noattr.rs
@@ -0,0 +1,18 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+int root(uint32_t x) {
+  return 0;
+}
+
+void in_only(uint32_t ain) {
+}
+
+int out_only() {
+  return 0;
+}
+
+int everything(uint32_t ain, uint32_t x, uint32_t y) {
+  return 0;
+}
+
diff --git a/slang/tests/F_kernel_noattr/stderr.txt.expect b/slang/tests/F_kernel_noattr/stderr.txt.expect
new file mode 100644
index 0000000..d8e054f
--- /dev/null
+++ b/slang/tests/F_kernel_noattr/stderr.txt.expect
@@ -0,0 +1,4 @@
+kernel_noattr.rs:4:5: error: Compute kernel root() is required to return a void type
+kernel_noattr.rs:4:5: error: Compute kernel root() must have at least one parameter for in or out
+kernel_noattr.rs:11:5: error: invokable non-static functions are required to return void
+kernel_noattr.rs:15:5: error: invokable non-static functions are required to return void
diff --git a/slang/tests/F_kernel_noattr/stdout.txt.expect b/slang/tests/F_kernel_noattr/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_kernel_noattr/stdout.txt.expect
diff --git a/slang/tests/F_kernel_ptr_param/kernel_ptr_param.rs b/slang/tests/F_kernel_ptr_param/kernel_ptr_param.rs
new file mode 100644
index 0000000..fc89717
--- /dev/null
+++ b/slang/tests/F_kernel_ptr_param/kernel_ptr_param.rs
@@ -0,0 +1,9 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void RS_KERNEL root(int *i) {
+}
+
+void RS_KERNEL voidptr(void *v) {
+}
+
diff --git a/slang/tests/F_kernel_ptr_param/stderr.txt.expect b/slang/tests/F_kernel_ptr_param/stderr.txt.expect
new file mode 100644
index 0000000..706d437
--- /dev/null
+++ b/slang/tests/F_kernel_ptr_param/stderr.txt.expect
@@ -0,0 +1,2 @@
+kernel_ptr_param.rs:4:26: error: Compute kernel root() cannot have parameter 'i' of pointer type: 'int *'
+kernel_ptr_param.rs:7:30: error: Compute kernel voidptr() cannot have parameter 'v' of pointer type: 'void *'
diff --git a/slang/tests/F_kernel_ptr_param/stdout.txt.expect b/slang/tests/F_kernel_ptr_param/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_kernel_ptr_param/stdout.txt.expect
diff --git a/slang/tests/F_kernel_ptr_ret_val/kernel_ptr_ret_val.rs b/slang/tests/F_kernel_ptr_ret_val/kernel_ptr_ret_val.rs
new file mode 100644
index 0000000..82fbd2e
--- /dev/null
+++ b/slang/tests/F_kernel_ptr_ret_val/kernel_ptr_ret_val.rs
@@ -0,0 +1,7 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+int * RS_KERNEL root() {
+  return NULL;
+}
+
diff --git a/slang/tests/F_kernel_ptr_ret_val/stderr.txt.expect b/slang/tests/F_kernel_ptr_ret_val/stderr.txt.expect
new file mode 100644
index 0000000..7567c1d
--- /dev/null
+++ b/slang/tests/F_kernel_ptr_ret_val/stderr.txt.expect
@@ -0,0 +1 @@
+kernel_ptr_ret_val.rs:4:1: error: Compute kernel root() cannot return a pointer type: 'int *'
diff --git a/slang/tests/F_kernel_ptr_ret_val/stdout.txt.expect b/slang/tests/F_kernel_ptr_ret_val/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_kernel_ptr_ret_val/stdout.txt.expect
diff --git a/slang/tests/F_kernel_static/kernel_static.rs b/slang/tests/F_kernel_static/kernel_static.rs
new file mode 100644
index 0000000..c160cd9
--- /dev/null
+++ b/slang/tests/F_kernel_static/kernel_static.rs
@@ -0,0 +1,20 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+static int gi;
+
+static void not_a_kernel(int i) {
+    static int j;
+    int k;
+    j = i;
+}
+
+int RS_KERNEL root(uint32_t ain) {
+  static const int ci;
+  static int i;
+  return 0;
+}
+
+static int RS_KERNEL static_kernel() {
+  return 0;
+}
diff --git a/slang/tests/F_kernel_static/stderr.txt.expect b/slang/tests/F_kernel_static/stderr.txt.expect
new file mode 100644
index 0000000..695fbb8
--- /dev/null
+++ b/slang/tests/F_kernel_static/stderr.txt.expect
@@ -0,0 +1,2 @@
+kernel_static.rs:14:14: error: Non-const static variables are not allowed in kernels: 'i'
+kernel_static.rs:18:22: error: Invalid use of attribute kernel with static function declaration: static_kernel
diff --git a/slang/tests/F_kernel_static/stdout.txt.expect b/slang/tests/F_kernel_static/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_kernel_static/stdout.txt.expect
diff --git a/slang/tests/F_large_array/large_array.rs b/slang/tests/F_large_array/large_array.rs
new file mode 100644
index 0000000..db53e2e
--- /dev/null
+++ b/slang/tests/F_large_array/large_array.rs
@@ -0,0 +1,6 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+char arr_pass[4294967295];
+char arr_fail[4294967296];
+
diff --git a/slang/tests/F_large_array/stderr.txt.expect b/slang/tests/F_large_array/stderr.txt.expect
new file mode 100644
index 0000000..e6c5dd1
--- /dev/null
+++ b/slang/tests/F_large_array/stderr.txt.expect
@@ -0,0 +1 @@
+large_array.rs:5:15: error: array is too large (4294967296 elements)
diff --git a/slang/tests/F_large_array/stdout.txt.expect b/slang/tests/F_large_array/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_large_array/stdout.txt.expect
diff --git a/slang/tests/F_mix_vector/mix_vector.rs b/slang/tests/F_mix_vector/mix_vector.rs
new file mode 100644
index 0000000..2311479
--- /dev/null
+++ b/slang/tests/F_mix_vector/mix_vector.rs
@@ -0,0 +1,11 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void foo() {
+    float4 f4;
+    (void)f4.xg;
+    (void)f4.ry;
+    f4.xr = f4.ba;
+    return;
+}
+
diff --git a/slang/tests/F_mix_vector/stderr.txt.expect b/slang/tests/F_mix_vector/stderr.txt.expect
new file mode 100644
index 0000000..a4af2cc
--- /dev/null
+++ b/slang/tests/F_mix_vector/stderr.txt.expect
@@ -0,0 +1,3 @@
+mix_vector.rs:6:13: error: illegal vector component name 'g'
+mix_vector.rs:7:13: error: illegal vector component name 'y'
+mix_vector.rs:8:7: error: illegal vector component name 'r'
diff --git a/slang/tests/F_mix_vector/stdout.txt.expect b/slang/tests/F_mix_vector/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_mix_vector/stdout.txt.expect
diff --git a/slang/tests/F_multi_export_errors/multi_export_errors.rs b/slang/tests/F_multi_export_errors/multi_export_errors.rs
new file mode 100644
index 0000000..020fa14
--- /dev/null
+++ b/slang/tests/F_multi_export_errors/multi_export_errors.rs
@@ -0,0 +1,13 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+int init(void) {
+    return 0;
+}
+
+void root(void) {
+}
+
+int foo(void) {
+    return 5;
+}
diff --git a/slang/tests/F_multi_export_errors/stderr.txt.expect b/slang/tests/F_multi_export_errors/stderr.txt.expect
new file mode 100644
index 0000000..a39a137
--- /dev/null
+++ b/slang/tests/F_multi_export_errors/stderr.txt.expect
@@ -0,0 +1,3 @@
+multi_export_errors.rs:4:5: error: init(void) is required to have a void return type
+multi_export_errors.rs:8:6: error: root() is required to return an int for graphics usage
+multi_export_errors.rs:11:5: error: invokable non-static functions are required to return void
diff --git a/slang/tests/F_multi_export_errors/stdout.txt.expect b/slang/tests/F_multi_export_errors/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_multi_export_errors/stdout.txt.expect
diff --git a/slang/tests/F_multi_in_target_version/multi_in_target_version.rs b/slang/tests/F_multi_in_target_version/multi_in_target_version.rs
new file mode 100644
index 0000000..429bf5b
--- /dev/null
+++ b/slang/tests/F_multi_in_target_version/multi_in_target_version.rs
@@ -0,0 +1,8 @@
+// -target-api 20
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+int RS_KERNEL root(uint32_t in0, uint32_t in1, int x, int y) {
+  return 0;
+}
+
diff --git a/slang/tests/F_multi_in_target_version/stderr.txt.expect b/slang/tests/F_multi_in_target_version/stderr.txt.expect
new file mode 100644
index 0000000..49af40d
--- /dev/null
+++ b/slang/tests/F_multi_in_target_version/stderr.txt.expect
@@ -0,0 +1 @@
+multi_in_target_version.rs:5:43: error: Invalid parameter 'in1' for compute kernel root(). Kernels targeting SDK levels 11-22 may not use multiple input parameters.
diff --git a/slang/tests/F_multi_in_target_version/stdout.txt.expect b/slang/tests/F_multi_in_target_version/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_multi_in_target_version/stdout.txt.expect
diff --git a/slang/tests/F_multidim_array/multidim_array.rs b/slang/tests/F_multidim_array/multidim_array.rs
new file mode 100644
index 0000000..cf967e0
--- /dev/null
+++ b/slang/tests/F_multidim_array/multidim_array.rs
@@ -0,0 +1,4 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+int arr[2][2];
diff --git a/slang/tests/F_multidim_array/stderr.txt.expect b/slang/tests/F_multidim_array/stderr.txt.expect
new file mode 100644
index 0000000..fdafe4a
--- /dev/null
+++ b/slang/tests/F_multidim_array/stderr.txt.expect
@@ -0,0 +1 @@
+multidim_array.rs:4:5: error: multidimensional arrays cannot be exported: 'arr'
diff --git a/slang/tests/F_multidim_array/stdout.txt.expect b/slang/tests/F_multidim_array/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_multidim_array/stdout.txt.expect
diff --git a/slang/tests/F_no_java_package_name/no_java_package_name.rs b/slang/tests/F_no_java_package_name/no_java_package_name.rs
new file mode 100644
index 0000000..bfa6f9d
--- /dev/null
+++ b/slang/tests/F_no_java_package_name/no_java_package_name.rs
@@ -0,0 +1,6 @@
+#pragma version(1)
+
+int root(void) {
+    return 10;
+}
+
diff --git a/slang/tests/F_no_java_package_name/stderr.txt.expect b/slang/tests/F_no_java_package_name/stderr.txt.expect
new file mode 100644
index 0000000..c554bc6
--- /dev/null
+++ b/slang/tests/F_no_java_package_name/stderr.txt.expect
@@ -0,0 +1 @@
+no_java_package_name.rs:7:1: error: missing "#pragma rs java_package_name(com.foo.bar)" in source file
diff --git a/slang/tests/F_no_java_package_name/stdout.txt.expect b/slang/tests/F_no_java_package_name/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_no_java_package_name/stdout.txt.expect
diff --git a/slang/tests/F_no_pragma/first.rs b/slang/tests/F_no_pragma/first.rs
new file mode 100644
index 0000000..a53bf90
--- /dev/null
+++ b/slang/tests/F_no_pragma/first.rs
@@ -0,0 +1,3 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
diff --git a/slang/tests/F_no_pragma/second.rs b/slang/tests/F_no_pragma/second.rs
new file mode 100644
index 0000000..a746ce1
--- /dev/null
+++ b/slang/tests/F_no_pragma/second.rs
@@ -0,0 +1,2 @@
+#pragma version(1)
+
diff --git a/slang/tests/F_no_pragma/stderr.txt.expect b/slang/tests/F_no_pragma/stderr.txt.expect
new file mode 100644
index 0000000..87440ca
--- /dev/null
+++ b/slang/tests/F_no_pragma/stderr.txt.expect
@@ -0,0 +1 @@
+second.rs:3:1: error: missing "#pragma rs java_package_name(com.foo.bar)" in source file
diff --git a/slang/tests/F_no_pragma/stdout.txt.expect b/slang/tests/F_no_pragma/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_no_pragma/stdout.txt.expect
diff --git a/slang/tests/F_no_version_pragma/no_version_pragma.rs b/slang/tests/F_no_version_pragma/no_version_pragma.rs
new file mode 100644
index 0000000..9b928ce
--- /dev/null
+++ b/slang/tests/F_no_version_pragma/no_version_pragma.rs
@@ -0,0 +1 @@
+#pragma rs java_package_name(foo)
diff --git a/slang/tests/F_no_version_pragma/stderr.txt.expect b/slang/tests/F_no_version_pragma/stderr.txt.expect
new file mode 100644
index 0000000..cdfa917
--- /dev/null
+++ b/slang/tests/F_no_version_pragma/stderr.txt.expect
@@ -0,0 +1 @@
+no_version_pragma.rs:2:1: error: missing pragma for version in source file
diff --git a/slang/tests/F_no_version_pragma/stdout.txt.expect b/slang/tests/F_no_version_pragma/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_no_version_pragma/stdout.txt.expect
diff --git a/slang/tests/F_one_definition_rule1/def1.rs b/slang/tests/F_one_definition_rule1/def1.rs
new file mode 100644
index 0000000..7b0b225
--- /dev/null
+++ b/slang/tests/F_one_definition_rule1/def1.rs
@@ -0,0 +1,9 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+// expected-error: different number of members
+typedef struct DifferentDefinition1{
+	int member1;
+} DifferentDefinition1;
+
+DifferentDefinition1 o1;
diff --git a/slang/tests/F_one_definition_rule1/def2.rs b/slang/tests/F_one_definition_rule1/def2.rs
new file mode 100644
index 0000000..f770a5e
--- /dev/null
+++ b/slang/tests/F_one_definition_rule1/def2.rs
@@ -0,0 +1,10 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+// expected-error: different number of members
+typedef struct DifferentDefinition1{
+	int member1;
+	float member2;
+} DifferentDefinition1;
+
+DifferentDefinition1 o1;
diff --git a/slang/tests/F_one_definition_rule1/stderr.txt.expect b/slang/tests/F_one_definition_rule1/stderr.txt.expect
new file mode 100644
index 0000000..326c544
--- /dev/null
+++ b/slang/tests/F_one_definition_rule1/stderr.txt.expect
@@ -0,0 +1 @@
+error: type 'DifferentDefinition1' in different translation unit (def2.rs v.s. def1.rs) has incompatible type definition
diff --git a/slang/tests/F_one_definition_rule1/stdout.txt.expect b/slang/tests/F_one_definition_rule1/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_one_definition_rule1/stdout.txt.expect
diff --git a/slang/tests/F_one_definition_rule2/def1.rs b/slang/tests/F_one_definition_rule2/def1.rs
new file mode 100644
index 0000000..7c8cd97
--- /dev/null
+++ b/slang/tests/F_one_definition_rule2/def1.rs
@@ -0,0 +1,9 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+// expected-error: different number of members
+typedef struct DifferentDefinition2{
+	int member1;
+} DifferentDefinition2;
+
+DifferentDefinition2 o2;
diff --git a/slang/tests/F_one_definition_rule2/def2.rs b/slang/tests/F_one_definition_rule2/def2.rs
new file mode 100644
index 0000000..1d64772
--- /dev/null
+++ b/slang/tests/F_one_definition_rule2/def2.rs
@@ -0,0 +1,8 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+// expected-error: different number of members
+typedef struct DifferentDefinition2{
+} DifferentDefinition2;
+
+DifferentDefinition2 o2;
diff --git a/slang/tests/F_one_definition_rule2/stderr.txt.expect b/slang/tests/F_one_definition_rule2/stderr.txt.expect
new file mode 100644
index 0000000..a5f7a4f
--- /dev/null
+++ b/slang/tests/F_one_definition_rule2/stderr.txt.expect
@@ -0,0 +1 @@
+error: type 'DifferentDefinition2' in different translation unit (def2.rs v.s. def1.rs) has incompatible type definition
diff --git a/slang/tests/F_one_definition_rule2/stdout.txt.expect b/slang/tests/F_one_definition_rule2/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_one_definition_rule2/stdout.txt.expect
diff --git a/slang/tests/F_one_definition_rule3/def1.rs b/slang/tests/F_one_definition_rule3/def1.rs
new file mode 100644
index 0000000..8a8d15b
--- /dev/null
+++ b/slang/tests/F_one_definition_rule3/def1.rs
@@ -0,0 +1,10 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+// expected-error: different type
+typedef struct DifferentDefinition3{
+	int member1;
+	float member2;
+} DifferentDefinition3;
+
+DifferentDefinition3 o3;
diff --git a/slang/tests/F_one_definition_rule3/def2.rs b/slang/tests/F_one_definition_rule3/def2.rs
new file mode 100644
index 0000000..b574be3
--- /dev/null
+++ b/slang/tests/F_one_definition_rule3/def2.rs
@@ -0,0 +1,10 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+// expected-error: different type
+typedef struct DifferentDefinition3{
+	int member1;
+	int member2;
+} DifferentDefinition3;
+
+DifferentDefinition3 o3;
diff --git a/slang/tests/F_one_definition_rule3/stderr.txt.expect b/slang/tests/F_one_definition_rule3/stderr.txt.expect
new file mode 100644
index 0000000..b9c9894
--- /dev/null
+++ b/slang/tests/F_one_definition_rule3/stderr.txt.expect
@@ -0,0 +1 @@
+error: type 'DifferentDefinition3' in different translation unit (def2.rs v.s. def1.rs) has incompatible type definition
diff --git a/slang/tests/F_one_definition_rule3/stdout.txt.expect b/slang/tests/F_one_definition_rule3/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_one_definition_rule3/stdout.txt.expect
diff --git a/slang/tests/F_one_definition_rule4/def1.rs b/slang/tests/F_one_definition_rule4/def1.rs
new file mode 100644
index 0000000..52b6395
--- /dev/null
+++ b/slang/tests/F_one_definition_rule4/def1.rs
@@ -0,0 +1,10 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+// expected-error: different name
+typedef struct DifferentDefinition4{
+	int member1;
+	float member2;
+} DifferentDefinition4;
+
+DifferentDefinition4 o4;
diff --git a/slang/tests/F_one_definition_rule4/def2.rs b/slang/tests/F_one_definition_rule4/def2.rs
new file mode 100644
index 0000000..54157b3
--- /dev/null
+++ b/slang/tests/F_one_definition_rule4/def2.rs
@@ -0,0 +1,10 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+// expected-error: different name
+typedef struct DifferentDefinition4{
+	int member1;
+	float member3;
+} DifferentDefinition4;
+
+DifferentDefinition4 o4;
diff --git a/slang/tests/F_one_definition_rule4/stderr.txt.expect b/slang/tests/F_one_definition_rule4/stderr.txt.expect
new file mode 100644
index 0000000..93a3add
--- /dev/null
+++ b/slang/tests/F_one_definition_rule4/stderr.txt.expect
@@ -0,0 +1 @@
+error: type 'DifferentDefinition4' in different translation unit (def2.rs v.s. def1.rs) has incompatible type definition
diff --git a/slang/tests/F_one_definition_rule4/stdout.txt.expect b/slang/tests/F_one_definition_rule4/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_one_definition_rule4/stdout.txt.expect
diff --git a/slang/tests/F_one_definition_rule5/def1.rs b/slang/tests/F_one_definition_rule5/def1.rs
new file mode 100644
index 0000000..203cdbe
--- /dev/null
+++ b/slang/tests/F_one_definition_rule5/def1.rs
@@ -0,0 +1,10 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+// expected-error: different order(POD)
+typedef struct DifferentDefinition5{
+	int member1;
+	float member2;
+} DifferentDefinition5;
+
+DifferentDefinition5 o5;
diff --git a/slang/tests/F_one_definition_rule5/def2.rs b/slang/tests/F_one_definition_rule5/def2.rs
new file mode 100644
index 0000000..02a76b4
--- /dev/null
+++ b/slang/tests/F_one_definition_rule5/def2.rs
@@ -0,0 +1,10 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+// expected-error: different order(POD)
+typedef struct DifferentDefinition5{
+	float member2;
+	int member1;
+} DifferentDefinition5;
+
+DifferentDefinition5 o5;
diff --git a/slang/tests/F_one_definition_rule5/stderr.txt.expect b/slang/tests/F_one_definition_rule5/stderr.txt.expect
new file mode 100644
index 0000000..ca39889
--- /dev/null
+++ b/slang/tests/F_one_definition_rule5/stderr.txt.expect
@@ -0,0 +1 @@
+error: type 'DifferentDefinition5' in different translation unit (def2.rs v.s. def1.rs) has incompatible type definition
diff --git a/slang/tests/F_one_definition_rule5/stdout.txt.expect b/slang/tests/F_one_definition_rule5/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_one_definition_rule5/stdout.txt.expect
diff --git a/slang/tests/F_one_definition_rule6/def1.rs b/slang/tests/F_one_definition_rule6/def1.rs
new file mode 100644
index 0000000..2bc8b04
--- /dev/null
+++ b/slang/tests/F_one_definition_rule6/def1.rs
@@ -0,0 +1,11 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+// expected-error: mix
+typedef struct DifferentDefinition6{
+	int member1;
+	float member2;
+	float member3;
+} DifferentDefinition6;
+
+DifferentDefinition6 o6;
diff --git a/slang/tests/F_one_definition_rule6/def2.rs b/slang/tests/F_one_definition_rule6/def2.rs
new file mode 100644
index 0000000..7d46c56
--- /dev/null
+++ b/slang/tests/F_one_definition_rule6/def2.rs
@@ -0,0 +1,10 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+// expected-error: mix
+typedef struct DifferentDefinition6{
+	float member5;
+	int member2;
+} DifferentDefinition6;
+
+DifferentDefinition6 o6;
diff --git a/slang/tests/F_one_definition_rule6/stderr.txt.expect b/slang/tests/F_one_definition_rule6/stderr.txt.expect
new file mode 100644
index 0000000..a127b1a
--- /dev/null
+++ b/slang/tests/F_one_definition_rule6/stderr.txt.expect
@@ -0,0 +1 @@
+error: type 'DifferentDefinition6' in different translation unit (def2.rs v.s. def1.rs) has incompatible type definition
diff --git a/slang/tests/F_one_definition_rule6/stdout.txt.expect b/slang/tests/F_one_definition_rule6/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_one_definition_rule6/stdout.txt.expect
diff --git a/slang/tests/F_one_definition_rule7/def1.rs b/slang/tests/F_one_definition_rule7/def1.rs
new file mode 100644
index 0000000..1edda16
--- /dev/null
+++ b/slang/tests/F_one_definition_rule7/def1.rs
@@ -0,0 +1,10 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+// expected-error: different typedef
+typedef int Type1;
+typedef struct DifferentDefinition7{
+	Type1 member1;
+} DifferentDefinition7;
+
+DifferentDefinition7 o7;
diff --git a/slang/tests/F_one_definition_rule7/def2.rs b/slang/tests/F_one_definition_rule7/def2.rs
new file mode 100644
index 0000000..e071fb5
--- /dev/null
+++ b/slang/tests/F_one_definition_rule7/def2.rs
@@ -0,0 +1,10 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+// expected-error: different typedef
+typedef float Type1;
+typedef struct DifferentDefinition7{
+	Type1 member1;
+} DifferentDefinition7;
+
+DifferentDefinition7 o7;
diff --git a/slang/tests/F_one_definition_rule7/stderr.txt.expect b/slang/tests/F_one_definition_rule7/stderr.txt.expect
new file mode 100644
index 0000000..805d342
--- /dev/null
+++ b/slang/tests/F_one_definition_rule7/stderr.txt.expect
@@ -0,0 +1 @@
+error: type 'DifferentDefinition7' in different translation unit (def2.rs v.s. def1.rs) has incompatible type definition
diff --git a/slang/tests/F_one_definition_rule7/stdout.txt.expect b/slang/tests/F_one_definition_rule7/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_one_definition_rule7/stdout.txt.expect
diff --git a/slang/tests/F_one_definition_rule8/def1.rs b/slang/tests/F_one_definition_rule8/def1.rs
new file mode 100644
index 0000000..724776e
--- /dev/null
+++ b/slang/tests/F_one_definition_rule8/def1.rs
@@ -0,0 +1,14 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+typedef int Type1;
+typedef struct DifferentDefinition7{
+	Type1 member1;
+} DifferentDefinition7;
+
+// expected-error: two level
+typedef struct DifferentDefinition8{
+	struct DifferentDefinition7 member1;
+} DifferentDefinition8;
+
+DifferentDefinition8 o8;
diff --git a/slang/tests/F_one_definition_rule8/def2.rs b/slang/tests/F_one_definition_rule8/def2.rs
new file mode 100644
index 0000000..91d67b8
--- /dev/null
+++ b/slang/tests/F_one_definition_rule8/def2.rs
@@ -0,0 +1,14 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+typedef float Type1;
+typedef struct DifferentDefinition7{
+	Type1 member1;
+} DifferentDefinition7;
+
+// expected-error: two level
+typedef struct DifferentDefinition8{
+	DifferentDefinition7 member1;
+} DifferentDefinition8;
+
+DifferentDefinition8 o8;
diff --git a/slang/tests/F_one_definition_rule8/stderr.txt.expect b/slang/tests/F_one_definition_rule8/stderr.txt.expect
new file mode 100644
index 0000000..cb95533
--- /dev/null
+++ b/slang/tests/F_one_definition_rule8/stderr.txt.expect
@@ -0,0 +1 @@
+error: type 'DifferentDefinition8' in different translation unit (def2.rs v.s. def1.rs) has incompatible type definition
diff --git a/slang/tests/F_one_definition_rule8/stdout.txt.expect b/slang/tests/F_one_definition_rule8/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_one_definition_rule8/stdout.txt.expect
diff --git a/slang/tests/F_ptr_in_struct/ptr_in_struct.rs b/slang/tests/F_ptr_in_struct/ptr_in_struct.rs
new file mode 100644
index 0000000..943270b
--- /dev/null
+++ b/slang/tests/F_ptr_in_struct/ptr_in_struct.rs
@@ -0,0 +1,14 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+struct s {
+    int *i;
+};
+
+struct s myStruct;
+
+struct voidStruct {
+    void *v;
+};
+
+struct voidStruct myVoidStruct;
diff --git a/slang/tests/F_ptr_in_struct/stderr.txt.expect b/slang/tests/F_ptr_in_struct/stderr.txt.expect
new file mode 100644
index 0000000..c47d706
--- /dev/null
+++ b/slang/tests/F_ptr_in_struct/stderr.txt.expect
@@ -0,0 +1,2 @@
+ptr_in_struct.rs:4:8: error: structures containing pointers cannot be used as the type of an exported global variable or the parameter to an exported function: 's'
+ptr_in_struct.rs:10:8: error: structures containing pointers cannot be used as the type of an exported global variable or the parameter to an exported function: 'voidStruct'
diff --git a/slang/tests/F_ptr_in_struct/stdout.txt.expect b/slang/tests/F_ptr_in_struct/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_ptr_in_struct/stdout.txt.expect
diff --git a/slang/tests/F_ptr_in_struct_for_call/ptr_in_struct_for_call.rs b/slang/tests/F_ptr_in_struct_for_call/ptr_in_struct_for_call.rs
new file mode 100644
index 0000000..eed9697
--- /dev/null
+++ b/slang/tests/F_ptr_in_struct_for_call/ptr_in_struct_for_call.rs
@@ -0,0 +1,10 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+typedef struct user_t {
+    int *v;
+} user;
+
+void root(int *output, const user * usr) {
+   *output = *usr->v;
+}
diff --git a/slang/tests/F_ptr_in_struct_for_call/stderr.txt.expect b/slang/tests/F_ptr_in_struct_for_call/stderr.txt.expect
new file mode 100644
index 0000000..26fda00
--- /dev/null
+++ b/slang/tests/F_ptr_in_struct_for_call/stderr.txt.expect
@@ -0,0 +1 @@
+ptr_in_struct_for_call.rs:8:24: error: structures containing pointers cannot be used as the type of an exported global variable or the parameter to an exported function: 'usr'
diff --git a/slang/tests/F_ptr_in_struct_for_call/stdout.txt.expect b/slang/tests/F_ptr_in_struct_for_call/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_ptr_in_struct_for_call/stdout.txt.expect
diff --git a/slang/tests/F_reduce_general_bad_accumulator/reduce_general_bad_accumulator.rs b/slang/tests/F_reduce_general_bad_accumulator/reduce_general_bad_accumulator.rs
new file mode 100644
index 0000000..5c16ad3
--- /dev/null
+++ b/slang/tests/F_reduce_general_bad_accumulator/reduce_general_bad_accumulator.rs
@@ -0,0 +1,61 @@
+// -Wall
+#pragma version(1)
+#pragma rs java_package_name(accum)
+
+// Several checks for bad accumulator DATA TYPE (not bad accumulator FUNCTION)
+
+/////////////////////////////////////////////////////////////////////////////
+// accumulator cannot be incomplete array
+/////////////////////////////////////////////////////////////////////////////
+
+typedef int IntA[]; // incomplete (unknown element count)
+
+#pragma rs reduce(redIntA) accumulator(AccumIntA) combiner(CombIntA)
+static void AccumIntA(IntA *accum, int val) { }
+static void CombIntA(IntA *accum, const IntA *val) { }
+
+// outconverter does not help
+#pragma rs reduce(redIntAOut) accumulator(AccumIntA) combiner(CombIntA) outconverter(OutIntA)
+static void OutIntA(int *out, const IntA *val) { }
+
+/////////////////////////////////////////////////////////////////////////////
+// accumulator cannot be incomplete struct
+/////////////////////////////////////////////////////////////////////////////
+
+struct Incomplete;
+
+#pragma rs reduce(redStructIncomplete) accumulator(AccumStructIncomplete) combiner(CombStructIncomplete)
+static void AccumStructIncomplete(struct Incomplete *accum, int val) { }
+static void CombStructIncomplete(struct Incomplete *accum, const struct Incomplete *other) { }
+
+// outconverter does not help
+#pragma rs reduce(redStructIncompleteOut) accumulator(AccumStructIncomplete) combiner(CombStructIncomplete) \
+  outconverter(OutStructIncomplete)
+static void OutStructIncomplete(int *out, const struct Incomplete *val) { }
+
+/////////////////////////////////////////////////////////////////////////////
+// accumulator cannot be function
+/////////////////////////////////////////////////////////////////////////////
+
+typedef void Fn(void);
+
+#pragma rs reduce(redFn) accumulator(AccumFn) combiner(CombineFn)
+static void AccumFn(Fn *accum, int val) { }
+static void CombineFn(Fn *accum, const Fn *other) { }
+
+// outconverter does not help
+#pragma rs reduce(redFnOut) accumulator(AccumFn) combiner(CombineFn) outconverter(OutFn)
+static void OutFn(int *out, const Fn *val) { }
+
+/////////////////////////////////////////////////////////////////////////////
+// accumulator cannot be object
+/////////////////////////////////////////////////////////////////////////////
+
+#pragma rs reduce(redObj) accumulator(AccumObj) combiner(CombineObj)
+static void AccumObj(rs_element *accum, int val) { }
+static void CombineObj(rs_element *accum, const rs_element *other) { }
+
+// outconverter does not help
+#pragma rs reduce(redObjOut) accumulator(AccumObj) combiner(CombineObj) outconverter(OutObj)
+static void OutObj(int *out, const rs_element *val) { }
+
diff --git a/slang/tests/F_reduce_general_bad_accumulator/stderr.txt.expect b/slang/tests/F_reduce_general_bad_accumulator/stderr.txt.expect
new file mode 100644
index 0000000..356155a
--- /dev/null
+++ b/slang/tests/F_reduce_general_bad_accumulator/stderr.txt.expect
@@ -0,0 +1,13 @@
+reduce_general_bad_accumulator.rs:44:34: warning: 'const' qualifier on function type 'Fn' (aka 'void (void)') has unspecified behavior
+reduce_general_bad_accumulator.rs:48:29: warning: 'const' qualifier on function type 'Fn' (aka 'void (void)') has unspecified behavior
+reduce_general_bad_accumulator.rs:14:13: error: accumulator AccumIntA() for '#pragma rs reduce(redIntA)' (reduce_general_bad_accumulator.rs:13:12) parameter 'accum' (type 'int (*)[]') must not be pointer to incomplete type
+reduce_general_bad_accumulator.rs:14:13: error: accumulator AccumIntA() for '#pragma rs reduce(redIntAOut)' (reduce_general_bad_accumulator.rs:18:12) parameter 'accum' (type 'int (*)[]') must not be pointer to incomplete type
+reduce_general_bad_accumulator.rs:28:13: error: accumulator AccumStructIncomplete() for '#pragma rs reduce(redStructIncomplete)' (reduce_general_bad_accumulator.rs:27:12) parameter 'accum' (type 'struct Incomplete *') must not be pointer to incomplete type
+reduce_general_bad_accumulator.rs:28:13: error: accumulator AccumStructIncomplete() for '#pragma rs reduce(redStructIncompleteOut)' (reduce_general_bad_accumulator.rs:32:12) parameter 'accum' (type 'struct Incomplete *') must not be pointer to incomplete type
+reduce_general_bad_accumulator.rs:43:13: error: accumulator AccumFn() for '#pragma rs reduce(redFn)' (reduce_general_bad_accumulator.rs:42:12) parameter 'accum' (type 'void (*)(void)') must not be pointer to function type
+reduce_general_bad_accumulator.rs:44:44: error: combiner CombineFn() for '#pragma rs reduce(redFn)' (reduce_general_bad_accumulator.rs:42:12) parameter 'other' (type 'Fn *') must point to const-qualified type
+reduce_general_bad_accumulator.rs:43:13: error: accumulator AccumFn() for '#pragma rs reduce(redFnOut)' (reduce_general_bad_accumulator.rs:47:12) parameter 'accum' (type 'void (*)(void)') must not be pointer to function type
+reduce_general_bad_accumulator.rs:44:44: error: combiner CombineFn() for '#pragma rs reduce(redFnOut)' (reduce_general_bad_accumulator.rs:47:12) parameter 'other' (type 'Fn *') must point to const-qualified type
+reduce_general_bad_accumulator.rs:48:39: error: outconverter OutFn() for '#pragma rs reduce(redFnOut)' (reduce_general_bad_accumulator.rs:47:12) parameter 'val' (type 'Fn *') must point to const-qualified type
+reduce_general_bad_accumulator.rs:55:13: error: accumulator AccumObj() for '#pragma rs reduce(redObj)' (reduce_general_bad_accumulator.rs:54:12) parameter 'accum' (type 'struct rs_element *') must not be pointer to data containing an object type
+reduce_general_bad_accumulator.rs:55:13: error: accumulator AccumObj() for '#pragma rs reduce(redObjOut)' (reduce_general_bad_accumulator.rs:59:12) parameter 'accum' (type 'struct rs_element *') must not be pointer to data containing an object type
diff --git a/slang/tests/F_reduce_general_bad_accumulator/stdout.txt.expect b/slang/tests/F_reduce_general_bad_accumulator/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_reduce_general_bad_accumulator/stdout.txt.expect
diff --git a/slang/tests/F_reduce_general_bad_function/reduce_general_bad_function.rs b/slang/tests/F_reduce_general_bad_function/reduce_general_bad_function.rs
new file mode 100644
index 0000000..b59800a
--- /dev/null
+++ b/slang/tests/F_reduce_general_bad_function/reduce_general_bad_function.rs
@@ -0,0 +1,256 @@
+// -Wall
+#pragma version(1)
+#pragma rs java_package_name(fn)
+
+// Various ways particular reduction consituent functions can fail semantic checks.
+// Also see reduce_general_bad_halter.rs for halter function semantic checks.
+// Also see reduce_general_bad_accumulator.rs for accumulator data type checks.
+
+// trivial accumulator for use multiple times later
+static void AccumInt(int *accum, int val) { }
+
+/////////////////////////////////////////////////////////////////////////////
+// initializer
+/////////////////////////////////////////////////////////////////////////////
+
+// initializer must take exactly 1 parameter
+#pragma rs reduce(init0) initializer(init0) accumulator(AccumInt)
+static void init0() { }
+
+// initializer must take exactly 1 parameter
+#pragma rs reduce(init2) initializer(init2) accumulator(AccumInt)
+static void init2(int *a, int *b) { }
+
+// initializer cannot take special parameter
+#pragma rs reduce(init_special1) initializer(init_special1) accumulator(AccumInt)
+static void init_special1(int *x) { }
+
+// initializer must take exactly 1 parameter
+#pragma rs reduce(init2_special1) initializer(init2_special1) accumulator(AccumInt)
+static void init2_special1(int *a, int *x) { }
+
+// initializer must take exactly 1 parameter
+#pragma rs reduce(init2_special0) initializer(init2_special0) accumulator(AccumInt)
+static void init2_special0(int *x, int *a) { }
+
+// initializer must take pointer parameter
+#pragma rs reduce(init_noptr) initializer(init_noptr) accumulator(AccumInt)
+static void init_noptr(int a) { }
+
+// initializer may be overloadable . . .
+#pragma rs reduce(init_over) initializer(init_over) accumulator(AccumInt)
+static __attribute__((overloadable)) void init_over(int *accum) { }
+
+// . . . but initializer must not have duplicate definitions
+#pragma rs reduce(init_dup) initializer(init_dup) accumulator(AccumInt)
+static __attribute__((overloadable)) void init_dup(int *accum) { }
+static __attribute__((overloadable)) void init_dup(unsigned int *accum) { }
+
+// initializer must be present
+#pragma rs reduce(init_missing) initializer(init_missing) accumulator(AccumInt)
+
+// initializer must be static
+#pragma rs reduce(init_nonstatic) initializer(init_nonstatic) accumulator(AccumInt)
+void init_nonstatic(int *accum) { }
+
+// initializer must return void
+#pragma rs reduce(init_nonvoid) initializer(init_nonvoid) accumulator(AccumInt)
+static int init_nonvoid(int *accum) { return 0; }
+
+// initializer parameter must point to non-const
+#pragma rs reduce(init_const) initializer(init_const) accumulator(AccumInt)
+static void init_const(const int *accum) { }
+
+// . . . but initializer parameter VALUE can be const
+#pragma rs reduce(init_valconst) initializer(init_valconst) accumulator(AccumInt)
+static void init_valconst(int *const accum) { }
+
+/////////////////////////////////////////////////////////////////////////////
+// accumulator
+/////////////////////////////////////////////////////////////////////////////
+
+// accumulator must take at least 2 parameters
+#pragma rs reduce(accum0) accumulator(accum0)
+static void accum0() { }
+
+// accumulator must take at least 2 parameters
+#pragma rs reduce(accum1) accumulator(accum1)
+static void accum1(int a) { }
+
+// accumulator first parameter must be of pointer type
+#pragma rs reduce(accum_noptr) accumulator(accum_noptr)
+static void accum_noptr(int accum, int val) { }
+
+// accumulator and initializer must take pointers to same type
+#pragma rs reduce(accum_vs_init) initializer(avi_init) accumulator(avi_accum)
+static void avi_init(int *accum) { }
+static void avi_accum(double *accum, int val) { }
+
+// accumulator must have at least 1 input
+#pragma rs reduce(accum_special) accumulator(accum_special)
+static void accum_special(int *accum, int x) { }
+
+// accumulator input must not be a pointer . . .
+#pragma rs reduce(accum_ptr) accumulator(accum_ptr) combiner(comb_ptr)
+static void accum_ptr(int *accum, char *val) { }
+static void comb_ptr(int *accum, const int *other) { }
+
+// . . . including a pointer from array decay
+#pragma rs reduce(accum_arr) accumulator(accum_arr) combiner(comb_arr)
+typedef char CharArray[10];
+static void accum_arr(int *accum, CharArray val) { }
+static void comb_arr(int *accum, const int *other) { }
+
+// accumulator input must not contain object type
+#pragma rs reduce(accum_obj) accumulator(accum_obj) combiner(comb_obj)
+static void accum_obj(int *accum, int val, rs_element elem) { }
+static void comb_obj(int *accum, const int *other) { }
+
+// accumulator may be overloadable . . .
+#pragma rs reduce(accum_over) accumulator(accum_over)
+static __attribute__((overloadable)) void accum_over(int *accum, int val) { }
+
+// . . . but accumulator must not have duplicate definitions
+#pragma rs reduce(accum_dup) accumulator(accum_dup)
+static __attribute__((overloadable)) void accum_dup(int *accum, int val) { }
+static __attribute__((overloadable)) void accum_dup(uint *accum, uint val) { }
+
+// accumulator must be present
+#pragma rs reduce(accum_missing) accumulator(accum_missing)
+
+// accumulator must be static
+#pragma rs reduce(accum_nonstatic) accumulator(accum_nonstatic)
+void accum_nonstatic(int *accum, int val) { }
+
+// accumulator must return void
+#pragma rs reduce(accum_nonvoid) accumulator(accum_nonvoid)
+static int accum_nonvoid(int *accum, int val) { return 0; }
+
+// first accumulator parameter must point to non-const . . .
+#pragma rs reduce(accum_const) accumulator(accum_const)
+static void accum_const(const int *accum, int val) { }
+
+// . . . but accumulator parameter VALUES can be const
+#pragma rs reduce(accum_valconst) accumulator(accum_valconst)
+static void accum_valconst(int *const accum, const int val) { }
+
+/////////////////////////////////////////////////////////////////////////////
+// combiner
+/////////////////////////////////////////////////////////////////////////////
+
+// combiner must take exactly 2 parameters
+#pragma rs reduce(comb0) accumulator(AccumInt) combiner(comb0)
+static void comb0() { }
+
+// combiner must take exactly 2 parameters
+#pragma rs reduce(comb1) accumulator(AccumInt) combiner(comb1)
+static void comb1(int *accum) { }
+
+// combiner must take exactly 2 parameters
+#pragma rs reduce(comb3) accumulator(AccumInt) combiner(comb3)
+static void comb3(int *accum, const int *otherA, int otherB) { }
+
+// combiner and accumulator must take pointers to same type
+#pragma rs reduce(comb_vs_accum) accumulator(cva_accum) combiner(cva_comb)
+static void cva_accum(int *accum, char val) { }
+static void cva_comb(unsigned *accum, const unsigned *other) { }
+
+// accumulator must have 1 input and no specials to omit combiner
+#pragma rs reduce(accum_2in) accumulator(accum_2in)
+static void accum_2in(int *accum, int in1, int in2) { }
+
+// accumulator must have 1 input and no specials to omit combiner
+#pragma rs reduce(accum_special_1in) accumulator(accum_special_1in)
+static void accum_special_1in(int *accum, int in1, int x) { }
+
+// accumulator parameter types must agree to omit combiner
+#pragma rs reduce(accum_types) accumulator(accum_types)
+static void accum_types(int *accum, unsigned val) { }
+
+// combiner may be overloadable . . .
+#pragma rs reduce(comb_over) accumulator(AccumInt) combiner(comb_over)
+static __attribute__((overloadable)) void comb_over(int *accum, const int *other) { }
+
+// . . . but combiner must not have duplicate definitions
+#pragma rs reduce(comb_dup) accumulator(AccumInt) combiner(comb_dup)
+static __attribute__((overloadable)) void comb_dup(int *accum, const int *other) { }
+static __attribute__((overloadable)) void comb_dup(uint *accum, const uint *other) { }
+
+// combiner must be present
+#pragma rs reduce(comb_missing) accumulator(AccumInt) combiner(comb_missing)
+
+// combiner must be static
+#pragma rs reduce(comb_nonstatic) accumulator(AccumInt) combiner(comb_nonstatic)
+void comb_nonstatic(int *accum, const int *other) { }
+
+// combiner must return void
+#pragma rs reduce(comb_nonvoid) accumulator(AccumInt) combiner(comb_nonvoid)
+static int comb_nonvoid(int *accum, const int *other) { return 0; }
+
+// first combiner parameter must point to non-const and second to const . . .
+#pragma rs reduce(comb_const) accumulator(AccumInt) combiner(comb_const)
+static void comb_const(const int *accum, int *other) { }
+
+// . . . but combiner parameter VALUES can be const
+#pragma rs reduce(comb_valconst) accumulator(AccumInt) combiner(comb_valconst)
+static void comb_valconst(int *const accum, const int *other) { }
+
+/////////////////////////////////////////////////////////////////////////////
+// outconverter
+/////////////////////////////////////////////////////////////////////////////
+
+// outconverter must take exactly 2 parameters
+#pragma rs reduce(out0) accumulator(AccumInt) outconverter(out0)
+static void out0() { }
+
+// outconverter must take exactly 2 parameters
+#pragma rs reduce(out1) accumulator(AccumInt) outconverter(out1)
+static void out1(char *out) { }
+
+// outconverter must take exactly 2 parameters
+#pragma rs reduce(out3) accumulator(AccumInt) outconverter(out3)
+static void out3(char *out, const int *val, int foo) { }
+
+// outconverter cannot take special parameter
+#pragma rs reduce(out_special) accumulator(AccumInt) outconverter(out_special)
+static void out_special(char *out, const int *y) { }
+
+// outconverter must take pointer
+#pragma rs reduce(out_ptr1) accumulator(AccumInt) outconverter(out_ptr1)
+static void out_ptr1(int out, const int *val) { }
+
+// outconverter must take pointer
+#pragma rs reduce(out_ptr2) accumulator(AccumInt) outconverter(out_ptr2)
+static void out_ptr2(int *out, const int val) { }
+
+// outconverter and accumulator must take pointers to same type
+#pragma rs reduce(out_vs_accum) accumulator(AccumInt) outconverter(ova_out)
+static void ova_out(int *out, const double *val) { }
+
+// outconverter may be overloadable . . .
+#pragma rs reduce(out_over) accumulator(AccumInt) outconverter(out_over)
+static __attribute__((overloadable)) void out_over(double *accum, const int *val) { }
+
+// . . . but outconverter must not have duplicate definitions
+#pragma rs reduce(out_dup) accumulator(AccumInt) outconverter(out_dup)
+static __attribute__((overloadable)) void out_dup(double *out, const int *val) { }
+static __attribute__((overloadable)) void out_dup(float *out, const int *val) { }
+
+// ouconverter must be present
+#pragma rs reduce(out_missing) accumulator(AccumInt) outconverter(out_missing)
+
+// outconverter must be static
+#pragma rs reduce(out_nonstatic) accumulator(AccumInt) outconverter(out_nonstatic)
+void out_nonstatic(int *out, const int *val) { }
+
+// outconverter must return void
+#pragma rs reduce(out_nonvoid) accumulator(AccumInt) outconverter(out_nonvoid)
+static int out_nonvoid(int *out, const int *val) { return 0; }
+
+// first outconverter parameter must point to non-const and second to const . . .
+#pragma rs reduce(out_const) accumulator(AccumInt) outconverter(out_const)
+static void out_const(const int *out, int *val) { }
+
+// . . . but outconverter parameter VALUES can be const
+#pragma rs reduce(out_valconst) accumulator(AccumInt) outconverter(out_valconst)
+static void out_valconst(int *const out, const int *val) { }
diff --git a/slang/tests/F_reduce_general_bad_function/stderr.txt.expect b/slang/tests/F_reduce_general_bad_function/stderr.txt.expect
new file mode 100644
index 0000000..1e65259
--- /dev/null
+++ b/slang/tests/F_reduce_general_bad_function/stderr.txt.expect
@@ -0,0 +1,51 @@
+reduce_general_bad_function.rs:18:13: error: initializer init0() for '#pragma rs reduce(init0)' (reduce_general_bad_function.rs:17:12) must take exactly 1 parameter (found 0)
+reduce_general_bad_function.rs:22:13: error: initializer init2() for '#pragma rs reduce(init2)' (reduce_general_bad_function.rs:21:12) must take exactly 1 parameter (found 2)
+reduce_general_bad_function.rs:26:13: error: initializer init_special1() for '#pragma rs reduce(init_special1)' (reduce_general_bad_function.rs:25:12) cannot take special parameter 'x'
+reduce_general_bad_function.rs:30:13: error: initializer init2_special1() for '#pragma rs reduce(init2_special1)' (reduce_general_bad_function.rs:29:12) must take exactly 1 parameter (found 2)
+reduce_general_bad_function.rs:34:13: error: initializer init2_special0() for '#pragma rs reduce(init2_special0)' (reduce_general_bad_function.rs:33:12) must take exactly 1 parameter (found 2)
+reduce_general_bad_function.rs:38:13: error: initializer init_noptr() for '#pragma rs reduce(init_noptr)' (reduce_general_bad_function.rs:37:12) parameter 'a' must be of pointer type not 'int'
+reduce_general_bad_function.rs:45:12: error: duplicate function definition for 'initializer(init_dup)' for '#pragma rs reduce(init_dup)' (reduce_general_bad_function.rs:46:43, reduce_general_bad_function.rs:47:43)
+reduce_general_bad_function.rs:50:12: error: could not find function definition for 'initializer(init_missing)' for '#pragma rs reduce(init_missing)'
+reduce_general_bad_function.rs:54:6: error: initializer init_nonstatic() for '#pragma rs reduce(init_nonstatic)' (reduce_general_bad_function.rs:53:12) must be static
+reduce_general_bad_function.rs:58:12: error: initializer init_nonvoid() for '#pragma rs reduce(init_nonvoid)' (reduce_general_bad_function.rs:57:12) must return void not 'int'
+reduce_general_bad_function.rs:62:35: error: initializer init_const() for '#pragma rs reduce(init_const)' (reduce_general_bad_function.rs:61:12) parameter 'accum' (type 'const int *') must not point to const-qualified type
+reduce_general_bad_function.rs:74:13: error: accumulator accum0() for '#pragma rs reduce(accum0)' (reduce_general_bad_function.rs:73:12) must take at least 2 parameters
+reduce_general_bad_function.rs:78:13: error: accumulator accum1() for '#pragma rs reduce(accum1)' (reduce_general_bad_function.rs:77:12) must take at least 2 parameters
+reduce_general_bad_function.rs:82:13: error: accumulator accum_noptr() for '#pragma rs reduce(accum_noptr)' (reduce_general_bad_function.rs:81:12) parameter 'accum' must be of pointer type not 'int'
+reduce_general_bad_function.rs:87:13: error: accumulator avi_accum() for '#pragma rs reduce(accum_vs_init)' (reduce_general_bad_function.rs:85:12) parameter 'accum' (type 'double *') and initializer avi_init() parameter 'accum' (type 'int *') must be pointers to the same type
+reduce_general_bad_function.rs:91:13: error: accumulator accum_special() for '#pragma rs reduce(accum_special)' (reduce_general_bad_function.rs:90:12) must have at least 1 input ('x' is a special parameter)
+reduce_general_bad_function.rs:95:41: error: accumulator accum_ptr() for '#pragma rs reduce(accum_ptr)' (reduce_general_bad_function.rs:94:12) parameter 'val' (type 'char *') must not be a pointer
+reduce_general_bad_function.rs:101:45: error: accumulator accum_arr() for '#pragma rs reduce(accum_arr)' (reduce_general_bad_function.rs:99:12) parameter 'val' (type 'char *') must not be a pointer
+reduce_general_bad_function.rs:106:55: error: accumulator accum_obj() for '#pragma rs reduce(accum_obj)' (reduce_general_bad_function.rs:105:12) parameter 'elem' (type 'struct rs_element') must not contain an object type
+reduce_general_bad_function.rs:114:12: error: duplicate function definition for 'accumulator(accum_dup)' for '#pragma rs reduce(accum_dup)' (reduce_general_bad_function.rs:115:43, reduce_general_bad_function.rs:116:43)
+reduce_general_bad_function.rs:119:12: error: could not find function definition for 'accumulator(accum_missing)' for '#pragma rs reduce(accum_missing)'
+reduce_general_bad_function.rs:123:6: error: accumulator accum_nonstatic() for '#pragma rs reduce(accum_nonstatic)' (reduce_general_bad_function.rs:122:12) must be static
+reduce_general_bad_function.rs:127:12: error: accumulator accum_nonvoid() for '#pragma rs reduce(accum_nonvoid)' (reduce_general_bad_function.rs:126:12) must return void not 'int'
+reduce_general_bad_function.rs:131:36: error: accumulator accum_const() for '#pragma rs reduce(accum_const)' (reduce_general_bad_function.rs:130:12) parameter 'accum' (type 'const int *') must not point to const-qualified type
+reduce_general_bad_function.rs:143:13: error: combiner comb0() for '#pragma rs reduce(comb0)' (reduce_general_bad_function.rs:142:12) must take exactly 2 parameters (found 0)
+reduce_general_bad_function.rs:147:13: error: combiner comb1() for '#pragma rs reduce(comb1)' (reduce_general_bad_function.rs:146:12) must take exactly 2 parameters (found 1)
+reduce_general_bad_function.rs:151:13: error: combiner comb3() for '#pragma rs reduce(comb3)' (reduce_general_bad_function.rs:150:12) must take exactly 2 parameters (found 3)
+reduce_general_bad_function.rs:156:13: error: combiner cva_comb() for '#pragma rs reduce(comb_vs_accum)' (reduce_general_bad_function.rs:154:12) parameter 'accum' (type 'unsigned int *') and accumulator cva_accum() parameter 'accum' (type 'int *') must be pointers to the same type
+reduce_general_bad_function.rs:156:13: error: combiner cva_comb() for '#pragma rs reduce(comb_vs_accum)' (reduce_general_bad_function.rs:154:12) parameter 'other' (type 'const unsigned int *') and accumulator cva_accum() parameter 'accum' (type 'int *') must be pointers to the same type
+reduce_general_bad_function.rs:160:13: error: accumulator accum_2in() for '#pragma rs reduce(accum_2in)' (reduce_general_bad_function.rs:159:12) must have exactly 1 input and no special parameters in order for the combiner to be omitted
+reduce_general_bad_function.rs:164:13: error: accumulator accum_special_1in() for '#pragma rs reduce(accum_special_1in)' (reduce_general_bad_function.rs:163:12) must have exactly 1 input and no special parameters in order for the combiner to be omitted
+reduce_general_bad_function.rs:168:13: error: accumulator accum_types() for '#pragma rs reduce(accum_types)' (reduce_general_bad_function.rs:167:12) parameter 'accum' (type 'int *') must be pointer to the type of parameter 'val' (type 'unsigned int') in order for the combiner to be omitted
+reduce_general_bad_function.rs:175:12: error: duplicate function definition for 'combiner(comb_dup)' for '#pragma rs reduce(comb_dup)' (reduce_general_bad_function.rs:176:43, reduce_general_bad_function.rs:177:43)
+reduce_general_bad_function.rs:180:12: error: could not find function definition for 'combiner(comb_missing)' for '#pragma rs reduce(comb_missing)'
+reduce_general_bad_function.rs:184:6: error: combiner comb_nonstatic() for '#pragma rs reduce(comb_nonstatic)' (reduce_general_bad_function.rs:183:12) must be static
+reduce_general_bad_function.rs:188:12: error: combiner comb_nonvoid() for '#pragma rs reduce(comb_nonvoid)' (reduce_general_bad_function.rs:187:12) must return void not 'int'
+reduce_general_bad_function.rs:192:35: error: combiner comb_const() for '#pragma rs reduce(comb_const)' (reduce_general_bad_function.rs:191:12) parameter 'accum' (type 'const int *') must not point to const-qualified type
+reduce_general_bad_function.rs:192:47: error: combiner comb_const() for '#pragma rs reduce(comb_const)' (reduce_general_bad_function.rs:191:12) parameter 'other' (type 'int *') must point to const-qualified type
+reduce_general_bad_function.rs:204:13: error: outconverter out0() for '#pragma rs reduce(out0)' (reduce_general_bad_function.rs:203:12) must take exactly 2 parameters (found 0)
+reduce_general_bad_function.rs:208:13: error: outconverter out1() for '#pragma rs reduce(out1)' (reduce_general_bad_function.rs:207:12) must take exactly 2 parameters (found 1)
+reduce_general_bad_function.rs:212:13: error: outconverter out3() for '#pragma rs reduce(out3)' (reduce_general_bad_function.rs:211:12) must take exactly 2 parameters (found 3)
+reduce_general_bad_function.rs:216:13: error: outconverter out_special() for '#pragma rs reduce(out_special)' (reduce_general_bad_function.rs:215:12) cannot take special parameter 'y'
+reduce_general_bad_function.rs:220:13: error: outconverter out_ptr1() for '#pragma rs reduce(out_ptr1)' (reduce_general_bad_function.rs:219:12) parameter 'out' must be of pointer type not 'int'
+reduce_general_bad_function.rs:224:13: error: outconverter out_ptr2() for '#pragma rs reduce(out_ptr2)' (reduce_general_bad_function.rs:223:12) parameter 'val' must be of pointer type not 'const int'
+reduce_general_bad_function.rs:228:13: error: outconverter ova_out() for '#pragma rs reduce(out_vs_accum)' (reduce_general_bad_function.rs:227:12) parameter 'val' (type 'const double *') and accumulator AccumInt() parameter 'accum' (type 'int *') must be pointers to the same type
+reduce_general_bad_function.rs:235:12: error: duplicate function definition for 'outconverter(out_dup)' for '#pragma rs reduce(out_dup)' (reduce_general_bad_function.rs:236:43, reduce_general_bad_function.rs:237:43)
+reduce_general_bad_function.rs:240:12: error: could not find function definition for 'outconverter(out_missing)' for '#pragma rs reduce(out_missing)'
+reduce_general_bad_function.rs:244:6: error: outconverter out_nonstatic() for '#pragma rs reduce(out_nonstatic)' (reduce_general_bad_function.rs:243:12) must be static
+reduce_general_bad_function.rs:248:12: error: outconverter out_nonvoid() for '#pragma rs reduce(out_nonvoid)' (reduce_general_bad_function.rs:247:12) must return void not 'int'
+reduce_general_bad_function.rs:252:34: error: outconverter out_const() for '#pragma rs reduce(out_const)' (reduce_general_bad_function.rs:251:12) parameter 'out' (type 'const int *') must not point to const-qualified type
+reduce_general_bad_function.rs:252:44: error: outconverter out_const() for '#pragma rs reduce(out_const)' (reduce_general_bad_function.rs:251:12) parameter 'val' (type 'int *') must point to const-qualified type
diff --git a/slang/tests/F_reduce_general_bad_function/stdout.txt.expect b/slang/tests/F_reduce_general_bad_function/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_reduce_general_bad_function/stdout.txt.expect
diff --git a/slang/tests/F_reduce_general_bad_halter/reduce_general_bad_halter.rs b/slang/tests/F_reduce_general_bad_halter/reduce_general_bad_halter.rs
new file mode 100644
index 0000000..b7de60c
--- /dev/null
+++ b/slang/tests/F_reduce_general_bad_halter/reduce_general_bad_halter.rs
@@ -0,0 +1,58 @@
+// -Wall -target-api 0
+#pragma version(1)
+#pragma rs java_package_name(fn)
+
+// Various ways halter can fail semantic checks.
+// Also see reduce_general_bad_function.rs for other constituent function semantic checks.
+// Also see reduce_general_bad_accumulator.rs for accumulator data type checks.
+
+// trivial accumulator for use multiple times later
+static void AccumInt(int *accum, int val) { }
+
+/////////////////////////////////////////////////////////////////////////////
+// halter
+/////////////////////////////////////////////////////////////////////////////
+
+// halter must return bool
+#pragma rs reduce(halt_void) accumulator(AccumInt) halter(halt_void)
+static void halt_void(const int *accum) { }
+
+// halter must return bool
+#pragma rs reduce(halt_int) accumulator(AccumInt) halter(halt_int)
+static int halt_int(const int *accum) { return 0; }
+
+// halter must take exactly 1 parameter
+#pragma rs reduce(halt0) accumulator(AccumInt) halter(halt0)
+static bool halt0() { return false; }
+
+// halter must take exactly 1 parameter
+#pragma rs reduce(halt2) accumulator(AccumInt) halter(halt2)
+static bool halt2(const int *accum, const int *accum2) { return false; }
+
+// halter cannot take special parameter
+#pragma rs reduce(halt_special) accumulator(AccumInt) halter(halt_special)
+static bool halt_special(const int *context) { return false; }
+
+// halter and accumulator must take pointers to same type
+#pragma rs reduce(halt_vs_accum) accumulator(AccumInt) halter(hva_halt)
+static bool hva_halt(const unsigned *accum) { return false; }
+
+// halter may be overloadable . . .
+#pragma rs reduce(halt_over) accumulator(AccumInt) halter(halt_over)
+static __attribute__((overloadable)) bool halt_over(const int *accum) { return false; }
+
+// . . . but halter must not have duplicate definitions
+#pragma rs reduce(halt_dup) accumulator(AccumInt) halter(halt_dup)
+static __attribute__((overloadable)) bool halt_dup(const int *accum) { return false; }
+static __attribute__((overloadable)) bool halt_dup(const unsigned int *accum) { return false; }
+
+// halter must be present
+#pragma rs reduce(halt_missing) accumulator(AccumInt) halter(halt_missing)
+
+// halter must be static
+#pragma rs reduce(halt_nonstatic) accumulator(AccumInt) halter(halt_nonstatic)
+bool halt_nonstatic(const int *accum) { return false; }
+
+// halter parameter must point to const
+#pragma rs reduce(halt_const) accumulator(AccumInt) halter(halt_const)
+static bool halt_const(int *accum) { return false; }
diff --git a/slang/tests/F_reduce_general_bad_halter/stderr.txt.expect b/slang/tests/F_reduce_general_bad_halter/stderr.txt.expect
new file mode 100644
index 0000000..d96207e
--- /dev/null
+++ b/slang/tests/F_reduce_general_bad_halter/stderr.txt.expect
@@ -0,0 +1,10 @@
+reduce_general_bad_halter.rs:18:13: error: halter halt_void() for '#pragma rs reduce(halt_void)' (reduce_general_bad_halter.rs:17:12) must return bool not 'void'
+reduce_general_bad_halter.rs:22:12: error: halter halt_int() for '#pragma rs reduce(halt_int)' (reduce_general_bad_halter.rs:21:12) must return bool not 'int'
+reduce_general_bad_halter.rs:26:13: error: halter halt0() for '#pragma rs reduce(halt0)' (reduce_general_bad_halter.rs:25:12) must take exactly 1 parameter (found 0)
+reduce_general_bad_halter.rs:30:13: error: halter halt2() for '#pragma rs reduce(halt2)' (reduce_general_bad_halter.rs:29:12) must take exactly 1 parameter (found 2)
+reduce_general_bad_halter.rs:34:13: error: halter halt_special() for '#pragma rs reduce(halt_special)' (reduce_general_bad_halter.rs:33:12) cannot take special parameter 'context'
+reduce_general_bad_halter.rs:38:13: error: halter hva_halt() for '#pragma rs reduce(halt_vs_accum)' (reduce_general_bad_halter.rs:37:12) parameter 'accum' (type 'const unsigned int *') and accumulator AccumInt() parameter 'accum' (type 'int *') must be pointers to the same type
+reduce_general_bad_halter.rs:45:12: error: duplicate function definition for 'halter(halt_dup)' for '#pragma rs reduce(halt_dup)' (reduce_general_bad_halter.rs:46:43, reduce_general_bad_halter.rs:47:43)
+reduce_general_bad_halter.rs:50:12: error: could not find function definition for 'halter(halt_missing)' for '#pragma rs reduce(halt_missing)'
+reduce_general_bad_halter.rs:54:6: error: halter halt_nonstatic() for '#pragma rs reduce(halt_nonstatic)' (reduce_general_bad_halter.rs:53:12) must be static
+reduce_general_bad_halter.rs:58:29: error: halter halt_const() for '#pragma rs reduce(halt_const)' (reduce_general_bad_halter.rs:57:12) parameter 'accum' (type 'int *') must point to const-qualified type
diff --git a/slang/tests/F_reduce_general_bad_halter/stdout.txt.expect b/slang/tests/F_reduce_general_bad_halter/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_reduce_general_bad_halter/stdout.txt.expect
diff --git a/slang/tests/F_reduce_general_bad_result/reduce_general_bad_result.rs b/slang/tests/F_reduce_general_bad_result/reduce_general_bad_result.rs
new file mode 100644
index 0000000..e403f6e
--- /dev/null
+++ b/slang/tests/F_reduce_general_bad_result/reduce_general_bad_result.rs
@@ -0,0 +1,395 @@
+// -Wall
+#pragma version(1)
+#pragma rs java_package_name(export)
+
+// trivial accumulator for use multiple times later
+static void AccumInt(int *accum, int val) { }
+
+// NOTE: union and bitfield errors are only emitted once per type, so
+//       we have multiple types here to ensure that we issue errors
+//       in multiple contexts.
+
+// NOTE: accumulator data type is restricted in certain ways regardless
+//       of result type; we do not test that here.  This is covered
+//       in the test case reduce_general_bad_accumulator.rs.
+
+/////////////////////////////////////////////////////////////////////////
+
+typedef unsigned int UIntA916[9][16];
+
+// result type cannot be multidimensional array
+#pragma rs reduce(redUInt2dA) accumulator(AccumUInt2dA) combiner(CombUInt2dA)
+static void AccumUInt2dA(UIntA916 *accum, int val) { }
+static void CombUInt2dA(UIntA916 *accum, const UIntA916 *val) { }
+
+// problem is result type, not accumulator type, so outconverter can fix this
+#pragma rs reduce(redUInt2dAOutFix) accumulator(AccumUInt2dA) combiner(CombUInt2dA) \
+  outconverter(OutUInt2dAFix)
+static void OutUInt2dAFix(uint *out, const UIntA916 *val) { }
+
+// problem is result type, not accumulator type, so outconverter can break this
+#pragma rs reduce(redUInt2dAOutBreak) accumulator(AccumInt) outconverter(OutUInt2dABreak)
+static void OutUInt2dABreak(UIntA916 *out, const int *val) { }
+
+/////////////////////////////////////////////////////////////////////////
+
+union UnionShortDouble {
+  short s;
+  double d;
+};
+
+union UnionCharInt {
+  char c;
+  int i;
+};
+
+union UnionLongFloat {
+  long l;
+  float f;
+};
+
+// result type cannot be union
+#pragma rs reduce(redUnionShortDouble) accumulator(AccumUnionShortDouble) \
+  combiner(CombineUnionShortDouble)
+static void AccumUnionShortDouble(union UnionShortDouble *accum, short s, double d) { }
+static void CombineUnionShortDouble(union UnionShortDouble *accum,
+                                    const union UnionShortDouble *other) { }
+
+// problem is result type, not accumulator type, so outconverter can fix this
+#pragma rs reduce(redUnionCharIntOutFix) accumulator(AccumUnionCharInt) \
+  combiner(CombineUnionCharInt) outconverter(OutUnionCharIntFix)
+static void AccumUnionCharInt(union UnionCharInt *accum, short s, double d) { }
+static void CombineUnionCharInt(union UnionCharInt *accum, const union UnionCharInt *other) { }
+static void OutUnionCharIntFix(int *out, const union UnionCharInt *val) { }
+
+// problem is result type, not accumulator type, so outconverter can break this
+#pragma rs reduce(redUnionLongFloatOutBreak) accumulator(AccumInt) \
+  outconverter(OutUnionLongFloatBreak)
+static void OutUnionLongFloatBreak(union UnionLongFloat *out, const int *val) { }
+
+/////////////////////////////////////////////////////////////////////////
+
+union UnionIntFloat {
+  short s;
+  double d;
+};
+typedef union UnionIntFloat UnionIntFloatArray[10];
+
+union UnionDoubleFloat {
+  double d;
+  float f;
+};
+typedef union UnionDoubleFloat UnionDoubleFloatArray[10];
+
+union UnionCharLong {
+  char c;
+  long l;
+};
+typedef union UnionCharLong UnionCharLongArray[10];
+
+// cannot export array of union
+#pragma rs reduce(redUnionIntFloatArray) accumulator(AccumUnionIntFloatArray) \
+  combiner(CombineUnionIntFloatArray)
+static void AccumUnionIntFloatArray(UnionIntFloatArray *accum, int val) { }
+static void CombineUnionIntFloatArray(UnionIntFloatArray *accum,
+                                      const UnionIntFloatArray *other) { }
+
+// problem is result type, not accumulator type, so outconverter can fix this
+#pragma rs reduce(redUnionDoubleFloatArrayOutFix) accumulator(AccumUnionDoubleFloatArray) \
+  combiner(CombineUnionDoubleFloatArray) outconverter(OutUnionDoubleFloatArrayFix)
+static void AccumUnionDoubleFloatArray(UnionDoubleFloatArray *accum, short s, double d) { }
+static void CombineUnionDoubleFloatArray(UnionDoubleFloatArray *accum,
+                                           const UnionDoubleFloatArray *other) { }
+static void OutUnionDoubleFloatArrayFix(int *out, const UnionDoubleFloatArray *val) { }
+
+// problem is result type, not accumulator type, so outconverter can break this
+#pragma rs reduce(redUnionCharLongArrayOutBreak) accumulator(AccumInt) \
+  outconverter(OutUnionCharLongArrayBreak)
+static void OutUnionCharLongArrayBreak(UnionCharLongArray *out, const int *val) { }
+
+/////////////////////////////////////////////////////////////////////////
+
+struct Bits1 {
+  int b:1;
+};
+
+struct Bits11 {
+  int c:1;
+  int d:1;
+};
+
+struct Bits111 {
+  int e:1;
+  int f:1;
+  int g:1;
+};
+
+// cannot export struct with bitfield
+#pragma rs reduce(redBits) accumulator(AccumBits) combiner(CombineBits)
+static void AccumBits(struct Bits1 *accum, int val) { }
+static void CombineBits(struct Bits1 *accum, const struct Bits1 *other) { }
+
+// problem is result type, not accumulator type, so outconverter can fix this
+#pragma rs reduce(redBitsOutFix) accumulator(AccumBitsOutFix) combiner(CombineBitsOutFix) \
+  outconverter(OutBitsFix)
+static void AccumBitsOutFix(struct Bits11 *accum, int val) { }
+static void CombineBitsOutFix(struct Bits11 *accum, const struct Bits11 *other) { }
+static void OutBitsFix(int *out, const struct Bits11 *val) { }
+
+// problem is result type, not accumulator type, so outconverter can break this
+#pragma rs reduce(redBitsOutBreak) accumulator(AccumInt) outconverter(OutBitsBreak)
+static void OutBitsBreak(struct Bits111 *out, const int *val) { }
+
+/////////////////////////////////////////////////////////////////////////
+
+struct Bits2 {
+  int b:2;
+};
+typedef struct Bits2 Bits2Array[10];
+
+struct Bits22 {
+  int c:2;
+  int d:2;
+};
+typedef struct Bits22 Bits22Array[10];
+
+struct Bits222 {
+  int e:2;
+  int f:2;
+  int g:2;
+};
+typedef struct Bits222 Bits222Array[10];
+
+// cannot export array of struct with bitfield
+#pragma rs reduce(redBitsArray) accumulator(AccumBitsArray) combiner(CombineBitsArray)
+static void AccumBitsArray(Bits2Array *accum, int val) { }
+static void CombineBitsArray(Bits2Array *accum, const Bits2Array *other) { }
+
+// problem is result type, not accumulator type, so outconverter can fix this
+#pragma rs reduce(redBitsArrayOutFix) accumulator(AccumBitsArrayOutFix) \
+  combiner(CombineBitsArrayOutFix) outconverter(OutBitsArrayFix)
+static void AccumBitsArrayOutFix(Bits22Array *accum, int val) { }
+static void CombineBitsArrayOutFix(Bits22Array *accum, const Bits22Array *other) { }
+static void OutBitsArrayFix(int *out, const Bits22Array *val) { }
+
+// problem is result type, not accumulator type, so outconverter can break this
+#pragma rs reduce(redBitsArrayOutBreak) accumulator(AccumInt) outconverter(OutBitsArrayBreak)
+static void OutBitsArrayBreak(Bits222Array *out, const int *val) { }
+
+/////////////////////////////////////////////////////////////////////////
+
+// result type cannot be matrix
+#pragma rs reduce(redMat) accumulator(AccumMat)
+static void AccumMat(rs_matrix2x2 *accum, rs_matrix2x2 val) { }
+
+// problem is result type, not accumulator type, so outconverter can fix this
+#pragma rs reduce(redMatOutFix) accumulator(AccumMat) outconverter(OutMatFix)
+static void OutMatFix(int *out, const rs_matrix2x2 *val) { }
+
+// problem is result type, not accumulator type, so outconverter can break this
+#pragma rs reduce(redMatOutBreak) accumulator(AccumInt) outconverter(OutMatBreak)
+static void OutMatBreak(rs_matrix2x2 *out, const int *val) { }
+
+/////////////////////////////////////////////////////////////////////////
+
+typedef rs_matrix2x2 ArrayMatrix2x2[10];
+
+// result type cannot be array of matrix
+#pragma rs reduce(redMatArray) accumulator(AccumMatArray) combiner(CombineMatArray)
+static void AccumMatArray(ArrayMatrix2x2 *accum, rs_matrix2x2 val) { }
+static void CombineMatArray(ArrayMatrix2x2 *accum, const ArrayMatrix2x2 *other) { }
+
+// problem is result type, not accumulator type, so outconverter can fix this
+#pragma rs reduce(redMatArrayOutFix) accumulator(AccumMatArray) combiner(CombineMatArray) \
+  outconverter(OutMatArrayFix)
+static void OutMatArrayFix(int *out, const ArrayMatrix2x2 *val) { }
+
+// problem is result type, not accumulator type, so outconverter can break this
+#pragma rs reduce(redMatArrayOutBreak) accumulator(AccumInt) outconverter(OutMatArrayBreak)
+static void OutMatArrayBreak(ArrayMatrix2x2 *out, const int *val) { }
+
+/////////////////////////////////////////////////////////////////////////
+
+// result type cannot be object type
+#pragma rs reduce(redAlloc) accumulator(AccumInt) outconverter(OutAlloc)
+static void OutAlloc(rs_allocation *out, const int *val) { }
+
+/////////////////////////////////////////////////////////////////////////
+
+typedef rs_allocation AllocArray[10];
+
+// result type cannot be array of object type
+#pragma rs reduce(redAllocArray) accumulator(AccumAllocArray) outconverter(OutAllocArray)
+static void AccumAllocArray(int *accum, int val) { }
+static void OutAllocArray(AllocArray *out, const int *val) { }
+
+/////////////////////////////////////////////////////////////////////////
+
+struct StructObj1 {
+  int f;
+  rs_element e;
+};
+
+// result type cannot be struct containing object type
+#pragma rs reduce(redStructObj) accumulator(AccumStructObj) outconverter(OutStructObj)
+static void AccumStructObj(int *accum, int val) { }
+static void OutStructObj(struct StructObj1 *out, const int *val) { }
+
+/////////////////////////////////////////////////////////////////////////
+
+struct StructObj2 {
+  rs_type t;
+  float f;
+};
+typedef struct StructObj2 StructObj2Array[10];
+
+// result type cannot be array of struct containing object type
+#pragma rs reduce(redStructObjArray) accumulator(AccumStructObjArray) \
+  outconverter(OutStructObjArray)
+static void AccumStructObjArray(int *accum, int val) { }
+static void OutStructObjArray(StructObj2Array *out, const int *val) { }
+
+/////////////////////////////////////////////////////////////////////////
+
+typedef char *Ptr;
+
+// result type cannot be pointer
+#pragma rs reduce(redPtr) accumulator(AccumPtr) combiner(CombPtr)
+static void AccumPtr(Ptr *accum, char val) { }
+static void CombPtr(Ptr *accum, const Ptr *other) { }
+
+// problem is result type, not accumulator type, so outconverter can fix this
+#pragma rs reduce(redPtrOutFix) accumulator(AccumPtr) combiner(CombPtr) \
+  outconverter(OutPtrFix)
+static void OutPtrFix(int *out, const Ptr *val) { }
+
+// problem is result type, not accumulator type, so outconverter can break this
+#pragma rs reduce(redPtrOutBreak) accumulator(AccumInt) outconverter(OutPtrBreak)
+static void OutPtrBreak(Ptr *out, const int *val) { }
+
+/////////////////////////////////////////////////////////////////////////
+
+typedef Ptr PtrArray7[7];
+
+// cannot export array of pointer
+#pragma rs reduce(redPtrArray7) accumulator(AccumPtrArray7) combiner(CombPtrArray7)
+static void AccumPtrArray7(PtrArray7 *accum, int val) { }
+static void CombPtrArray7(PtrArray7 *accum, const PtrArray7 *other) { }
+
+// problem is result type, not accumulator type, so outconverter can fix this
+#pragma rs reduce(redPtrArray7OutFix) accumulator(AccumPtrArray7) combiner(CombPtrArray7) \
+  outconverter(OutPtrArray7Fix)
+static void OutPtrArray7Fix(int *out, const PtrArray7 *val) { }
+
+// problem is result type, not accumulator type, so outconverter can break this
+#pragma rs reduce(redPtrArray7OutBreak) accumulator(AccumInt) outconverter(OutPtrArray7Break)
+static void OutPtrArray7Break(PtrArray7 *out, const int *val) { }
+
+/////////////////////////////////////////////////////////////////////////
+
+struct StructPtr1 {
+  Ptr p;
+  double d;
+};
+
+struct StructPtr11 {
+  Ptr p;
+  double d;
+  int i;
+};
+
+struct StructPtr111 {
+  Ptr p;
+  double d;
+  int i;
+  float f;
+};
+
+// cannot export struct containing pointer
+#pragma rs reduce(redStructPtr) accumulator(AccumStructPtr) combiner(CombStructPtr)
+static void AccumStructPtr(struct StructPtr1 *accum, int val) { }
+static void CombStructPtr(struct StructPtr1 *accum, const struct StructPtr1 *other) { }
+
+// problem is result type, not accumulator type, so outconverter can fix this
+#pragma rs reduce(redStructPtrOutFix) accumulator(AccumStructPtrOutFix) \
+  combiner(CombStructPtrOutFix) outconverter(OutStructPtrFix)
+static void AccumStructPtrOutFix(struct StructPtr11 *accum, int val) { }
+static void CombStructPtrOutFix(struct StructPtr11 *accum, const struct StructPtr11 *other) { }
+static void OutStructPtrFix(int *out, const struct StructPtr11 *val) { }
+
+// problem is result type, not accumulator type, so outconverter can break this
+#pragma rs reduce(redStructPtrOutBreak) accumulator(AccumInt) outconverter(OutStructPtrBreak)
+static void OutStructPtrBreak(struct StructPtr111 *out, const int *val) { }
+
+/////////////////////////////////////////////////////////////////////////
+
+struct StructPtr2 {
+  float f;
+  Ptr p;
+};
+typedef struct StructPtr2 StructPtr2Array[7];
+
+struct StructPtr22 {
+  float f;
+  Ptr p;
+  char c;
+};
+typedef struct StructPtr22 StructPtr22Array[7];
+
+struct StructPtr222 {
+  float f;
+  Ptr p;
+  char c;
+  double d;
+};
+typedef struct StructPtr222 StructPtr222Array[7];
+
+// cannot export struct containing pointer
+#pragma rs reduce(redStructPtrArray) accumulator(AccumStructPtrArray) combiner(CombStructPtrArray)
+static void AccumStructPtrArray(StructPtr2Array *accum, int val) { }
+static void CombStructPtrArray(StructPtr2Array *accum, const StructPtr2Array *other) { }
+
+// problem is result type, not accumulator type, so outconverter can fix this
+#pragma rs reduce(redStructPtrArrayOutFix) accumulator(AccumStructPtrArrayOutFix) \
+  combiner(CombStructPtrArrayOutFix) outconverter(OutStructPtrArrayFix)
+static void AccumStructPtrArrayOutFix(StructPtr22Array *accum, int val) { }
+static void CombStructPtrArrayOutFix(StructPtr22Array *accum, const StructPtr22Array *other) { }
+static void OutStructPtrArrayFix(int *out, const StructPtr22Array *val) { }
+
+// problem is result type, not accumulator type, so outconverter can break this
+#pragma rs reduce(redStructPtrArrayOutBreak) accumulator(AccumInt) \
+  outconverter(OutStructPtrArrayBreak)
+static void OutStructPtrArrayBreak(StructPtr22Array *out, const int *val) { }
+
+/////////////////////////////////////////////////////////////////////////
+
+typedef void Fn(void);
+
+// cannot export function type
+//
+// NOTE: Not suitable as accumulator data type, regardless of whether
+//       we have outconverter; that's tested in reduce_general_bad_accumulator.rs.
+#pragma rs reduce(redFn) accumulator(AccumInt) outconverter(OutFn)
+static void OutFn(Fn *out, const int *val) { }
+
+/////////////////////////////////////////////////////////////////////////
+
+struct Incomplete;
+
+// result type cannot be incomplete type
+//
+// NOTE: Not suitable as accumulator data type, regardless of whether
+//       we have outconverter; that's tested in reduce_general_bad_accumulator.rs.
+#pragma rs reduce(redStructIncomplete) accumulator(AccumInt) outconverter(OutStructIncomplete)
+static void OutStructIncomplete(struct Incomplete *out, const int *val) { }
+
+/////////////////////////////////////////////////////////////////////////
+
+typedef int IntA[]; // incomplete (unknown element count)
+
+// result type cannot be incomplete type
+//
+// NOTE: Not suitable as accumulator data type, regardless of whether
+//       we have outconverter; that's tested in reduce_general_bad_accumulator.rs.
+#pragma rs reduce(redArrayIncomplete) accumulator(AccumInt) outconverter(OutArrayIncomplete)
+static void OutArrayIncomplete(IntA *out, const int *val) { }
diff --git a/slang/tests/F_reduce_general_bad_result/stderr.txt.expect b/slang/tests/F_reduce_general_bad_result/stderr.txt.expect
new file mode 100644
index 0000000..686ca1d
--- /dev/null
+++ b/slang/tests/F_reduce_general_bad_result/stderr.txt.expect
@@ -0,0 +1,29 @@
+reduce_general_bad_result.rs:22:36: error: multidimensional arrays cannot be exported: 'accum'
+reduce_general_bad_result.rs:32:39: error: multidimensional arrays cannot be exported: 'out'
+reduce_general_bad_result.rs:36:7: error: unions cannot be exported: 'UnionShortDouble'
+reduce_general_bad_result.rs:46:7: error: unions cannot be exported: 'UnionLongFloat'
+reduce_general_bad_result.rs:72:7: error: unions cannot be exported: 'UnionIntFloat'
+reduce_general_bad_result.rs:84:7: error: unions cannot be exported: 'UnionCharLong'
+reduce_general_bad_result.rs:113:7: error: bit fields are not able to be exported: 'Bits1.b'
+reduce_general_bad_result.rs:122:7: error: bit fields are not able to be exported: 'Bits111.e'
+reduce_general_bad_result.rs:146:7: error: bit fields are not able to be exported: 'Bits2.b'
+reduce_general_bad_result.rs:157:7: error: bit fields are not able to be exported: 'Bits222.e'
+reduce_general_bad_result.rs:183:36: error: accumulator AccumMat() for '#pragma rs reduce(redMat)' (reduce_general_bad_result.rs:182:12) parameter 'accum' (type 'rs_matrix2x2 *') must not point to a matrix type unless outconverter is provided
+reduce_general_bad_result.rs:191:39: error: outconverter OutMatBreak() for '#pragma rs reduce(redMatOutBreak)' (reduce_general_bad_result.rs:190:12) parameter 'out' (type 'rs_matrix2x2 *') must not point to a matrix type
+reduce_general_bad_result.rs:199:43: error: accumulator AccumMatArray() for '#pragma rs reduce(redMatArray)' (reduce_general_bad_result.rs:198:12) parameter 'accum' (type 'rs_matrix2x2 (*)[10]') must not point to an array of matrix type unless outconverter is provided
+reduce_general_bad_result.rs:209:46: error: outconverter OutMatArrayBreak() for '#pragma rs reduce(redMatArrayOutBreak)' (reduce_general_bad_result.rs:208:12) parameter 'out' (type 'rs_matrix2x2 (*)[10]') must not point to an array of matrix type
+reduce_general_bad_result.rs:215:37: error: outconverter OutAlloc() for '#pragma rs reduce(redAlloc)' (reduce_general_bad_result.rs:214:12) parameter 'out' (type 'struct rs_allocation *') must not point to data containing an object type
+reduce_general_bad_result.rs:224:39: error: outconverter OutAllocArray() for '#pragma rs reduce(redAllocArray)' (reduce_general_bad_result.rs:222:12) parameter 'out' (type 'struct rs_allocation (*)[10]') must not point to data containing an object type
+reduce_general_bad_result.rs:236:45: error: outconverter OutStructObj() for '#pragma rs reduce(redStructObj)' (reduce_general_bad_result.rs:234:12) parameter 'out' (type 'struct StructObj1 *') must not point to data containing an object type
+reduce_general_bad_result.rs:250:48: error: outconverter OutStructObjArray() for '#pragma rs reduce(redStructObjArray)' (reduce_general_bad_result.rs:247:12) parameter 'out' (type 'struct StructObj2 (*)[10]') must not point to data containing an object type
+reduce_general_bad_result.rs:258:27: error: accumulator AccumPtr() for '#pragma rs reduce(redPtr)' (reduce_general_bad_result.rs:257:12) parameter 'accum' (type 'char **') must not point to a pointer unless outconverter is provided
+reduce_general_bad_result.rs:268:30: error: outconverter OutPtrBreak() for '#pragma rs reduce(redPtrOutBreak)' (reduce_general_bad_result.rs:267:12) parameter 'out' (type 'char **') must not point to a pointer
+reduce_general_bad_result.rs:276:28: error: structures containing pointers cannot be used as the type of an exported global variable or the parameter to an exported function: 'accum'
+reduce_general_bad_result.rs:286:31: error: structures containing pointers cannot be used as the type of an exported global variable or the parameter to an exported function: 'out'
+reduce_general_bad_result.rs:310:28: error: structures containing pointers cannot be used as the type of an exported global variable or the parameter to an exported function: 'accum'
+reduce_general_bad_result.rs:322:31: error: structures containing pointers cannot be used as the type of an exported global variable or the parameter to an exported function: 'out'
+reduce_general_bad_result.rs:349:33: error: structures containing pointers cannot be used as the type of an exported global variable or the parameter to an exported function: 'accum'
+reduce_general_bad_result.rs:362:36: error: structures containing pointers cannot be used as the type of an exported global variable or the parameter to an exported function: 'out'
+reduce_general_bad_result.rs:373:23: error: function types cannot be exported: 'out'
+reduce_general_bad_result.rs:384:52: error: outconverter OutStructIncomplete() for '#pragma rs reduce(redStructIncomplete)' (reduce_general_bad_result.rs:383:12) parameter 'out' (type 'struct Incomplete *') must not point to an incomplete type
+reduce_general_bad_result.rs:395:38: error: outconverter OutArrayIncomplete() for '#pragma rs reduce(redArrayIncomplete)' (reduce_general_bad_result.rs:394:12) parameter 'out' (type 'int (*)[]') must not point to an incomplete type
diff --git a/slang/tests/F_reduce_general_bad_result/stdout.txt.expect b/slang/tests/F_reduce_general_bad_result/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_reduce_general_bad_result/stdout.txt.expect
diff --git a/slang/tests/F_reduce_general_parse/reduce_general_parse.rs b/slang/tests/F_reduce_general_parse/reduce_general_parse.rs
new file mode 100644
index 0000000..6606d83
--- /dev/null
+++ b/slang/tests/F_reduce_general_parse/reduce_general_parse.rs
@@ -0,0 +1,26 @@
+// -Wall -Werror
+#pragma version(1)
+#pragma rs java_package_name(all)
+
+#pragma rs reduce
+#pragma rs reduce(
+#pragma rs reduce (
+#pragma rs reduce(*
+#pragma rs reduce(foo
+#pragma rs reduce   (foo
+#pragma rs reduce(foo  )
+#pragma rs reduce(foo) initializer(
+#pragma rs reduce(foo) initializer(init)
+#pragma rs reduce(foo) initializer(init) accumulator(accum)
+#pragma rs reduce(foo) initializer(init2) accumulator(accum2)
+#pragma rs reduce(bar) accumulator(baccum) initializer(binit)
+#pragma rs reduce(baz) accumulator(baccum) initializer(binit) accumulator(baccum)
+#pragma rs reduce(baz) accumulator(baccum) initializer(binit) accumulator(baccum2)
+#pragma rs reduce(goo) something(wrong)
+#pragma rs reduce(goo) initializer(gi) accumulator(ga) (
+
+static void init(int *accum) { }
+static void accum(int *accum, int val) { }
+
+static void binit(int *accum) { }
+static void baccum(int *accum, int val) { }
diff --git a/slang/tests/F_reduce_general_parse/stderr.txt.expect b/slang/tests/F_reduce_general_parse/stderr.txt.expect
new file mode 100644
index 0000000..b21b78c
--- /dev/null
+++ b/slang/tests/F_reduce_general_parse/stderr.txt.expect
@@ -0,0 +1,14 @@
+reduce_general_parse.rs:5:18: error: missing '(' after 'reduce' for '#pragma rs reduce'
+reduce_general_parse.rs:6:19: error: missing name after 'reduce(' for '#pragma rs reduce'
+reduce_general_parse.rs:7:20: error: missing name after 'reduce(' for '#pragma rs reduce'
+reduce_general_parse.rs:8:19: error: missing name after 'reduce(' for '#pragma rs reduce'
+reduce_general_parse.rs:9:22: error: missing ')' after 'reduce(foo' for '#pragma rs reduce'
+reduce_general_parse.rs:10:25: error: missing ')' after 'reduce(foo' for '#pragma rs reduce'
+reduce_general_parse.rs:11:12: error: missing 'accumulator' for '#pragma rs reduce'
+reduce_general_parse.rs:12:36: error: missing name after 'initializer(' for '#pragma rs reduce'
+reduce_general_parse.rs:13:12: error: missing 'accumulator' for '#pragma rs reduce'
+reduce_general_parse.rs:15:12: error: reduction kernel 'foo' declared multiple times (first one is at reduce_general_parse.rs:14:12)
+reduce_general_parse.rs:17:63: error: more than one 'accumulator' for '#pragma rs reduce'
+reduce_general_parse.rs:18:63: error: more than one 'accumulator' for '#pragma rs reduce'
+reduce_general_parse.rs:19:24: error: did not recognize 'something' for '#pragma reduce'; expected one of the following keywords: 'accumulator', 'combiner', 'initializer', 'outconverter', 'reduce'
+reduce_general_parse.rs:20:56: error: did not expect '(' here for '#pragma rs reduce'
diff --git a/slang/tests/F_reduce_general_parse/stdout.txt.expect b/slang/tests/F_reduce_general_parse/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_reduce_general_parse/stdout.txt.expect
diff --git a/slang/tests/F_reduce_general_void/reduce_general_void.rs b/slang/tests/F_reduce_general_void/reduce_general_void.rs
new file mode 100644
index 0000000..b39fa56
--- /dev/null
+++ b/slang/tests/F_reduce_general_void/reduce_general_void.rs
@@ -0,0 +1,22 @@
+// -Wall
+#pragma version(1)
+#pragma rs java_package_name(voidptr)
+
+// void is not a suitable accumulator data type or result type; and
+// note that an input cannot be a pointer
+
+// accumulator must not be void
+#pragma rs reduce(voidA) initializer(voidA_init) accumulator(voidA_accum) combiner(voidA_comb)
+static void voidA_init(void *accum) { }
+static void voidA_accum(void *accum, int val) { }
+static void voidA_comb(void *accum, const void *other) { }
+
+// input must not be void*
+#pragma rs reduce(voidI) accumulator(voidI_accum) combiner(voidI_comb)
+static void voidI_accum(int *accum, void *val) { }
+static void voidI_comb(int *accum, const int *other) { }
+
+// result type must not be void
+#pragma rs reduce(voidO) accumulator(voidO_accum) outconverter(voidO_out)
+static void voidO_accum(int *accum, int val) { }
+static void voidO_out(void *out, const int *val) { }
diff --git a/slang/tests/F_reduce_general_void/stderr.txt.expect b/slang/tests/F_reduce_general_void/stderr.txt.expect
new file mode 100644
index 0000000..973cae8
--- /dev/null
+++ b/slang/tests/F_reduce_general_void/stderr.txt.expect
@@ -0,0 +1,3 @@
+reduce_general_void.rs:11:13: error: accumulator voidA_accum() for '#pragma rs reduce(voidA)' (reduce_general_void.rs:9:12) parameter 'accum' (type 'void *') must not be pointer to incomplete type
+reduce_general_void.rs:16:43: error: accumulator voidI_accum() for '#pragma rs reduce(voidI)' (reduce_general_void.rs:15:12) parameter 'val' (type 'void *') must not be a pointer
+reduce_general_void.rs:22:29: error: outconverter voidO_out() for '#pragma rs reduce(voidO)' (reduce_general_void.rs:20:12) parameter 'out' (type 'void *') must not point to an incomplete type
diff --git a/slang/tests/F_reduce_general_void/stdout.txt.expect b/slang/tests/F_reduce_general_void/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_reduce_general_void/stdout.txt.expect
diff --git a/slang/tests/F_reduce_general_wrong_api/reduce_general_wrong_api.rs b/slang/tests/F_reduce_general_wrong_api/reduce_general_wrong_api.rs
new file mode 100644
index 0000000..5da3239
--- /dev/null
+++ b/slang/tests/F_reduce_general_wrong_api/reduce_general_wrong_api.rs
@@ -0,0 +1,8 @@
+// -target-api 23 -Wall -Werror
+#pragma version(1)
+#pragma rs java_package_name(all)
+
+#pragma rs reduce(addint) \
+  initializer(aiInit) accumulator(aiAccum)
+
+void dummy() {}
diff --git a/slang/tests/F_reduce_general_wrong_api/stderr.txt.expect b/slang/tests/F_reduce_general_wrong_api/stderr.txt.expect
new file mode 100644
index 0000000..b92931b
--- /dev/null
+++ b/slang/tests/F_reduce_general_wrong_api/stderr.txt.expect
@@ -0,0 +1 @@
+reduce_general_wrong_api.rs:5:12: error: reduction kernels are not supported in SDK levels 11-23
diff --git a/slang/tests/F_reduce_general_wrong_api/stdout.txt.expect b/slang/tests/F_reduce_general_wrong_api/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_reduce_general_wrong_api/stdout.txt.expect
diff --git a/slang/tests/F_refcount_15/refcount_15.rs b/slang/tests/F_refcount_15/refcount_15.rs
new file mode 100644
index 0000000..b3e3a17
--- /dev/null
+++ b/slang/tests/F_refcount_15/refcount_15.rs
@@ -0,0 +1,20 @@
+// -target-api 15
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+rs_allocation aFail[2];
+
+struct rsStruct {
+    rs_allocation a;
+} sFail;
+
+static rs_allocation aOk[2];
+
+static struct noExport {
+    rs_allocation a;
+} sOk;
+
+struct onlyPtr {
+    rs_allocation a;
+} *ptrOk;
+
diff --git a/slang/tests/F_refcount_15/stderr.txt.expect b/slang/tests/F_refcount_15/stderr.txt.expect
new file mode 100644
index 0000000..e6453f0
--- /dev/null
+++ b/slang/tests/F_refcount_15/stderr.txt.expect
@@ -0,0 +1,2 @@
+refcount_15.rs:5:15: error: arrays/structures containing RS object types cannot be exported in target API < 16: 'aFail'
+refcount_15.rs:9:3: error: arrays/structures containing RS object types cannot be exported in target API < 16: 'sFail'
diff --git a/slang/tests/F_refcount_15/stdout.txt.expect b/slang/tests/F_refcount_15/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_refcount_15/stdout.txt.expect
diff --git a/slang/tests/F_root_11_ox/root_11_ox.rs b/slang/tests/F_root_11_ox/root_11_ox.rs
new file mode 100644
index 0000000..00278d2
--- /dev/null
+++ b/slang/tests/F_root_11_ox/root_11_ox.rs
@@ -0,0 +1,6 @@
+// -target-api 11
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void root(int *out, uint32_t x) {
+}
diff --git a/slang/tests/F_root_11_ox/stderr.txt.expect b/slang/tests/F_root_11_ox/stderr.txt.expect
new file mode 100644
index 0000000..1d3fc08
--- /dev/null
+++ b/slang/tests/F_root_11_ox/stderr.txt.expect
@@ -0,0 +1 @@
+root_11_ox.rs:5:6: error: Compute kernel root() targeting SDK levels 11-13 may not skip parameters
diff --git a/slang/tests/F_root_11_ox/stdout.txt.expect b/slang/tests/F_root_11_ox/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_root_11_ox/stdout.txt.expect
diff --git a/slang/tests/F_root_compute_int_in/root_compute_int_in.rs b/slang/tests/F_root_compute_int_in/root_compute_int_in.rs
new file mode 100644
index 0000000..b2560b4
--- /dev/null
+++ b/slang/tests/F_root_compute_int_in/root_compute_int_in.rs
@@ -0,0 +1,5 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void root(const int in) {
+}
diff --git a/slang/tests/F_root_compute_int_in/stderr.txt.expect b/slang/tests/F_root_compute_int_in/stderr.txt.expect
new file mode 100644
index 0000000..13925df
--- /dev/null
+++ b/slang/tests/F_root_compute_int_in/stderr.txt.expect
@@ -0,0 +1,2 @@
+root_compute_int_in.rs:4:21: error: Compute kernel root() cannot have non-pointer parameters besides special parameters ('context', 'x', 'y', 'z'). Parameter 'in' is of type: 'const int'
+root_compute_int_in.rs:4:6: error: Compute kernel root() must have at least one parameter for in or out
diff --git a/slang/tests/F_root_compute_int_in/stdout.txt.expect b/slang/tests/F_root_compute_int_in/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_root_compute_int_in/stdout.txt.expect
diff --git a/slang/tests/F_root_compute_non_const_usrData/root_compute_non_const_usrData.rs b/slang/tests/F_root_compute_non_const_usrData/root_compute_non_const_usrData.rs
new file mode 100644
index 0000000..46dc642
--- /dev/null
+++ b/slang/tests/F_root_compute_non_const_usrData/root_compute_non_const_usrData.rs
@@ -0,0 +1,5 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void root(const int *ain, int *aout, void *usrData) {
+}
diff --git a/slang/tests/F_root_compute_non_const_usrData/stderr.txt.expect b/slang/tests/F_root_compute_non_const_usrData/stderr.txt.expect
new file mode 100644
index 0000000..3974ed7
--- /dev/null
+++ b/slang/tests/F_root_compute_non_const_usrData/stderr.txt.expect
@@ -0,0 +1 @@
+root_compute_non_const_usrData.rs:4:44: error: Compute kernel root() can only have one non-const pointer parameter. Parameters 'aout' and 'usrData' are both non-const.
diff --git a/slang/tests/F_root_compute_non_const_usrData/stdout.txt.expect b/slang/tests/F_root_compute_non_const_usrData/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_root_compute_non_const_usrData/stdout.txt.expect
diff --git a/slang/tests/F_root_compute_non_ptr_usrData/root_compute_non_ptr_usrData.rs b/slang/tests/F_root_compute_non_ptr_usrData/root_compute_non_ptr_usrData.rs
new file mode 100644
index 0000000..ce67f8a
--- /dev/null
+++ b/slang/tests/F_root_compute_non_ptr_usrData/root_compute_non_ptr_usrData.rs
@@ -0,0 +1,5 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void root(const int *ain, int *aout, const int usrData) {
+}
diff --git a/slang/tests/F_root_compute_non_ptr_usrData/stderr.txt.expect b/slang/tests/F_root_compute_non_ptr_usrData/stderr.txt.expect
new file mode 100644
index 0000000..a113ce4
--- /dev/null
+++ b/slang/tests/F_root_compute_non_ptr_usrData/stderr.txt.expect
@@ -0,0 +1 @@
+root_compute_non_ptr_usrData.rs:4:48: error: Compute kernel root() cannot have non-pointer parameters besides special parameters ('context', 'x', 'y', 'z'). Parameter 'usrData' is of type: 'const int'
diff --git a/slang/tests/F_root_compute_non_ptr_usrData/stdout.txt.expect b/slang/tests/F_root_compute_non_ptr_usrData/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_root_compute_non_ptr_usrData/stdout.txt.expect
diff --git a/slang/tests/F_root_compute_non_uint32_t_xyzar/root_compute_non_uint32_t_xyzar.rs b/slang/tests/F_root_compute_non_uint32_t_xyzar/root_compute_non_uint32_t_xyzar.rs
new file mode 100644
index 0000000..da45b86
--- /dev/null
+++ b/slang/tests/F_root_compute_non_uint32_t_xyzar/root_compute_non_uint32_t_xyzar.rs
@@ -0,0 +1,6 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void root(const int *ain, int *aout, const void *usrData,
+          short x, float y, double z, uchar ar) {
+}
diff --git a/slang/tests/F_root_compute_non_uint32_t_xyzar/stderr.txt.expect b/slang/tests/F_root_compute_non_uint32_t_xyzar/stderr.txt.expect
new file mode 100644
index 0000000..9b4af29
--- /dev/null
+++ b/slang/tests/F_root_compute_non_uint32_t_xyzar/stderr.txt.expect
@@ -0,0 +1,6 @@
+root_compute_non_uint32_t_xyzar.rs:5:17: error: Special parameter 'x' must be of type 'int' or 'unsigned int'. It is of type 'short'.
+root_compute_non_uint32_t_xyzar.rs:5:26: error: Special parameter 'y' must be of type 'int' or 'unsigned int'. It is of type 'float'.
+root_compute_non_uint32_t_xyzar.rs:5:26: error: Special parameters 'x' and 'y' must be of the same type. 'x' is of type 'short' while 'y' is of type 'float'.
+root_compute_non_uint32_t_xyzar.rs:5:36: error: Special parameter 'z' must be of type 'int' or 'unsigned int'. It is of type 'double'.
+root_compute_non_uint32_t_xyzar.rs:5:36: error: Special parameters 'x' and 'z' must be of the same type. 'x' is of type 'short' while 'z' is of type 'double'.
+root_compute_non_uint32_t_xyzar.rs:5:45: error: In compute kernel root(), parameter 'ar' cannot appear after any of the special parameters ('context', 'x', 'y', 'z').
diff --git a/slang/tests/F_root_compute_non_uint32_t_xyzar/stdout.txt.expect b/slang/tests/F_root_compute_non_uint32_t_xyzar/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_root_compute_non_uint32_t_xyzar/stdout.txt.expect
diff --git a/slang/tests/F_root_compute_non_uint32_t_xyzwar/root_compute_non_uint32_t_xyzwar.rs b/slang/tests/F_root_compute_non_uint32_t_xyzwar/root_compute_non_uint32_t_xyzwar.rs
new file mode 100644
index 0000000..b3a00ad
--- /dev/null
+++ b/slang/tests/F_root_compute_non_uint32_t_xyzwar/root_compute_non_uint32_t_xyzwar.rs
@@ -0,0 +1,7 @@
+// -target-api 23
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void root(const int *ain, int *aout, const void *usrData,
+          short x, float y, double z, long w, uchar ar) {
+}
diff --git a/slang/tests/F_root_compute_non_uint32_t_xyzwar/stderr.txt.expect b/slang/tests/F_root_compute_non_uint32_t_xyzwar/stderr.txt.expect
new file mode 100644
index 0000000..9678fac
--- /dev/null
+++ b/slang/tests/F_root_compute_non_uint32_t_xyzwar/stderr.txt.expect
@@ -0,0 +1,7 @@
+root_compute_non_uint32_t_xyzwar.rs:6:17: error: Special parameter 'x' must be of type 'int' or 'unsigned int'. It is of type 'short'.
+root_compute_non_uint32_t_xyzwar.rs:6:26: error: Special parameter 'y' must be of type 'int' or 'unsigned int'. It is of type 'float'.
+root_compute_non_uint32_t_xyzwar.rs:6:26: error: Special parameters 'x' and 'y' must be of the same type. 'x' is of type 'short' while 'y' is of type 'float'.
+root_compute_non_uint32_t_xyzwar.rs:6:36: error: Special parameter 'z' must be of type 'int' or 'unsigned int'. It is of type 'double'.
+root_compute_non_uint32_t_xyzwar.rs:6:36: error: Special parameters 'x' and 'z' must be of the same type. 'x' is of type 'short' while 'z' is of type 'double'.
+root_compute_non_uint32_t_xyzwar.rs:6:44: error: In compute kernel root(), parameter 'w' cannot appear after any of the special parameters ('context', 'x', 'y', 'z').
+root_compute_non_uint32_t_xyzwar.rs:6:53: error: In compute kernel root(), parameter 'ar' cannot appear after any of the special parameters ('context', 'x', 'y', 'z').
diff --git a/slang/tests/F_root_compute_non_uint32_t_xyzwar/stdout.txt.expect b/slang/tests/F_root_compute_non_uint32_t_xyzwar/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_root_compute_non_uint32_t_xyzwar/stdout.txt.expect
diff --git a/slang/tests/F_root_compute_non_void_ret/root_compute_non_void_ret.rs b/slang/tests/F_root_compute_non_void_ret/root_compute_non_void_ret.rs
new file mode 100644
index 0000000..b1dd4fa
--- /dev/null
+++ b/slang/tests/F_root_compute_non_void_ret/root_compute_non_void_ret.rs
@@ -0,0 +1,6 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+int root(const int *in, int *out, const void *usrData) {
+    return 10;
+}
diff --git a/slang/tests/F_root_compute_non_void_ret/stderr.txt.expect b/slang/tests/F_root_compute_non_void_ret/stderr.txt.expect
new file mode 100644
index 0000000..a371330
--- /dev/null
+++ b/slang/tests/F_root_compute_non_void_ret/stderr.txt.expect
@@ -0,0 +1 @@
+root_compute_non_void_ret.rs:4:5: error: Compute kernel root() is required to return a void type
diff --git a/slang/tests/F_root_compute_non_void_ret/stdout.txt.expect b/slang/tests/F_root_compute_non_void_ret/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_root_compute_non_void_ret/stdout.txt.expect
diff --git a/slang/tests/F_root_compute_really_bad/root_compute_really_bad.rs b/slang/tests/F_root_compute_really_bad/root_compute_really_bad.rs
new file mode 100644
index 0000000..47d6b48
--- /dev/null
+++ b/slang/tests/F_root_compute_really_bad/root_compute_really_bad.rs
@@ -0,0 +1,18 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+int root(int ain, int aout, int usrData, float x1, double y1,
+         uint32_t y, uint32_t x,
+         uint32_t extra1, uint32_t extra2) {
+    return 10;
+}
+
+void root2(int* ain, const int* aout, int* usrData, const float* x1,
+           const double* y1, uint32_t y) {
+}
+
+int RS_KERNEL
+    root_kernel(int ain, int* aout, int usrData, float x1, double y1,
+                uint32_t y, uint32_t x, uint32_t extra1, uint32_t extra2) {
+  return 10;
+}
diff --git a/slang/tests/F_root_compute_really_bad/stderr.txt.expect b/slang/tests/F_root_compute_really_bad/stderr.txt.expect
new file mode 100644
index 0000000..7d10dcc
--- /dev/null
+++ b/slang/tests/F_root_compute_really_bad/stderr.txt.expect
@@ -0,0 +1,17 @@
+root_compute_really_bad.rs:4:5: error: Compute kernel root() is required to return a void type
+root_compute_really_bad.rs:5:31: error: In compute kernel root(), special parameter 'x' must be defined before special parameter 'y'.
+root_compute_really_bad.rs:6:19: error: In compute kernel root(), parameter 'extra1' cannot appear after any of the special parameters ('context', 'x', 'y', 'z').
+root_compute_really_bad.rs:6:36: error: In compute kernel root(), parameter 'extra2' cannot appear after any of the special parameters ('context', 'x', 'y', 'z').
+root_compute_really_bad.rs:4:14: error: Compute kernel root() cannot have non-pointer parameters besides special parameters ('context', 'x', 'y', 'z'). Parameter 'ain' is of type: 'int'
+root_compute_really_bad.rs:4:23: error: Compute kernel root() cannot have non-pointer parameters besides special parameters ('context', 'x', 'y', 'z'). Parameter 'aout' is of type: 'int'
+root_compute_really_bad.rs:4:33: error: Compute kernel root() cannot have non-pointer parameters besides special parameters ('context', 'x', 'y', 'z'). Parameter 'usrData' is of type: 'int'
+root_compute_really_bad.rs:4:48: error: Compute kernel root() cannot have non-pointer parameters besides special parameters ('context', 'x', 'y', 'z'). Parameter 'x1' is of type: 'float'
+root_compute_really_bad.rs:4:59: error: Compute kernel root() cannot have non-pointer parameters besides special parameters ('context', 'x', 'y', 'z'). Parameter 'y1' is of type: 'double'
+root_compute_really_bad.rs:4:5: error: Compute kernel root() must have at least one parameter for in or out
+root_compute_really_bad.rs:10:44: error: Compute kernel root2() can only have one non-const pointer parameter. Parameters 'ain' and 'usrData' are both non-const.
+root_compute_really_bad.rs:10:66: error: Unexpected parameter 'x1' for compute kernel root2()
+root_compute_really_bad.rs:11:26: error: Unexpected parameter 'y1' for compute kernel root2()
+root_compute_really_bad.rs:16:38: error: In compute kernel root_kernel(), special parameter 'x' must be defined before special parameter 'y'.
+root_compute_really_bad.rs:16:50: error: In compute kernel root_kernel(), parameter 'extra1' cannot appear after any of the special parameters ('context', 'x', 'y', 'z').
+root_compute_really_bad.rs:16:67: error: In compute kernel root_kernel(), parameter 'extra2' cannot appear after any of the special parameters ('context', 'x', 'y', 'z').
+root_compute_really_bad.rs:15:31: error: Compute kernel root_kernel() cannot have parameter 'aout' of pointer type: 'int *'
diff --git a/slang/tests/F_root_compute_really_bad/stdout.txt.expect b/slang/tests/F_root_compute_really_bad/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_root_compute_really_bad/stdout.txt.expect
diff --git a/slang/tests/F_root_compute_too_many_args/root_compute_too_many_args.rs b/slang/tests/F_root_compute_too_many_args/root_compute_too_many_args.rs
new file mode 100644
index 0000000..52e917f
--- /dev/null
+++ b/slang/tests/F_root_compute_too_many_args/root_compute_too_many_args.rs
@@ -0,0 +1,7 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void root(const int *in, int *out, const void *usrData,
+          uint32_t x, uint32_t y,
+          uint32_t extra1, uint32_t extra2) {
+}
diff --git a/slang/tests/F_root_compute_too_many_args/stderr.txt.expect b/slang/tests/F_root_compute_too_many_args/stderr.txt.expect
new file mode 100644
index 0000000..8afe8bc
--- /dev/null
+++ b/slang/tests/F_root_compute_too_many_args/stderr.txt.expect
@@ -0,0 +1,2 @@
+root_compute_too_many_args.rs:6:20: error: In compute kernel root(), parameter 'extra1' cannot appear after any of the special parameters ('context', 'x', 'y', 'z').
+root_compute_too_many_args.rs:6:37: error: In compute kernel root(), parameter 'extra2' cannot appear after any of the special parameters ('context', 'x', 'y', 'z').
diff --git a/slang/tests/F_root_compute_too_many_args/stdout.txt.expect b/slang/tests/F_root_compute_too_many_args/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_root_compute_too_many_args/stdout.txt.expect
diff --git a/slang/tests/F_root_graphics/root_graphics.rs b/slang/tests/F_root_graphics/root_graphics.rs
new file mode 100644
index 0000000..970cc9a
--- /dev/null
+++ b/slang/tests/F_root_graphics/root_graphics.rs
@@ -0,0 +1,6 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void root(void) {
+    return;
+}
diff --git a/slang/tests/F_root_graphics/stderr.txt.expect b/slang/tests/F_root_graphics/stderr.txt.expect
new file mode 100644
index 0000000..6b1e04d
--- /dev/null
+++ b/slang/tests/F_root_graphics/stderr.txt.expect
@@ -0,0 +1 @@
+root_graphics.rs:4:6: error: root() is required to return an int for graphics usage
diff --git a/slang/tests/F_root_graphics/stdout.txt.expect b/slang/tests/F_root_graphics/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_root_graphics/stdout.txt.expect
diff --git a/slang/tests/F_root_graphics_13/root_graphics_13.rs b/slang/tests/F_root_graphics_13/root_graphics_13.rs
new file mode 100644
index 0000000..c6c1fbd
--- /dev/null
+++ b/slang/tests/F_root_graphics_13/root_graphics_13.rs
@@ -0,0 +1,7 @@
+// -target-api 13
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+int root(unsigned int launchID) {
+    return 10;
+}
diff --git a/slang/tests/F_root_graphics_13/stderr.txt.expect b/slang/tests/F_root_graphics_13/stderr.txt.expect
new file mode 100644
index 0000000..74e9ee0
--- /dev/null
+++ b/slang/tests/F_root_graphics_13/stderr.txt.expect
@@ -0,0 +1 @@
+root_graphics_13.rs:5:23: error: invalid parameter type for legacy graphics root() function: 'unsigned int'
diff --git a/slang/tests/F_root_graphics_13/stdout.txt.expect b/slang/tests/F_root_graphics_13/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_root_graphics_13/stdout.txt.expect
diff --git a/slang/tests/F_rs_fp_two_pragmas/rs_fp_two_pragmas.rs b/slang/tests/F_rs_fp_two_pragmas/rs_fp_two_pragmas.rs
new file mode 100644
index 0000000..b07091c
--- /dev/null
+++ b/slang/tests/F_rs_fp_two_pragmas/rs_fp_two_pragmas.rs
@@ -0,0 +1,8 @@
+#pragma version(1)
+#pragma rs java_package_name(android.renderscript.cts)
+
+#pragma rs_fp_relaxed
+#pragma rs_fp_full
+
+
+
diff --git a/slang/tests/F_rs_fp_two_pragmas/stderr.txt.expect b/slang/tests/F_rs_fp_two_pragmas/stderr.txt.expect
new file mode 100644
index 0000000..6ad9b66
--- /dev/null
+++ b/slang/tests/F_rs_fp_two_pragmas/stderr.txt.expect
@@ -0,0 +1 @@
+rs_fp_two_pragmas.rs:5:9: error: Multiple float precisions specified.  Encountered rs_fp_relaxed previously.
diff --git a/slang/tests/F_rs_fp_two_pragmas/stdout.txt.expect b/slang/tests/F_rs_fp_two_pragmas/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_rs_fp_two_pragmas/stdout.txt.expect
diff --git a/slang/tests/F_rs_prefix/rs_prefix.rs b/slang/tests/F_rs_prefix/rs_prefix.rs
new file mode 100644
index 0000000..99ae9aa
--- /dev/null
+++ b/slang/tests/F_rs_prefix/rs_prefix.rs
@@ -0,0 +1,6 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void rs_foo() {
+    return;
+}
diff --git a/slang/tests/F_rs_prefix/stderr.txt.expect b/slang/tests/F_rs_prefix/stderr.txt.expect
new file mode 100644
index 0000000..11d291b
--- /dev/null
+++ b/slang/tests/F_rs_prefix/stderr.txt.expect
@@ -0,0 +1 @@
+rs_prefix.rs:4:6: error: invalid function name prefix, "rs" is reserved: 'rs_foo'
diff --git a/slang/tests/F_rs_prefix/stdout.txt.expect b/slang/tests/F_rs_prefix/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_rs_prefix/stdout.txt.expect
diff --git a/slang/tests/F_set_target_api_10/set_target_api_10.rs b/slang/tests/F_set_target_api_10/set_target_api_10.rs
new file mode 100644
index 0000000..53bda21
--- /dev/null
+++ b/slang/tests/F_set_target_api_10/set_target_api_10.rs
@@ -0,0 +1,4 @@
+// -target-api 10
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
diff --git a/slang/tests/F_set_target_api_10/stderr.txt.expect b/slang/tests/F_set_target_api_10/stderr.txt.expect
new file mode 100644
index 0000000..2f0da2a
--- /dev/null
+++ b/slang/tests/F_set_target_api_10/stderr.txt.expect
@@ -0,0 +1 @@
+error: target API level '10' is out of range ('11' - '24')
diff --git a/slang/tests/F_set_target_api_10/stdout.txt.expect b/slang/tests/F_set_target_api_10/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_set_target_api_10/stdout.txt.expect
diff --git a/slang/tests/F_set_target_api_9000/set_target_api_9000.rs b/slang/tests/F_set_target_api_9000/set_target_api_9000.rs
new file mode 100644
index 0000000..26e40ac
--- /dev/null
+++ b/slang/tests/F_set_target_api_9000/set_target_api_9000.rs
@@ -0,0 +1,4 @@
+// -target-api 9000
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
diff --git a/slang/tests/F_set_target_api_9000/stderr.txt.expect b/slang/tests/F_set_target_api_9000/stderr.txt.expect
new file mode 100644
index 0000000..4d30c06
--- /dev/null
+++ b/slang/tests/F_set_target_api_9000/stderr.txt.expect
@@ -0,0 +1 @@
+error: target API level '9000' is out of range ('11' - '24')
diff --git a/slang/tests/F_set_target_api_9000/stdout.txt.expect b/slang/tests/F_set_target_api_9000/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_set_target_api_9000/stdout.txt.expect
diff --git a/slang/tests/F_set_target_api_foo/set_target_api_foo.rs b/slang/tests/F_set_target_api_foo/set_target_api_foo.rs
new file mode 100644
index 0000000..e818a5a
--- /dev/null
+++ b/slang/tests/F_set_target_api_foo/set_target_api_foo.rs
@@ -0,0 +1,8 @@
+// -target-api foo
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+#if RS_VERSION != 12
+#error Invalid RS_VERSION
+#endif
+
diff --git a/slang/tests/F_set_target_api_foo/stderr.txt.expect b/slang/tests/F_set_target_api_foo/stderr.txt.expect
new file mode 100644
index 0000000..1c56599
--- /dev/null
+++ b/slang/tests/F_set_target_api_foo/stderr.txt.expect
@@ -0,0 +1 @@
+error: invalid integral value 'foo' in '-target-api foo'
diff --git a/slang/tests/F_set_target_api_foo/stdout.txt.expect b/slang/tests/F_set_target_api_foo/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_set_target_api_foo/stdout.txt.expect
diff --git a/slang/tests/F_struct_array_copy/stderr.txt.expect b/slang/tests/F_struct_array_copy/stderr.txt.expect
new file mode 100644
index 0000000..48bc6d7
--- /dev/null
+++ b/slang/tests/F_struct_array_copy/stderr.txt.expect
@@ -0,0 +1 @@
+struct_array_copy.rs:35:8: error: Arrays of RS object types within structures cannot be copied
diff --git a/slang/tests/F_struct_array_copy/stdout.txt.expect b/slang/tests/F_struct_array_copy/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_struct_array_copy/stdout.txt.expect
diff --git a/slang/tests/F_struct_array_copy/struct_array_copy.rs b/slang/tests/F_struct_array_copy/struct_array_copy.rs
new file mode 100644
index 0000000..1b55100
--- /dev/null
+++ b/slang/tests/F_struct_array_copy/struct_array_copy.rs
@@ -0,0 +1,37 @@
+
+// Copyright (C) 2011 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+struct myStruct {
+    rs_allocation a;
+    int i;
+    rs_element e[100];
+};
+
+struct myStruct mS;
+
+struct outerStruct {
+    struct myStruct inner;
+};
+
+void bar() {
+    struct myStruct localStruct;
+
+    localStruct.i = 5;
+    mS = localStruct;
+}
+
diff --git a/slang/tests/F_struct_bitfield/stderr.txt.expect b/slang/tests/F_struct_bitfield/stderr.txt.expect
new file mode 100644
index 0000000..d82e226
--- /dev/null
+++ b/slang/tests/F_struct_bitfield/stderr.txt.expect
@@ -0,0 +1 @@
+struct_bitfield.rs:5:9: error: bit fields are not able to be exported: 's.x'
diff --git a/slang/tests/F_struct_bitfield/stdout.txt.expect b/slang/tests/F_struct_bitfield/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_struct_bitfield/stdout.txt.expect
diff --git a/slang/tests/F_struct_bitfield/struct_bitfield.rs b/slang/tests/F_struct_bitfield/struct_bitfield.rs
new file mode 100644
index 0000000..95e3418
--- /dev/null
+++ b/slang/tests/F_struct_bitfield/struct_bitfield.rs
@@ -0,0 +1,7 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+struct s {
+    int x:1;
+} myStruct;
+
diff --git a/slang/tests/F_struct_float3_array/stderr.txt.expect b/slang/tests/F_struct_float3_array/stderr.txt.expect
new file mode 100644
index 0000000..1eac9bd
--- /dev/null
+++ b/slang/tests/F_struct_float3_array/stderr.txt.expect
@@ -0,0 +1 @@
+struct_float3_array.rs:4:8: error: arrays of width 3 vector types cannot be exported: 'float3_array'
diff --git a/slang/tests/F_struct_float3_array/stdout.txt.expect b/slang/tests/F_struct_float3_array/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_struct_float3_array/stdout.txt.expect
diff --git a/slang/tests/F_struct_float3_array/struct_float3_array.rs b/slang/tests/F_struct_float3_array/struct_float3_array.rs
new file mode 100644
index 0000000..58d6d64
--- /dev/null
+++ b/slang/tests/F_struct_float3_array/struct_float3_array.rs
@@ -0,0 +1,7 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+struct float3_array {
+    float3 f[2];
+} myStruct;
+
diff --git a/slang/tests/F_struct_ptr/stderr.txt.expect b/slang/tests/F_struct_ptr/stderr.txt.expect
new file mode 100644
index 0000000..a0bfee0
--- /dev/null
+++ b/slang/tests/F_struct_ptr/stderr.txt.expect
@@ -0,0 +1 @@
+struct_ptr.rs:4:8: error: struct is not defined in this module
diff --git a/slang/tests/F_struct_ptr/stdout.txt.expect b/slang/tests/F_struct_ptr/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_struct_ptr/stdout.txt.expect
diff --git a/slang/tests/F_struct_ptr/struct_ptr.rs b/slang/tests/F_struct_ptr/struct_ptr.rs
new file mode 100644
index 0000000..15eee65
--- /dev/null
+++ b/slang/tests/F_struct_ptr/struct_ptr.rs
@@ -0,0 +1,5 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+struct s *myStruct;
+
diff --git a/slang/tests/F_too_many_inputs/stderr.txt.expect b/slang/tests/F_too_many_inputs/stderr.txt.expect
new file mode 100644
index 0000000..aec9fdc
--- /dev/null
+++ b/slang/tests/F_too_many_inputs/stderr.txt.expect
@@ -0,0 +1 @@
+too_many_inputs.rs:9:95: error: Invalid parameter 'in8' for compute kernel bad(). Kernels targeting SDK levels 23+ may not use more than 8 input parameters.
diff --git a/slang/tests/F_too_many_inputs/stdout.txt.expect b/slang/tests/F_too_many_inputs/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_too_many_inputs/stdout.txt.expect
diff --git a/slang/tests/F_too_many_inputs/too_many_inputs.rs b/slang/tests/F_too_many_inputs/too_many_inputs.rs
new file mode 100644
index 0000000..248ee4f
--- /dev/null
+++ b/slang/tests/F_too_many_inputs/too_many_inputs.rs
@@ -0,0 +1,11 @@
+// -target-api 0
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+int RS_KERNEL good(int in0, int in1, int in2, int in3, int in4, int in5, int in6, int in7) {
+  return 0;
+}
+
+int RS_KERNEL bad(int in0, int in1, int in2, int in3, int in4, int in5, int in6, int in7, int in8) {
+  return 0;
+}
diff --git a/slang/tests/F_union/stderr.txt.expect b/slang/tests/F_union/stderr.txt.expect
new file mode 100644
index 0000000..2bf177d
--- /dev/null
+++ b/slang/tests/F_union/stderr.txt.expect
@@ -0,0 +1,3 @@
+union.rs:4:7: error: unions cannot be exported: 'u'
+union.rs:9:14: error: unions containing RS object types are not allowed
+union.rs:16:11: error: unions containing RS object types are not allowed
diff --git a/slang/tests/F_union/stdout.txt.expect b/slang/tests/F_union/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_union/stdout.txt.expect
diff --git a/slang/tests/F_union/union.rs b/slang/tests/F_union/union.rs
new file mode 100644
index 0000000..a6fa48d
--- /dev/null
+++ b/slang/tests/F_union/union.rs
@@ -0,0 +1,21 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+union u {
+    int i;
+    float f;
+} myUnion;
+
+static union u2 {
+    int i;
+    rs_element e;
+} myUnion2;
+
+
+void foo() {
+    union iu {
+        rs_element e;
+        int i;
+    } v;
+    (void) v;
+}
diff --git a/slang/tests/F_unknown_function/stderr.txt.expect b/slang/tests/F_unknown_function/stderr.txt.expect
new file mode 100644
index 0000000..c8329e3
--- /dev/null
+++ b/slang/tests/F_unknown_function/stderr.txt.expect
@@ -0,0 +1 @@
+unknown_function.rs:6:5: error: implicit declaration of function 'bar' is invalid in C99
diff --git a/slang/tests/F_unknown_function/stdout.txt.expect b/slang/tests/F_unknown_function/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_unknown_function/stdout.txt.expect
diff --git a/slang/tests/F_unknown_function/unknown_function.rs b/slang/tests/F_unknown_function/unknown_function.rs
new file mode 100644
index 0000000..8127993
--- /dev/null
+++ b/slang/tests/F_unknown_function/unknown_function.rs
@@ -0,0 +1,8 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void foo() {
+    rs_allocation a;
+    bar(a);
+}
+
diff --git a/slang/tests/F_unknown_function/zzz.rs b/slang/tests/F_unknown_function/zzz.rs
new file mode 100644
index 0000000..54929dc
--- /dev/null
+++ b/slang/tests/F_unknown_function/zzz.rs
@@ -0,0 +1,5 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+int i;
+
diff --git a/slang/tests/F_v15_non_root_kernel/stderr.txt.expect b/slang/tests/F_v15_non_root_kernel/stderr.txt.expect
new file mode 100644
index 0000000..fe38dc8
--- /dev/null
+++ b/slang/tests/F_v15_non_root_kernel/stderr.txt.expect
@@ -0,0 +1 @@
+v15_non_root_kernel.rs:5:6: error: Non-root compute kernel foo() is not supported in SDK levels 11-15
diff --git a/slang/tests/F_v15_non_root_kernel/stdout.txt.expect b/slang/tests/F_v15_non_root_kernel/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_v15_non_root_kernel/stdout.txt.expect
diff --git a/slang/tests/F_v15_non_root_kernel/v15_non_root_kernel.rs b/slang/tests/F_v15_non_root_kernel/v15_non_root_kernel.rs
new file mode 100644
index 0000000..d8b903e
--- /dev/null
+++ b/slang/tests/F_v15_non_root_kernel/v15_non_root_kernel.rs
@@ -0,0 +1,6 @@
+// -target-api 15
+#pragma version(1)
+#pragma rs java_package_name(android.renderscript.cts)
+
+void foo(const int *in) {
+}
diff --git a/slang/tests/F_vector_cast/stderr.txt.expect b/slang/tests/F_vector_cast/stderr.txt.expect
new file mode 100644
index 0000000..032948d
--- /dev/null
+++ b/slang/tests/F_vector_cast/stderr.txt.expect
@@ -0,0 +1,6 @@
+vector_cast.rs:8:11: error: cannot convert between vector values of different size ('float2' (vector of 2 'float' values) and 'int2' (vector of 2 'int' values))
+vector_cast.rs:15:11: error: cannot convert between vector values of different size ('int3' (vector of 3 'int' values) and 'float3' (vector of 3 'float' values))
+vector_cast.rs:7:9: error: invalid vector cast
+vector_cast.rs:14:9: error: invalid vector cast
+vector_cast.rs:21:9: error: invalid vector cast
+vector_cast.rs:31:13: error: invalid vector cast
diff --git a/slang/tests/F_vector_cast/stdout.txt.expect b/slang/tests/F_vector_cast/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_vector_cast/stdout.txt.expect
diff --git a/slang/tests/F_vector_cast/vector_cast.rs b/slang/tests/F_vector_cast/vector_cast.rs
new file mode 100644
index 0000000..fa49d97
--- /dev/null
+++ b/slang/tests/F_vector_cast/vector_cast.rs
@@ -0,0 +1,33 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void i2f() {
+    int2 i;
+    float2 f;
+    f = (float2)i;
+    f = f * i;
+}
+
+void f2i() {
+    int3 i;
+    float3 f;
+    i = (int3)f;
+    i = i * f;
+}
+
+void c2uc() {
+    char4 c;
+    uchar4 u;
+    u = (uchar4) c;
+}
+
+static uchar4 bar(uchar4 u) {
+    return u;
+}
+
+void c2uc_bar() {
+    char4 c;
+    uchar4 u;
+    u = bar((uchar4) c);
+}
+
diff --git a/slang/tests/F_void_ptr/stderr.txt.expect b/slang/tests/F_void_ptr/stderr.txt.expect
new file mode 100644
index 0000000..7958827
--- /dev/null
+++ b/slang/tests/F_void_ptr/stderr.txt.expect
@@ -0,0 +1 @@
+void_ptr.rs:4:7: error: void pointers cannot be exported: 'v'
diff --git a/slang/tests/F_void_ptr/stdout.txt.expect b/slang/tests/F_void_ptr/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_void_ptr/stdout.txt.expect
diff --git a/slang/tests/F_void_ptr/void_ptr.rs b/slang/tests/F_void_ptr/void_ptr.rs
new file mode 100644
index 0000000..1fc1737
--- /dev/null
+++ b/slang/tests/F_void_ptr/void_ptr.rs
@@ -0,0 +1,5 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void *v;
+void RS_KERNEL k(void) {}
diff --git a/slang/tests/F_warnings_as_error/deprecated.rs b/slang/tests/F_warnings_as_error/deprecated.rs
new file mode 100644
index 0000000..b06f6af
--- /dev/null
+++ b/slang/tests/F_warnings_as_error/deprecated.rs
@@ -0,0 +1,15 @@
+// -Werror
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+char out;
+rs_allocation al;
+
+static void func1() {
+  int a = func0(3);
+}
+
+static int func2(char in) {
+  int t = 4;
+  //return func1(in + 3);
+}
diff --git a/slang/tests/F_warnings_as_error/stderr.txt.expect b/slang/tests/F_warnings_as_error/stderr.txt.expect
new file mode 100644
index 0000000..7af87a8
--- /dev/null
+++ b/slang/tests/F_warnings_as_error/stderr.txt.expect
@@ -0,0 +1,4 @@
+deprecated.rs:9:11: error: implicit declaration of function 'func0' is invalid in C99
+deprecated.rs:9:11: note: did you mean 'func1'?
+deprecated.rs:8:13: note: 'func1' declared here
+deprecated.rs:15:1: error: control reaches end of non-void function
diff --git a/slang/tests/F_warnings_as_error/stdout.txt.expect b/slang/tests/F_warnings_as_error/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_warnings_as_error/stdout.txt.expect
diff --git a/slang/tests/F_z_wrong_api/stderr.txt.expect b/slang/tests/F_z_wrong_api/stderr.txt.expect
new file mode 100644
index 0000000..89f2d18
--- /dev/null
+++ b/slang/tests/F_z_wrong_api/stderr.txt.expect
@@ -0,0 +1 @@
+z_wrong_api.rs:5:60: error: compute kernel bad() targeting SDK levels 11-22 may not use special parameter 'z'.
diff --git a/slang/tests/F_z_wrong_api/stdout.txt.expect b/slang/tests/F_z_wrong_api/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/F_z_wrong_api/stdout.txt.expect
diff --git a/slang/tests/F_z_wrong_api/z_wrong_api.rs b/slang/tests/F_z_wrong_api/z_wrong_api.rs
new file mode 100644
index 0000000..42b08a2
--- /dev/null
+++ b/slang/tests/F_z_wrong_api/z_wrong_api.rs
@@ -0,0 +1,7 @@
+// -target-api 22
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+int RS_KERNEL bad(int in, uint32_t x, uint32_t y, uint32_t z) {
+  return 0;
+}
diff --git a/slang/tests/P_all_api_11/all11.rs b/slang/tests/P_all_api_11/all11.rs
new file mode 100644
index 0000000..2c0dc0e
--- /dev/null
+++ b/slang/tests/P_all_api_11/all11.rs
@@ -0,0 +1,3296 @@
+// -target-api 11 -Wno-deprecated-declarations
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Don't edit this file!  It is auto-generated by frameworks/rs/api/generate.sh.
+
+#pragma version(1)
+#pragma rs java_package_name(com.example.renderscript.testallapi)
+
+#include "rs_graphics.rsh"
+
+char buf0[200];
+char buf1[200];
+char buf2[200];
+char buf3[200];
+char buf4[200];
+char buf5[200];
+char buf6[200];
+char buf7[200];
+char buf8[200];
+char buf9[200];
+char buf10[200];
+char buf11[200];
+char buf12[200];
+char buf13[200];
+char buf14[200];
+char buf15[200];
+char buf16[200];
+char buf17[200];
+char buf18[200];
+char buf19[200];
+char buf20[200];
+char buf21[200];
+char buf22[200];
+char buf23[200];
+char buf24[200];
+char buf25[200];
+char buf26[200];
+char buf27[200];
+char buf28[200];
+char buf29[200];
+char buf30[200];
+char buf31[200];
+char buf32[200];
+char buf33[200];
+char buf34[200];
+char buf35[200];
+char buf36[200];
+char buf37[200];
+char buf38[200];
+char buf39[200];
+char buf40[200];
+char buf41[200];
+char buf42[200];
+char buf43[200];
+char buf44[200];
+char buf45[200];
+char buf46[200];
+char buf47[200];
+char buf48[200];
+char buf49[200];
+char buf50[200];
+char buf51[200];
+char buf52[200];
+char buf53[200];
+char buf54[200];
+char buf55[200];
+char buf56[200];
+char buf57[200];
+char buf58[200];
+char buf59[200];
+char buf60[200];
+char buf61[200];
+char buf62[200];
+char buf63[200];
+char buf64[200];
+char buf65[200];
+char buf66[200];
+char buf67[200];
+char buf68[200];
+char buf69[200];
+char buf70[200];
+char buf71[200];
+char buf72[200];
+char buf73[200];
+char buf74[200];
+char buf75[200];
+char buf76[200];
+char buf77[200];
+char buf78[200];
+char buf79[200];
+char buf80[200];
+char buf81[200];
+char buf82[200];
+char buf83[200];
+char buf84[200];
+char buf85[200];
+char buf86[200];
+char buf87[200];
+char buf88[200];
+char buf89[200];
+char buf90[200];
+char buf91[200];
+char buf92[200];
+char buf93[200];
+char buf94[200];
+char buf95[200];
+char buf96[200];
+char buf97[200];
+char buf98[200];
+char buf99[200];
+char buf100[200];
+char buf101[200];
+char buf102[200];
+char buf103[200];
+char buf104[200];
+char buf105[200];
+char buf106[200];
+char buf107[200];
+char buf108[200];
+char buf109[200];
+char buf110[200];
+char buf111[200];
+char buf112[200];
+char buf113[200];
+char buf114[200];
+char buf115[200];
+char buf116[200];
+char buf117[200];
+char buf118[200];
+char buf119[200];
+char buf120[200];
+char buf121[200];
+char buf122[200];
+char buf123[200];
+char buf124[200];
+char buf125[200];
+char buf126[200];
+char buf127[200];
+char buf128[200];
+char buf129[200];
+char buf130[200];
+char buf131[200];
+char buf132[200];
+char buf133[200];
+char buf134[200];
+char buf135[200];
+char buf136[200];
+char buf137[200];
+char buf138[200];
+char buf139[200];
+char buf140[200];
+char buf141[200];
+char buf142[200];
+char buf143[200];
+char buf144[200];
+char buf145[200];
+char buf146[200];
+char buf147[200];
+char buf148[200];
+char buf149[200];
+char buf150[200];
+char buf151[200];
+char buf152[200];
+char buf153[200];
+char buf154[200];
+char buf155[200];
+char buf156[200];
+char buf157[200];
+char buf158[200];
+char buf159[200];
+char buf160[200];
+char buf161[200];
+char buf162[200];
+char buf163[200];
+char buf164[200];
+char buf165[200];
+char buf166[200];
+char buf167[200];
+char buf168[200];
+char buf169[200];
+char buf170[200];
+char buf171[200];
+char buf172[200];
+char buf173[200];
+char buf174[200];
+char buf175[200];
+char buf176[200];
+char buf177[200];
+char buf178[200];
+char buf179[200];
+char buf180[200];
+char buf181[200];
+char buf182[200];
+char buf183[200];
+char buf184[200];
+char buf185[200];
+char buf186[200];
+char buf187[200];
+char buf188[200];
+char buf189[200];
+char buf190[200];
+char buf191[200];
+char buf192[200];
+char buf193[200];
+char buf194[200];
+char buf195[200];
+char buf196[200];
+char buf197[200];
+char buf198[200];
+char buf199[200];
+char buf200[200];
+char buf201[200];
+char buf202[200];
+char buf203[200];
+char buf204[200];
+char buf205[200];
+char buf206[200];
+char buf207[200];
+char buf208[200];
+char buf209[200];
+char buf210[200];
+char buf211[200];
+char buf212[200];
+char buf213[200];
+char buf214[200];
+char buf215[200];
+char buf216[200];
+char buf217[200];
+char buf218[200];
+char buf219[200];
+char buf220[200];
+char buf221[200];
+char buf222[200];
+char buf223[200];
+char buf224[200];
+char buf225[200];
+char buf226[200];
+char buf227[200];
+char buf228[200];
+char buf229[200];
+char buf230[200];
+char buf231[200];
+char buf232[200];
+char buf233[200];
+char buf234[200];
+char buf235[200];
+char buf236[200];
+char buf237[200];
+char buf238[200];
+char buf239[200];
+char buf240[200];
+char buf241[200];
+char buf242[200];
+char buf243[200];
+char buf244[200];
+char buf245[200];
+char buf246[200];
+char buf247[200];
+char buf248[200];
+char buf249[200];
+char buf250[200];
+char buf251[200];
+char buf252[200];
+char buf253[200];
+char buf254[200];
+char buf255[200];
+char buf256[200];
+char buf257[200];
+char buf258[200];
+char buf259[200];
+char buf260[200];
+char buf261[200];
+char buf262[200];
+char buf263[200];
+char buf264[200];
+char buf265[200];
+char buf266[200];
+char buf267[200];
+char buf268[200];
+char buf269[200];
+char buf270[200];
+char buf271[200];
+char buf272[200];
+char buf273[200];
+char buf274[200];
+char buf275[200];
+char buf276[200];
+char buf277[200];
+char buf278[200];
+char buf279[200];
+char buf280[200];
+char buf281[200];
+char buf282[200];
+char buf283[200];
+char buf284[200];
+char buf285[200];
+char buf286[200];
+char buf287[200];
+char buf288[200];
+char buf289[200];
+char buf290[200];
+char buf291[200];
+char buf292[200];
+char buf293[200];
+char buf294[200];
+char buf295[200];
+char buf296[200];
+char buf297[200];
+char buf298[200];
+char buf299[200];
+char buf300[200];
+char buf301[200];
+char buf302[200];
+char buf303[200];
+char buf304[200];
+char buf305[200];
+char buf306[200];
+char buf307[200];
+char buf308[200];
+char buf309[200];
+char buf310[200];
+char buf311[200];
+char buf312[200];
+char buf313[200];
+char buf314[200];
+char buf315[200];
+char buf316[200];
+char buf317[200];
+char buf318[200];
+char buf319[200];
+char buf320[200];
+char buf321[200];
+char buf322[200];
+char buf323[200];
+char buf324[200];
+char buf325[200];
+char buf326[200];
+char buf327[200];
+char buf328[200];
+char buf329[200];
+char buf330[200];
+char buf331[200];
+char buf332[200];
+char buf333[200];
+char buf334[200];
+char buf335[200];
+char buf336[200];
+char buf337[200];
+char buf338[200];
+char buf339[200];
+char buf340[200];
+char buf341[200];
+char buf342[200];
+char buf343[200];
+char buf344[200];
+char buf345[200];
+char buf346[200];
+char buf347[200];
+char buf348[200];
+char buf349[200];
+char buf350[200];
+char buf351[200];
+char buf352[200];
+char buf353[200];
+char buf354[200];
+char buf355[200];
+char buf356[200];
+char buf357[200];
+char buf358[200];
+char buf359[200];
+char buf360[200];
+char buf361[200];
+char buf362[200];
+char buf363[200];
+char buf364[200];
+char buf365[200];
+char buf366[200];
+char buf367[200];
+char buf368[200];
+char buf369[200];
+char buf370[200];
+char buf371[200];
+char buf372[200];
+char buf373[200];
+char buf374[200];
+char buf375[200];
+char buf376[200];
+char buf377[200];
+char buf378[200];
+char buf379[200];
+char buf380[200];
+char buf381[200];
+char buf382[200];
+char buf383[200];
+char buf384[200];
+char buf385[200];
+char buf386[200];
+char buf387[200];
+char buf388[200];
+char buf389[200];
+char buf390[200];
+char buf391[200];
+char buf392[200];
+char buf393[200];
+char buf394[200];
+char buf395[200];
+char buf396[200];
+char buf397[200];
+char buf398[200];
+char buf399[200];
+char buf400[200];
+char buf401[200];
+char buf402[200];
+char buf403[200];
+char buf404[200];
+char buf405[200];
+char buf406[200];
+char buf407[200];
+char buf408[200];
+char buf409[200];
+char buf410[200];
+char buf411[200];
+char buf412[200];
+char buf413[200];
+char buf414[200];
+char buf415[200];
+char buf416[200];
+char buf417[200];
+char buf418[200];
+char buf419[200];
+char buf420[200];
+char buf421[200];
+char buf422[200];
+char buf423[200];
+char buf424[200];
+char buf425[200];
+char buf426[200];
+char buf427[200];
+char buf428[200];
+char buf429[200];
+char buf430[200];
+char buf431[200];
+char buf432[200];
+char buf433[200];
+char buf434[200];
+char buf435[200];
+char buf436[200];
+char buf437[200];
+char buf438[200];
+char buf439[200];
+char buf440[200];
+char buf441[200];
+char buf442[200];
+char buf443[200];
+char buf444[200];
+char buf445[200];
+char buf446[200];
+char buf447[200];
+char buf448[200];
+char buf449[200];
+char buf450[200];
+char buf451[200];
+char buf452[200];
+char buf453[200];
+char buf454[200];
+char buf455[200];
+char buf456[200];
+char buf457[200];
+char buf458[200];
+char buf459[200];
+char buf460[200];
+char buf461[200];
+char buf462[200];
+char buf463[200];
+char buf464[200];
+char buf465[200];
+char buf466[200];
+char buf467[200];
+char buf468[200];
+char buf469[200];
+char buf470[200];
+char buf471[200];
+char buf472[200];
+char buf473[200];
+char buf474[200];
+char buf475[200];
+char buf476[200];
+char buf477[200];
+char buf478[200];
+char buf479[200];
+char buf480[200];
+char buf481[200];
+char buf482[200];
+char buf483[200];
+char buf484[200];
+char buf485[200];
+char buf486[200];
+char buf487[200];
+char buf488[200];
+char buf489[200];
+char buf490[200];
+char buf491[200];
+char buf492[200];
+char buf493[200];
+char buf494[200];
+char buf495[200];
+char buf496[200];
+char buf497[200];
+char buf498[200];
+char buf499[200];
+char buf500[200];
+char buf501[200];
+char buf502[200];
+char buf503[200];
+char buf504[200];
+char buf505[200];
+char buf506[200];
+char buf507[200];
+char buf508[200];
+char buf509[200];
+char buf510[200];
+char buf511[200];
+char buf512[200];
+char buf513[200];
+char buf514[200];
+char buf515[200];
+char buf516[200];
+char buf517[200];
+char buf518[200];
+char buf519[200];
+char buf520[200];
+char buf521[200];
+char buf522[200];
+char buf523[200];
+char buf524[200];
+char buf525[200];
+char buf526[200];
+char buf527[200];
+char buf528[200];
+char buf529[200];
+char buf530[200];
+char buf531[200];
+char buf532[200];
+char buf533[200];
+char buf534[200];
+char buf535[200];
+char buf536[200];
+char buf537[200];
+char buf538[200];
+char buf539[200];
+char buf540[200];
+char buf541[200];
+char buf542[200];
+char buf543[200];
+char buf544[200];
+char buf545[200];
+char buf546[200];
+char buf547[200];
+char buf548[200];
+char buf549[200];
+char buf550[200];
+char buf551[200];
+char buf552[200];
+char buf553[200];
+char buf554[200];
+char buf555[200];
+char buf556[200];
+char buf557[200];
+char buf558[200];
+char buf559[200];
+char buf560[200];
+char buf561[200];
+char buf562[200];
+char buf563[200];
+char buf564[200];
+char buf565[200];
+char buf566[200];
+char buf567[200];
+char buf568[200];
+char buf569[200];
+char buf570[200];
+char buf571[200];
+char buf572[200];
+char buf573[200];
+char buf574[200];
+char buf575[200];
+char buf576[200];
+char buf577[200];
+char buf578[200];
+char buf579[200];
+char buf580[200];
+char buf581[200];
+char buf582[200];
+char buf583[200];
+char buf584[200];
+char buf585[200];
+char buf586[200];
+char buf587[200];
+char buf588[200];
+char buf589[200];
+char buf590[200];
+char buf591[200];
+char buf592[200];
+char buf593[200];
+char buf594[200];
+char buf595[200];
+char buf596[200];
+char buf597[200];
+char buf598[200];
+char buf599[200];
+char buf600[200];
+char buf601[200];
+char buf602[200];
+char buf603[200];
+char buf604[200];
+char buf605[200];
+char buf606[200];
+char buf607[200];
+char buf608[200];
+char buf609[200];
+char buf610[200];
+char buf611[200];
+char buf612[200];
+char buf613[200];
+char buf614[200];
+char buf615[200];
+char buf616[200];
+char buf617[200];
+char buf618[200];
+char buf619[200];
+char buf620[200];
+char buf621[200];
+char buf622[200];
+char buf623[200];
+char buf624[200];
+char buf625[200];
+char buf626[200];
+char buf627[200];
+char buf628[200];
+char buf629[200];
+char buf630[200];
+char buf631[200];
+char buf632[200];
+char buf633[200];
+char buf634[200];
+char buf635[200];
+char buf636[200];
+char buf637[200];
+char buf638[200];
+char buf639[200];
+char buf640[200];
+char buf641[200];
+char buf642[200];
+char buf643[200];
+char buf644[200];
+char buf645[200];
+char buf646[200];
+char buf647[200];
+char buf648[200];
+char buf649[200];
+char buf650[200];
+char buf651[200];
+char buf652[200];
+char buf653[200];
+char buf654[200];
+char buf655[200];
+char buf656[200];
+char buf657[200];
+char buf658[200];
+char buf659[200];
+char buf660[200];
+char buf661[200];
+char buf662[200];
+char buf663[200];
+char buf664[200];
+char buf665[200];
+char buf666[200];
+char buf667[200];
+char buf668[200];
+char buf669[200];
+char buf670[200];
+char buf671[200];
+char buf672[200];
+char buf673[200];
+char buf674[200];
+char buf675[200];
+char buf676[200];
+char buf677[200];
+char buf678[200];
+char buf679[200];
+char buf680[200];
+char buf681[200];
+char buf682[200];
+char buf683[200];
+char buf684[200];
+char buf685[200];
+char buf686[200];
+char buf687[200];
+char buf688[200];
+char buf689[200];
+char buf690[200];
+char buf691[200];
+char buf692[200];
+char buf693[200];
+char buf694[200];
+char buf695[200];
+char buf696[200];
+char buf697[200];
+char buf698[200];
+char buf699[200];
+char buf700[200];
+char buf701[200];
+char buf702[200];
+char buf703[200];
+char buf704[200];
+char buf705[200];
+char buf706[200];
+char buf707[200];
+char buf708[200];
+char buf709[200];
+char buf710[200];
+char buf711[200];
+char buf712[200];
+char buf713[200];
+char buf714[200];
+char buf715[200];
+char buf716[200];
+char buf717[200];
+char buf718[200];
+char buf719[200];
+char buf720[200];
+char buf721[200];
+char buf722[200];
+char buf723[200];
+char buf724[200];
+char buf725[200];
+char buf726[200];
+char buf727[200];
+char buf728[200];
+char buf729[200];
+char buf730[200];
+char buf731[200];
+char buf732[200];
+char buf733[200];
+char buf734[200];
+char buf735[200];
+char buf736[200];
+char buf737[200];
+char buf738[200];
+char buf739[200];
+char buf740[200];
+char buf741[200];
+char buf742[200];
+char buf743[200];
+char buf744[200];
+char buf745[200];
+char buf746[200];
+char buf747[200];
+char buf748[200];
+char buf749[200];
+char buf750[200];
+char buf751[200];
+char buf752[200];
+char buf753[200];
+char buf754[200];
+char buf755[200];
+char buf756[200];
+char buf757[200];
+char buf758[200];
+char buf759[200];
+char buf760[200];
+char buf761[200];
+char buf762[200];
+char buf763[200];
+char buf764[200];
+char buf765[200];
+char buf766[200];
+char buf767[200];
+char buf768[200];
+char buf769[200];
+char buf770[200];
+char buf771[200];
+char buf772[200];
+char buf773[200];
+char buf774[200];
+char buf775[200];
+char buf776[200];
+char buf777[200];
+char buf778[200];
+char buf779[200];
+char buf780[200];
+char buf781[200];
+char buf782[200];
+char buf783[200];
+char buf784[200];
+char buf785[200];
+char buf786[200];
+char buf787[200];
+char buf788[200];
+char buf789[200];
+char buf790[200];
+char buf791[200];
+char buf792[200];
+char buf793[200];
+char buf794[200];
+char buf795[200];
+char buf796[200];
+char buf797[200];
+char buf798[200];
+char buf799[200];
+char buf800[200];
+char buf801[200];
+char buf802[200];
+char buf803[200];
+char buf804[200];
+char buf805[200];
+char buf806[200];
+char buf807[200];
+char buf808[200];
+char buf809[200];
+char buf810[200];
+char buf811[200];
+char buf812[200];
+char buf813[200];
+char buf814[200];
+char buf815[200];
+char buf816[200];
+char buf817[200];
+char buf818[200];
+char buf819[200];
+char buf820[200];
+char buf821[200];
+char buf822[200];
+char buf823[200];
+char buf824[200];
+char buf825[200];
+char buf826[200];
+char buf827[200];
+char buf828[200];
+char buf829[200];
+char buf830[200];
+char buf831[200];
+char buf832[200];
+char buf833[200];
+char buf834[200];
+char buf835[200];
+char buf836[200];
+char buf837[200];
+char buf838[200];
+char buf839[200];
+char buf840[200];
+char buf841[200];
+char buf842[200];
+char buf843[200];
+char buf844[200];
+char buf845[200];
+char buf846[200];
+char buf847[200];
+char buf848[200];
+char buf849[200];
+char buf850[200];
+char buf851[200];
+char buf852[200];
+char buf853[200];
+char buf854[200];
+char buf855[200];
+char buf856[200];
+char buf857[200];
+char buf858[200];
+char buf859[200];
+char buf860[200];
+char buf861[200];
+char buf862[200];
+char buf863[200];
+char buf864[200];
+char buf865[200];
+char buf866[200];
+char buf867[200];
+char buf868[200];
+char buf869[200];
+char buf870[200];
+char buf871[200];
+char buf872[200];
+char buf873[200];
+char buf874[200];
+char buf875[200];
+char buf876[200];
+char buf877[200];
+char buf878[200];
+char buf879[200];
+char buf880[200];
+char buf881[200];
+char buf882[200];
+char buf883[200];
+char buf884[200];
+char buf885[200];
+char buf886[200];
+char buf887[200];
+char buf888[200];
+char buf889[200];
+char buf890[200];
+char buf891[200];
+char buf892[200];
+char buf893[200];
+char buf894[200];
+char buf895[200];
+char buf896[200];
+char buf897[200];
+char buf898[200];
+char buf899[200];
+char buf900[200];
+char buf901[200];
+char buf902[200];
+char buf903[200];
+char buf904[200];
+char buf905[200];
+char buf906[200];
+char buf907[200];
+char buf908[200];
+char buf909[200];
+char buf910[200];
+char buf911[200];
+char buf912[200];
+char buf913[200];
+char buf914[200];
+char buf915[200];
+char buf916[200];
+char buf917[200];
+char buf918[200];
+char buf919[200];
+char buf920[200];
+char buf921[200];
+char buf922[200];
+char buf923[200];
+char buf924[200];
+char buf925[200];
+char buf926[200];
+char buf927[200];
+char buf928[200];
+char buf929[200];
+char buf930[200];
+char buf931[200];
+char buf932[200];
+char buf933[200];
+char buf934[200];
+char buf935[200];
+char buf936[200];
+char buf937[200];
+char buf938[200];
+char buf939[200];
+char buf940[200];
+char buf941[200];
+char buf942[200];
+char buf943[200];
+char buf944[200];
+char buf945[200];
+char buf946[200];
+char buf947[200];
+char buf948[200];
+char buf949[200];
+char buf950[200];
+char buf951[200];
+char buf952[200];
+char buf953[200];
+char buf954[200];
+char buf955[200];
+char buf956[200];
+char buf957[200];
+char buf958[200];
+char buf959[200];
+char buf960[200];
+char buf961[200];
+char buf962[200];
+char buf963[200];
+char buf964[200];
+char buf965[200];
+char buf966[200];
+char buf967[200];
+char buf968[200];
+char buf969[200];
+char buf970[200];
+char buf971[200];
+char buf972[200];
+char buf973[200];
+char buf974[200];
+char buf975[200];
+char buf976[200];
+char buf977[200];
+char buf978[200];
+char buf979[200];
+char buf980[200];
+char buf981[200];
+char buf982[200];
+char buf983[200];
+char buf984[200];
+char buf985[200];
+char buf986[200];
+char buf987[200];
+char buf988[200];
+char buf989[200];
+char buf990[200];
+char buf991[200];
+char buf992[200];
+char buf993[200];
+char buf994[200];
+char buf995[200];
+char buf996[200];
+char buf997[200];
+char buf998[200];
+char buf999[200];
+char buf1000[200];
+char buf1001[200];
+char buf1002[200];
+char buf1003[200];
+char buf1004[200];
+char buf1005[200];
+char buf1006[200];
+char buf1007[200];
+char buf1008[200];
+char buf1009[200];
+char buf1010[200];
+char buf1011[200];
+char buf1012[200];
+char buf1013[200];
+char buf1014[200];
+char buf1015[200];
+char buf1016[200];
+char buf1017[200];
+char buf1018[200];
+char buf1019[200];
+char buf1020[200];
+char buf1021[200];
+char buf1022[200];
+char buf1023[200];
+char buf1024[200];
+char buf1025[200];
+char buf1026[200];
+char buf1027[200];
+char buf1028[200];
+char buf1029[200];
+char buf1030[200];
+char buf1031[200];
+char buf1032[200];
+char buf1033[200];
+char buf1034[200];
+char buf1035[200];
+char buf1036[200];
+char buf1037[200];
+char buf1038[200];
+char buf1039[200];
+char buf1040[200];
+char buf1041[200];
+char buf1042[200];
+char buf1043[200];
+char buf1044[200];
+char buf1045[200];
+char buf1046[200];
+char buf1047[200];
+char buf1048[200];
+char buf1049[200];
+char buf1050[200];
+char buf1051[200];
+char buf1052[200];
+char buf1053[200];
+char buf1054[200];
+char buf1055[200];
+char buf1056[200];
+char buf1057[200];
+char buf1058[200];
+char buf1059[200];
+char buf1060[200];
+char buf1061[200];
+char buf1062[200];
+char buf1063[200];
+char buf1064[200];
+char buf1065[200];
+char buf1066[200];
+char buf1067[200];
+char buf1068[200];
+char buf1069[200];
+char buf1070[200];
+char buf1071[200];
+char buf1072[200];
+char buf1073[200];
+char buf1074[200];
+char buf1075[200];
+char buf1076[200];
+char buf1077[200];
+char buf1078[200];
+char buf1079[200];
+char buf1080[200];
+char buf1081[200];
+char buf1082[200];
+char buf1083[200];
+char buf1084[200];
+char buf1085[200];
+char buf1086[200];
+char buf1087[200];
+char buf1088[200];
+char buf1089[200];
+char buf1090[200];
+char buf1091[200];
+char buf1092[200];
+char buf1093[200];
+char buf1094[200];
+char buf1095[200];
+char buf1096[200];
+char buf1097[200];
+char buf1098[200];
+char buf1099[200];
+char buf1100[200];
+char buf1101[200];
+char buf1102[200];
+char buf1103[200];
+char buf1104[200];
+char buf1105[200];
+char buf1106[200];
+char buf1107[200];
+char buf1108[200];
+char buf1109[200];
+char buf1110[200];
+char buf1111[200];
+char buf1112[200];
+char buf1113[200];
+char buf1114[200];
+char buf1115[200];
+char buf1116[200];
+char buf1117[200];
+char buf1118[200];
+char buf1119[200];
+char buf1120[200];
+char buf1121[200];
+char buf1122[200];
+char buf1123[200];
+char buf1124[200];
+char buf1125[200];
+char buf1126[200];
+char buf1127[200];
+char buf1128[200];
+char buf1129[200];
+char buf1130[200];
+char buf1131[200];
+char buf1132[200];
+char buf1133[200];
+char buf1134[200];
+char buf1135[200];
+char buf1136[200];
+char buf1137[200];
+char buf1138[200];
+char buf1139[200];
+char buf1140[200];
+char buf1141[200];
+char buf1142[200];
+char buf1143[200];
+char buf1144[200];
+char buf1145[200];
+char buf1146[200];
+char buf1147[200];
+char buf1148[200];
+char buf1149[200];
+char buf1150[200];
+char buf1151[200];
+char buf1152[200];
+char buf1153[200];
+char buf1154[200];
+char buf1155[200];
+char buf1156[200];
+char buf1157[200];
+char buf1158[200];
+char buf1159[200];
+char buf1160[200];
+char buf1161[200];
+char buf1162[200];
+char buf1163[200];
+char buf1164[200];
+char buf1165[200];
+char buf1166[200];
+char buf1167[200];
+char buf1168[200];
+char buf1169[200];
+char buf1170[200];
+char buf1171[200];
+char buf1172[200];
+char buf1173[200];
+char buf1174[200];
+char buf1175[200];
+char buf1176[200];
+char buf1177[200];
+char buf1178[200];
+char buf1179[200];
+char buf1180[200];
+char buf1181[200];
+char buf1182[200];
+char buf1183[200];
+char buf1184[200];
+char buf1185[200];
+char buf1186[200];
+char buf1187[200];
+char buf1188[200];
+char buf1189[200];
+char buf1190[200];
+char buf1191[200];
+char buf1192[200];
+char buf1193[200];
+char buf1194[200];
+char buf1195[200];
+char buf1196[200];
+char buf1197[200];
+char buf1198[200];
+char buf1199[200];
+char buf1200[200];
+char buf1201[200];
+char buf1202[200];
+char buf1203[200];
+char buf1204[200];
+char buf1205[200];
+char buf1206[200];
+char buf1207[200];
+char buf1208[200];
+char buf1209[200];
+char buf1210[200];
+char buf1211[200];
+char buf1212[200];
+char buf1213[200];
+char buf1214[200];
+char buf1215[200];
+char buf1216[200];
+char buf1217[200];
+char buf1218[200];
+char buf1219[200];
+char buf1220[200];
+char buf1221[200];
+char buf1222[200];
+char buf1223[200];
+char buf1224[200];
+char buf1225[200];
+char buf1226[200];
+char buf1227[200];
+char buf1228[200];
+char buf1229[200];
+char buf1230[200];
+char buf1231[200];
+char buf1232[200];
+char buf1233[200];
+char buf1234[200];
+char buf1235[200];
+char buf1236[200];
+char buf1237[200];
+char buf1238[200];
+char buf1239[200];
+char buf1240[200];
+char buf1241[200];
+char buf1242[200];
+char buf1243[200];
+char buf1244[200];
+char buf1245[200];
+char buf1246[200];
+char buf1247[200];
+char buf1248[200];
+char buf1249[200];
+char buf1250[200];
+char buf1251[200];
+char buf1252[200];
+char buf1253[200];
+char buf1254[200];
+char buf1255[200];
+char buf1256[200];
+char buf1257[200];
+char buf1258[200];
+char buf1259[200];
+char buf1260[200];
+char buf1261[200];
+char buf1262[200];
+char buf1263[200];
+char buf1264[200];
+char buf1265[200];
+char buf1266[200];
+char buf1267[200];
+char buf1268[200];
+char buf1269[200];
+char buf1270[200];
+char buf1271[200];
+char buf1272[200];
+char buf1273[200];
+char buf1274[200];
+char buf1275[200];
+char buf1276[200];
+char buf1277[200];
+char buf1278[200];
+char buf1279[200];
+char buf1280[200];
+char buf1281[200];
+char buf1282[200];
+char buf1283[200];
+char buf1284[200];
+char buf1285[200];
+char buf1286[200];
+char buf1287[200];
+char buf1288[200];
+char buf1289[200];
+char buf1290[200];
+char buf1291[200];
+char buf1292[200];
+char buf1293[200];
+char buf1294[200];
+char buf1295[200];
+char buf1296[200];
+char buf1297[200];
+char buf1298[200];
+char buf1299[200];
+char buf1300[200];
+char buf1301[200];
+char buf1302[200];
+char buf1303[200];
+char buf1304[200];
+char buf1305[200];
+char buf1306[200];
+char buf1307[200];
+char buf1308[200];
+char buf1309[200];
+char buf1310[200];
+char buf1311[200];
+char buf1312[200];
+char buf1313[200];
+char buf1314[200];
+char buf1315[200];
+char buf1316[200];
+char buf1317[200];
+char buf1318[200];
+char buf1319[200];
+char buf1320[200];
+char buf1321[200];
+char buf1322[200];
+char buf1323[200];
+char buf1324[200];
+char buf1325[200];
+char buf1326[200];
+char buf1327[200];
+char buf1328[200];
+char buf1329[200];
+char buf1330[200];
+char buf1331[200];
+char buf1332[200];
+char buf1333[200];
+char buf1334[200];
+char buf1335[200];
+char buf1336[200];
+char buf1337[200];
+char buf1338[200];
+char buf1339[200];
+char buf1340[200];
+char buf1341[200];
+char buf1342[200];
+char buf1343[200];
+char buf1344[200];
+char buf1345[200];
+char buf1346[200];
+char buf1347[200];
+char buf1348[200];
+char buf1349[200];
+char buf1350[200];
+char buf1351[200];
+char buf1352[200];
+char buf1353[200];
+char buf1354[200];
+char buf1355[200];
+char buf1356[200];
+char buf1357[200];
+char buf1358[200];
+char buf1359[200];
+char buf1360[200];
+char buf1361[200];
+char buf1362[200];
+char buf1363[200];
+char buf1364[200];
+char buf1365[200];
+char buf1366[200];
+char buf1367[200];
+char buf1368[200];
+char buf1369[200];
+char buf1370[200];
+char buf1371[200];
+char buf1372[200];
+char buf1373[200];
+char buf1374[200];
+char buf1375[200];
+char buf1376[200];
+char buf1377[200];
+char buf1378[200];
+char buf1379[200];
+char buf1380[200];
+char buf1381[200];
+char buf1382[200];
+char buf1383[200];
+char buf1384[200];
+char buf1385[200];
+char buf1386[200];
+char buf1387[200];
+char buf1388[200];
+char buf1389[200];
+char buf1390[200];
+char buf1391[200];
+char buf1392[200];
+char buf1393[200];
+char buf1394[200];
+char buf1395[200];
+char buf1396[200];
+char buf1397[200];
+char buf1398[200];
+char buf1399[200];
+char buf1400[200];
+char buf1401[200];
+char buf1402[200];
+char buf1403[200];
+char buf1404[200];
+char buf1405[200];
+char buf1406[200];
+char buf1407[200];
+char buf1408[200];
+char buf1409[200];
+char buf1410[200];
+char buf1411[200];
+char buf1412[200];
+char buf1413[200];
+char buf1414[200];
+char buf1415[200];
+char buf1416[200];
+char buf1417[200];
+char buf1418[200];
+char buf1419[200];
+char buf1420[200];
+char buf1421[200];
+char buf1422[200];
+char buf1423[200];
+char buf1424[200];
+char buf1425[200];
+char buf1426[200];
+char buf1427[200];
+char buf1428[200];
+char buf1429[200];
+char buf1430[200];
+char buf1431[200];
+char buf1432[200];
+char buf1433[200];
+char buf1434[200];
+char buf1435[200];
+char buf1436[200];
+char buf1437[200];
+char buf1438[200];
+char buf1439[200];
+char buf1440[200];
+char buf1441[200];
+char buf1442[200];
+char buf1443[200];
+char buf1444[200];
+char buf1445[200];
+char buf1446[200];
+char buf1447[200];
+char buf1448[200];
+char buf1449[200];
+char buf1450[200];
+char buf1451[200];
+char buf1452[200];
+char buf1453[200];
+char buf1454[200];
+char buf1455[200];
+char buf1456[200];
+char buf1457[200];
+char buf1458[200];
+char buf1459[200];
+char buf1460[200];
+char buf1461[200];
+char buf1462[200];
+char buf1463[200];
+char buf1464[200];
+char buf1465[200];
+char buf1466[200];
+char buf1467[200];
+char buf1468[200];
+char buf1469[200];
+char buf1470[200];
+char buf1471[200];
+char buf1472[200];
+char buf1473[200];
+char buf1474[200];
+char buf1475[200];
+char buf1476[200];
+char buf1477[200];
+char buf1478[200];
+char buf1479[200];
+char buf1480[200];
+char buf1481[200];
+char buf1482[200];
+char buf1483[200];
+char buf1484[200];
+char buf1485[200];
+char buf1486[200];
+char buf1487[200];
+char buf1488[200];
+char buf1489[200];
+char buf1490[200];
+char buf1491[200];
+char buf1492[200];
+char buf1493[200];
+char buf1494[200];
+char buf1495[200];
+char buf1496[200];
+char buf1497[200];
+char buf1498[200];
+char buf1499[200];
+char buf1500[200];
+char buf1501[200];
+char buf1502[200];
+char buf1503[200];
+char buf1504[200];
+char buf1505[200];
+char buf1506[200];
+char buf1507[200];
+char buf1508[200];
+char buf1509[200];
+char buf1510[200];
+char buf1511[200];
+char buf1512[200];
+char buf1513[200];
+char buf1514[200];
+char buf1515[200];
+char buf1516[200];
+char buf1517[200];
+char buf1518[200];
+char buf1519[200];
+char buf1520[200];
+char buf1521[200];
+char buf1522[200];
+char buf1523[200];
+char buf1524[200];
+char buf1525[200];
+char buf1526[200];
+char buf1527[200];
+char buf1528[200];
+char buf1529[200];
+char buf1530[200];
+char buf1531[200];
+char buf1532[200];
+char buf1533[200];
+char buf1534[200];
+char buf1535[200];
+char buf1536[200];
+char buf1537[200];
+char buf1538[200];
+char buf1539[200];
+char buf1540[200];
+char buf1541[200];
+char buf1542[200];
+char buf1543[200];
+char buf1544[200];
+char buf1545[200];
+char buf1546[200];
+char buf1547[200];
+char buf1548[200];
+char buf1549[200];
+char buf1550[200];
+char buf1551[200];
+char buf1552[200];
+char buf1553[200];
+char buf1554[200];
+char buf1555[200];
+char buf1556[200];
+char buf1557[200];
+char buf1558[200];
+char buf1559[200];
+char buf1560[200];
+char buf1561[200];
+char buf1562[200];
+char buf1563[200];
+char buf1564[200];
+char buf1565[200];
+char buf1566[200];
+char buf1567[200];
+char buf1568[200];
+char buf1569[200];
+char buf1570[200];
+char buf1571[200];
+char buf1572[200];
+char buf1573[200];
+char buf1574[200];
+char buf1575[200];
+char buf1576[200];
+char buf1577[200];
+char buf1578[200];
+char buf1579[200];
+char buf1580[200];
+char buf1581[200];
+char buf1582[200];
+char buf1583[200];
+char buf1584[200];
+char buf1585[200];
+char buf1586[200];
+char buf1587[200];
+char buf1588[200];
+char buf1589[200];
+char buf1590[200];
+char buf1591[200];
+char buf1592[200];
+char buf1593[200];
+char buf1594[200];
+char buf1595[200];
+char buf1596[200];
+char buf1597[200];
+char buf1598[200];
+char buf1599[200];
+char buf1600[200];
+char buf1601[200];
+char buf1602[200];
+char buf1603[200];
+char buf1604[200];
+char buf1605[200];
+char buf1606[200];
+char buf1607[200];
+char buf1608[200];
+char buf1609[200];
+char buf1610[200];
+char buf1611[200];
+char buf1612[200];
+char buf1613[200];
+char buf1614[200];
+char buf1615[200];
+char buf1616[200];
+char buf1617[200];
+char buf1618[200];
+char buf1619[200];
+char buf1620[200];
+char buf1621[200];
+char buf1622[200];
+char buf1623[200];
+char buf1624[200];
+char buf1625[200];
+char buf1626[200];
+char buf1627[200];
+char buf1628[200];
+char buf1629[200];
+char buf1630[200];
+char buf1631[200];
+char buf1632[200];
+char buf1633[200];
+char buf1634[200];
+char buf1635[200];
+char buf1636[200];
+char buf1637[200];
+char buf1638[200];
+char buf1639[200];
+char buf1640[200];
+char buf1641[200];
+char buf1642[200];
+char buf1643[200];
+char buf1644[200];
+char buf1645[200];
+char buf1646[200];
+char buf1647[200];
+char buf1648[200];
+char buf1649[200];
+char buf1650[200];
+char buf1651[200];
+char buf1652[200];
+char buf1653[200];
+char buf1654[200];
+char buf1655[200];
+char buf1656[200];
+char buf1657[200];
+char buf1658[200];
+char buf1659[200];
+char buf1660[200];
+char buf1661[200];
+char buf1662[200];
+char buf1663[200];
+char buf1664[200];
+char buf1665[200];
+char buf1666[200];
+char buf1667[200];
+char buf1668[200];
+char buf1669[200];
+char buf1670[200];
+char buf1671[200];
+char buf1672[200];
+char buf1673[200];
+char buf1674[200];
+char buf1675[200];
+char buf1676[200];
+char buf1677[200];
+char buf1678[200];
+char buf1679[200];
+char buf1680[200];
+char buf1681[200];
+char buf1682[200];
+char buf1683[200];
+char buf1684[200];
+char buf1685[200];
+char buf1686[200];
+char buf1687[200];
+char buf1688[200];
+char buf1689[200];
+char buf1690[200];
+char buf1691[200];
+char buf1692[200];
+char buf1693[200];
+char buf1694[200];
+char buf1695[200];
+char buf1696[200];
+char buf1697[200];
+char buf1698[200];
+char buf1699[200];
+char buf1700[200];
+char buf1701[200];
+char buf1702[200];
+char buf1703[200];
+char buf1704[200];
+char buf1705[200];
+char buf1706[200];
+char buf1707[200];
+char buf1708[200];
+char buf1709[200];
+char buf1710[200];
+char buf1711[200];
+char buf1712[200];
+char buf1713[200];
+char buf1714[200];
+char buf1715[200];
+char buf1716[200];
+char buf1717[200];
+char buf1718[200];
+char buf1719[200];
+char buf1720[200];
+char buf1721[200];
+char buf1722[200];
+char buf1723[200];
+char buf1724[200];
+char buf1725[200];
+char buf1726[200];
+char buf1727[200];
+char buf1728[200];
+char buf1729[200];
+char buf1730[200];
+char buf1731[200];
+char buf1732[200];
+char buf1733[200];
+char buf1734[200];
+char buf1735[200];
+char buf1736[200];
+char buf1737[200];
+char buf1738[200];
+char buf1739[200];
+char buf1740[200];
+char buf1741[200];
+char buf1742[200];
+char buf1743[200];
+char buf1744[200];
+char buf1745[200];
+char buf1746[200];
+char buf1747[200];
+char buf1748[200];
+char buf1749[200];
+char buf1750[200];
+char buf1751[200];
+char buf1752[200];
+char buf1753[200];
+char buf1754[200];
+char buf1755[200];
+char buf1756[200];
+char buf1757[200];
+char buf1758[200];
+char buf1759[200];
+char buf1760[200];
+char buf1761[200];
+char buf1762[200];
+char buf1763[200];
+char buf1764[200];
+char buf1765[200];
+char buf1766[200];
+char buf1767[200];
+char buf1768[200];
+char buf1769[200];
+char buf1770[200];
+char buf1771[200];
+char buf1772[200];
+char buf1773[200];
+char buf1774[200];
+char buf1775[200];
+char buf1776[200];
+char buf1777[200];
+char buf1778[200];
+char buf1779[200];
+char buf1780[200];
+char buf1781[200];
+char buf1782[200];
+char buf1783[200];
+char buf1784[200];
+char buf1785[200];
+char buf1786[200];
+char buf1787[200];
+char buf1788[200];
+char buf1789[200];
+char buf1790[200];
+char buf1791[200];
+char buf1792[200];
+char buf1793[200];
+char buf1794[200];
+char buf1795[200];
+char buf1796[200];
+char buf1797[200];
+char buf1798[200];
+char buf1799[200];
+char buf1800[200];
+char buf1801[200];
+char buf1802[200];
+char buf1803[200];
+char buf1804[200];
+char buf1805[200];
+char buf1806[200];
+char buf1807[200];
+char buf1808[200];
+char buf1809[200];
+char buf1810[200];
+char buf1811[200];
+char buf1812[200];
+char buf1813[200];
+char buf1814[200];
+char buf1815[200];
+char buf1816[200];
+char buf1817[200];
+char buf1818[200];
+char buf1819[200];
+char buf1820[200];
+char buf1821[200];
+char buf1822[200];
+char buf1823[200];
+char buf1824[200];
+char buf1825[200];
+char buf1826[200];
+char buf1827[200];
+char buf1828[200];
+char buf1829[200];
+char buf1830[200];
+char buf1831[200];
+char buf1832[200];
+char buf1833[200];
+char buf1834[200];
+char buf1835[200];
+char buf1836[200];
+char buf1837[200];
+char buf1838[200];
+char buf1839[200];
+char buf1840[200];
+char buf1841[200];
+char buf1842[200];
+char buf1843[200];
+char buf1844[200];
+char buf1845[200];
+char buf1846[200];
+char buf1847[200];
+char buf1848[200];
+char buf1849[200];
+char buf1850[200];
+char buf1851[200];
+char buf1852[200];
+char buf1853[200];
+char buf1854[200];
+char buf1855[200];
+char buf1856[200];
+char buf1857[200];
+char buf1858[200];
+char buf1859[200];
+char buf1860[200];
+char buf1861[200];
+char buf1862[200];
+char buf1863[200];
+char buf1864[200];
+char buf1865[200];
+char buf1866[200];
+char buf1867[200];
+char buf1868[200];
+char buf1869[200];
+char buf1870[200];
+char buf1871[200];
+char buf1872[200];
+char buf1873[200];
+char buf1874[200];
+char buf1875[200];
+char buf1876[200];
+char buf1877[200];
+char buf1878[200];
+char buf1879[200];
+char buf1880[200];
+char buf1881[200];
+char buf1882[200];
+char buf1883[200];
+char buf1884[200];
+char buf1885[200];
+char buf1886[200];
+char buf1887[200];
+char buf1888[200];
+char buf1889[200];
+char buf1890[200];
+char buf1891[200];
+char buf1892[200];
+char buf1893[200];
+char buf1894[200];
+char buf1895[200];
+char buf1896[200];
+char buf1897[200];
+char buf1898[200];
+char buf1899[200];
+char buf1900[200];
+char buf1901[200];
+char buf1902[200];
+char buf1903[200];
+char buf1904[200];
+char buf1905[200];
+char buf1906[200];
+char buf1907[200];
+char buf1908[200];
+char buf1909[200];
+char buf1910[200];
+char buf1911[200];
+char buf1912[200];
+char buf1913[200];
+char buf1914[200];
+char buf1915[200];
+char buf1916[200];
+char buf1917[200];
+char buf1918[200];
+char buf1919[200];
+char buf1920[200];
+char buf1921[200];
+char buf1922[200];
+char buf1923[200];
+char buf1924[200];
+char buf1925[200];
+char buf1926[200];
+char buf1927[200];
+char buf1928[200];
+char buf1929[200];
+char buf1930[200];
+char buf1931[200];
+char buf1932[200];
+char buf1933[200];
+char buf1934[200];
+char buf1935[200];
+char buf1936[200];
+char buf1937[200];
+char buf1938[200];
+char buf1939[200];
+char buf1940[200];
+char buf1941[200];
+char buf1942[200];
+char buf1943[200];
+char buf1944[200];
+char buf1945[200];
+char buf1946[200];
+char buf1947[200];
+char buf1948[200];
+char buf1949[200];
+char buf1950[200];
+char buf1951[200];
+char buf1952[200];
+char buf1953[200];
+char buf1954[200];
+char buf1955[200];
+char buf1956[200];
+char buf1957[200];
+char buf1958[200];
+char buf1959[200];
+char buf1960[200];
+char buf1961[200];
+char buf1962[200];
+char buf1963[200];
+char buf1964[200];
+char buf1965[200];
+char buf1966[200];
+char buf1967[200];
+char buf1968[200];
+char buf1969[200];
+char buf1970[200];
+char buf1971[200];
+char buf1972[200];
+char buf1973[200];
+char buf1974[200];
+char buf1975[200];
+char buf1976[200];
+char buf1977[200];
+char buf1978[200];
+char buf1979[200];
+char buf1980[200];
+char buf1981[200];
+char buf1982[200];
+char buf1983[200];
+char buf1984[200];
+char buf1985[200];
+char buf1986[200];
+char buf1987[200];
+char buf1988[200];
+char buf1989[200];
+char buf1990[200];
+char buf1991[200];
+char buf1992[200];
+char buf1993[200];
+char buf1994[200];
+char buf1995[200];
+char buf1996[200];
+char buf1997[200];
+char buf1998[200];
+char buf1999[200];
+char buf2000[200];
+char buf2001[200];
+char buf2002[200];
+char buf2003[200];
+char buf2004[200];
+char buf2005[200];
+char buf2006[200];
+char buf2007[200];
+char buf2008[200];
+char buf2009[200];
+char buf2010[200];
+char buf2011[200];
+char buf2012[200];
+char buf2013[200];
+char buf2014[200];
+char buf2015[200];
+char buf2016[200];
+char buf2017[200];
+char buf2018[200];
+char buf2019[200];
+char buf2020[200];
+char buf2021[200];
+char buf2022[200];
+char buf2023[200];
+char buf2024[200];
+char buf2025[200];
+char buf2026[200];
+char buf2027[200];
+char buf2028[200];
+char buf2029[200];
+char buf2030[200];
+char buf2031[200];
+char buf2032[200];
+char buf2033[200];
+char buf2034[200];
+char buf2035[200];
+char buf2036[200];
+char buf2037[200];
+char buf2038[200];
+char buf2039[200];
+char buf2040[200];
+char buf2041[200];
+char buf2042[200];
+char buf2043[200];
+char buf2044[200];
+char buf2045[200];
+char buf2046[200];
+char buf2047[200];
+char buf2048[200];
+char buf2049[200];
+char buf2050[200];
+char buf2051[200];
+char buf2052[200];
+char buf2053[200];
+char buf2054[200];
+char buf2055[200];
+char buf2056[200];
+char buf2057[200];
+char buf2058[200];
+char buf2059[200];
+char buf2060[200];
+char buf2061[200];
+char buf2062[200];
+char buf2063[200];
+char buf2064[200];
+char buf2065[200];
+char buf2066[200];
+char buf2067[200];
+char buf2068[200];
+char buf2069[200];
+char buf2070[200];
+char buf2071[200];
+char buf2072[200];
+char buf2073[200];
+char buf2074[200];
+char buf2075[200];
+char buf2076[200];
+char buf2077[200];
+char buf2078[200];
+char buf2079[200];
+char buf2080[200];
+char buf2081[200];
+char buf2082[200];
+char buf2083[200];
+char buf2084[200];
+char buf2085[200];
+char buf2086[200];
+char buf2087[200];
+char buf2088[200];
+char buf2089[200];
+char buf2090[200];
+char buf2091[200];
+char buf2092[200];
+char buf2093[200];
+char buf2094[200];
+char buf2095[200];
+char buf2096[200];
+char buf2097[200];
+char buf2098[200];
+char buf2099[200];
+char buf2100[200];
+char buf2101[200];
+char buf2102[200];
+char buf2103[200];
+char buf2104[200];
+char buf2105[200];
+char buf2106[200];
+char buf2107[200];
+char buf2108[200];
+char buf2109[200];
+char buf2110[200];
+char buf2111[200];
+char buf2112[200];
+char buf2113[200];
+char buf2114[200];
+char buf2115[200];
+char buf2116[200];
+char buf2117[200];
+char buf2118[200];
+char buf2119[200];
+char buf2120[200];
+char buf2121[200];
+char buf2122[200];
+char buf2123[200];
+char buf2124[200];
+char buf2125[200];
+char buf2126[200];
+char buf2127[200];
+char buf2128[200];
+char buf2129[200];
+char buf2130[200];
+char buf2131[200];
+char buf2132[200];
+char buf2133[200];
+char buf2134[200];
+char buf2135[200];
+char buf2136[200];
+char buf2137[200];
+char buf2138[200];
+char buf2139[200];
+char buf2140[200];
+char buf2141[200];
+char buf2142[200];
+char buf2143[200];
+char buf2144[200];
+char buf2145[200];
+char buf2146[200];
+char buf2147[200];
+char buf2148[200];
+char buf2149[200];
+char buf2150[200];
+char buf2151[200];
+char buf2152[200];
+char buf2153[200];
+char buf2154[200];
+char buf2155[200];
+char buf2156[200];
+char buf2157[200];
+char buf2158[200];
+char buf2159[200];
+char buf2160[200];
+char buf2161[200];
+char buf2162[200];
+char buf2163[200];
+char buf2164[200];
+char buf2165[200];
+char buf2166[200];
+char buf2167[200];
+char buf2168[200];
+char buf2169[200];
+char buf2170[200];
+char buf2171[200];
+char buf2172[200];
+char buf2173[200];
+char buf2174[200];
+char buf2175[200];
+char buf2176[200];
+char buf2177[200];
+char buf2178[200];
+char buf2179[200];
+char buf2180[200];
+char buf2181[200];
+char buf2182[200];
+char buf2183[200];
+char buf2184[200];
+char buf2185[200];
+char buf2186[200];
+char buf2187[200];
+char buf2188[200];
+char buf2189[200];
+char buf2190[200];
+char buf2191[200];
+char buf2192[200];
+char buf2193[200];
+char buf2194[200];
+char buf2195[200];
+char buf2196[200];
+char buf2197[200];
+char buf2198[200];
+char buf2199[200];
+char buf2200[200];
+char buf2201[200];
+char buf2202[200];
+char buf2203[200];
+char buf2204[200];
+char buf2205[200];
+char buf2206[200];
+char buf2207[200];
+char buf2208[200];
+char buf2209[200];
+char buf2210[200];
+char buf2211[200];
+char buf2212[200];
+char buf2213[200];
+char buf2214[200];
+char buf2215[200];
+char buf2216[200];
+char buf2217[200];
+char buf2218[200];
+char buf2219[200];
+char buf2220[200];
+char buf2221[200];
+char buf2222[200];
+char buf2223[200];
+char buf2224[200];
+char buf2225[200];
+char buf2226[200];
+char buf2227[200];
+char buf2228[200];
+char buf2229[200];
+char buf2230[200];
+char buf2231[200];
+char buf2232[200];
+char buf2233[200];
+char buf2234[200];
+char buf2235[200];
+char buf2236[200];
+char buf2237[200];
+char buf2238[200];
+char buf2239[200];
+char buf2240[200];
+char buf2241[200];
+char buf2242[200];
+char buf2243[200];
+char buf2244[200];
+char buf2245[200];
+char buf2246[200];
+char buf2247[200];
+char buf2248[200];
+char buf2249[200];
+char buf2250[200];
+char buf2251[200];
+char buf2252[200];
+char buf2253[200];
+char buf2254[200];
+char buf2255[200];
+char buf2256[200];
+char buf2257[200];
+char buf2258[200];
+char buf2259[200];
+char buf2260[200];
+char buf2261[200];
+char buf2262[200];
+char buf2263[200];
+char buf2264[200];
+char buf2265[200];
+char buf2266[200];
+char buf2267[200];
+char buf2268[200];
+char buf2269[200];
+char buf2270[200];
+char buf2271[200];
+char buf2272[200];
+char buf2273[200];
+char buf2274[200];
+char buf2275[200];
+char buf2276[200];
+char buf2277[200];
+char buf2278[200];
+char buf2279[200];
+char buf2280[200];
+char buf2281[200];
+char buf2282[200];
+char buf2283[200];
+char buf2284[200];
+char buf2285[200];
+char buf2286[200];
+char buf2287[200];
+char buf2288[200];
+char buf2289[200];
+char buf2290[200];
+char buf2291[200];
+char buf2292[200];
+char buf2293[200];
+char buf2294[200];
+char buf2295[200];
+char buf2296[200];
+char buf2297[200];
+char buf2298[200];
+char buf2299[200];
+char buf2300[200];
+char buf2301[200];
+char buf2302[200];
+char buf2303[200];
+char buf2304[200];
+char buf2305[200];
+char buf2306[200];
+char buf2307[200];
+char buf2308[200];
+char buf2309[200];
+char buf2310[200];
+char buf2311[200];
+char buf2312[200];
+char buf2313[200];
+char buf2314[200];
+char buf2315[200];
+char buf2316[200];
+char buf2317[200];
+char buf2318[200];
+char buf2319[200];
+char buf2320[200];
+char buf2321[200];
+char buf2322[200];
+char buf2323[200];
+char buf2324[200];
+char buf2325[200];
+char buf2326[200];
+char buf2327[200];
+char buf2328[200];
+char buf2329[200];
+char buf2330[200];
+
+void root(const int* in) {
+    *(uchar*)buf0 = abs(*(char*)buf1);
+    *(uchar2*)buf2 = abs(*(char2*)buf3);
+    *(uchar3*)buf4 = abs(*(char3*)buf5);
+    *(uchar4*)buf6 = abs(*(char4*)buf7);
+    *(ushort*)buf8 = abs(*(short*)buf9);
+    *(ushort2*)buf10 = abs(*(short2*)buf11);
+    *(ushort3*)buf12 = abs(*(short3*)buf13);
+    *(ushort4*)buf14 = abs(*(short4*)buf15);
+    *(uint*)buf16 = abs(*(int*)buf17);
+    *(uint2*)buf18 = abs(*(int2*)buf19);
+    *(uint3*)buf20 = abs(*(int3*)buf21);
+    *(uint4*)buf22 = abs(*(int4*)buf23);
+    *(float*)buf24 = acos(*(float*)buf25);
+    *(float2*)buf26 = acos(*(float2*)buf27);
+    *(float3*)buf28 = acos(*(float3*)buf29);
+    *(float4*)buf30 = acos(*(float4*)buf31);
+    *(float*)buf32 = acosh(*(float*)buf33);
+    *(float2*)buf34 = acosh(*(float2*)buf35);
+    *(float3*)buf36 = acosh(*(float3*)buf37);
+    *(float4*)buf38 = acosh(*(float4*)buf39);
+    *(float*)buf40 = acospi(*(float*)buf41);
+    *(float2*)buf42 = acospi(*(float2*)buf43);
+    *(float3*)buf44 = acospi(*(float3*)buf45);
+    *(float4*)buf46 = acospi(*(float4*)buf47);
+    *(float*)buf48 = asin(*(float*)buf49);
+    *(float2*)buf50 = asin(*(float2*)buf51);
+    *(float3*)buf52 = asin(*(float3*)buf53);
+    *(float4*)buf54 = asin(*(float4*)buf55);
+    *(float*)buf56 = asinh(*(float*)buf57);
+    *(float2*)buf58 = asinh(*(float2*)buf59);
+    *(float3*)buf60 = asinh(*(float3*)buf61);
+    *(float4*)buf62 = asinh(*(float4*)buf63);
+    *(float*)buf64 = asinpi(*(float*)buf65);
+    *(float2*)buf66 = asinpi(*(float2*)buf67);
+    *(float3*)buf68 = asinpi(*(float3*)buf69);
+    *(float4*)buf70 = asinpi(*(float4*)buf71);
+    *(float*)buf72 = atan(*(float*)buf73);
+    *(float2*)buf74 = atan(*(float2*)buf75);
+    *(float3*)buf76 = atan(*(float3*)buf77);
+    *(float4*)buf78 = atan(*(float4*)buf79);
+    *(float*)buf80 = atan2(*(float*)buf81, *(float*)buf82);
+    *(float2*)buf83 = atan2(*(float2*)buf84, *(float2*)buf85);
+    *(float3*)buf86 = atan2(*(float3*)buf87, *(float3*)buf88);
+    *(float4*)buf89 = atan2(*(float4*)buf90, *(float4*)buf91);
+    *(float*)buf92 = atan2pi(*(float*)buf93, *(float*)buf94);
+    *(float2*)buf95 = atan2pi(*(float2*)buf96, *(float2*)buf97);
+    *(float3*)buf98 = atan2pi(*(float3*)buf99, *(float3*)buf100);
+    *(float4*)buf101 = atan2pi(*(float4*)buf102, *(float4*)buf103);
+    *(float*)buf104 = atanh(*(float*)buf105);
+    *(float2*)buf106 = atanh(*(float2*)buf107);
+    *(float3*)buf108 = atanh(*(float3*)buf109);
+    *(float4*)buf110 = atanh(*(float4*)buf111);
+    *(float*)buf112 = atanpi(*(float*)buf113);
+    *(float2*)buf114 = atanpi(*(float2*)buf115);
+    *(float3*)buf116 = atanpi(*(float3*)buf117);
+    *(float4*)buf118 = atanpi(*(float4*)buf119);
+    *(float*)buf120 = cbrt(*(float*)buf121);
+    *(float2*)buf122 = cbrt(*(float2*)buf123);
+    *(float3*)buf124 = cbrt(*(float3*)buf125);
+    *(float4*)buf126 = cbrt(*(float4*)buf127);
+    *(float*)buf128 = ceil(*(float*)buf129);
+    *(float2*)buf130 = ceil(*(float2*)buf131);
+    *(float3*)buf132 = ceil(*(float3*)buf133);
+    *(float4*)buf134 = ceil(*(float4*)buf135);
+    *(float*)buf136 = clamp(*(float*)buf137, *(float*)buf138, *(float*)buf139);
+    *(float2*)buf140 = clamp(*(float2*)buf141, *(float2*)buf142, *(float2*)buf143);
+    *(float3*)buf144 = clamp(*(float3*)buf145, *(float3*)buf146, *(float3*)buf147);
+    *(float4*)buf148 = clamp(*(float4*)buf149, *(float4*)buf150, *(float4*)buf151);
+    *(float2*)buf152 = clamp(*(float2*)buf153, *(float*)buf154, *(float*)buf155);
+    *(float3*)buf156 = clamp(*(float3*)buf157, *(float*)buf158, *(float*)buf159);
+    *(float4*)buf160 = clamp(*(float4*)buf161, *(float*)buf162, *(float*)buf163);
+    *(char*)buf164 = clz(*(char*)buf165);
+    *(char2*)buf166 = clz(*(char2*)buf167);
+    *(char3*)buf168 = clz(*(char3*)buf169);
+    *(char4*)buf170 = clz(*(char4*)buf171);
+    *(uchar*)buf172 = clz(*(uchar*)buf173);
+    *(uchar2*)buf174 = clz(*(uchar2*)buf175);
+    *(uchar3*)buf176 = clz(*(uchar3*)buf177);
+    *(uchar4*)buf178 = clz(*(uchar4*)buf179);
+    *(short*)buf180 = clz(*(short*)buf181);
+    *(short2*)buf182 = clz(*(short2*)buf183);
+    *(short3*)buf184 = clz(*(short3*)buf185);
+    *(short4*)buf186 = clz(*(short4*)buf187);
+    *(ushort*)buf188 = clz(*(ushort*)buf189);
+    *(ushort2*)buf190 = clz(*(ushort2*)buf191);
+    *(ushort3*)buf192 = clz(*(ushort3*)buf193);
+    *(ushort4*)buf194 = clz(*(ushort4*)buf195);
+    *(int*)buf196 = clz(*(int*)buf197);
+    *(int2*)buf198 = clz(*(int2*)buf199);
+    *(int3*)buf200 = clz(*(int3*)buf201);
+    *(int4*)buf202 = clz(*(int4*)buf203);
+    *(uint*)buf204 = clz(*(uint*)buf205);
+    *(uint2*)buf206 = clz(*(uint2*)buf207);
+    *(uint3*)buf208 = clz(*(uint3*)buf209);
+    *(uint4*)buf210 = clz(*(uint4*)buf211);
+    *(float2*)buf212 = convert_float2(*(float2*)buf213);
+    *(float3*)buf214 = convert_float3(*(float3*)buf215);
+    *(float4*)buf216 = convert_float4(*(float4*)buf217);
+    *(float2*)buf218 = convert_float2(*(char2*)buf219);
+    *(float3*)buf220 = convert_float3(*(char3*)buf221);
+    *(float4*)buf222 = convert_float4(*(char4*)buf223);
+    *(float2*)buf224 = convert_float2(*(uchar2*)buf225);
+    *(float3*)buf226 = convert_float3(*(uchar3*)buf227);
+    *(float4*)buf228 = convert_float4(*(uchar4*)buf229);
+    *(float2*)buf230 = convert_float2(*(short2*)buf231);
+    *(float3*)buf232 = convert_float3(*(short3*)buf233);
+    *(float4*)buf234 = convert_float4(*(short4*)buf235);
+    *(float2*)buf236 = convert_float2(*(ushort2*)buf237);
+    *(float3*)buf238 = convert_float3(*(ushort3*)buf239);
+    *(float4*)buf240 = convert_float4(*(ushort4*)buf241);
+    *(float2*)buf242 = convert_float2(*(int2*)buf243);
+    *(float3*)buf244 = convert_float3(*(int3*)buf245);
+    *(float4*)buf246 = convert_float4(*(int4*)buf247);
+    *(float2*)buf248 = convert_float2(*(uint2*)buf249);
+    *(float3*)buf250 = convert_float3(*(uint3*)buf251);
+    *(float4*)buf252 = convert_float4(*(uint4*)buf253);
+    *(char2*)buf254 = convert_char2(*(float2*)buf255);
+    *(char3*)buf256 = convert_char3(*(float3*)buf257);
+    *(char4*)buf258 = convert_char4(*(float4*)buf259);
+    *(char2*)buf260 = convert_char2(*(char2*)buf261);
+    *(char3*)buf262 = convert_char3(*(char3*)buf263);
+    *(char4*)buf264 = convert_char4(*(char4*)buf265);
+    *(char2*)buf266 = convert_char2(*(uchar2*)buf267);
+    *(char3*)buf268 = convert_char3(*(uchar3*)buf269);
+    *(char4*)buf270 = convert_char4(*(uchar4*)buf271);
+    *(char2*)buf272 = convert_char2(*(short2*)buf273);
+    *(char3*)buf274 = convert_char3(*(short3*)buf275);
+    *(char4*)buf276 = convert_char4(*(short4*)buf277);
+    *(char2*)buf278 = convert_char2(*(ushort2*)buf279);
+    *(char3*)buf280 = convert_char3(*(ushort3*)buf281);
+    *(char4*)buf282 = convert_char4(*(ushort4*)buf283);
+    *(char2*)buf284 = convert_char2(*(int2*)buf285);
+    *(char3*)buf286 = convert_char3(*(int3*)buf287);
+    *(char4*)buf288 = convert_char4(*(int4*)buf289);
+    *(char2*)buf290 = convert_char2(*(uint2*)buf291);
+    *(char3*)buf292 = convert_char3(*(uint3*)buf293);
+    *(char4*)buf294 = convert_char4(*(uint4*)buf295);
+    *(uchar2*)buf296 = convert_uchar2(*(float2*)buf297);
+    *(uchar3*)buf298 = convert_uchar3(*(float3*)buf299);
+    *(uchar4*)buf300 = convert_uchar4(*(float4*)buf301);
+    *(uchar2*)buf302 = convert_uchar2(*(char2*)buf303);
+    *(uchar3*)buf304 = convert_uchar3(*(char3*)buf305);
+    *(uchar4*)buf306 = convert_uchar4(*(char4*)buf307);
+    *(uchar2*)buf308 = convert_uchar2(*(uchar2*)buf309);
+    *(uchar3*)buf310 = convert_uchar3(*(uchar3*)buf311);
+    *(uchar4*)buf312 = convert_uchar4(*(uchar4*)buf313);
+    *(uchar2*)buf314 = convert_uchar2(*(short2*)buf315);
+    *(uchar3*)buf316 = convert_uchar3(*(short3*)buf317);
+    *(uchar4*)buf318 = convert_uchar4(*(short4*)buf319);
+    *(uchar2*)buf320 = convert_uchar2(*(ushort2*)buf321);
+    *(uchar3*)buf322 = convert_uchar3(*(ushort3*)buf323);
+    *(uchar4*)buf324 = convert_uchar4(*(ushort4*)buf325);
+    *(uchar2*)buf326 = convert_uchar2(*(int2*)buf327);
+    *(uchar3*)buf328 = convert_uchar3(*(int3*)buf329);
+    *(uchar4*)buf330 = convert_uchar4(*(int4*)buf331);
+    *(uchar2*)buf332 = convert_uchar2(*(uint2*)buf333);
+    *(uchar3*)buf334 = convert_uchar3(*(uint3*)buf335);
+    *(uchar4*)buf336 = convert_uchar4(*(uint4*)buf337);
+    *(short2*)buf338 = convert_short2(*(float2*)buf339);
+    *(short3*)buf340 = convert_short3(*(float3*)buf341);
+    *(short4*)buf342 = convert_short4(*(float4*)buf343);
+    *(short2*)buf344 = convert_short2(*(char2*)buf345);
+    *(short3*)buf346 = convert_short3(*(char3*)buf347);
+    *(short4*)buf348 = convert_short4(*(char4*)buf349);
+    *(short2*)buf350 = convert_short2(*(uchar2*)buf351);
+    *(short3*)buf352 = convert_short3(*(uchar3*)buf353);
+    *(short4*)buf354 = convert_short4(*(uchar4*)buf355);
+    *(short2*)buf356 = convert_short2(*(short2*)buf357);
+    *(short3*)buf358 = convert_short3(*(short3*)buf359);
+    *(short4*)buf360 = convert_short4(*(short4*)buf361);
+    *(short2*)buf362 = convert_short2(*(ushort2*)buf363);
+    *(short3*)buf364 = convert_short3(*(ushort3*)buf365);
+    *(short4*)buf366 = convert_short4(*(ushort4*)buf367);
+    *(short2*)buf368 = convert_short2(*(int2*)buf369);
+    *(short3*)buf370 = convert_short3(*(int3*)buf371);
+    *(short4*)buf372 = convert_short4(*(int4*)buf373);
+    *(short2*)buf374 = convert_short2(*(uint2*)buf375);
+    *(short3*)buf376 = convert_short3(*(uint3*)buf377);
+    *(short4*)buf378 = convert_short4(*(uint4*)buf379);
+    *(ushort2*)buf380 = convert_ushort2(*(float2*)buf381);
+    *(ushort3*)buf382 = convert_ushort3(*(float3*)buf383);
+    *(ushort4*)buf384 = convert_ushort4(*(float4*)buf385);
+    *(ushort2*)buf386 = convert_ushort2(*(char2*)buf387);
+    *(ushort3*)buf388 = convert_ushort3(*(char3*)buf389);
+    *(ushort4*)buf390 = convert_ushort4(*(char4*)buf391);
+    *(ushort2*)buf392 = convert_ushort2(*(uchar2*)buf393);
+    *(ushort3*)buf394 = convert_ushort3(*(uchar3*)buf395);
+    *(ushort4*)buf396 = convert_ushort4(*(uchar4*)buf397);
+    *(ushort2*)buf398 = convert_ushort2(*(short2*)buf399);
+    *(ushort3*)buf400 = convert_ushort3(*(short3*)buf401);
+    *(ushort4*)buf402 = convert_ushort4(*(short4*)buf403);
+    *(ushort2*)buf404 = convert_ushort2(*(ushort2*)buf405);
+    *(ushort3*)buf406 = convert_ushort3(*(ushort3*)buf407);
+    *(ushort4*)buf408 = convert_ushort4(*(ushort4*)buf409);
+    *(ushort2*)buf410 = convert_ushort2(*(int2*)buf411);
+    *(ushort3*)buf412 = convert_ushort3(*(int3*)buf413);
+    *(ushort4*)buf414 = convert_ushort4(*(int4*)buf415);
+    *(ushort2*)buf416 = convert_ushort2(*(uint2*)buf417);
+    *(ushort3*)buf418 = convert_ushort3(*(uint3*)buf419);
+    *(ushort4*)buf420 = convert_ushort4(*(uint4*)buf421);
+    *(int2*)buf422 = convert_int2(*(float2*)buf423);
+    *(int3*)buf424 = convert_int3(*(float3*)buf425);
+    *(int4*)buf426 = convert_int4(*(float4*)buf427);
+    *(int2*)buf428 = convert_int2(*(char2*)buf429);
+    *(int3*)buf430 = convert_int3(*(char3*)buf431);
+    *(int4*)buf432 = convert_int4(*(char4*)buf433);
+    *(int2*)buf434 = convert_int2(*(uchar2*)buf435);
+    *(int3*)buf436 = convert_int3(*(uchar3*)buf437);
+    *(int4*)buf438 = convert_int4(*(uchar4*)buf439);
+    *(int2*)buf440 = convert_int2(*(short2*)buf441);
+    *(int3*)buf442 = convert_int3(*(short3*)buf443);
+    *(int4*)buf444 = convert_int4(*(short4*)buf445);
+    *(int2*)buf446 = convert_int2(*(ushort2*)buf447);
+    *(int3*)buf448 = convert_int3(*(ushort3*)buf449);
+    *(int4*)buf450 = convert_int4(*(ushort4*)buf451);
+    *(int2*)buf452 = convert_int2(*(int2*)buf453);
+    *(int3*)buf454 = convert_int3(*(int3*)buf455);
+    *(int4*)buf456 = convert_int4(*(int4*)buf457);
+    *(int2*)buf458 = convert_int2(*(uint2*)buf459);
+    *(int3*)buf460 = convert_int3(*(uint3*)buf461);
+    *(int4*)buf462 = convert_int4(*(uint4*)buf463);
+    *(uint2*)buf464 = convert_uint2(*(float2*)buf465);
+    *(uint3*)buf466 = convert_uint3(*(float3*)buf467);
+    *(uint4*)buf468 = convert_uint4(*(float4*)buf469);
+    *(uint2*)buf470 = convert_uint2(*(char2*)buf471);
+    *(uint3*)buf472 = convert_uint3(*(char3*)buf473);
+    *(uint4*)buf474 = convert_uint4(*(char4*)buf475);
+    *(uint2*)buf476 = convert_uint2(*(uchar2*)buf477);
+    *(uint3*)buf478 = convert_uint3(*(uchar3*)buf479);
+    *(uint4*)buf480 = convert_uint4(*(uchar4*)buf481);
+    *(uint2*)buf482 = convert_uint2(*(short2*)buf483);
+    *(uint3*)buf484 = convert_uint3(*(short3*)buf485);
+    *(uint4*)buf486 = convert_uint4(*(short4*)buf487);
+    *(uint2*)buf488 = convert_uint2(*(ushort2*)buf489);
+    *(uint3*)buf490 = convert_uint3(*(ushort3*)buf491);
+    *(uint4*)buf492 = convert_uint4(*(ushort4*)buf493);
+    *(uint2*)buf494 = convert_uint2(*(int2*)buf495);
+    *(uint3*)buf496 = convert_uint3(*(int3*)buf497);
+    *(uint4*)buf498 = convert_uint4(*(int4*)buf499);
+    *(uint2*)buf500 = convert_uint2(*(uint2*)buf501);
+    *(uint3*)buf502 = convert_uint3(*(uint3*)buf503);
+    *(uint4*)buf504 = convert_uint4(*(uint4*)buf505);
+    *(float*)buf506 = copysign(*(float*)buf507, *(float*)buf508);
+    *(float2*)buf509 = copysign(*(float2*)buf510, *(float2*)buf511);
+    *(float3*)buf512 = copysign(*(float3*)buf513, *(float3*)buf514);
+    *(float4*)buf515 = copysign(*(float4*)buf516, *(float4*)buf517);
+    *(float*)buf518 = cos(*(float*)buf519);
+    *(float2*)buf520 = cos(*(float2*)buf521);
+    *(float3*)buf522 = cos(*(float3*)buf523);
+    *(float4*)buf524 = cos(*(float4*)buf525);
+    *(float*)buf526 = cosh(*(float*)buf527);
+    *(float2*)buf528 = cosh(*(float2*)buf529);
+    *(float3*)buf530 = cosh(*(float3*)buf531);
+    *(float4*)buf532 = cosh(*(float4*)buf533);
+    *(float*)buf534 = cospi(*(float*)buf535);
+    *(float2*)buf536 = cospi(*(float2*)buf537);
+    *(float3*)buf538 = cospi(*(float3*)buf539);
+    *(float4*)buf540 = cospi(*(float4*)buf541);
+    *(float3*)buf542 = cross(*(float3*)buf543, *(float3*)buf544);
+    *(float4*)buf545 = cross(*(float4*)buf546, *(float4*)buf547);
+    *(float*)buf548 = degrees(*(float*)buf549);
+    *(float2*)buf550 = degrees(*(float2*)buf551);
+    *(float3*)buf552 = degrees(*(float3*)buf553);
+    *(float4*)buf554 = degrees(*(float4*)buf555);
+    *(float*)buf556 = distance(*(float*)buf557, *(float*)buf558);
+    *(float*)buf559 = distance(*(float2*)buf560, *(float2*)buf561);
+    *(float*)buf562 = distance(*(float3*)buf563, *(float3*)buf564);
+    *(float*)buf565 = distance(*(float4*)buf566, *(float4*)buf567);
+    *(float*)buf568 = dot(*(float*)buf569, *(float*)buf570);
+    *(float*)buf571 = dot(*(float2*)buf572, *(float2*)buf573);
+    *(float*)buf574 = dot(*(float3*)buf575, *(float3*)buf576);
+    *(float*)buf577 = dot(*(float4*)buf578, *(float4*)buf579);
+    *(float*)buf580 = erf(*(float*)buf581);
+    *(float2*)buf582 = erf(*(float2*)buf583);
+    *(float3*)buf584 = erf(*(float3*)buf585);
+    *(float4*)buf586 = erf(*(float4*)buf587);
+    *(float*)buf588 = erfc(*(float*)buf589);
+    *(float2*)buf590 = erfc(*(float2*)buf591);
+    *(float3*)buf592 = erfc(*(float3*)buf593);
+    *(float4*)buf594 = erfc(*(float4*)buf595);
+    *(float*)buf596 = exp(*(float*)buf597);
+    *(float2*)buf598 = exp(*(float2*)buf599);
+    *(float3*)buf600 = exp(*(float3*)buf601);
+    *(float4*)buf602 = exp(*(float4*)buf603);
+    *(float*)buf604 = exp10(*(float*)buf605);
+    *(float2*)buf606 = exp10(*(float2*)buf607);
+    *(float3*)buf608 = exp10(*(float3*)buf609);
+    *(float4*)buf610 = exp10(*(float4*)buf611);
+    *(float*)buf612 = exp2(*(float*)buf613);
+    *(float2*)buf614 = exp2(*(float2*)buf615);
+    *(float3*)buf616 = exp2(*(float3*)buf617);
+    *(float4*)buf618 = exp2(*(float4*)buf619);
+    *(float*)buf620 = expm1(*(float*)buf621);
+    *(float2*)buf622 = expm1(*(float2*)buf623);
+    *(float3*)buf624 = expm1(*(float3*)buf625);
+    *(float4*)buf626 = expm1(*(float4*)buf627);
+    *(float*)buf628 = fabs(*(float*)buf629);
+    *(float2*)buf630 = fabs(*(float2*)buf631);
+    *(float3*)buf632 = fabs(*(float3*)buf633);
+    *(float4*)buf634 = fabs(*(float4*)buf635);
+    *(float*)buf636 = fdim(*(float*)buf637, *(float*)buf638);
+    *(float2*)buf639 = fdim(*(float2*)buf640, *(float2*)buf641);
+    *(float3*)buf642 = fdim(*(float3*)buf643, *(float3*)buf644);
+    *(float4*)buf645 = fdim(*(float4*)buf646, *(float4*)buf647);
+    *(float*)buf648 = floor(*(float*)buf649);
+    *(float2*)buf650 = floor(*(float2*)buf651);
+    *(float3*)buf652 = floor(*(float3*)buf653);
+    *(float4*)buf654 = floor(*(float4*)buf655);
+    *(float*)buf656 = fma(*(float*)buf657, *(float*)buf658, *(float*)buf659);
+    *(float2*)buf660 = fma(*(float2*)buf661, *(float2*)buf662, *(float2*)buf663);
+    *(float3*)buf664 = fma(*(float3*)buf665, *(float3*)buf666, *(float3*)buf667);
+    *(float4*)buf668 = fma(*(float4*)buf669, *(float4*)buf670, *(float4*)buf671);
+    *(float*)buf672 = fmax(*(float*)buf673, *(float*)buf674);
+    *(float2*)buf675 = fmax(*(float2*)buf676, *(float2*)buf677);
+    *(float3*)buf678 = fmax(*(float3*)buf679, *(float3*)buf680);
+    *(float4*)buf681 = fmax(*(float4*)buf682, *(float4*)buf683);
+    *(float2*)buf684 = fmax(*(float2*)buf685, *(float*)buf686);
+    *(float3*)buf687 = fmax(*(float3*)buf688, *(float*)buf689);
+    *(float4*)buf690 = fmax(*(float4*)buf691, *(float*)buf692);
+    *(float*)buf693 = fmin(*(float*)buf694, *(float*)buf695);
+    *(float2*)buf696 = fmin(*(float2*)buf697, *(float2*)buf698);
+    *(float3*)buf699 = fmin(*(float3*)buf700, *(float3*)buf701);
+    *(float4*)buf702 = fmin(*(float4*)buf703, *(float4*)buf704);
+    *(float2*)buf705 = fmin(*(float2*)buf706, *(float*)buf707);
+    *(float3*)buf708 = fmin(*(float3*)buf709, *(float*)buf710);
+    *(float4*)buf711 = fmin(*(float4*)buf712, *(float*)buf713);
+    *(float*)buf714 = fmod(*(float*)buf715, *(float*)buf716);
+    *(float2*)buf717 = fmod(*(float2*)buf718, *(float2*)buf719);
+    *(float3*)buf720 = fmod(*(float3*)buf721, *(float3*)buf722);
+    *(float4*)buf723 = fmod(*(float4*)buf724, *(float4*)buf725);
+    *(float*)buf726 = fract(*(float*)buf727, (float*) buf728);
+    *(float2*)buf729 = fract(*(float2*)buf730, (float2*) buf731);
+    *(float3*)buf732 = fract(*(float3*)buf733, (float3*) buf734);
+    *(float4*)buf735 = fract(*(float4*)buf736, (float4*) buf737);
+    *(float*)buf738 = fract(*(float*)buf739);
+    *(float2*)buf740 = fract(*(float2*)buf741);
+    *(float3*)buf742 = fract(*(float3*)buf743);
+    *(float4*)buf744 = fract(*(float4*)buf745);
+    *(float*)buf746 = frexp(*(float*)buf747, (int*) buf748);
+    *(float2*)buf749 = frexp(*(float2*)buf750, (int2*) buf751);
+    *(float3*)buf752 = frexp(*(float3*)buf753, (int3*) buf754);
+    *(float4*)buf755 = frexp(*(float4*)buf756, (int4*) buf757);
+    *(float*)buf758 = hypot(*(float*)buf759, *(float*)buf760);
+    *(float2*)buf761 = hypot(*(float2*)buf762, *(float2*)buf763);
+    *(float3*)buf764 = hypot(*(float3*)buf765, *(float3*)buf766);
+    *(float4*)buf767 = hypot(*(float4*)buf768, *(float4*)buf769);
+    *(int*)buf770 = ilogb(*(float*)buf771);
+    *(int2*)buf772 = ilogb(*(float2*)buf773);
+    *(int3*)buf774 = ilogb(*(float3*)buf775);
+    *(int4*)buf776 = ilogb(*(float4*)buf777);
+    *(float*)buf778 = ldexp(*(float*)buf779, *(int*)buf780);
+    *(float2*)buf781 = ldexp(*(float2*)buf782, *(int2*)buf783);
+    *(float3*)buf784 = ldexp(*(float3*)buf785, *(int3*)buf786);
+    *(float4*)buf787 = ldexp(*(float4*)buf788, *(int4*)buf789);
+    *(float2*)buf790 = ldexp(*(float2*)buf791, *(int*)buf792);
+    *(float3*)buf793 = ldexp(*(float3*)buf794, *(int*)buf795);
+    *(float4*)buf796 = ldexp(*(float4*)buf797, *(int*)buf798);
+    *(float*)buf799 = length(*(float*)buf800);
+    *(float*)buf801 = length(*(float2*)buf802);
+    *(float*)buf803 = length(*(float3*)buf804);
+    *(float*)buf805 = length(*(float4*)buf806);
+    *(float*)buf807 = lgamma(*(float*)buf808);
+    *(float2*)buf809 = lgamma(*(float2*)buf810);
+    *(float3*)buf811 = lgamma(*(float3*)buf812);
+    *(float4*)buf813 = lgamma(*(float4*)buf814);
+    *(float*)buf815 = lgamma(*(float*)buf816, (int*) buf817);
+    *(float2*)buf818 = lgamma(*(float2*)buf819, (int2*) buf820);
+    *(float3*)buf821 = lgamma(*(float3*)buf822, (int3*) buf823);
+    *(float4*)buf824 = lgamma(*(float4*)buf825, (int4*) buf826);
+    *(float*)buf827 = log(*(float*)buf828);
+    *(float2*)buf829 = log(*(float2*)buf830);
+    *(float3*)buf831 = log(*(float3*)buf832);
+    *(float4*)buf833 = log(*(float4*)buf834);
+    *(float*)buf835 = log10(*(float*)buf836);
+    *(float2*)buf837 = log10(*(float2*)buf838);
+    *(float3*)buf839 = log10(*(float3*)buf840);
+    *(float4*)buf841 = log10(*(float4*)buf842);
+    *(float*)buf843 = log1p(*(float*)buf844);
+    *(float2*)buf845 = log1p(*(float2*)buf846);
+    *(float3*)buf847 = log1p(*(float3*)buf848);
+    *(float4*)buf849 = log1p(*(float4*)buf850);
+    *(float*)buf851 = log2(*(float*)buf852);
+    *(float2*)buf853 = log2(*(float2*)buf854);
+    *(float3*)buf855 = log2(*(float3*)buf856);
+    *(float4*)buf857 = log2(*(float4*)buf858);
+    *(float*)buf859 = logb(*(float*)buf860);
+    *(float2*)buf861 = logb(*(float2*)buf862);
+    *(float3*)buf863 = logb(*(float3*)buf864);
+    *(float4*)buf865 = logb(*(float4*)buf866);
+    *(float*)buf867 = mad(*(float*)buf868, *(float*)buf869, *(float*)buf870);
+    *(float2*)buf871 = mad(*(float2*)buf872, *(float2*)buf873, *(float2*)buf874);
+    *(float3*)buf875 = mad(*(float3*)buf876, *(float3*)buf877, *(float3*)buf878);
+    *(float4*)buf879 = mad(*(float4*)buf880, *(float4*)buf881, *(float4*)buf882);
+    *(float*)buf883 = max(*(float*)buf884, *(float*)buf885);
+    *(float2*)buf886 = max(*(float2*)buf887, *(float2*)buf888);
+    *(float3*)buf889 = max(*(float3*)buf890, *(float3*)buf891);
+    *(float4*)buf892 = max(*(float4*)buf893, *(float4*)buf894);
+    *(float2*)buf895 = max(*(float2*)buf896, *(float*)buf897);
+    *(float3*)buf898 = max(*(float3*)buf899, *(float*)buf900);
+    *(float4*)buf901 = max(*(float4*)buf902, *(float*)buf903);
+    *(char*)buf904 = max(*(char*)buf905, *(char*)buf906);
+    *(uchar*)buf907 = max(*(uchar*)buf908, *(uchar*)buf909);
+    *(short*)buf910 = max(*(short*)buf911, *(short*)buf912);
+    *(ushort*)buf913 = max(*(ushort*)buf914, *(ushort*)buf915);
+    *(int*)buf916 = max(*(int*)buf917, *(int*)buf918);
+    *(uint*)buf919 = max(*(uint*)buf920, *(uint*)buf921);
+    *(char2*)buf922 = max(*(char2*)buf923, *(char2*)buf924);
+    *(uchar2*)buf925 = max(*(uchar2*)buf926, *(uchar2*)buf927);
+    *(short2*)buf928 = max(*(short2*)buf929, *(short2*)buf930);
+    *(ushort2*)buf931 = max(*(ushort2*)buf932, *(ushort2*)buf933);
+    *(int2*)buf934 = max(*(int2*)buf935, *(int2*)buf936);
+    *(uint2*)buf937 = max(*(uint2*)buf938, *(uint2*)buf939);
+    *(char3*)buf940 = max(*(char3*)buf941, *(char3*)buf942);
+    *(uchar3*)buf943 = max(*(uchar3*)buf944, *(uchar3*)buf945);
+    *(short3*)buf946 = max(*(short3*)buf947, *(short3*)buf948);
+    *(ushort3*)buf949 = max(*(ushort3*)buf950, *(ushort3*)buf951);
+    *(int3*)buf952 = max(*(int3*)buf953, *(int3*)buf954);
+    *(uint3*)buf955 = max(*(uint3*)buf956, *(uint3*)buf957);
+    *(char4*)buf958 = max(*(char4*)buf959, *(char4*)buf960);
+    *(uchar4*)buf961 = max(*(uchar4*)buf962, *(uchar4*)buf963);
+    *(short4*)buf964 = max(*(short4*)buf965, *(short4*)buf966);
+    *(ushort4*)buf967 = max(*(ushort4*)buf968, *(ushort4*)buf969);
+    *(int4*)buf970 = max(*(int4*)buf971, *(int4*)buf972);
+    *(uint4*)buf973 = max(*(uint4*)buf974, *(uint4*)buf975);
+    *(float*)buf976 = min(*(float*)buf977, *(float*)buf978);
+    *(float2*)buf979 = min(*(float2*)buf980, *(float2*)buf981);
+    *(float3*)buf982 = min(*(float3*)buf983, *(float3*)buf984);
+    *(float4*)buf985 = min(*(float4*)buf986, *(float4*)buf987);
+    *(float2*)buf988 = min(*(float2*)buf989, *(float*)buf990);
+    *(float3*)buf991 = min(*(float3*)buf992, *(float*)buf993);
+    *(float4*)buf994 = min(*(float4*)buf995, *(float*)buf996);
+    *(char*)buf997 = min(*(char*)buf998, *(char*)buf999);
+    *(uchar*)buf1000 = min(*(uchar*)buf1001, *(uchar*)buf1002);
+    *(short*)buf1003 = min(*(short*)buf1004, *(short*)buf1005);
+    *(ushort*)buf1006 = min(*(ushort*)buf1007, *(ushort*)buf1008);
+    *(int*)buf1009 = min(*(int*)buf1010, *(int*)buf1011);
+    *(uint*)buf1012 = min(*(uint*)buf1013, *(uint*)buf1014);
+    *(char2*)buf1015 = min(*(char2*)buf1016, *(char2*)buf1017);
+    *(uchar2*)buf1018 = min(*(uchar2*)buf1019, *(uchar2*)buf1020);
+    *(short2*)buf1021 = min(*(short2*)buf1022, *(short2*)buf1023);
+    *(ushort2*)buf1024 = min(*(ushort2*)buf1025, *(ushort2*)buf1026);
+    *(int2*)buf1027 = min(*(int2*)buf1028, *(int2*)buf1029);
+    *(uint2*)buf1030 = min(*(uint2*)buf1031, *(uint2*)buf1032);
+    *(char3*)buf1033 = min(*(char3*)buf1034, *(char3*)buf1035);
+    *(uchar3*)buf1036 = min(*(uchar3*)buf1037, *(uchar3*)buf1038);
+    *(short3*)buf1039 = min(*(short3*)buf1040, *(short3*)buf1041);
+    *(ushort3*)buf1042 = min(*(ushort3*)buf1043, *(ushort3*)buf1044);
+    *(int3*)buf1045 = min(*(int3*)buf1046, *(int3*)buf1047);
+    *(uint3*)buf1048 = min(*(uint3*)buf1049, *(uint3*)buf1050);
+    *(char4*)buf1051 = min(*(char4*)buf1052, *(char4*)buf1053);
+    *(uchar4*)buf1054 = min(*(uchar4*)buf1055, *(uchar4*)buf1056);
+    *(short4*)buf1057 = min(*(short4*)buf1058, *(short4*)buf1059);
+    *(ushort4*)buf1060 = min(*(ushort4*)buf1061, *(ushort4*)buf1062);
+    *(int4*)buf1063 = min(*(int4*)buf1064, *(int4*)buf1065);
+    *(uint4*)buf1066 = min(*(uint4*)buf1067, *(uint4*)buf1068);
+    *(float*)buf1069 = mix(*(float*)buf1070, *(float*)buf1071, *(float*)buf1072);
+    *(float2*)buf1073 = mix(*(float2*)buf1074, *(float2*)buf1075, *(float2*)buf1076);
+    *(float3*)buf1077 = mix(*(float3*)buf1078, *(float3*)buf1079, *(float3*)buf1080);
+    *(float4*)buf1081 = mix(*(float4*)buf1082, *(float4*)buf1083, *(float4*)buf1084);
+    *(float2*)buf1085 = mix(*(float2*)buf1086, *(float2*)buf1087, *(float*)buf1088);
+    *(float3*)buf1089 = mix(*(float3*)buf1090, *(float3*)buf1091, *(float*)buf1092);
+    *(float4*)buf1093 = mix(*(float4*)buf1094, *(float4*)buf1095, *(float*)buf1096);
+    *(float*)buf1097 = modf(*(float*)buf1098, (float*) buf1099);
+    *(float2*)buf1100 = modf(*(float2*)buf1101, (float2*) buf1102);
+    *(float3*)buf1103 = modf(*(float3*)buf1104, (float3*) buf1105);
+    *(float4*)buf1106 = modf(*(float4*)buf1107, (float4*) buf1108);
+    *(float*)buf1109 = nan(*(uint*)buf1110);
+    *(float*)buf1111 = nextafter(*(float*)buf1112, *(float*)buf1113);
+    *(float2*)buf1114 = nextafter(*(float2*)buf1115, *(float2*)buf1116);
+    *(float3*)buf1117 = nextafter(*(float3*)buf1118, *(float3*)buf1119);
+    *(float4*)buf1120 = nextafter(*(float4*)buf1121, *(float4*)buf1122);
+    *(float*)buf1123 = normalize(*(float*)buf1124);
+    *(float2*)buf1125 = normalize(*(float2*)buf1126);
+    *(float3*)buf1127 = normalize(*(float3*)buf1128);
+    *(float4*)buf1129 = normalize(*(float4*)buf1130);
+    *(float*)buf1131 = pow(*(float*)buf1132, *(float*)buf1133);
+    *(float2*)buf1134 = pow(*(float2*)buf1135, *(float2*)buf1136);
+    *(float3*)buf1137 = pow(*(float3*)buf1138, *(float3*)buf1139);
+    *(float4*)buf1140 = pow(*(float4*)buf1141, *(float4*)buf1142);
+    *(float*)buf1143 = pown(*(float*)buf1144, *(int*)buf1145);
+    *(float2*)buf1146 = pown(*(float2*)buf1147, *(int2*)buf1148);
+    *(float3*)buf1149 = pown(*(float3*)buf1150, *(int3*)buf1151);
+    *(float4*)buf1152 = pown(*(float4*)buf1153, *(int4*)buf1154);
+    *(float*)buf1155 = powr(*(float*)buf1156, *(float*)buf1157);
+    *(float2*)buf1158 = powr(*(float2*)buf1159, *(float2*)buf1160);
+    *(float3*)buf1161 = powr(*(float3*)buf1162, *(float3*)buf1163);
+    *(float4*)buf1164 = powr(*(float4*)buf1165, *(float4*)buf1166);
+    *(float*)buf1167 = radians(*(float*)buf1168);
+    *(float2*)buf1169 = radians(*(float2*)buf1170);
+    *(float3*)buf1171 = radians(*(float3*)buf1172);
+    *(float4*)buf1173 = radians(*(float4*)buf1174);
+    *(float*)buf1175 = remainder(*(float*)buf1176, *(float*)buf1177);
+    *(float2*)buf1178 = remainder(*(float2*)buf1179, *(float2*)buf1180);
+    *(float3*)buf1181 = remainder(*(float3*)buf1182, *(float3*)buf1183);
+    *(float4*)buf1184 = remainder(*(float4*)buf1185, *(float4*)buf1186);
+    *(float*)buf1187 = remquo(*(float*)buf1188, *(float*)buf1189, (int*) buf1190);
+    *(float2*)buf1191 = remquo(*(float2*)buf1192, *(float2*)buf1193, (int2*) buf1194);
+    *(float3*)buf1195 = remquo(*(float3*)buf1196, *(float3*)buf1197, (int3*) buf1198);
+    *(float4*)buf1199 = remquo(*(float4*)buf1200, *(float4*)buf1201, (int4*) buf1202);
+    *(float*)buf1203 = rint(*(float*)buf1204);
+    *(float2*)buf1205 = rint(*(float2*)buf1206);
+    *(float3*)buf1207 = rint(*(float3*)buf1208);
+    *(float4*)buf1209 = rint(*(float4*)buf1210);
+    *(float*)buf1211 = rootn(*(float*)buf1212, *(int*)buf1213);
+    *(float2*)buf1214 = rootn(*(float2*)buf1215, *(int2*)buf1216);
+    *(float3*)buf1217 = rootn(*(float3*)buf1218, *(int3*)buf1219);
+    *(float4*)buf1220 = rootn(*(float4*)buf1221, *(int4*)buf1222);
+    *(float*)buf1223 = round(*(float*)buf1224);
+    *(float2*)buf1225 = round(*(float2*)buf1226);
+    *(float3*)buf1227 = round(*(float3*)buf1228);
+    *(float4*)buf1229 = round(*(float4*)buf1230);
+    *(uint32_t*)buf1231 = rsAllocationGetDimFaces(*(rs_allocation*)buf1232);
+    *(uint32_t*)buf1233 = rsAllocationGetDimLOD(*(rs_allocation*)buf1234);
+    *(uint32_t*)buf1235 = rsAllocationGetDimX(*(rs_allocation*)buf1236);
+    *(uint32_t*)buf1237 = rsAllocationGetDimY(*(rs_allocation*)buf1238);
+    *(uint32_t*)buf1239 = rsAllocationGetDimZ(*(rs_allocation*)buf1240);
+    *(rs_element*)buf1241 = rsAllocationGetElement(*(rs_allocation*)buf1242);
+    *(char*)buf1243 = rsClamp(*(char*)buf1244, *(char*)buf1245, *(char*)buf1246);
+    *(uchar*)buf1247 = rsClamp(*(uchar*)buf1248, *(uchar*)buf1249, *(uchar*)buf1250);
+    *(short*)buf1251 = rsClamp(*(short*)buf1252, *(short*)buf1253, *(short*)buf1254);
+    *(ushort*)buf1255 = rsClamp(*(ushort*)buf1256, *(ushort*)buf1257, *(ushort*)buf1258);
+    *(int*)buf1259 = rsClamp(*(int*)buf1260, *(int*)buf1261, *(int*)buf1262);
+    *(uint*)buf1263 = rsClamp(*(uint*)buf1264, *(uint*)buf1265, *(uint*)buf1266);
+    rsClearObject((rs_element*) buf1267);
+    rsClearObject((rs_type*) buf1268);
+    rsClearObject((rs_allocation*) buf1269);
+    rsClearObject((rs_sampler*) buf1270);
+    rsClearObject((rs_script*) buf1271);
+#ifndef __LP64__
+    rsClearObject((rs_mesh*) buf1272);
+    rsClearObject((rs_program_fragment*) buf1273);
+    rsClearObject((rs_program_vertex*) buf1274);
+    rsClearObject((rs_program_raster*) buf1275);
+    rsClearObject((rs_program_store*) buf1276);
+    rsClearObject((rs_font*) buf1277);
+#endif
+    rsDebug((const char*) buf1278, *(double*)buf1279);
+    rsDebug((const char*) buf1280, *(int*)buf1281);
+    rsDebug((const char*) buf1282, *(uint*)buf1283);
+    rsDebug((const char*) buf1284, *(long*)buf1285);
+    rsDebug((const char*) buf1286, *(ulong*)buf1287);
+    rsDebug((const char*) buf1288, *(float*)buf1289);
+    rsDebug((const char*) buf1290, *(float2*)buf1291);
+    rsDebug((const char*) buf1292, *(float3*)buf1293);
+    rsDebug((const char*) buf1294, *(float4*)buf1295);
+    rsDebug((const char*) buf1296, *(float*)buf1297, *(float*)buf1298);
+    rsDebug((const char*) buf1299, *(float*)buf1300, *(float*)buf1301, *(float*)buf1302);
+    rsDebug((const char*) buf1303, *(float*)buf1304, *(float*)buf1305, *(float*)buf1306, *(float*)buf1307);
+    rsDebug((const char*) buf1308, *(long long*)buf1309);
+    rsDebug((const char*) buf1310, *(unsigned long long*)buf1311);
+    rsDebug((const char*) buf1312, (const void*) buf1313);
+    rsDebug((const char*) buf1314, (const rs_matrix4x4*) buf1315);
+    rsDebug((const char*) buf1316, (const rs_matrix3x3*) buf1317);
+    rsDebug((const char*) buf1318, (const rs_matrix2x2*) buf1319);
+    rsExtractFrustumPlanes((const rs_matrix4x4*) buf1320, (float4*) buf1321, (float4*) buf1322, (float4*) buf1323, (float4*) buf1324, (float4*) buf1325, (float4*) buf1326);
+    rsForEach(*(rs_script*)buf1327, *(rs_allocation*)buf1328, *(rs_allocation*)buf1329, (const void*) buf1330, (const rs_script_call_t*) buf1331);
+    rsForEach(*(rs_script*)buf1332, *(rs_allocation*)buf1333, *(rs_allocation*)buf1334, (const void*) buf1335);
+    *(float*)buf1336 = rsFrac(*(float*)buf1337);
+    *(rs_allocation*)buf1338 = rsGetAllocation((const void*) buf1339);
+    *(float*)buf1340 = rsGetDt();
+    *(const void**)buf1341 = rsGetElementAt(*(rs_allocation*)buf1342, *(uint32_t*)buf1343);
+    *(const void**)buf1344 = rsGetElementAt(*(rs_allocation*)buf1345, *(uint32_t*)buf1346, *(uint32_t*)buf1347);
+    *(const void**)buf1348 = rsGetElementAt(*(rs_allocation*)buf1349, *(uint32_t*)buf1350, *(uint32_t*)buf1351, *(uint32_t*)buf1352);
+    *(float*)buf1353 = rsGetElementAt_float(*(rs_allocation*)buf1354, *(uint32_t*)buf1355);
+    *(float2*)buf1356 = rsGetElementAt_float2(*(rs_allocation*)buf1357, *(uint32_t*)buf1358);
+    *(float3*)buf1359 = rsGetElementAt_float3(*(rs_allocation*)buf1360, *(uint32_t*)buf1361);
+    *(float4*)buf1362 = rsGetElementAt_float4(*(rs_allocation*)buf1363, *(uint32_t*)buf1364);
+    *(double*)buf1365 = rsGetElementAt_double(*(rs_allocation*)buf1366, *(uint32_t*)buf1367);
+    *(double2*)buf1368 = rsGetElementAt_double2(*(rs_allocation*)buf1369, *(uint32_t*)buf1370);
+    *(double3*)buf1371 = rsGetElementAt_double3(*(rs_allocation*)buf1372, *(uint32_t*)buf1373);
+    *(double4*)buf1374 = rsGetElementAt_double4(*(rs_allocation*)buf1375, *(uint32_t*)buf1376);
+    *(char*)buf1377 = rsGetElementAt_char(*(rs_allocation*)buf1378, *(uint32_t*)buf1379);
+    *(char2*)buf1380 = rsGetElementAt_char2(*(rs_allocation*)buf1381, *(uint32_t*)buf1382);
+    *(char3*)buf1383 = rsGetElementAt_char3(*(rs_allocation*)buf1384, *(uint32_t*)buf1385);
+    *(char4*)buf1386 = rsGetElementAt_char4(*(rs_allocation*)buf1387, *(uint32_t*)buf1388);
+    *(uchar*)buf1389 = rsGetElementAt_uchar(*(rs_allocation*)buf1390, *(uint32_t*)buf1391);
+    *(uchar2*)buf1392 = rsGetElementAt_uchar2(*(rs_allocation*)buf1393, *(uint32_t*)buf1394);
+    *(uchar3*)buf1395 = rsGetElementAt_uchar3(*(rs_allocation*)buf1396, *(uint32_t*)buf1397);
+    *(uchar4*)buf1398 = rsGetElementAt_uchar4(*(rs_allocation*)buf1399, *(uint32_t*)buf1400);
+    *(short*)buf1401 = rsGetElementAt_short(*(rs_allocation*)buf1402, *(uint32_t*)buf1403);
+    *(short2*)buf1404 = rsGetElementAt_short2(*(rs_allocation*)buf1405, *(uint32_t*)buf1406);
+    *(short3*)buf1407 = rsGetElementAt_short3(*(rs_allocation*)buf1408, *(uint32_t*)buf1409);
+    *(short4*)buf1410 = rsGetElementAt_short4(*(rs_allocation*)buf1411, *(uint32_t*)buf1412);
+    *(ushort*)buf1413 = rsGetElementAt_ushort(*(rs_allocation*)buf1414, *(uint32_t*)buf1415);
+    *(ushort2*)buf1416 = rsGetElementAt_ushort2(*(rs_allocation*)buf1417, *(uint32_t*)buf1418);
+    *(ushort3*)buf1419 = rsGetElementAt_ushort3(*(rs_allocation*)buf1420, *(uint32_t*)buf1421);
+    *(ushort4*)buf1422 = rsGetElementAt_ushort4(*(rs_allocation*)buf1423, *(uint32_t*)buf1424);
+    *(int*)buf1425 = rsGetElementAt_int(*(rs_allocation*)buf1426, *(uint32_t*)buf1427);
+    *(int2*)buf1428 = rsGetElementAt_int2(*(rs_allocation*)buf1429, *(uint32_t*)buf1430);
+    *(int3*)buf1431 = rsGetElementAt_int3(*(rs_allocation*)buf1432, *(uint32_t*)buf1433);
+    *(int4*)buf1434 = rsGetElementAt_int4(*(rs_allocation*)buf1435, *(uint32_t*)buf1436);
+    *(uint*)buf1437 = rsGetElementAt_uint(*(rs_allocation*)buf1438, *(uint32_t*)buf1439);
+    *(uint2*)buf1440 = rsGetElementAt_uint2(*(rs_allocation*)buf1441, *(uint32_t*)buf1442);
+    *(uint3*)buf1443 = rsGetElementAt_uint3(*(rs_allocation*)buf1444, *(uint32_t*)buf1445);
+    *(uint4*)buf1446 = rsGetElementAt_uint4(*(rs_allocation*)buf1447, *(uint32_t*)buf1448);
+    *(long*)buf1449 = rsGetElementAt_long(*(rs_allocation*)buf1450, *(uint32_t*)buf1451);
+    *(long2*)buf1452 = rsGetElementAt_long2(*(rs_allocation*)buf1453, *(uint32_t*)buf1454);
+    *(long3*)buf1455 = rsGetElementAt_long3(*(rs_allocation*)buf1456, *(uint32_t*)buf1457);
+    *(long4*)buf1458 = rsGetElementAt_long4(*(rs_allocation*)buf1459, *(uint32_t*)buf1460);
+    *(ulong*)buf1461 = rsGetElementAt_ulong(*(rs_allocation*)buf1462, *(uint32_t*)buf1463);
+    *(ulong2*)buf1464 = rsGetElementAt_ulong2(*(rs_allocation*)buf1465, *(uint32_t*)buf1466);
+    *(ulong3*)buf1467 = rsGetElementAt_ulong3(*(rs_allocation*)buf1468, *(uint32_t*)buf1469);
+    *(ulong4*)buf1470 = rsGetElementAt_ulong4(*(rs_allocation*)buf1471, *(uint32_t*)buf1472);
+    *(float*)buf1473 = rsGetElementAt_float(*(rs_allocation*)buf1474, *(uint32_t*)buf1475, *(uint32_t*)buf1476);
+    *(float2*)buf1477 = rsGetElementAt_float2(*(rs_allocation*)buf1478, *(uint32_t*)buf1479, *(uint32_t*)buf1480);
+    *(float3*)buf1481 = rsGetElementAt_float3(*(rs_allocation*)buf1482, *(uint32_t*)buf1483, *(uint32_t*)buf1484);
+    *(float4*)buf1485 = rsGetElementAt_float4(*(rs_allocation*)buf1486, *(uint32_t*)buf1487, *(uint32_t*)buf1488);
+    *(double*)buf1489 = rsGetElementAt_double(*(rs_allocation*)buf1490, *(uint32_t*)buf1491, *(uint32_t*)buf1492);
+    *(double2*)buf1493 = rsGetElementAt_double2(*(rs_allocation*)buf1494, *(uint32_t*)buf1495, *(uint32_t*)buf1496);
+    *(double3*)buf1497 = rsGetElementAt_double3(*(rs_allocation*)buf1498, *(uint32_t*)buf1499, *(uint32_t*)buf1500);
+    *(double4*)buf1501 = rsGetElementAt_double4(*(rs_allocation*)buf1502, *(uint32_t*)buf1503, *(uint32_t*)buf1504);
+    *(char*)buf1505 = rsGetElementAt_char(*(rs_allocation*)buf1506, *(uint32_t*)buf1507, *(uint32_t*)buf1508);
+    *(char2*)buf1509 = rsGetElementAt_char2(*(rs_allocation*)buf1510, *(uint32_t*)buf1511, *(uint32_t*)buf1512);
+    *(char3*)buf1513 = rsGetElementAt_char3(*(rs_allocation*)buf1514, *(uint32_t*)buf1515, *(uint32_t*)buf1516);
+    *(char4*)buf1517 = rsGetElementAt_char4(*(rs_allocation*)buf1518, *(uint32_t*)buf1519, *(uint32_t*)buf1520);
+    *(uchar*)buf1521 = rsGetElementAt_uchar(*(rs_allocation*)buf1522, *(uint32_t*)buf1523, *(uint32_t*)buf1524);
+    *(uchar2*)buf1525 = rsGetElementAt_uchar2(*(rs_allocation*)buf1526, *(uint32_t*)buf1527, *(uint32_t*)buf1528);
+    *(uchar3*)buf1529 = rsGetElementAt_uchar3(*(rs_allocation*)buf1530, *(uint32_t*)buf1531, *(uint32_t*)buf1532);
+    *(uchar4*)buf1533 = rsGetElementAt_uchar4(*(rs_allocation*)buf1534, *(uint32_t*)buf1535, *(uint32_t*)buf1536);
+    *(short*)buf1537 = rsGetElementAt_short(*(rs_allocation*)buf1538, *(uint32_t*)buf1539, *(uint32_t*)buf1540);
+    *(short2*)buf1541 = rsGetElementAt_short2(*(rs_allocation*)buf1542, *(uint32_t*)buf1543, *(uint32_t*)buf1544);
+    *(short3*)buf1545 = rsGetElementAt_short3(*(rs_allocation*)buf1546, *(uint32_t*)buf1547, *(uint32_t*)buf1548);
+    *(short4*)buf1549 = rsGetElementAt_short4(*(rs_allocation*)buf1550, *(uint32_t*)buf1551, *(uint32_t*)buf1552);
+    *(ushort*)buf1553 = rsGetElementAt_ushort(*(rs_allocation*)buf1554, *(uint32_t*)buf1555, *(uint32_t*)buf1556);
+    *(ushort2*)buf1557 = rsGetElementAt_ushort2(*(rs_allocation*)buf1558, *(uint32_t*)buf1559, *(uint32_t*)buf1560);
+    *(ushort3*)buf1561 = rsGetElementAt_ushort3(*(rs_allocation*)buf1562, *(uint32_t*)buf1563, *(uint32_t*)buf1564);
+    *(ushort4*)buf1565 = rsGetElementAt_ushort4(*(rs_allocation*)buf1566, *(uint32_t*)buf1567, *(uint32_t*)buf1568);
+    *(int*)buf1569 = rsGetElementAt_int(*(rs_allocation*)buf1570, *(uint32_t*)buf1571, *(uint32_t*)buf1572);
+    *(int2*)buf1573 = rsGetElementAt_int2(*(rs_allocation*)buf1574, *(uint32_t*)buf1575, *(uint32_t*)buf1576);
+    *(int3*)buf1577 = rsGetElementAt_int3(*(rs_allocation*)buf1578, *(uint32_t*)buf1579, *(uint32_t*)buf1580);
+    *(int4*)buf1581 = rsGetElementAt_int4(*(rs_allocation*)buf1582, *(uint32_t*)buf1583, *(uint32_t*)buf1584);
+    *(uint*)buf1585 = rsGetElementAt_uint(*(rs_allocation*)buf1586, *(uint32_t*)buf1587, *(uint32_t*)buf1588);
+    *(uint2*)buf1589 = rsGetElementAt_uint2(*(rs_allocation*)buf1590, *(uint32_t*)buf1591, *(uint32_t*)buf1592);
+    *(uint3*)buf1593 = rsGetElementAt_uint3(*(rs_allocation*)buf1594, *(uint32_t*)buf1595, *(uint32_t*)buf1596);
+    *(uint4*)buf1597 = rsGetElementAt_uint4(*(rs_allocation*)buf1598, *(uint32_t*)buf1599, *(uint32_t*)buf1600);
+    *(long*)buf1601 = rsGetElementAt_long(*(rs_allocation*)buf1602, *(uint32_t*)buf1603, *(uint32_t*)buf1604);
+    *(long2*)buf1605 = rsGetElementAt_long2(*(rs_allocation*)buf1606, *(uint32_t*)buf1607, *(uint32_t*)buf1608);
+    *(long3*)buf1609 = rsGetElementAt_long3(*(rs_allocation*)buf1610, *(uint32_t*)buf1611, *(uint32_t*)buf1612);
+    *(long4*)buf1613 = rsGetElementAt_long4(*(rs_allocation*)buf1614, *(uint32_t*)buf1615, *(uint32_t*)buf1616);
+    *(ulong*)buf1617 = rsGetElementAt_ulong(*(rs_allocation*)buf1618, *(uint32_t*)buf1619, *(uint32_t*)buf1620);
+    *(ulong2*)buf1621 = rsGetElementAt_ulong2(*(rs_allocation*)buf1622, *(uint32_t*)buf1623, *(uint32_t*)buf1624);
+    *(ulong3*)buf1625 = rsGetElementAt_ulong3(*(rs_allocation*)buf1626, *(uint32_t*)buf1627, *(uint32_t*)buf1628);
+    *(ulong4*)buf1629 = rsGetElementAt_ulong4(*(rs_allocation*)buf1630, *(uint32_t*)buf1631, *(uint32_t*)buf1632);
+    *(float*)buf1633 = rsGetElementAt_float(*(rs_allocation*)buf1634, *(uint32_t*)buf1635, *(uint32_t*)buf1636, *(uint32_t*)buf1637);
+    *(float2*)buf1638 = rsGetElementAt_float2(*(rs_allocation*)buf1639, *(uint32_t*)buf1640, *(uint32_t*)buf1641, *(uint32_t*)buf1642);
+    *(float3*)buf1643 = rsGetElementAt_float3(*(rs_allocation*)buf1644, *(uint32_t*)buf1645, *(uint32_t*)buf1646, *(uint32_t*)buf1647);
+    *(float4*)buf1648 = rsGetElementAt_float4(*(rs_allocation*)buf1649, *(uint32_t*)buf1650, *(uint32_t*)buf1651, *(uint32_t*)buf1652);
+    *(double*)buf1653 = rsGetElementAt_double(*(rs_allocation*)buf1654, *(uint32_t*)buf1655, *(uint32_t*)buf1656, *(uint32_t*)buf1657);
+    *(double2*)buf1658 = rsGetElementAt_double2(*(rs_allocation*)buf1659, *(uint32_t*)buf1660, *(uint32_t*)buf1661, *(uint32_t*)buf1662);
+    *(double3*)buf1663 = rsGetElementAt_double3(*(rs_allocation*)buf1664, *(uint32_t*)buf1665, *(uint32_t*)buf1666, *(uint32_t*)buf1667);
+    *(double4*)buf1668 = rsGetElementAt_double4(*(rs_allocation*)buf1669, *(uint32_t*)buf1670, *(uint32_t*)buf1671, *(uint32_t*)buf1672);
+    *(char*)buf1673 = rsGetElementAt_char(*(rs_allocation*)buf1674, *(uint32_t*)buf1675, *(uint32_t*)buf1676, *(uint32_t*)buf1677);
+    *(char2*)buf1678 = rsGetElementAt_char2(*(rs_allocation*)buf1679, *(uint32_t*)buf1680, *(uint32_t*)buf1681, *(uint32_t*)buf1682);
+    *(char3*)buf1683 = rsGetElementAt_char3(*(rs_allocation*)buf1684, *(uint32_t*)buf1685, *(uint32_t*)buf1686, *(uint32_t*)buf1687);
+    *(char4*)buf1688 = rsGetElementAt_char4(*(rs_allocation*)buf1689, *(uint32_t*)buf1690, *(uint32_t*)buf1691, *(uint32_t*)buf1692);
+    *(uchar*)buf1693 = rsGetElementAt_uchar(*(rs_allocation*)buf1694, *(uint32_t*)buf1695, *(uint32_t*)buf1696, *(uint32_t*)buf1697);
+    *(uchar2*)buf1698 = rsGetElementAt_uchar2(*(rs_allocation*)buf1699, *(uint32_t*)buf1700, *(uint32_t*)buf1701, *(uint32_t*)buf1702);
+    *(uchar3*)buf1703 = rsGetElementAt_uchar3(*(rs_allocation*)buf1704, *(uint32_t*)buf1705, *(uint32_t*)buf1706, *(uint32_t*)buf1707);
+    *(uchar4*)buf1708 = rsGetElementAt_uchar4(*(rs_allocation*)buf1709, *(uint32_t*)buf1710, *(uint32_t*)buf1711, *(uint32_t*)buf1712);
+    *(short*)buf1713 = rsGetElementAt_short(*(rs_allocation*)buf1714, *(uint32_t*)buf1715, *(uint32_t*)buf1716, *(uint32_t*)buf1717);
+    *(short2*)buf1718 = rsGetElementAt_short2(*(rs_allocation*)buf1719, *(uint32_t*)buf1720, *(uint32_t*)buf1721, *(uint32_t*)buf1722);
+    *(short3*)buf1723 = rsGetElementAt_short3(*(rs_allocation*)buf1724, *(uint32_t*)buf1725, *(uint32_t*)buf1726, *(uint32_t*)buf1727);
+    *(short4*)buf1728 = rsGetElementAt_short4(*(rs_allocation*)buf1729, *(uint32_t*)buf1730, *(uint32_t*)buf1731, *(uint32_t*)buf1732);
+    *(ushort*)buf1733 = rsGetElementAt_ushort(*(rs_allocation*)buf1734, *(uint32_t*)buf1735, *(uint32_t*)buf1736, *(uint32_t*)buf1737);
+    *(ushort2*)buf1738 = rsGetElementAt_ushort2(*(rs_allocation*)buf1739, *(uint32_t*)buf1740, *(uint32_t*)buf1741, *(uint32_t*)buf1742);
+    *(ushort3*)buf1743 = rsGetElementAt_ushort3(*(rs_allocation*)buf1744, *(uint32_t*)buf1745, *(uint32_t*)buf1746, *(uint32_t*)buf1747);
+    *(ushort4*)buf1748 = rsGetElementAt_ushort4(*(rs_allocation*)buf1749, *(uint32_t*)buf1750, *(uint32_t*)buf1751, *(uint32_t*)buf1752);
+    *(int*)buf1753 = rsGetElementAt_int(*(rs_allocation*)buf1754, *(uint32_t*)buf1755, *(uint32_t*)buf1756, *(uint32_t*)buf1757);
+    *(int2*)buf1758 = rsGetElementAt_int2(*(rs_allocation*)buf1759, *(uint32_t*)buf1760, *(uint32_t*)buf1761, *(uint32_t*)buf1762);
+    *(int3*)buf1763 = rsGetElementAt_int3(*(rs_allocation*)buf1764, *(uint32_t*)buf1765, *(uint32_t*)buf1766, *(uint32_t*)buf1767);
+    *(int4*)buf1768 = rsGetElementAt_int4(*(rs_allocation*)buf1769, *(uint32_t*)buf1770, *(uint32_t*)buf1771, *(uint32_t*)buf1772);
+    *(uint*)buf1773 = rsGetElementAt_uint(*(rs_allocation*)buf1774, *(uint32_t*)buf1775, *(uint32_t*)buf1776, *(uint32_t*)buf1777);
+    *(uint2*)buf1778 = rsGetElementAt_uint2(*(rs_allocation*)buf1779, *(uint32_t*)buf1780, *(uint32_t*)buf1781, *(uint32_t*)buf1782);
+    *(uint3*)buf1783 = rsGetElementAt_uint3(*(rs_allocation*)buf1784, *(uint32_t*)buf1785, *(uint32_t*)buf1786, *(uint32_t*)buf1787);
+    *(uint4*)buf1788 = rsGetElementAt_uint4(*(rs_allocation*)buf1789, *(uint32_t*)buf1790, *(uint32_t*)buf1791, *(uint32_t*)buf1792);
+    *(long*)buf1793 = rsGetElementAt_long(*(rs_allocation*)buf1794, *(uint32_t*)buf1795, *(uint32_t*)buf1796, *(uint32_t*)buf1797);
+    *(long2*)buf1798 = rsGetElementAt_long2(*(rs_allocation*)buf1799, *(uint32_t*)buf1800, *(uint32_t*)buf1801, *(uint32_t*)buf1802);
+    *(long3*)buf1803 = rsGetElementAt_long3(*(rs_allocation*)buf1804, *(uint32_t*)buf1805, *(uint32_t*)buf1806, *(uint32_t*)buf1807);
+    *(long4*)buf1808 = rsGetElementAt_long4(*(rs_allocation*)buf1809, *(uint32_t*)buf1810, *(uint32_t*)buf1811, *(uint32_t*)buf1812);
+    *(ulong*)buf1813 = rsGetElementAt_ulong(*(rs_allocation*)buf1814, *(uint32_t*)buf1815, *(uint32_t*)buf1816, *(uint32_t*)buf1817);
+    *(ulong2*)buf1818 = rsGetElementAt_ulong2(*(rs_allocation*)buf1819, *(uint32_t*)buf1820, *(uint32_t*)buf1821, *(uint32_t*)buf1822);
+    *(ulong3*)buf1823 = rsGetElementAt_ulong3(*(rs_allocation*)buf1824, *(uint32_t*)buf1825, *(uint32_t*)buf1826, *(uint32_t*)buf1827);
+    *(ulong4*)buf1828 = rsGetElementAt_ulong4(*(rs_allocation*)buf1829, *(uint32_t*)buf1830, *(uint32_t*)buf1831, *(uint32_t*)buf1832);
+    *(bool*)buf1833 = rsIsObject(*(rs_element*)buf1834);
+    *(bool*)buf1835 = rsIsObject(*(rs_type*)buf1836);
+    *(bool*)buf1837 = rsIsObject(*(rs_allocation*)buf1838);
+    *(bool*)buf1839 = rsIsObject(*(rs_sampler*)buf1840);
+    *(bool*)buf1841 = rsIsObject(*(rs_script*)buf1842);
+#ifndef __LP64__
+    *(bool*)buf1843 = rsIsObject(*(rs_mesh*)buf1844);
+    *(bool*)buf1845 = rsIsObject(*(rs_program_fragment*)buf1846);
+    *(bool*)buf1847 = rsIsObject(*(rs_program_vertex*)buf1848);
+    *(bool*)buf1849 = rsIsObject(*(rs_program_raster*)buf1850);
+    *(bool*)buf1851 = rsIsObject(*(rs_program_store*)buf1852);
+    *(bool*)buf1853 = rsIsObject(*(rs_font*)buf1854);
+#endif
+    *(bool*)buf1855 = rsIsSphereInFrustum((float4*) buf1856, (float4*) buf1857, (float4*) buf1858, (float4*) buf1859, (float4*) buf1860, (float4*) buf1861, (float4*) buf1862);
+    *(rs_tm**)buf1863 = rsLocaltime((rs_tm*) buf1864, (const rs_time_t*) buf1865);
+    *(float*)buf1866 = rsMatrixGet((const rs_matrix4x4*) buf1867, *(uint32_t*)buf1868, *(uint32_t*)buf1869);
+    *(float*)buf1870 = rsMatrixGet((const rs_matrix3x3*) buf1871, *(uint32_t*)buf1872, *(uint32_t*)buf1873);
+    *(float*)buf1874 = rsMatrixGet((const rs_matrix2x2*) buf1875, *(uint32_t*)buf1876, *(uint32_t*)buf1877);
+    *(bool*)buf1878 = rsMatrixInverse((rs_matrix4x4*) buf1879);
+    *(bool*)buf1880 = rsMatrixInverseTranspose((rs_matrix4x4*) buf1881);
+    rsMatrixLoad((rs_matrix4x4*) buf1882, (const float*) buf1883);
+    rsMatrixLoad((rs_matrix3x3*) buf1884, (const float*) buf1885);
+    rsMatrixLoad((rs_matrix2x2*) buf1886, (const float*) buf1887);
+    rsMatrixLoad((rs_matrix4x4*) buf1888, (const rs_matrix4x4*) buf1889);
+    rsMatrixLoad((rs_matrix3x3*) buf1890, (const rs_matrix3x3*) buf1891);
+    rsMatrixLoad((rs_matrix2x2*) buf1892, (const rs_matrix2x2*) buf1893);
+    rsMatrixLoad((rs_matrix4x4*) buf1894, (const rs_matrix3x3*) buf1895);
+    rsMatrixLoad((rs_matrix4x4*) buf1896, (const rs_matrix2x2*) buf1897);
+    rsMatrixLoadFrustum((rs_matrix4x4*) buf1898, *(float*)buf1899, *(float*)buf1900, *(float*)buf1901, *(float*)buf1902, *(float*)buf1903, *(float*)buf1904);
+    rsMatrixLoadIdentity((rs_matrix4x4*) buf1905);
+    rsMatrixLoadIdentity((rs_matrix3x3*) buf1906);
+    rsMatrixLoadIdentity((rs_matrix2x2*) buf1907);
+    rsMatrixLoadMultiply((rs_matrix4x4*) buf1908, (const rs_matrix4x4*) buf1909, (const rs_matrix4x4*) buf1910);
+    rsMatrixLoadMultiply((rs_matrix3x3*) buf1911, (const rs_matrix3x3*) buf1912, (const rs_matrix3x3*) buf1913);
+    rsMatrixLoadMultiply((rs_matrix2x2*) buf1914, (const rs_matrix2x2*) buf1915, (const rs_matrix2x2*) buf1916);
+    rsMatrixLoadOrtho((rs_matrix4x4*) buf1917, *(float*)buf1918, *(float*)buf1919, *(float*)buf1920, *(float*)buf1921, *(float*)buf1922, *(float*)buf1923);
+    rsMatrixLoadPerspective((rs_matrix4x4*) buf1924, *(float*)buf1925, *(float*)buf1926, *(float*)buf1927, *(float*)buf1928);
+    rsMatrixLoadRotate((rs_matrix4x4*) buf1929, *(float*)buf1930, *(float*)buf1931, *(float*)buf1932, *(float*)buf1933);
+    rsMatrixLoadScale((rs_matrix4x4*) buf1934, *(float*)buf1935, *(float*)buf1936, *(float*)buf1937);
+    rsMatrixLoadTranslate((rs_matrix4x4*) buf1938, *(float*)buf1939, *(float*)buf1940, *(float*)buf1941);
+    rsMatrixMultiply((rs_matrix4x4*) buf1942, (const rs_matrix4x4*) buf1943);
+    rsMatrixMultiply((rs_matrix3x3*) buf1944, (const rs_matrix3x3*) buf1945);
+    rsMatrixMultiply((rs_matrix2x2*) buf1946, (const rs_matrix2x2*) buf1947);
+    *(float4*)buf1948 = rsMatrixMultiply((rs_matrix4x4*) buf1949, *(float4*)buf1950);
+    *(float4*)buf1951 = rsMatrixMultiply((rs_matrix4x4*) buf1952, *(float3*)buf1953);
+    *(float4*)buf1954 = rsMatrixMultiply((rs_matrix4x4*) buf1955, *(float2*)buf1956);
+    *(float3*)buf1957 = rsMatrixMultiply((rs_matrix3x3*) buf1958, *(float3*)buf1959);
+    *(float3*)buf1960 = rsMatrixMultiply((rs_matrix3x3*) buf1961, *(float2*)buf1962);
+    *(float2*)buf1963 = rsMatrixMultiply((rs_matrix2x2*) buf1964, *(float2*)buf1965);
+    rsMatrixRotate((rs_matrix4x4*) buf1966, *(float*)buf1967, *(float*)buf1968, *(float*)buf1969, *(float*)buf1970);
+    rsMatrixScale((rs_matrix4x4*) buf1971, *(float*)buf1972, *(float*)buf1973, *(float*)buf1974);
+    rsMatrixSet((rs_matrix4x4*) buf1975, *(uint32_t*)buf1976, *(uint32_t*)buf1977, *(float*)buf1978);
+    rsMatrixSet((rs_matrix3x3*) buf1979, *(uint32_t*)buf1980, *(uint32_t*)buf1981, *(float*)buf1982);
+    rsMatrixSet((rs_matrix2x2*) buf1983, *(uint32_t*)buf1984, *(uint32_t*)buf1985, *(float*)buf1986);
+    rsMatrixTranslate((rs_matrix4x4*) buf1987, *(float*)buf1988, *(float*)buf1989, *(float*)buf1990);
+    rsMatrixTranspose((rs_matrix4x4*) buf1991);
+    rsMatrixTranspose((rs_matrix3x3*) buf1992);
+    rsMatrixTranspose((rs_matrix2x2*) buf1993);
+    *(uchar4*)buf1994 = rsPackColorTo8888(*(float*)buf1995, *(float*)buf1996, *(float*)buf1997);
+    *(uchar4*)buf1998 = rsPackColorTo8888(*(float*)buf1999, *(float*)buf2000, *(float*)buf2001, *(float*)buf2002);
+    *(uchar4*)buf2003 = rsPackColorTo8888(*(float3*)buf2004);
+    *(uchar4*)buf2005 = rsPackColorTo8888(*(float4*)buf2006);
+    rsQuaternionAdd((rs_quaternion*) buf2007, (const rs_quaternion*) buf2008);
+    rsQuaternionConjugate((rs_quaternion*) buf2009);
+    *(float*)buf2010 = rsQuaternionDot((const rs_quaternion*) buf2011, (const rs_quaternion*) buf2012);
+    rsQuaternionGetMatrixUnit((rs_matrix4x4*) buf2013, (const rs_quaternion*) buf2014);
+    rsQuaternionLoadRotate((rs_quaternion*) buf2015, *(float*)buf2016, *(float*)buf2017, *(float*)buf2018, *(float*)buf2019);
+    rsQuaternionLoadRotateUnit((rs_quaternion*) buf2020, *(float*)buf2021, *(float*)buf2022, *(float*)buf2023, *(float*)buf2024);
+    rsQuaternionMultiply((rs_quaternion*) buf2025, *(float*)buf2026);
+    rsQuaternionMultiply((rs_quaternion*) buf2027, (const rs_quaternion*) buf2028);
+    rsQuaternionNormalize((rs_quaternion*) buf2029);
+    rsQuaternionSet((rs_quaternion*) buf2030, *(float*)buf2031, *(float*)buf2032, *(float*)buf2033, *(float*)buf2034);
+    rsQuaternionSet((rs_quaternion*) buf2035, (const rs_quaternion*) buf2036);
+    rsQuaternionSlerp((rs_quaternion*) buf2037, (const rs_quaternion*) buf2038, (const rs_quaternion*) buf2039, *(float*)buf2040);
+    *(int*)buf2041 = rsRand(*(int*)buf2042);
+    *(int*)buf2043 = rsRand(*(int*)buf2044, *(int*)buf2045);
+    *(float*)buf2046 = rsRand(*(float*)buf2047);
+    *(float*)buf2048 = rsRand(*(float*)buf2049, *(float*)buf2050);
+    *(bool*)buf2051 = rsSendToClient(*(int*)buf2052);
+    *(bool*)buf2053 = rsSendToClient(*(int*)buf2054, (const void*) buf2055, *(uint*)buf2056);
+    rsSendToClientBlocking(*(int*)buf2057);
+    rsSendToClientBlocking(*(int*)buf2058, (const void*) buf2059, *(uint*)buf2060);
+    rsSetObject((rs_element*) buf2061, *(rs_element*)buf2062);
+    rsSetObject((rs_type*) buf2063, *(rs_type*)buf2064);
+    rsSetObject((rs_allocation*) buf2065, *(rs_allocation*)buf2066);
+    rsSetObject((rs_sampler*) buf2067, *(rs_sampler*)buf2068);
+    rsSetObject((rs_script*) buf2069, *(rs_script*)buf2070);
+#ifndef __LP64__
+    rsSetObject((rs_mesh*) buf2071, *(rs_mesh*)buf2072);
+    rsSetObject((rs_program_fragment*) buf2073, *(rs_program_fragment*)buf2074);
+    rsSetObject((rs_program_vertex*) buf2075, *(rs_program_vertex*)buf2076);
+    rsSetObject((rs_program_raster*) buf2077, *(rs_program_raster*)buf2078);
+    rsSetObject((rs_program_store*) buf2079, *(rs_program_store*)buf2080);
+    rsSetObject((rs_font*) buf2081, *(rs_font*)buf2082);
+#endif
+    *(rs_time_t*)buf2083 = rsTime((rs_time_t*) buf2084);
+    *(float4*)buf2085 = rsUnpackColor8888(*(uchar4*)buf2086);
+    *(int64_t*)buf2087 = rsUptimeMillis();
+    *(int64_t*)buf2088 = rsUptimeNanos();
+    *(float4*)buf2089 = rsYuvToRGBA_float4(*(uchar*)buf2090, *(uchar*)buf2091, *(uchar*)buf2092);
+    *(uchar4*)buf2093 = rsYuvToRGBA_uchar4(*(uchar*)buf2094, *(uchar*)buf2095, *(uchar*)buf2096);
+#ifndef __LP64__
+    rsgAllocationSyncAll(*(rs_allocation*)buf2097);
+#endif
+#ifndef __LP64__
+    rsgBindConstant(*(rs_program_fragment*)buf2098, *(uint*)buf2099, *(rs_allocation*)buf2100);
+#endif
+#ifndef __LP64__
+    rsgBindConstant(*(rs_program_vertex*)buf2101, *(uint*)buf2102, *(rs_allocation*)buf2103);
+#endif
+#ifndef __LP64__
+    rsgBindFont(*(rs_font*)buf2104);
+#endif
+#ifndef __LP64__
+    rsgBindProgramFragment(*(rs_program_fragment*)buf2105);
+#endif
+#ifndef __LP64__
+    rsgBindProgramRaster(*(rs_program_raster*)buf2106);
+#endif
+#ifndef __LP64__
+    rsgBindProgramStore(*(rs_program_store*)buf2107);
+#endif
+#ifndef __LP64__
+    rsgBindProgramVertex(*(rs_program_vertex*)buf2108);
+#endif
+#ifndef __LP64__
+    rsgBindSampler(*(rs_program_fragment*)buf2109, *(uint*)buf2110, *(rs_sampler*)buf2111);
+#endif
+#ifndef __LP64__
+    rsgBindTexture(*(rs_program_fragment*)buf2112, *(uint*)buf2113, *(rs_allocation*)buf2114);
+#endif
+#ifndef __LP64__
+    rsgClearColor(*(float*)buf2115, *(float*)buf2116, *(float*)buf2117, *(float*)buf2118);
+#endif
+#ifndef __LP64__
+    rsgClearDepth(*(float*)buf2119);
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf2120);
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf2121, *(uint*)buf2122);
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf2123, *(uint*)buf2124, *(uint*)buf2125, *(uint*)buf2126);
+#endif
+#ifndef __LP64__
+    rsgDrawQuad(*(float*)buf2127, *(float*)buf2128, *(float*)buf2129, *(float*)buf2130, *(float*)buf2131, *(float*)buf2132, *(float*)buf2133, *(float*)buf2134, *(float*)buf2135, *(float*)buf2136, *(float*)buf2137, *(float*)buf2138);
+#endif
+#ifndef __LP64__
+    rsgDrawQuadTexCoords(*(float*)buf2139, *(float*)buf2140, *(float*)buf2141, *(float*)buf2142, *(float*)buf2143, *(float*)buf2144, *(float*)buf2145, *(float*)buf2146, *(float*)buf2147, *(float*)buf2148, *(float*)buf2149, *(float*)buf2150, *(float*)buf2151, *(float*)buf2152, *(float*)buf2153, *(float*)buf2154, *(float*)buf2155, *(float*)buf2156, *(float*)buf2157, *(float*)buf2158);
+#endif
+#ifndef __LP64__
+    rsgDrawRect(*(float*)buf2159, *(float*)buf2160, *(float*)buf2161, *(float*)buf2162, *(float*)buf2163);
+#endif
+#ifndef __LP64__
+    rsgDrawSpriteScreenspace(*(float*)buf2164, *(float*)buf2165, *(float*)buf2166, *(float*)buf2167, *(float*)buf2168);
+#endif
+#ifndef __LP64__
+    rsgDrawText((const char*) buf2169, *(int*)buf2170, *(int*)buf2171);
+#endif
+#ifndef __LP64__
+    rsgDrawText(*(rs_allocation*)buf2172, *(int*)buf2173, *(int*)buf2174);
+#endif
+#ifndef __LP64__
+    rsgFontColor(*(float*)buf2175, *(float*)buf2176, *(float*)buf2177, *(float*)buf2178);
+#endif
+#ifndef __LP64__
+    *(uint*)buf2179 = rsgGetHeight();
+#endif
+#ifndef __LP64__
+    *(uint*)buf2180 = rsgGetWidth();
+#endif
+#ifndef __LP64__
+    rsgMeasureText((const char*) buf2181, (int*) buf2182, (int*) buf2183, (int*) buf2184, (int*) buf2185);
+#endif
+#ifndef __LP64__
+    rsgMeasureText(*(rs_allocation*)buf2186, (int*) buf2187, (int*) buf2188, (int*) buf2189, (int*) buf2190);
+#endif
+#ifndef __LP64__
+    rsgMeshComputeBoundingBox(*(rs_mesh*)buf2191, (float*) buf2192, (float*) buf2193, (float*) buf2194, (float*) buf2195, (float*) buf2196, (float*) buf2197);
+#endif
+#ifndef __LP64__
+    rsgMeshComputeBoundingBox(*(rs_mesh*)buf2198, (float3*) buf2199, (float3*) buf2200);
+#endif
+#ifndef __LP64__
+    rsgProgramFragmentConstantColor(*(rs_program_fragment*)buf2201, *(float*)buf2202, *(float*)buf2203, *(float*)buf2204, *(float*)buf2205);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexGetProjectionMatrix((rs_matrix4x4*) buf2206);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadModelMatrix((const rs_matrix4x4*) buf2207);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadProjectionMatrix((const rs_matrix4x4*) buf2208);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadTextureMatrix((const rs_matrix4x4*) buf2209);
+#endif
+    *(float*)buf2210 = rsqrt(*(float*)buf2211);
+    *(float2*)buf2212 = rsqrt(*(float2*)buf2213);
+    *(float3*)buf2214 = rsqrt(*(float3*)buf2215);
+    *(float4*)buf2216 = rsqrt(*(float4*)buf2217);
+    *(float*)buf2218 = sign(*(float*)buf2219);
+    *(float2*)buf2220 = sign(*(float2*)buf2221);
+    *(float3*)buf2222 = sign(*(float3*)buf2223);
+    *(float4*)buf2224 = sign(*(float4*)buf2225);
+    *(float*)buf2226 = sin(*(float*)buf2227);
+    *(float2*)buf2228 = sin(*(float2*)buf2229);
+    *(float3*)buf2230 = sin(*(float3*)buf2231);
+    *(float4*)buf2232 = sin(*(float4*)buf2233);
+    *(float*)buf2234 = sincos(*(float*)buf2235, (float*) buf2236);
+    *(float2*)buf2237 = sincos(*(float2*)buf2238, (float2*) buf2239);
+    *(float3*)buf2240 = sincos(*(float3*)buf2241, (float3*) buf2242);
+    *(float4*)buf2243 = sincos(*(float4*)buf2244, (float4*) buf2245);
+    *(float*)buf2246 = sinh(*(float*)buf2247);
+    *(float2*)buf2248 = sinh(*(float2*)buf2249);
+    *(float3*)buf2250 = sinh(*(float3*)buf2251);
+    *(float4*)buf2252 = sinh(*(float4*)buf2253);
+    *(float*)buf2254 = sinpi(*(float*)buf2255);
+    *(float2*)buf2256 = sinpi(*(float2*)buf2257);
+    *(float3*)buf2258 = sinpi(*(float3*)buf2259);
+    *(float4*)buf2260 = sinpi(*(float4*)buf2261);
+    *(float*)buf2262 = sqrt(*(float*)buf2263);
+    *(float2*)buf2264 = sqrt(*(float2*)buf2265);
+    *(float3*)buf2266 = sqrt(*(float3*)buf2267);
+    *(float4*)buf2268 = sqrt(*(float4*)buf2269);
+    *(float*)buf2270 = step(*(float*)buf2271, *(float*)buf2272);
+    *(float2*)buf2273 = step(*(float2*)buf2274, *(float2*)buf2275);
+    *(float3*)buf2276 = step(*(float3*)buf2277, *(float3*)buf2278);
+    *(float4*)buf2279 = step(*(float4*)buf2280, *(float4*)buf2281);
+    *(float2*)buf2282 = step(*(float2*)buf2283, *(float*)buf2284);
+    *(float3*)buf2285 = step(*(float3*)buf2286, *(float*)buf2287);
+    *(float4*)buf2288 = step(*(float4*)buf2289, *(float*)buf2290);
+    *(float*)buf2291 = tan(*(float*)buf2292);
+    *(float2*)buf2293 = tan(*(float2*)buf2294);
+    *(float3*)buf2295 = tan(*(float3*)buf2296);
+    *(float4*)buf2297 = tan(*(float4*)buf2298);
+    *(float*)buf2299 = tanh(*(float*)buf2300);
+    *(float2*)buf2301 = tanh(*(float2*)buf2302);
+    *(float3*)buf2303 = tanh(*(float3*)buf2304);
+    *(float4*)buf2305 = tanh(*(float4*)buf2306);
+    *(float*)buf2307 = tanpi(*(float*)buf2308);
+    *(float2*)buf2309 = tanpi(*(float2*)buf2310);
+    *(float3*)buf2311 = tanpi(*(float3*)buf2312);
+    *(float4*)buf2313 = tanpi(*(float4*)buf2314);
+    *(float*)buf2315 = tgamma(*(float*)buf2316);
+    *(float2*)buf2317 = tgamma(*(float2*)buf2318);
+    *(float3*)buf2319 = tgamma(*(float3*)buf2320);
+    *(float4*)buf2321 = tgamma(*(float4*)buf2322);
+    *(float*)buf2323 = trunc(*(float*)buf2324);
+    *(float2*)buf2325 = trunc(*(float2*)buf2326);
+    *(float3*)buf2327 = trunc(*(float3*)buf2328);
+    *(float4*)buf2329 = trunc(*(float4*)buf2330);
+}
diff --git a/slang/tests/P_all_api_11/stderr.txt.expect b/slang/tests/P_all_api_11/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_all_api_11/stderr.txt.expect
diff --git a/slang/tests/P_all_api_11/stdout.txt.expect b/slang/tests/P_all_api_11/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_all_api_11/stdout.txt.expect
diff --git a/slang/tests/P_all_api_12/all12.rs b/slang/tests/P_all_api_12/all12.rs
new file mode 100644
index 0000000..98268c9
--- /dev/null
+++ b/slang/tests/P_all_api_12/all12.rs
@@ -0,0 +1,3296 @@
+// -target-api 12 -Wno-deprecated-declarations
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Don't edit this file!  It is auto-generated by frameworks/rs/api/generate.sh.
+
+#pragma version(1)
+#pragma rs java_package_name(com.example.renderscript.testallapi)
+
+#include "rs_graphics.rsh"
+
+char buf0[200];
+char buf1[200];
+char buf2[200];
+char buf3[200];
+char buf4[200];
+char buf5[200];
+char buf6[200];
+char buf7[200];
+char buf8[200];
+char buf9[200];
+char buf10[200];
+char buf11[200];
+char buf12[200];
+char buf13[200];
+char buf14[200];
+char buf15[200];
+char buf16[200];
+char buf17[200];
+char buf18[200];
+char buf19[200];
+char buf20[200];
+char buf21[200];
+char buf22[200];
+char buf23[200];
+char buf24[200];
+char buf25[200];
+char buf26[200];
+char buf27[200];
+char buf28[200];
+char buf29[200];
+char buf30[200];
+char buf31[200];
+char buf32[200];
+char buf33[200];
+char buf34[200];
+char buf35[200];
+char buf36[200];
+char buf37[200];
+char buf38[200];
+char buf39[200];
+char buf40[200];
+char buf41[200];
+char buf42[200];
+char buf43[200];
+char buf44[200];
+char buf45[200];
+char buf46[200];
+char buf47[200];
+char buf48[200];
+char buf49[200];
+char buf50[200];
+char buf51[200];
+char buf52[200];
+char buf53[200];
+char buf54[200];
+char buf55[200];
+char buf56[200];
+char buf57[200];
+char buf58[200];
+char buf59[200];
+char buf60[200];
+char buf61[200];
+char buf62[200];
+char buf63[200];
+char buf64[200];
+char buf65[200];
+char buf66[200];
+char buf67[200];
+char buf68[200];
+char buf69[200];
+char buf70[200];
+char buf71[200];
+char buf72[200];
+char buf73[200];
+char buf74[200];
+char buf75[200];
+char buf76[200];
+char buf77[200];
+char buf78[200];
+char buf79[200];
+char buf80[200];
+char buf81[200];
+char buf82[200];
+char buf83[200];
+char buf84[200];
+char buf85[200];
+char buf86[200];
+char buf87[200];
+char buf88[200];
+char buf89[200];
+char buf90[200];
+char buf91[200];
+char buf92[200];
+char buf93[200];
+char buf94[200];
+char buf95[200];
+char buf96[200];
+char buf97[200];
+char buf98[200];
+char buf99[200];
+char buf100[200];
+char buf101[200];
+char buf102[200];
+char buf103[200];
+char buf104[200];
+char buf105[200];
+char buf106[200];
+char buf107[200];
+char buf108[200];
+char buf109[200];
+char buf110[200];
+char buf111[200];
+char buf112[200];
+char buf113[200];
+char buf114[200];
+char buf115[200];
+char buf116[200];
+char buf117[200];
+char buf118[200];
+char buf119[200];
+char buf120[200];
+char buf121[200];
+char buf122[200];
+char buf123[200];
+char buf124[200];
+char buf125[200];
+char buf126[200];
+char buf127[200];
+char buf128[200];
+char buf129[200];
+char buf130[200];
+char buf131[200];
+char buf132[200];
+char buf133[200];
+char buf134[200];
+char buf135[200];
+char buf136[200];
+char buf137[200];
+char buf138[200];
+char buf139[200];
+char buf140[200];
+char buf141[200];
+char buf142[200];
+char buf143[200];
+char buf144[200];
+char buf145[200];
+char buf146[200];
+char buf147[200];
+char buf148[200];
+char buf149[200];
+char buf150[200];
+char buf151[200];
+char buf152[200];
+char buf153[200];
+char buf154[200];
+char buf155[200];
+char buf156[200];
+char buf157[200];
+char buf158[200];
+char buf159[200];
+char buf160[200];
+char buf161[200];
+char buf162[200];
+char buf163[200];
+char buf164[200];
+char buf165[200];
+char buf166[200];
+char buf167[200];
+char buf168[200];
+char buf169[200];
+char buf170[200];
+char buf171[200];
+char buf172[200];
+char buf173[200];
+char buf174[200];
+char buf175[200];
+char buf176[200];
+char buf177[200];
+char buf178[200];
+char buf179[200];
+char buf180[200];
+char buf181[200];
+char buf182[200];
+char buf183[200];
+char buf184[200];
+char buf185[200];
+char buf186[200];
+char buf187[200];
+char buf188[200];
+char buf189[200];
+char buf190[200];
+char buf191[200];
+char buf192[200];
+char buf193[200];
+char buf194[200];
+char buf195[200];
+char buf196[200];
+char buf197[200];
+char buf198[200];
+char buf199[200];
+char buf200[200];
+char buf201[200];
+char buf202[200];
+char buf203[200];
+char buf204[200];
+char buf205[200];
+char buf206[200];
+char buf207[200];
+char buf208[200];
+char buf209[200];
+char buf210[200];
+char buf211[200];
+char buf212[200];
+char buf213[200];
+char buf214[200];
+char buf215[200];
+char buf216[200];
+char buf217[200];
+char buf218[200];
+char buf219[200];
+char buf220[200];
+char buf221[200];
+char buf222[200];
+char buf223[200];
+char buf224[200];
+char buf225[200];
+char buf226[200];
+char buf227[200];
+char buf228[200];
+char buf229[200];
+char buf230[200];
+char buf231[200];
+char buf232[200];
+char buf233[200];
+char buf234[200];
+char buf235[200];
+char buf236[200];
+char buf237[200];
+char buf238[200];
+char buf239[200];
+char buf240[200];
+char buf241[200];
+char buf242[200];
+char buf243[200];
+char buf244[200];
+char buf245[200];
+char buf246[200];
+char buf247[200];
+char buf248[200];
+char buf249[200];
+char buf250[200];
+char buf251[200];
+char buf252[200];
+char buf253[200];
+char buf254[200];
+char buf255[200];
+char buf256[200];
+char buf257[200];
+char buf258[200];
+char buf259[200];
+char buf260[200];
+char buf261[200];
+char buf262[200];
+char buf263[200];
+char buf264[200];
+char buf265[200];
+char buf266[200];
+char buf267[200];
+char buf268[200];
+char buf269[200];
+char buf270[200];
+char buf271[200];
+char buf272[200];
+char buf273[200];
+char buf274[200];
+char buf275[200];
+char buf276[200];
+char buf277[200];
+char buf278[200];
+char buf279[200];
+char buf280[200];
+char buf281[200];
+char buf282[200];
+char buf283[200];
+char buf284[200];
+char buf285[200];
+char buf286[200];
+char buf287[200];
+char buf288[200];
+char buf289[200];
+char buf290[200];
+char buf291[200];
+char buf292[200];
+char buf293[200];
+char buf294[200];
+char buf295[200];
+char buf296[200];
+char buf297[200];
+char buf298[200];
+char buf299[200];
+char buf300[200];
+char buf301[200];
+char buf302[200];
+char buf303[200];
+char buf304[200];
+char buf305[200];
+char buf306[200];
+char buf307[200];
+char buf308[200];
+char buf309[200];
+char buf310[200];
+char buf311[200];
+char buf312[200];
+char buf313[200];
+char buf314[200];
+char buf315[200];
+char buf316[200];
+char buf317[200];
+char buf318[200];
+char buf319[200];
+char buf320[200];
+char buf321[200];
+char buf322[200];
+char buf323[200];
+char buf324[200];
+char buf325[200];
+char buf326[200];
+char buf327[200];
+char buf328[200];
+char buf329[200];
+char buf330[200];
+char buf331[200];
+char buf332[200];
+char buf333[200];
+char buf334[200];
+char buf335[200];
+char buf336[200];
+char buf337[200];
+char buf338[200];
+char buf339[200];
+char buf340[200];
+char buf341[200];
+char buf342[200];
+char buf343[200];
+char buf344[200];
+char buf345[200];
+char buf346[200];
+char buf347[200];
+char buf348[200];
+char buf349[200];
+char buf350[200];
+char buf351[200];
+char buf352[200];
+char buf353[200];
+char buf354[200];
+char buf355[200];
+char buf356[200];
+char buf357[200];
+char buf358[200];
+char buf359[200];
+char buf360[200];
+char buf361[200];
+char buf362[200];
+char buf363[200];
+char buf364[200];
+char buf365[200];
+char buf366[200];
+char buf367[200];
+char buf368[200];
+char buf369[200];
+char buf370[200];
+char buf371[200];
+char buf372[200];
+char buf373[200];
+char buf374[200];
+char buf375[200];
+char buf376[200];
+char buf377[200];
+char buf378[200];
+char buf379[200];
+char buf380[200];
+char buf381[200];
+char buf382[200];
+char buf383[200];
+char buf384[200];
+char buf385[200];
+char buf386[200];
+char buf387[200];
+char buf388[200];
+char buf389[200];
+char buf390[200];
+char buf391[200];
+char buf392[200];
+char buf393[200];
+char buf394[200];
+char buf395[200];
+char buf396[200];
+char buf397[200];
+char buf398[200];
+char buf399[200];
+char buf400[200];
+char buf401[200];
+char buf402[200];
+char buf403[200];
+char buf404[200];
+char buf405[200];
+char buf406[200];
+char buf407[200];
+char buf408[200];
+char buf409[200];
+char buf410[200];
+char buf411[200];
+char buf412[200];
+char buf413[200];
+char buf414[200];
+char buf415[200];
+char buf416[200];
+char buf417[200];
+char buf418[200];
+char buf419[200];
+char buf420[200];
+char buf421[200];
+char buf422[200];
+char buf423[200];
+char buf424[200];
+char buf425[200];
+char buf426[200];
+char buf427[200];
+char buf428[200];
+char buf429[200];
+char buf430[200];
+char buf431[200];
+char buf432[200];
+char buf433[200];
+char buf434[200];
+char buf435[200];
+char buf436[200];
+char buf437[200];
+char buf438[200];
+char buf439[200];
+char buf440[200];
+char buf441[200];
+char buf442[200];
+char buf443[200];
+char buf444[200];
+char buf445[200];
+char buf446[200];
+char buf447[200];
+char buf448[200];
+char buf449[200];
+char buf450[200];
+char buf451[200];
+char buf452[200];
+char buf453[200];
+char buf454[200];
+char buf455[200];
+char buf456[200];
+char buf457[200];
+char buf458[200];
+char buf459[200];
+char buf460[200];
+char buf461[200];
+char buf462[200];
+char buf463[200];
+char buf464[200];
+char buf465[200];
+char buf466[200];
+char buf467[200];
+char buf468[200];
+char buf469[200];
+char buf470[200];
+char buf471[200];
+char buf472[200];
+char buf473[200];
+char buf474[200];
+char buf475[200];
+char buf476[200];
+char buf477[200];
+char buf478[200];
+char buf479[200];
+char buf480[200];
+char buf481[200];
+char buf482[200];
+char buf483[200];
+char buf484[200];
+char buf485[200];
+char buf486[200];
+char buf487[200];
+char buf488[200];
+char buf489[200];
+char buf490[200];
+char buf491[200];
+char buf492[200];
+char buf493[200];
+char buf494[200];
+char buf495[200];
+char buf496[200];
+char buf497[200];
+char buf498[200];
+char buf499[200];
+char buf500[200];
+char buf501[200];
+char buf502[200];
+char buf503[200];
+char buf504[200];
+char buf505[200];
+char buf506[200];
+char buf507[200];
+char buf508[200];
+char buf509[200];
+char buf510[200];
+char buf511[200];
+char buf512[200];
+char buf513[200];
+char buf514[200];
+char buf515[200];
+char buf516[200];
+char buf517[200];
+char buf518[200];
+char buf519[200];
+char buf520[200];
+char buf521[200];
+char buf522[200];
+char buf523[200];
+char buf524[200];
+char buf525[200];
+char buf526[200];
+char buf527[200];
+char buf528[200];
+char buf529[200];
+char buf530[200];
+char buf531[200];
+char buf532[200];
+char buf533[200];
+char buf534[200];
+char buf535[200];
+char buf536[200];
+char buf537[200];
+char buf538[200];
+char buf539[200];
+char buf540[200];
+char buf541[200];
+char buf542[200];
+char buf543[200];
+char buf544[200];
+char buf545[200];
+char buf546[200];
+char buf547[200];
+char buf548[200];
+char buf549[200];
+char buf550[200];
+char buf551[200];
+char buf552[200];
+char buf553[200];
+char buf554[200];
+char buf555[200];
+char buf556[200];
+char buf557[200];
+char buf558[200];
+char buf559[200];
+char buf560[200];
+char buf561[200];
+char buf562[200];
+char buf563[200];
+char buf564[200];
+char buf565[200];
+char buf566[200];
+char buf567[200];
+char buf568[200];
+char buf569[200];
+char buf570[200];
+char buf571[200];
+char buf572[200];
+char buf573[200];
+char buf574[200];
+char buf575[200];
+char buf576[200];
+char buf577[200];
+char buf578[200];
+char buf579[200];
+char buf580[200];
+char buf581[200];
+char buf582[200];
+char buf583[200];
+char buf584[200];
+char buf585[200];
+char buf586[200];
+char buf587[200];
+char buf588[200];
+char buf589[200];
+char buf590[200];
+char buf591[200];
+char buf592[200];
+char buf593[200];
+char buf594[200];
+char buf595[200];
+char buf596[200];
+char buf597[200];
+char buf598[200];
+char buf599[200];
+char buf600[200];
+char buf601[200];
+char buf602[200];
+char buf603[200];
+char buf604[200];
+char buf605[200];
+char buf606[200];
+char buf607[200];
+char buf608[200];
+char buf609[200];
+char buf610[200];
+char buf611[200];
+char buf612[200];
+char buf613[200];
+char buf614[200];
+char buf615[200];
+char buf616[200];
+char buf617[200];
+char buf618[200];
+char buf619[200];
+char buf620[200];
+char buf621[200];
+char buf622[200];
+char buf623[200];
+char buf624[200];
+char buf625[200];
+char buf626[200];
+char buf627[200];
+char buf628[200];
+char buf629[200];
+char buf630[200];
+char buf631[200];
+char buf632[200];
+char buf633[200];
+char buf634[200];
+char buf635[200];
+char buf636[200];
+char buf637[200];
+char buf638[200];
+char buf639[200];
+char buf640[200];
+char buf641[200];
+char buf642[200];
+char buf643[200];
+char buf644[200];
+char buf645[200];
+char buf646[200];
+char buf647[200];
+char buf648[200];
+char buf649[200];
+char buf650[200];
+char buf651[200];
+char buf652[200];
+char buf653[200];
+char buf654[200];
+char buf655[200];
+char buf656[200];
+char buf657[200];
+char buf658[200];
+char buf659[200];
+char buf660[200];
+char buf661[200];
+char buf662[200];
+char buf663[200];
+char buf664[200];
+char buf665[200];
+char buf666[200];
+char buf667[200];
+char buf668[200];
+char buf669[200];
+char buf670[200];
+char buf671[200];
+char buf672[200];
+char buf673[200];
+char buf674[200];
+char buf675[200];
+char buf676[200];
+char buf677[200];
+char buf678[200];
+char buf679[200];
+char buf680[200];
+char buf681[200];
+char buf682[200];
+char buf683[200];
+char buf684[200];
+char buf685[200];
+char buf686[200];
+char buf687[200];
+char buf688[200];
+char buf689[200];
+char buf690[200];
+char buf691[200];
+char buf692[200];
+char buf693[200];
+char buf694[200];
+char buf695[200];
+char buf696[200];
+char buf697[200];
+char buf698[200];
+char buf699[200];
+char buf700[200];
+char buf701[200];
+char buf702[200];
+char buf703[200];
+char buf704[200];
+char buf705[200];
+char buf706[200];
+char buf707[200];
+char buf708[200];
+char buf709[200];
+char buf710[200];
+char buf711[200];
+char buf712[200];
+char buf713[200];
+char buf714[200];
+char buf715[200];
+char buf716[200];
+char buf717[200];
+char buf718[200];
+char buf719[200];
+char buf720[200];
+char buf721[200];
+char buf722[200];
+char buf723[200];
+char buf724[200];
+char buf725[200];
+char buf726[200];
+char buf727[200];
+char buf728[200];
+char buf729[200];
+char buf730[200];
+char buf731[200];
+char buf732[200];
+char buf733[200];
+char buf734[200];
+char buf735[200];
+char buf736[200];
+char buf737[200];
+char buf738[200];
+char buf739[200];
+char buf740[200];
+char buf741[200];
+char buf742[200];
+char buf743[200];
+char buf744[200];
+char buf745[200];
+char buf746[200];
+char buf747[200];
+char buf748[200];
+char buf749[200];
+char buf750[200];
+char buf751[200];
+char buf752[200];
+char buf753[200];
+char buf754[200];
+char buf755[200];
+char buf756[200];
+char buf757[200];
+char buf758[200];
+char buf759[200];
+char buf760[200];
+char buf761[200];
+char buf762[200];
+char buf763[200];
+char buf764[200];
+char buf765[200];
+char buf766[200];
+char buf767[200];
+char buf768[200];
+char buf769[200];
+char buf770[200];
+char buf771[200];
+char buf772[200];
+char buf773[200];
+char buf774[200];
+char buf775[200];
+char buf776[200];
+char buf777[200];
+char buf778[200];
+char buf779[200];
+char buf780[200];
+char buf781[200];
+char buf782[200];
+char buf783[200];
+char buf784[200];
+char buf785[200];
+char buf786[200];
+char buf787[200];
+char buf788[200];
+char buf789[200];
+char buf790[200];
+char buf791[200];
+char buf792[200];
+char buf793[200];
+char buf794[200];
+char buf795[200];
+char buf796[200];
+char buf797[200];
+char buf798[200];
+char buf799[200];
+char buf800[200];
+char buf801[200];
+char buf802[200];
+char buf803[200];
+char buf804[200];
+char buf805[200];
+char buf806[200];
+char buf807[200];
+char buf808[200];
+char buf809[200];
+char buf810[200];
+char buf811[200];
+char buf812[200];
+char buf813[200];
+char buf814[200];
+char buf815[200];
+char buf816[200];
+char buf817[200];
+char buf818[200];
+char buf819[200];
+char buf820[200];
+char buf821[200];
+char buf822[200];
+char buf823[200];
+char buf824[200];
+char buf825[200];
+char buf826[200];
+char buf827[200];
+char buf828[200];
+char buf829[200];
+char buf830[200];
+char buf831[200];
+char buf832[200];
+char buf833[200];
+char buf834[200];
+char buf835[200];
+char buf836[200];
+char buf837[200];
+char buf838[200];
+char buf839[200];
+char buf840[200];
+char buf841[200];
+char buf842[200];
+char buf843[200];
+char buf844[200];
+char buf845[200];
+char buf846[200];
+char buf847[200];
+char buf848[200];
+char buf849[200];
+char buf850[200];
+char buf851[200];
+char buf852[200];
+char buf853[200];
+char buf854[200];
+char buf855[200];
+char buf856[200];
+char buf857[200];
+char buf858[200];
+char buf859[200];
+char buf860[200];
+char buf861[200];
+char buf862[200];
+char buf863[200];
+char buf864[200];
+char buf865[200];
+char buf866[200];
+char buf867[200];
+char buf868[200];
+char buf869[200];
+char buf870[200];
+char buf871[200];
+char buf872[200];
+char buf873[200];
+char buf874[200];
+char buf875[200];
+char buf876[200];
+char buf877[200];
+char buf878[200];
+char buf879[200];
+char buf880[200];
+char buf881[200];
+char buf882[200];
+char buf883[200];
+char buf884[200];
+char buf885[200];
+char buf886[200];
+char buf887[200];
+char buf888[200];
+char buf889[200];
+char buf890[200];
+char buf891[200];
+char buf892[200];
+char buf893[200];
+char buf894[200];
+char buf895[200];
+char buf896[200];
+char buf897[200];
+char buf898[200];
+char buf899[200];
+char buf900[200];
+char buf901[200];
+char buf902[200];
+char buf903[200];
+char buf904[200];
+char buf905[200];
+char buf906[200];
+char buf907[200];
+char buf908[200];
+char buf909[200];
+char buf910[200];
+char buf911[200];
+char buf912[200];
+char buf913[200];
+char buf914[200];
+char buf915[200];
+char buf916[200];
+char buf917[200];
+char buf918[200];
+char buf919[200];
+char buf920[200];
+char buf921[200];
+char buf922[200];
+char buf923[200];
+char buf924[200];
+char buf925[200];
+char buf926[200];
+char buf927[200];
+char buf928[200];
+char buf929[200];
+char buf930[200];
+char buf931[200];
+char buf932[200];
+char buf933[200];
+char buf934[200];
+char buf935[200];
+char buf936[200];
+char buf937[200];
+char buf938[200];
+char buf939[200];
+char buf940[200];
+char buf941[200];
+char buf942[200];
+char buf943[200];
+char buf944[200];
+char buf945[200];
+char buf946[200];
+char buf947[200];
+char buf948[200];
+char buf949[200];
+char buf950[200];
+char buf951[200];
+char buf952[200];
+char buf953[200];
+char buf954[200];
+char buf955[200];
+char buf956[200];
+char buf957[200];
+char buf958[200];
+char buf959[200];
+char buf960[200];
+char buf961[200];
+char buf962[200];
+char buf963[200];
+char buf964[200];
+char buf965[200];
+char buf966[200];
+char buf967[200];
+char buf968[200];
+char buf969[200];
+char buf970[200];
+char buf971[200];
+char buf972[200];
+char buf973[200];
+char buf974[200];
+char buf975[200];
+char buf976[200];
+char buf977[200];
+char buf978[200];
+char buf979[200];
+char buf980[200];
+char buf981[200];
+char buf982[200];
+char buf983[200];
+char buf984[200];
+char buf985[200];
+char buf986[200];
+char buf987[200];
+char buf988[200];
+char buf989[200];
+char buf990[200];
+char buf991[200];
+char buf992[200];
+char buf993[200];
+char buf994[200];
+char buf995[200];
+char buf996[200];
+char buf997[200];
+char buf998[200];
+char buf999[200];
+char buf1000[200];
+char buf1001[200];
+char buf1002[200];
+char buf1003[200];
+char buf1004[200];
+char buf1005[200];
+char buf1006[200];
+char buf1007[200];
+char buf1008[200];
+char buf1009[200];
+char buf1010[200];
+char buf1011[200];
+char buf1012[200];
+char buf1013[200];
+char buf1014[200];
+char buf1015[200];
+char buf1016[200];
+char buf1017[200];
+char buf1018[200];
+char buf1019[200];
+char buf1020[200];
+char buf1021[200];
+char buf1022[200];
+char buf1023[200];
+char buf1024[200];
+char buf1025[200];
+char buf1026[200];
+char buf1027[200];
+char buf1028[200];
+char buf1029[200];
+char buf1030[200];
+char buf1031[200];
+char buf1032[200];
+char buf1033[200];
+char buf1034[200];
+char buf1035[200];
+char buf1036[200];
+char buf1037[200];
+char buf1038[200];
+char buf1039[200];
+char buf1040[200];
+char buf1041[200];
+char buf1042[200];
+char buf1043[200];
+char buf1044[200];
+char buf1045[200];
+char buf1046[200];
+char buf1047[200];
+char buf1048[200];
+char buf1049[200];
+char buf1050[200];
+char buf1051[200];
+char buf1052[200];
+char buf1053[200];
+char buf1054[200];
+char buf1055[200];
+char buf1056[200];
+char buf1057[200];
+char buf1058[200];
+char buf1059[200];
+char buf1060[200];
+char buf1061[200];
+char buf1062[200];
+char buf1063[200];
+char buf1064[200];
+char buf1065[200];
+char buf1066[200];
+char buf1067[200];
+char buf1068[200];
+char buf1069[200];
+char buf1070[200];
+char buf1071[200];
+char buf1072[200];
+char buf1073[200];
+char buf1074[200];
+char buf1075[200];
+char buf1076[200];
+char buf1077[200];
+char buf1078[200];
+char buf1079[200];
+char buf1080[200];
+char buf1081[200];
+char buf1082[200];
+char buf1083[200];
+char buf1084[200];
+char buf1085[200];
+char buf1086[200];
+char buf1087[200];
+char buf1088[200];
+char buf1089[200];
+char buf1090[200];
+char buf1091[200];
+char buf1092[200];
+char buf1093[200];
+char buf1094[200];
+char buf1095[200];
+char buf1096[200];
+char buf1097[200];
+char buf1098[200];
+char buf1099[200];
+char buf1100[200];
+char buf1101[200];
+char buf1102[200];
+char buf1103[200];
+char buf1104[200];
+char buf1105[200];
+char buf1106[200];
+char buf1107[200];
+char buf1108[200];
+char buf1109[200];
+char buf1110[200];
+char buf1111[200];
+char buf1112[200];
+char buf1113[200];
+char buf1114[200];
+char buf1115[200];
+char buf1116[200];
+char buf1117[200];
+char buf1118[200];
+char buf1119[200];
+char buf1120[200];
+char buf1121[200];
+char buf1122[200];
+char buf1123[200];
+char buf1124[200];
+char buf1125[200];
+char buf1126[200];
+char buf1127[200];
+char buf1128[200];
+char buf1129[200];
+char buf1130[200];
+char buf1131[200];
+char buf1132[200];
+char buf1133[200];
+char buf1134[200];
+char buf1135[200];
+char buf1136[200];
+char buf1137[200];
+char buf1138[200];
+char buf1139[200];
+char buf1140[200];
+char buf1141[200];
+char buf1142[200];
+char buf1143[200];
+char buf1144[200];
+char buf1145[200];
+char buf1146[200];
+char buf1147[200];
+char buf1148[200];
+char buf1149[200];
+char buf1150[200];
+char buf1151[200];
+char buf1152[200];
+char buf1153[200];
+char buf1154[200];
+char buf1155[200];
+char buf1156[200];
+char buf1157[200];
+char buf1158[200];
+char buf1159[200];
+char buf1160[200];
+char buf1161[200];
+char buf1162[200];
+char buf1163[200];
+char buf1164[200];
+char buf1165[200];
+char buf1166[200];
+char buf1167[200];
+char buf1168[200];
+char buf1169[200];
+char buf1170[200];
+char buf1171[200];
+char buf1172[200];
+char buf1173[200];
+char buf1174[200];
+char buf1175[200];
+char buf1176[200];
+char buf1177[200];
+char buf1178[200];
+char buf1179[200];
+char buf1180[200];
+char buf1181[200];
+char buf1182[200];
+char buf1183[200];
+char buf1184[200];
+char buf1185[200];
+char buf1186[200];
+char buf1187[200];
+char buf1188[200];
+char buf1189[200];
+char buf1190[200];
+char buf1191[200];
+char buf1192[200];
+char buf1193[200];
+char buf1194[200];
+char buf1195[200];
+char buf1196[200];
+char buf1197[200];
+char buf1198[200];
+char buf1199[200];
+char buf1200[200];
+char buf1201[200];
+char buf1202[200];
+char buf1203[200];
+char buf1204[200];
+char buf1205[200];
+char buf1206[200];
+char buf1207[200];
+char buf1208[200];
+char buf1209[200];
+char buf1210[200];
+char buf1211[200];
+char buf1212[200];
+char buf1213[200];
+char buf1214[200];
+char buf1215[200];
+char buf1216[200];
+char buf1217[200];
+char buf1218[200];
+char buf1219[200];
+char buf1220[200];
+char buf1221[200];
+char buf1222[200];
+char buf1223[200];
+char buf1224[200];
+char buf1225[200];
+char buf1226[200];
+char buf1227[200];
+char buf1228[200];
+char buf1229[200];
+char buf1230[200];
+char buf1231[200];
+char buf1232[200];
+char buf1233[200];
+char buf1234[200];
+char buf1235[200];
+char buf1236[200];
+char buf1237[200];
+char buf1238[200];
+char buf1239[200];
+char buf1240[200];
+char buf1241[200];
+char buf1242[200];
+char buf1243[200];
+char buf1244[200];
+char buf1245[200];
+char buf1246[200];
+char buf1247[200];
+char buf1248[200];
+char buf1249[200];
+char buf1250[200];
+char buf1251[200];
+char buf1252[200];
+char buf1253[200];
+char buf1254[200];
+char buf1255[200];
+char buf1256[200];
+char buf1257[200];
+char buf1258[200];
+char buf1259[200];
+char buf1260[200];
+char buf1261[200];
+char buf1262[200];
+char buf1263[200];
+char buf1264[200];
+char buf1265[200];
+char buf1266[200];
+char buf1267[200];
+char buf1268[200];
+char buf1269[200];
+char buf1270[200];
+char buf1271[200];
+char buf1272[200];
+char buf1273[200];
+char buf1274[200];
+char buf1275[200];
+char buf1276[200];
+char buf1277[200];
+char buf1278[200];
+char buf1279[200];
+char buf1280[200];
+char buf1281[200];
+char buf1282[200];
+char buf1283[200];
+char buf1284[200];
+char buf1285[200];
+char buf1286[200];
+char buf1287[200];
+char buf1288[200];
+char buf1289[200];
+char buf1290[200];
+char buf1291[200];
+char buf1292[200];
+char buf1293[200];
+char buf1294[200];
+char buf1295[200];
+char buf1296[200];
+char buf1297[200];
+char buf1298[200];
+char buf1299[200];
+char buf1300[200];
+char buf1301[200];
+char buf1302[200];
+char buf1303[200];
+char buf1304[200];
+char buf1305[200];
+char buf1306[200];
+char buf1307[200];
+char buf1308[200];
+char buf1309[200];
+char buf1310[200];
+char buf1311[200];
+char buf1312[200];
+char buf1313[200];
+char buf1314[200];
+char buf1315[200];
+char buf1316[200];
+char buf1317[200];
+char buf1318[200];
+char buf1319[200];
+char buf1320[200];
+char buf1321[200];
+char buf1322[200];
+char buf1323[200];
+char buf1324[200];
+char buf1325[200];
+char buf1326[200];
+char buf1327[200];
+char buf1328[200];
+char buf1329[200];
+char buf1330[200];
+char buf1331[200];
+char buf1332[200];
+char buf1333[200];
+char buf1334[200];
+char buf1335[200];
+char buf1336[200];
+char buf1337[200];
+char buf1338[200];
+char buf1339[200];
+char buf1340[200];
+char buf1341[200];
+char buf1342[200];
+char buf1343[200];
+char buf1344[200];
+char buf1345[200];
+char buf1346[200];
+char buf1347[200];
+char buf1348[200];
+char buf1349[200];
+char buf1350[200];
+char buf1351[200];
+char buf1352[200];
+char buf1353[200];
+char buf1354[200];
+char buf1355[200];
+char buf1356[200];
+char buf1357[200];
+char buf1358[200];
+char buf1359[200];
+char buf1360[200];
+char buf1361[200];
+char buf1362[200];
+char buf1363[200];
+char buf1364[200];
+char buf1365[200];
+char buf1366[200];
+char buf1367[200];
+char buf1368[200];
+char buf1369[200];
+char buf1370[200];
+char buf1371[200];
+char buf1372[200];
+char buf1373[200];
+char buf1374[200];
+char buf1375[200];
+char buf1376[200];
+char buf1377[200];
+char buf1378[200];
+char buf1379[200];
+char buf1380[200];
+char buf1381[200];
+char buf1382[200];
+char buf1383[200];
+char buf1384[200];
+char buf1385[200];
+char buf1386[200];
+char buf1387[200];
+char buf1388[200];
+char buf1389[200];
+char buf1390[200];
+char buf1391[200];
+char buf1392[200];
+char buf1393[200];
+char buf1394[200];
+char buf1395[200];
+char buf1396[200];
+char buf1397[200];
+char buf1398[200];
+char buf1399[200];
+char buf1400[200];
+char buf1401[200];
+char buf1402[200];
+char buf1403[200];
+char buf1404[200];
+char buf1405[200];
+char buf1406[200];
+char buf1407[200];
+char buf1408[200];
+char buf1409[200];
+char buf1410[200];
+char buf1411[200];
+char buf1412[200];
+char buf1413[200];
+char buf1414[200];
+char buf1415[200];
+char buf1416[200];
+char buf1417[200];
+char buf1418[200];
+char buf1419[200];
+char buf1420[200];
+char buf1421[200];
+char buf1422[200];
+char buf1423[200];
+char buf1424[200];
+char buf1425[200];
+char buf1426[200];
+char buf1427[200];
+char buf1428[200];
+char buf1429[200];
+char buf1430[200];
+char buf1431[200];
+char buf1432[200];
+char buf1433[200];
+char buf1434[200];
+char buf1435[200];
+char buf1436[200];
+char buf1437[200];
+char buf1438[200];
+char buf1439[200];
+char buf1440[200];
+char buf1441[200];
+char buf1442[200];
+char buf1443[200];
+char buf1444[200];
+char buf1445[200];
+char buf1446[200];
+char buf1447[200];
+char buf1448[200];
+char buf1449[200];
+char buf1450[200];
+char buf1451[200];
+char buf1452[200];
+char buf1453[200];
+char buf1454[200];
+char buf1455[200];
+char buf1456[200];
+char buf1457[200];
+char buf1458[200];
+char buf1459[200];
+char buf1460[200];
+char buf1461[200];
+char buf1462[200];
+char buf1463[200];
+char buf1464[200];
+char buf1465[200];
+char buf1466[200];
+char buf1467[200];
+char buf1468[200];
+char buf1469[200];
+char buf1470[200];
+char buf1471[200];
+char buf1472[200];
+char buf1473[200];
+char buf1474[200];
+char buf1475[200];
+char buf1476[200];
+char buf1477[200];
+char buf1478[200];
+char buf1479[200];
+char buf1480[200];
+char buf1481[200];
+char buf1482[200];
+char buf1483[200];
+char buf1484[200];
+char buf1485[200];
+char buf1486[200];
+char buf1487[200];
+char buf1488[200];
+char buf1489[200];
+char buf1490[200];
+char buf1491[200];
+char buf1492[200];
+char buf1493[200];
+char buf1494[200];
+char buf1495[200];
+char buf1496[200];
+char buf1497[200];
+char buf1498[200];
+char buf1499[200];
+char buf1500[200];
+char buf1501[200];
+char buf1502[200];
+char buf1503[200];
+char buf1504[200];
+char buf1505[200];
+char buf1506[200];
+char buf1507[200];
+char buf1508[200];
+char buf1509[200];
+char buf1510[200];
+char buf1511[200];
+char buf1512[200];
+char buf1513[200];
+char buf1514[200];
+char buf1515[200];
+char buf1516[200];
+char buf1517[200];
+char buf1518[200];
+char buf1519[200];
+char buf1520[200];
+char buf1521[200];
+char buf1522[200];
+char buf1523[200];
+char buf1524[200];
+char buf1525[200];
+char buf1526[200];
+char buf1527[200];
+char buf1528[200];
+char buf1529[200];
+char buf1530[200];
+char buf1531[200];
+char buf1532[200];
+char buf1533[200];
+char buf1534[200];
+char buf1535[200];
+char buf1536[200];
+char buf1537[200];
+char buf1538[200];
+char buf1539[200];
+char buf1540[200];
+char buf1541[200];
+char buf1542[200];
+char buf1543[200];
+char buf1544[200];
+char buf1545[200];
+char buf1546[200];
+char buf1547[200];
+char buf1548[200];
+char buf1549[200];
+char buf1550[200];
+char buf1551[200];
+char buf1552[200];
+char buf1553[200];
+char buf1554[200];
+char buf1555[200];
+char buf1556[200];
+char buf1557[200];
+char buf1558[200];
+char buf1559[200];
+char buf1560[200];
+char buf1561[200];
+char buf1562[200];
+char buf1563[200];
+char buf1564[200];
+char buf1565[200];
+char buf1566[200];
+char buf1567[200];
+char buf1568[200];
+char buf1569[200];
+char buf1570[200];
+char buf1571[200];
+char buf1572[200];
+char buf1573[200];
+char buf1574[200];
+char buf1575[200];
+char buf1576[200];
+char buf1577[200];
+char buf1578[200];
+char buf1579[200];
+char buf1580[200];
+char buf1581[200];
+char buf1582[200];
+char buf1583[200];
+char buf1584[200];
+char buf1585[200];
+char buf1586[200];
+char buf1587[200];
+char buf1588[200];
+char buf1589[200];
+char buf1590[200];
+char buf1591[200];
+char buf1592[200];
+char buf1593[200];
+char buf1594[200];
+char buf1595[200];
+char buf1596[200];
+char buf1597[200];
+char buf1598[200];
+char buf1599[200];
+char buf1600[200];
+char buf1601[200];
+char buf1602[200];
+char buf1603[200];
+char buf1604[200];
+char buf1605[200];
+char buf1606[200];
+char buf1607[200];
+char buf1608[200];
+char buf1609[200];
+char buf1610[200];
+char buf1611[200];
+char buf1612[200];
+char buf1613[200];
+char buf1614[200];
+char buf1615[200];
+char buf1616[200];
+char buf1617[200];
+char buf1618[200];
+char buf1619[200];
+char buf1620[200];
+char buf1621[200];
+char buf1622[200];
+char buf1623[200];
+char buf1624[200];
+char buf1625[200];
+char buf1626[200];
+char buf1627[200];
+char buf1628[200];
+char buf1629[200];
+char buf1630[200];
+char buf1631[200];
+char buf1632[200];
+char buf1633[200];
+char buf1634[200];
+char buf1635[200];
+char buf1636[200];
+char buf1637[200];
+char buf1638[200];
+char buf1639[200];
+char buf1640[200];
+char buf1641[200];
+char buf1642[200];
+char buf1643[200];
+char buf1644[200];
+char buf1645[200];
+char buf1646[200];
+char buf1647[200];
+char buf1648[200];
+char buf1649[200];
+char buf1650[200];
+char buf1651[200];
+char buf1652[200];
+char buf1653[200];
+char buf1654[200];
+char buf1655[200];
+char buf1656[200];
+char buf1657[200];
+char buf1658[200];
+char buf1659[200];
+char buf1660[200];
+char buf1661[200];
+char buf1662[200];
+char buf1663[200];
+char buf1664[200];
+char buf1665[200];
+char buf1666[200];
+char buf1667[200];
+char buf1668[200];
+char buf1669[200];
+char buf1670[200];
+char buf1671[200];
+char buf1672[200];
+char buf1673[200];
+char buf1674[200];
+char buf1675[200];
+char buf1676[200];
+char buf1677[200];
+char buf1678[200];
+char buf1679[200];
+char buf1680[200];
+char buf1681[200];
+char buf1682[200];
+char buf1683[200];
+char buf1684[200];
+char buf1685[200];
+char buf1686[200];
+char buf1687[200];
+char buf1688[200];
+char buf1689[200];
+char buf1690[200];
+char buf1691[200];
+char buf1692[200];
+char buf1693[200];
+char buf1694[200];
+char buf1695[200];
+char buf1696[200];
+char buf1697[200];
+char buf1698[200];
+char buf1699[200];
+char buf1700[200];
+char buf1701[200];
+char buf1702[200];
+char buf1703[200];
+char buf1704[200];
+char buf1705[200];
+char buf1706[200];
+char buf1707[200];
+char buf1708[200];
+char buf1709[200];
+char buf1710[200];
+char buf1711[200];
+char buf1712[200];
+char buf1713[200];
+char buf1714[200];
+char buf1715[200];
+char buf1716[200];
+char buf1717[200];
+char buf1718[200];
+char buf1719[200];
+char buf1720[200];
+char buf1721[200];
+char buf1722[200];
+char buf1723[200];
+char buf1724[200];
+char buf1725[200];
+char buf1726[200];
+char buf1727[200];
+char buf1728[200];
+char buf1729[200];
+char buf1730[200];
+char buf1731[200];
+char buf1732[200];
+char buf1733[200];
+char buf1734[200];
+char buf1735[200];
+char buf1736[200];
+char buf1737[200];
+char buf1738[200];
+char buf1739[200];
+char buf1740[200];
+char buf1741[200];
+char buf1742[200];
+char buf1743[200];
+char buf1744[200];
+char buf1745[200];
+char buf1746[200];
+char buf1747[200];
+char buf1748[200];
+char buf1749[200];
+char buf1750[200];
+char buf1751[200];
+char buf1752[200];
+char buf1753[200];
+char buf1754[200];
+char buf1755[200];
+char buf1756[200];
+char buf1757[200];
+char buf1758[200];
+char buf1759[200];
+char buf1760[200];
+char buf1761[200];
+char buf1762[200];
+char buf1763[200];
+char buf1764[200];
+char buf1765[200];
+char buf1766[200];
+char buf1767[200];
+char buf1768[200];
+char buf1769[200];
+char buf1770[200];
+char buf1771[200];
+char buf1772[200];
+char buf1773[200];
+char buf1774[200];
+char buf1775[200];
+char buf1776[200];
+char buf1777[200];
+char buf1778[200];
+char buf1779[200];
+char buf1780[200];
+char buf1781[200];
+char buf1782[200];
+char buf1783[200];
+char buf1784[200];
+char buf1785[200];
+char buf1786[200];
+char buf1787[200];
+char buf1788[200];
+char buf1789[200];
+char buf1790[200];
+char buf1791[200];
+char buf1792[200];
+char buf1793[200];
+char buf1794[200];
+char buf1795[200];
+char buf1796[200];
+char buf1797[200];
+char buf1798[200];
+char buf1799[200];
+char buf1800[200];
+char buf1801[200];
+char buf1802[200];
+char buf1803[200];
+char buf1804[200];
+char buf1805[200];
+char buf1806[200];
+char buf1807[200];
+char buf1808[200];
+char buf1809[200];
+char buf1810[200];
+char buf1811[200];
+char buf1812[200];
+char buf1813[200];
+char buf1814[200];
+char buf1815[200];
+char buf1816[200];
+char buf1817[200];
+char buf1818[200];
+char buf1819[200];
+char buf1820[200];
+char buf1821[200];
+char buf1822[200];
+char buf1823[200];
+char buf1824[200];
+char buf1825[200];
+char buf1826[200];
+char buf1827[200];
+char buf1828[200];
+char buf1829[200];
+char buf1830[200];
+char buf1831[200];
+char buf1832[200];
+char buf1833[200];
+char buf1834[200];
+char buf1835[200];
+char buf1836[200];
+char buf1837[200];
+char buf1838[200];
+char buf1839[200];
+char buf1840[200];
+char buf1841[200];
+char buf1842[200];
+char buf1843[200];
+char buf1844[200];
+char buf1845[200];
+char buf1846[200];
+char buf1847[200];
+char buf1848[200];
+char buf1849[200];
+char buf1850[200];
+char buf1851[200];
+char buf1852[200];
+char buf1853[200];
+char buf1854[200];
+char buf1855[200];
+char buf1856[200];
+char buf1857[200];
+char buf1858[200];
+char buf1859[200];
+char buf1860[200];
+char buf1861[200];
+char buf1862[200];
+char buf1863[200];
+char buf1864[200];
+char buf1865[200];
+char buf1866[200];
+char buf1867[200];
+char buf1868[200];
+char buf1869[200];
+char buf1870[200];
+char buf1871[200];
+char buf1872[200];
+char buf1873[200];
+char buf1874[200];
+char buf1875[200];
+char buf1876[200];
+char buf1877[200];
+char buf1878[200];
+char buf1879[200];
+char buf1880[200];
+char buf1881[200];
+char buf1882[200];
+char buf1883[200];
+char buf1884[200];
+char buf1885[200];
+char buf1886[200];
+char buf1887[200];
+char buf1888[200];
+char buf1889[200];
+char buf1890[200];
+char buf1891[200];
+char buf1892[200];
+char buf1893[200];
+char buf1894[200];
+char buf1895[200];
+char buf1896[200];
+char buf1897[200];
+char buf1898[200];
+char buf1899[200];
+char buf1900[200];
+char buf1901[200];
+char buf1902[200];
+char buf1903[200];
+char buf1904[200];
+char buf1905[200];
+char buf1906[200];
+char buf1907[200];
+char buf1908[200];
+char buf1909[200];
+char buf1910[200];
+char buf1911[200];
+char buf1912[200];
+char buf1913[200];
+char buf1914[200];
+char buf1915[200];
+char buf1916[200];
+char buf1917[200];
+char buf1918[200];
+char buf1919[200];
+char buf1920[200];
+char buf1921[200];
+char buf1922[200];
+char buf1923[200];
+char buf1924[200];
+char buf1925[200];
+char buf1926[200];
+char buf1927[200];
+char buf1928[200];
+char buf1929[200];
+char buf1930[200];
+char buf1931[200];
+char buf1932[200];
+char buf1933[200];
+char buf1934[200];
+char buf1935[200];
+char buf1936[200];
+char buf1937[200];
+char buf1938[200];
+char buf1939[200];
+char buf1940[200];
+char buf1941[200];
+char buf1942[200];
+char buf1943[200];
+char buf1944[200];
+char buf1945[200];
+char buf1946[200];
+char buf1947[200];
+char buf1948[200];
+char buf1949[200];
+char buf1950[200];
+char buf1951[200];
+char buf1952[200];
+char buf1953[200];
+char buf1954[200];
+char buf1955[200];
+char buf1956[200];
+char buf1957[200];
+char buf1958[200];
+char buf1959[200];
+char buf1960[200];
+char buf1961[200];
+char buf1962[200];
+char buf1963[200];
+char buf1964[200];
+char buf1965[200];
+char buf1966[200];
+char buf1967[200];
+char buf1968[200];
+char buf1969[200];
+char buf1970[200];
+char buf1971[200];
+char buf1972[200];
+char buf1973[200];
+char buf1974[200];
+char buf1975[200];
+char buf1976[200];
+char buf1977[200];
+char buf1978[200];
+char buf1979[200];
+char buf1980[200];
+char buf1981[200];
+char buf1982[200];
+char buf1983[200];
+char buf1984[200];
+char buf1985[200];
+char buf1986[200];
+char buf1987[200];
+char buf1988[200];
+char buf1989[200];
+char buf1990[200];
+char buf1991[200];
+char buf1992[200];
+char buf1993[200];
+char buf1994[200];
+char buf1995[200];
+char buf1996[200];
+char buf1997[200];
+char buf1998[200];
+char buf1999[200];
+char buf2000[200];
+char buf2001[200];
+char buf2002[200];
+char buf2003[200];
+char buf2004[200];
+char buf2005[200];
+char buf2006[200];
+char buf2007[200];
+char buf2008[200];
+char buf2009[200];
+char buf2010[200];
+char buf2011[200];
+char buf2012[200];
+char buf2013[200];
+char buf2014[200];
+char buf2015[200];
+char buf2016[200];
+char buf2017[200];
+char buf2018[200];
+char buf2019[200];
+char buf2020[200];
+char buf2021[200];
+char buf2022[200];
+char buf2023[200];
+char buf2024[200];
+char buf2025[200];
+char buf2026[200];
+char buf2027[200];
+char buf2028[200];
+char buf2029[200];
+char buf2030[200];
+char buf2031[200];
+char buf2032[200];
+char buf2033[200];
+char buf2034[200];
+char buf2035[200];
+char buf2036[200];
+char buf2037[200];
+char buf2038[200];
+char buf2039[200];
+char buf2040[200];
+char buf2041[200];
+char buf2042[200];
+char buf2043[200];
+char buf2044[200];
+char buf2045[200];
+char buf2046[200];
+char buf2047[200];
+char buf2048[200];
+char buf2049[200];
+char buf2050[200];
+char buf2051[200];
+char buf2052[200];
+char buf2053[200];
+char buf2054[200];
+char buf2055[200];
+char buf2056[200];
+char buf2057[200];
+char buf2058[200];
+char buf2059[200];
+char buf2060[200];
+char buf2061[200];
+char buf2062[200];
+char buf2063[200];
+char buf2064[200];
+char buf2065[200];
+char buf2066[200];
+char buf2067[200];
+char buf2068[200];
+char buf2069[200];
+char buf2070[200];
+char buf2071[200];
+char buf2072[200];
+char buf2073[200];
+char buf2074[200];
+char buf2075[200];
+char buf2076[200];
+char buf2077[200];
+char buf2078[200];
+char buf2079[200];
+char buf2080[200];
+char buf2081[200];
+char buf2082[200];
+char buf2083[200];
+char buf2084[200];
+char buf2085[200];
+char buf2086[200];
+char buf2087[200];
+char buf2088[200];
+char buf2089[200];
+char buf2090[200];
+char buf2091[200];
+char buf2092[200];
+char buf2093[200];
+char buf2094[200];
+char buf2095[200];
+char buf2096[200];
+char buf2097[200];
+char buf2098[200];
+char buf2099[200];
+char buf2100[200];
+char buf2101[200];
+char buf2102[200];
+char buf2103[200];
+char buf2104[200];
+char buf2105[200];
+char buf2106[200];
+char buf2107[200];
+char buf2108[200];
+char buf2109[200];
+char buf2110[200];
+char buf2111[200];
+char buf2112[200];
+char buf2113[200];
+char buf2114[200];
+char buf2115[200];
+char buf2116[200];
+char buf2117[200];
+char buf2118[200];
+char buf2119[200];
+char buf2120[200];
+char buf2121[200];
+char buf2122[200];
+char buf2123[200];
+char buf2124[200];
+char buf2125[200];
+char buf2126[200];
+char buf2127[200];
+char buf2128[200];
+char buf2129[200];
+char buf2130[200];
+char buf2131[200];
+char buf2132[200];
+char buf2133[200];
+char buf2134[200];
+char buf2135[200];
+char buf2136[200];
+char buf2137[200];
+char buf2138[200];
+char buf2139[200];
+char buf2140[200];
+char buf2141[200];
+char buf2142[200];
+char buf2143[200];
+char buf2144[200];
+char buf2145[200];
+char buf2146[200];
+char buf2147[200];
+char buf2148[200];
+char buf2149[200];
+char buf2150[200];
+char buf2151[200];
+char buf2152[200];
+char buf2153[200];
+char buf2154[200];
+char buf2155[200];
+char buf2156[200];
+char buf2157[200];
+char buf2158[200];
+char buf2159[200];
+char buf2160[200];
+char buf2161[200];
+char buf2162[200];
+char buf2163[200];
+char buf2164[200];
+char buf2165[200];
+char buf2166[200];
+char buf2167[200];
+char buf2168[200];
+char buf2169[200];
+char buf2170[200];
+char buf2171[200];
+char buf2172[200];
+char buf2173[200];
+char buf2174[200];
+char buf2175[200];
+char buf2176[200];
+char buf2177[200];
+char buf2178[200];
+char buf2179[200];
+char buf2180[200];
+char buf2181[200];
+char buf2182[200];
+char buf2183[200];
+char buf2184[200];
+char buf2185[200];
+char buf2186[200];
+char buf2187[200];
+char buf2188[200];
+char buf2189[200];
+char buf2190[200];
+char buf2191[200];
+char buf2192[200];
+char buf2193[200];
+char buf2194[200];
+char buf2195[200];
+char buf2196[200];
+char buf2197[200];
+char buf2198[200];
+char buf2199[200];
+char buf2200[200];
+char buf2201[200];
+char buf2202[200];
+char buf2203[200];
+char buf2204[200];
+char buf2205[200];
+char buf2206[200];
+char buf2207[200];
+char buf2208[200];
+char buf2209[200];
+char buf2210[200];
+char buf2211[200];
+char buf2212[200];
+char buf2213[200];
+char buf2214[200];
+char buf2215[200];
+char buf2216[200];
+char buf2217[200];
+char buf2218[200];
+char buf2219[200];
+char buf2220[200];
+char buf2221[200];
+char buf2222[200];
+char buf2223[200];
+char buf2224[200];
+char buf2225[200];
+char buf2226[200];
+char buf2227[200];
+char buf2228[200];
+char buf2229[200];
+char buf2230[200];
+char buf2231[200];
+char buf2232[200];
+char buf2233[200];
+char buf2234[200];
+char buf2235[200];
+char buf2236[200];
+char buf2237[200];
+char buf2238[200];
+char buf2239[200];
+char buf2240[200];
+char buf2241[200];
+char buf2242[200];
+char buf2243[200];
+char buf2244[200];
+char buf2245[200];
+char buf2246[200];
+char buf2247[200];
+char buf2248[200];
+char buf2249[200];
+char buf2250[200];
+char buf2251[200];
+char buf2252[200];
+char buf2253[200];
+char buf2254[200];
+char buf2255[200];
+char buf2256[200];
+char buf2257[200];
+char buf2258[200];
+char buf2259[200];
+char buf2260[200];
+char buf2261[200];
+char buf2262[200];
+char buf2263[200];
+char buf2264[200];
+char buf2265[200];
+char buf2266[200];
+char buf2267[200];
+char buf2268[200];
+char buf2269[200];
+char buf2270[200];
+char buf2271[200];
+char buf2272[200];
+char buf2273[200];
+char buf2274[200];
+char buf2275[200];
+char buf2276[200];
+char buf2277[200];
+char buf2278[200];
+char buf2279[200];
+char buf2280[200];
+char buf2281[200];
+char buf2282[200];
+char buf2283[200];
+char buf2284[200];
+char buf2285[200];
+char buf2286[200];
+char buf2287[200];
+char buf2288[200];
+char buf2289[200];
+char buf2290[200];
+char buf2291[200];
+char buf2292[200];
+char buf2293[200];
+char buf2294[200];
+char buf2295[200];
+char buf2296[200];
+char buf2297[200];
+char buf2298[200];
+char buf2299[200];
+char buf2300[200];
+char buf2301[200];
+char buf2302[200];
+char buf2303[200];
+char buf2304[200];
+char buf2305[200];
+char buf2306[200];
+char buf2307[200];
+char buf2308[200];
+char buf2309[200];
+char buf2310[200];
+char buf2311[200];
+char buf2312[200];
+char buf2313[200];
+char buf2314[200];
+char buf2315[200];
+char buf2316[200];
+char buf2317[200];
+char buf2318[200];
+char buf2319[200];
+char buf2320[200];
+char buf2321[200];
+char buf2322[200];
+char buf2323[200];
+char buf2324[200];
+char buf2325[200];
+char buf2326[200];
+char buf2327[200];
+char buf2328[200];
+char buf2329[200];
+char buf2330[200];
+
+void root(const int* in) {
+    *(uchar*)buf0 = abs(*(char*)buf1);
+    *(uchar2*)buf2 = abs(*(char2*)buf3);
+    *(uchar3*)buf4 = abs(*(char3*)buf5);
+    *(uchar4*)buf6 = abs(*(char4*)buf7);
+    *(ushort*)buf8 = abs(*(short*)buf9);
+    *(ushort2*)buf10 = abs(*(short2*)buf11);
+    *(ushort3*)buf12 = abs(*(short3*)buf13);
+    *(ushort4*)buf14 = abs(*(short4*)buf15);
+    *(uint*)buf16 = abs(*(int*)buf17);
+    *(uint2*)buf18 = abs(*(int2*)buf19);
+    *(uint3*)buf20 = abs(*(int3*)buf21);
+    *(uint4*)buf22 = abs(*(int4*)buf23);
+    *(float*)buf24 = acos(*(float*)buf25);
+    *(float2*)buf26 = acos(*(float2*)buf27);
+    *(float3*)buf28 = acos(*(float3*)buf29);
+    *(float4*)buf30 = acos(*(float4*)buf31);
+    *(float*)buf32 = acosh(*(float*)buf33);
+    *(float2*)buf34 = acosh(*(float2*)buf35);
+    *(float3*)buf36 = acosh(*(float3*)buf37);
+    *(float4*)buf38 = acosh(*(float4*)buf39);
+    *(float*)buf40 = acospi(*(float*)buf41);
+    *(float2*)buf42 = acospi(*(float2*)buf43);
+    *(float3*)buf44 = acospi(*(float3*)buf45);
+    *(float4*)buf46 = acospi(*(float4*)buf47);
+    *(float*)buf48 = asin(*(float*)buf49);
+    *(float2*)buf50 = asin(*(float2*)buf51);
+    *(float3*)buf52 = asin(*(float3*)buf53);
+    *(float4*)buf54 = asin(*(float4*)buf55);
+    *(float*)buf56 = asinh(*(float*)buf57);
+    *(float2*)buf58 = asinh(*(float2*)buf59);
+    *(float3*)buf60 = asinh(*(float3*)buf61);
+    *(float4*)buf62 = asinh(*(float4*)buf63);
+    *(float*)buf64 = asinpi(*(float*)buf65);
+    *(float2*)buf66 = asinpi(*(float2*)buf67);
+    *(float3*)buf68 = asinpi(*(float3*)buf69);
+    *(float4*)buf70 = asinpi(*(float4*)buf71);
+    *(float*)buf72 = atan(*(float*)buf73);
+    *(float2*)buf74 = atan(*(float2*)buf75);
+    *(float3*)buf76 = atan(*(float3*)buf77);
+    *(float4*)buf78 = atan(*(float4*)buf79);
+    *(float*)buf80 = atan2(*(float*)buf81, *(float*)buf82);
+    *(float2*)buf83 = atan2(*(float2*)buf84, *(float2*)buf85);
+    *(float3*)buf86 = atan2(*(float3*)buf87, *(float3*)buf88);
+    *(float4*)buf89 = atan2(*(float4*)buf90, *(float4*)buf91);
+    *(float*)buf92 = atan2pi(*(float*)buf93, *(float*)buf94);
+    *(float2*)buf95 = atan2pi(*(float2*)buf96, *(float2*)buf97);
+    *(float3*)buf98 = atan2pi(*(float3*)buf99, *(float3*)buf100);
+    *(float4*)buf101 = atan2pi(*(float4*)buf102, *(float4*)buf103);
+    *(float*)buf104 = atanh(*(float*)buf105);
+    *(float2*)buf106 = atanh(*(float2*)buf107);
+    *(float3*)buf108 = atanh(*(float3*)buf109);
+    *(float4*)buf110 = atanh(*(float4*)buf111);
+    *(float*)buf112 = atanpi(*(float*)buf113);
+    *(float2*)buf114 = atanpi(*(float2*)buf115);
+    *(float3*)buf116 = atanpi(*(float3*)buf117);
+    *(float4*)buf118 = atanpi(*(float4*)buf119);
+    *(float*)buf120 = cbrt(*(float*)buf121);
+    *(float2*)buf122 = cbrt(*(float2*)buf123);
+    *(float3*)buf124 = cbrt(*(float3*)buf125);
+    *(float4*)buf126 = cbrt(*(float4*)buf127);
+    *(float*)buf128 = ceil(*(float*)buf129);
+    *(float2*)buf130 = ceil(*(float2*)buf131);
+    *(float3*)buf132 = ceil(*(float3*)buf133);
+    *(float4*)buf134 = ceil(*(float4*)buf135);
+    *(float*)buf136 = clamp(*(float*)buf137, *(float*)buf138, *(float*)buf139);
+    *(float2*)buf140 = clamp(*(float2*)buf141, *(float2*)buf142, *(float2*)buf143);
+    *(float3*)buf144 = clamp(*(float3*)buf145, *(float3*)buf146, *(float3*)buf147);
+    *(float4*)buf148 = clamp(*(float4*)buf149, *(float4*)buf150, *(float4*)buf151);
+    *(float2*)buf152 = clamp(*(float2*)buf153, *(float*)buf154, *(float*)buf155);
+    *(float3*)buf156 = clamp(*(float3*)buf157, *(float*)buf158, *(float*)buf159);
+    *(float4*)buf160 = clamp(*(float4*)buf161, *(float*)buf162, *(float*)buf163);
+    *(char*)buf164 = clz(*(char*)buf165);
+    *(char2*)buf166 = clz(*(char2*)buf167);
+    *(char3*)buf168 = clz(*(char3*)buf169);
+    *(char4*)buf170 = clz(*(char4*)buf171);
+    *(uchar*)buf172 = clz(*(uchar*)buf173);
+    *(uchar2*)buf174 = clz(*(uchar2*)buf175);
+    *(uchar3*)buf176 = clz(*(uchar3*)buf177);
+    *(uchar4*)buf178 = clz(*(uchar4*)buf179);
+    *(short*)buf180 = clz(*(short*)buf181);
+    *(short2*)buf182 = clz(*(short2*)buf183);
+    *(short3*)buf184 = clz(*(short3*)buf185);
+    *(short4*)buf186 = clz(*(short4*)buf187);
+    *(ushort*)buf188 = clz(*(ushort*)buf189);
+    *(ushort2*)buf190 = clz(*(ushort2*)buf191);
+    *(ushort3*)buf192 = clz(*(ushort3*)buf193);
+    *(ushort4*)buf194 = clz(*(ushort4*)buf195);
+    *(int*)buf196 = clz(*(int*)buf197);
+    *(int2*)buf198 = clz(*(int2*)buf199);
+    *(int3*)buf200 = clz(*(int3*)buf201);
+    *(int4*)buf202 = clz(*(int4*)buf203);
+    *(uint*)buf204 = clz(*(uint*)buf205);
+    *(uint2*)buf206 = clz(*(uint2*)buf207);
+    *(uint3*)buf208 = clz(*(uint3*)buf209);
+    *(uint4*)buf210 = clz(*(uint4*)buf211);
+    *(float2*)buf212 = convert_float2(*(float2*)buf213);
+    *(float3*)buf214 = convert_float3(*(float3*)buf215);
+    *(float4*)buf216 = convert_float4(*(float4*)buf217);
+    *(float2*)buf218 = convert_float2(*(char2*)buf219);
+    *(float3*)buf220 = convert_float3(*(char3*)buf221);
+    *(float4*)buf222 = convert_float4(*(char4*)buf223);
+    *(float2*)buf224 = convert_float2(*(uchar2*)buf225);
+    *(float3*)buf226 = convert_float3(*(uchar3*)buf227);
+    *(float4*)buf228 = convert_float4(*(uchar4*)buf229);
+    *(float2*)buf230 = convert_float2(*(short2*)buf231);
+    *(float3*)buf232 = convert_float3(*(short3*)buf233);
+    *(float4*)buf234 = convert_float4(*(short4*)buf235);
+    *(float2*)buf236 = convert_float2(*(ushort2*)buf237);
+    *(float3*)buf238 = convert_float3(*(ushort3*)buf239);
+    *(float4*)buf240 = convert_float4(*(ushort4*)buf241);
+    *(float2*)buf242 = convert_float2(*(int2*)buf243);
+    *(float3*)buf244 = convert_float3(*(int3*)buf245);
+    *(float4*)buf246 = convert_float4(*(int4*)buf247);
+    *(float2*)buf248 = convert_float2(*(uint2*)buf249);
+    *(float3*)buf250 = convert_float3(*(uint3*)buf251);
+    *(float4*)buf252 = convert_float4(*(uint4*)buf253);
+    *(char2*)buf254 = convert_char2(*(float2*)buf255);
+    *(char3*)buf256 = convert_char3(*(float3*)buf257);
+    *(char4*)buf258 = convert_char4(*(float4*)buf259);
+    *(char2*)buf260 = convert_char2(*(char2*)buf261);
+    *(char3*)buf262 = convert_char3(*(char3*)buf263);
+    *(char4*)buf264 = convert_char4(*(char4*)buf265);
+    *(char2*)buf266 = convert_char2(*(uchar2*)buf267);
+    *(char3*)buf268 = convert_char3(*(uchar3*)buf269);
+    *(char4*)buf270 = convert_char4(*(uchar4*)buf271);
+    *(char2*)buf272 = convert_char2(*(short2*)buf273);
+    *(char3*)buf274 = convert_char3(*(short3*)buf275);
+    *(char4*)buf276 = convert_char4(*(short4*)buf277);
+    *(char2*)buf278 = convert_char2(*(ushort2*)buf279);
+    *(char3*)buf280 = convert_char3(*(ushort3*)buf281);
+    *(char4*)buf282 = convert_char4(*(ushort4*)buf283);
+    *(char2*)buf284 = convert_char2(*(int2*)buf285);
+    *(char3*)buf286 = convert_char3(*(int3*)buf287);
+    *(char4*)buf288 = convert_char4(*(int4*)buf289);
+    *(char2*)buf290 = convert_char2(*(uint2*)buf291);
+    *(char3*)buf292 = convert_char3(*(uint3*)buf293);
+    *(char4*)buf294 = convert_char4(*(uint4*)buf295);
+    *(uchar2*)buf296 = convert_uchar2(*(float2*)buf297);
+    *(uchar3*)buf298 = convert_uchar3(*(float3*)buf299);
+    *(uchar4*)buf300 = convert_uchar4(*(float4*)buf301);
+    *(uchar2*)buf302 = convert_uchar2(*(char2*)buf303);
+    *(uchar3*)buf304 = convert_uchar3(*(char3*)buf305);
+    *(uchar4*)buf306 = convert_uchar4(*(char4*)buf307);
+    *(uchar2*)buf308 = convert_uchar2(*(uchar2*)buf309);
+    *(uchar3*)buf310 = convert_uchar3(*(uchar3*)buf311);
+    *(uchar4*)buf312 = convert_uchar4(*(uchar4*)buf313);
+    *(uchar2*)buf314 = convert_uchar2(*(short2*)buf315);
+    *(uchar3*)buf316 = convert_uchar3(*(short3*)buf317);
+    *(uchar4*)buf318 = convert_uchar4(*(short4*)buf319);
+    *(uchar2*)buf320 = convert_uchar2(*(ushort2*)buf321);
+    *(uchar3*)buf322 = convert_uchar3(*(ushort3*)buf323);
+    *(uchar4*)buf324 = convert_uchar4(*(ushort4*)buf325);
+    *(uchar2*)buf326 = convert_uchar2(*(int2*)buf327);
+    *(uchar3*)buf328 = convert_uchar3(*(int3*)buf329);
+    *(uchar4*)buf330 = convert_uchar4(*(int4*)buf331);
+    *(uchar2*)buf332 = convert_uchar2(*(uint2*)buf333);
+    *(uchar3*)buf334 = convert_uchar3(*(uint3*)buf335);
+    *(uchar4*)buf336 = convert_uchar4(*(uint4*)buf337);
+    *(short2*)buf338 = convert_short2(*(float2*)buf339);
+    *(short3*)buf340 = convert_short3(*(float3*)buf341);
+    *(short4*)buf342 = convert_short4(*(float4*)buf343);
+    *(short2*)buf344 = convert_short2(*(char2*)buf345);
+    *(short3*)buf346 = convert_short3(*(char3*)buf347);
+    *(short4*)buf348 = convert_short4(*(char4*)buf349);
+    *(short2*)buf350 = convert_short2(*(uchar2*)buf351);
+    *(short3*)buf352 = convert_short3(*(uchar3*)buf353);
+    *(short4*)buf354 = convert_short4(*(uchar4*)buf355);
+    *(short2*)buf356 = convert_short2(*(short2*)buf357);
+    *(short3*)buf358 = convert_short3(*(short3*)buf359);
+    *(short4*)buf360 = convert_short4(*(short4*)buf361);
+    *(short2*)buf362 = convert_short2(*(ushort2*)buf363);
+    *(short3*)buf364 = convert_short3(*(ushort3*)buf365);
+    *(short4*)buf366 = convert_short4(*(ushort4*)buf367);
+    *(short2*)buf368 = convert_short2(*(int2*)buf369);
+    *(short3*)buf370 = convert_short3(*(int3*)buf371);
+    *(short4*)buf372 = convert_short4(*(int4*)buf373);
+    *(short2*)buf374 = convert_short2(*(uint2*)buf375);
+    *(short3*)buf376 = convert_short3(*(uint3*)buf377);
+    *(short4*)buf378 = convert_short4(*(uint4*)buf379);
+    *(ushort2*)buf380 = convert_ushort2(*(float2*)buf381);
+    *(ushort3*)buf382 = convert_ushort3(*(float3*)buf383);
+    *(ushort4*)buf384 = convert_ushort4(*(float4*)buf385);
+    *(ushort2*)buf386 = convert_ushort2(*(char2*)buf387);
+    *(ushort3*)buf388 = convert_ushort3(*(char3*)buf389);
+    *(ushort4*)buf390 = convert_ushort4(*(char4*)buf391);
+    *(ushort2*)buf392 = convert_ushort2(*(uchar2*)buf393);
+    *(ushort3*)buf394 = convert_ushort3(*(uchar3*)buf395);
+    *(ushort4*)buf396 = convert_ushort4(*(uchar4*)buf397);
+    *(ushort2*)buf398 = convert_ushort2(*(short2*)buf399);
+    *(ushort3*)buf400 = convert_ushort3(*(short3*)buf401);
+    *(ushort4*)buf402 = convert_ushort4(*(short4*)buf403);
+    *(ushort2*)buf404 = convert_ushort2(*(ushort2*)buf405);
+    *(ushort3*)buf406 = convert_ushort3(*(ushort3*)buf407);
+    *(ushort4*)buf408 = convert_ushort4(*(ushort4*)buf409);
+    *(ushort2*)buf410 = convert_ushort2(*(int2*)buf411);
+    *(ushort3*)buf412 = convert_ushort3(*(int3*)buf413);
+    *(ushort4*)buf414 = convert_ushort4(*(int4*)buf415);
+    *(ushort2*)buf416 = convert_ushort2(*(uint2*)buf417);
+    *(ushort3*)buf418 = convert_ushort3(*(uint3*)buf419);
+    *(ushort4*)buf420 = convert_ushort4(*(uint4*)buf421);
+    *(int2*)buf422 = convert_int2(*(float2*)buf423);
+    *(int3*)buf424 = convert_int3(*(float3*)buf425);
+    *(int4*)buf426 = convert_int4(*(float4*)buf427);
+    *(int2*)buf428 = convert_int2(*(char2*)buf429);
+    *(int3*)buf430 = convert_int3(*(char3*)buf431);
+    *(int4*)buf432 = convert_int4(*(char4*)buf433);
+    *(int2*)buf434 = convert_int2(*(uchar2*)buf435);
+    *(int3*)buf436 = convert_int3(*(uchar3*)buf437);
+    *(int4*)buf438 = convert_int4(*(uchar4*)buf439);
+    *(int2*)buf440 = convert_int2(*(short2*)buf441);
+    *(int3*)buf442 = convert_int3(*(short3*)buf443);
+    *(int4*)buf444 = convert_int4(*(short4*)buf445);
+    *(int2*)buf446 = convert_int2(*(ushort2*)buf447);
+    *(int3*)buf448 = convert_int3(*(ushort3*)buf449);
+    *(int4*)buf450 = convert_int4(*(ushort4*)buf451);
+    *(int2*)buf452 = convert_int2(*(int2*)buf453);
+    *(int3*)buf454 = convert_int3(*(int3*)buf455);
+    *(int4*)buf456 = convert_int4(*(int4*)buf457);
+    *(int2*)buf458 = convert_int2(*(uint2*)buf459);
+    *(int3*)buf460 = convert_int3(*(uint3*)buf461);
+    *(int4*)buf462 = convert_int4(*(uint4*)buf463);
+    *(uint2*)buf464 = convert_uint2(*(float2*)buf465);
+    *(uint3*)buf466 = convert_uint3(*(float3*)buf467);
+    *(uint4*)buf468 = convert_uint4(*(float4*)buf469);
+    *(uint2*)buf470 = convert_uint2(*(char2*)buf471);
+    *(uint3*)buf472 = convert_uint3(*(char3*)buf473);
+    *(uint4*)buf474 = convert_uint4(*(char4*)buf475);
+    *(uint2*)buf476 = convert_uint2(*(uchar2*)buf477);
+    *(uint3*)buf478 = convert_uint3(*(uchar3*)buf479);
+    *(uint4*)buf480 = convert_uint4(*(uchar4*)buf481);
+    *(uint2*)buf482 = convert_uint2(*(short2*)buf483);
+    *(uint3*)buf484 = convert_uint3(*(short3*)buf485);
+    *(uint4*)buf486 = convert_uint4(*(short4*)buf487);
+    *(uint2*)buf488 = convert_uint2(*(ushort2*)buf489);
+    *(uint3*)buf490 = convert_uint3(*(ushort3*)buf491);
+    *(uint4*)buf492 = convert_uint4(*(ushort4*)buf493);
+    *(uint2*)buf494 = convert_uint2(*(int2*)buf495);
+    *(uint3*)buf496 = convert_uint3(*(int3*)buf497);
+    *(uint4*)buf498 = convert_uint4(*(int4*)buf499);
+    *(uint2*)buf500 = convert_uint2(*(uint2*)buf501);
+    *(uint3*)buf502 = convert_uint3(*(uint3*)buf503);
+    *(uint4*)buf504 = convert_uint4(*(uint4*)buf505);
+    *(float*)buf506 = copysign(*(float*)buf507, *(float*)buf508);
+    *(float2*)buf509 = copysign(*(float2*)buf510, *(float2*)buf511);
+    *(float3*)buf512 = copysign(*(float3*)buf513, *(float3*)buf514);
+    *(float4*)buf515 = copysign(*(float4*)buf516, *(float4*)buf517);
+    *(float*)buf518 = cos(*(float*)buf519);
+    *(float2*)buf520 = cos(*(float2*)buf521);
+    *(float3*)buf522 = cos(*(float3*)buf523);
+    *(float4*)buf524 = cos(*(float4*)buf525);
+    *(float*)buf526 = cosh(*(float*)buf527);
+    *(float2*)buf528 = cosh(*(float2*)buf529);
+    *(float3*)buf530 = cosh(*(float3*)buf531);
+    *(float4*)buf532 = cosh(*(float4*)buf533);
+    *(float*)buf534 = cospi(*(float*)buf535);
+    *(float2*)buf536 = cospi(*(float2*)buf537);
+    *(float3*)buf538 = cospi(*(float3*)buf539);
+    *(float4*)buf540 = cospi(*(float4*)buf541);
+    *(float3*)buf542 = cross(*(float3*)buf543, *(float3*)buf544);
+    *(float4*)buf545 = cross(*(float4*)buf546, *(float4*)buf547);
+    *(float*)buf548 = degrees(*(float*)buf549);
+    *(float2*)buf550 = degrees(*(float2*)buf551);
+    *(float3*)buf552 = degrees(*(float3*)buf553);
+    *(float4*)buf554 = degrees(*(float4*)buf555);
+    *(float*)buf556 = distance(*(float*)buf557, *(float*)buf558);
+    *(float*)buf559 = distance(*(float2*)buf560, *(float2*)buf561);
+    *(float*)buf562 = distance(*(float3*)buf563, *(float3*)buf564);
+    *(float*)buf565 = distance(*(float4*)buf566, *(float4*)buf567);
+    *(float*)buf568 = dot(*(float*)buf569, *(float*)buf570);
+    *(float*)buf571 = dot(*(float2*)buf572, *(float2*)buf573);
+    *(float*)buf574 = dot(*(float3*)buf575, *(float3*)buf576);
+    *(float*)buf577 = dot(*(float4*)buf578, *(float4*)buf579);
+    *(float*)buf580 = erf(*(float*)buf581);
+    *(float2*)buf582 = erf(*(float2*)buf583);
+    *(float3*)buf584 = erf(*(float3*)buf585);
+    *(float4*)buf586 = erf(*(float4*)buf587);
+    *(float*)buf588 = erfc(*(float*)buf589);
+    *(float2*)buf590 = erfc(*(float2*)buf591);
+    *(float3*)buf592 = erfc(*(float3*)buf593);
+    *(float4*)buf594 = erfc(*(float4*)buf595);
+    *(float*)buf596 = exp(*(float*)buf597);
+    *(float2*)buf598 = exp(*(float2*)buf599);
+    *(float3*)buf600 = exp(*(float3*)buf601);
+    *(float4*)buf602 = exp(*(float4*)buf603);
+    *(float*)buf604 = exp10(*(float*)buf605);
+    *(float2*)buf606 = exp10(*(float2*)buf607);
+    *(float3*)buf608 = exp10(*(float3*)buf609);
+    *(float4*)buf610 = exp10(*(float4*)buf611);
+    *(float*)buf612 = exp2(*(float*)buf613);
+    *(float2*)buf614 = exp2(*(float2*)buf615);
+    *(float3*)buf616 = exp2(*(float3*)buf617);
+    *(float4*)buf618 = exp2(*(float4*)buf619);
+    *(float*)buf620 = expm1(*(float*)buf621);
+    *(float2*)buf622 = expm1(*(float2*)buf623);
+    *(float3*)buf624 = expm1(*(float3*)buf625);
+    *(float4*)buf626 = expm1(*(float4*)buf627);
+    *(float*)buf628 = fabs(*(float*)buf629);
+    *(float2*)buf630 = fabs(*(float2*)buf631);
+    *(float3*)buf632 = fabs(*(float3*)buf633);
+    *(float4*)buf634 = fabs(*(float4*)buf635);
+    *(float*)buf636 = fdim(*(float*)buf637, *(float*)buf638);
+    *(float2*)buf639 = fdim(*(float2*)buf640, *(float2*)buf641);
+    *(float3*)buf642 = fdim(*(float3*)buf643, *(float3*)buf644);
+    *(float4*)buf645 = fdim(*(float4*)buf646, *(float4*)buf647);
+    *(float*)buf648 = floor(*(float*)buf649);
+    *(float2*)buf650 = floor(*(float2*)buf651);
+    *(float3*)buf652 = floor(*(float3*)buf653);
+    *(float4*)buf654 = floor(*(float4*)buf655);
+    *(float*)buf656 = fma(*(float*)buf657, *(float*)buf658, *(float*)buf659);
+    *(float2*)buf660 = fma(*(float2*)buf661, *(float2*)buf662, *(float2*)buf663);
+    *(float3*)buf664 = fma(*(float3*)buf665, *(float3*)buf666, *(float3*)buf667);
+    *(float4*)buf668 = fma(*(float4*)buf669, *(float4*)buf670, *(float4*)buf671);
+    *(float*)buf672 = fmax(*(float*)buf673, *(float*)buf674);
+    *(float2*)buf675 = fmax(*(float2*)buf676, *(float2*)buf677);
+    *(float3*)buf678 = fmax(*(float3*)buf679, *(float3*)buf680);
+    *(float4*)buf681 = fmax(*(float4*)buf682, *(float4*)buf683);
+    *(float2*)buf684 = fmax(*(float2*)buf685, *(float*)buf686);
+    *(float3*)buf687 = fmax(*(float3*)buf688, *(float*)buf689);
+    *(float4*)buf690 = fmax(*(float4*)buf691, *(float*)buf692);
+    *(float*)buf693 = fmin(*(float*)buf694, *(float*)buf695);
+    *(float2*)buf696 = fmin(*(float2*)buf697, *(float2*)buf698);
+    *(float3*)buf699 = fmin(*(float3*)buf700, *(float3*)buf701);
+    *(float4*)buf702 = fmin(*(float4*)buf703, *(float4*)buf704);
+    *(float2*)buf705 = fmin(*(float2*)buf706, *(float*)buf707);
+    *(float3*)buf708 = fmin(*(float3*)buf709, *(float*)buf710);
+    *(float4*)buf711 = fmin(*(float4*)buf712, *(float*)buf713);
+    *(float*)buf714 = fmod(*(float*)buf715, *(float*)buf716);
+    *(float2*)buf717 = fmod(*(float2*)buf718, *(float2*)buf719);
+    *(float3*)buf720 = fmod(*(float3*)buf721, *(float3*)buf722);
+    *(float4*)buf723 = fmod(*(float4*)buf724, *(float4*)buf725);
+    *(float*)buf726 = fract(*(float*)buf727, (float*) buf728);
+    *(float2*)buf729 = fract(*(float2*)buf730, (float2*) buf731);
+    *(float3*)buf732 = fract(*(float3*)buf733, (float3*) buf734);
+    *(float4*)buf735 = fract(*(float4*)buf736, (float4*) buf737);
+    *(float*)buf738 = fract(*(float*)buf739);
+    *(float2*)buf740 = fract(*(float2*)buf741);
+    *(float3*)buf742 = fract(*(float3*)buf743);
+    *(float4*)buf744 = fract(*(float4*)buf745);
+    *(float*)buf746 = frexp(*(float*)buf747, (int*) buf748);
+    *(float2*)buf749 = frexp(*(float2*)buf750, (int2*) buf751);
+    *(float3*)buf752 = frexp(*(float3*)buf753, (int3*) buf754);
+    *(float4*)buf755 = frexp(*(float4*)buf756, (int4*) buf757);
+    *(float*)buf758 = hypot(*(float*)buf759, *(float*)buf760);
+    *(float2*)buf761 = hypot(*(float2*)buf762, *(float2*)buf763);
+    *(float3*)buf764 = hypot(*(float3*)buf765, *(float3*)buf766);
+    *(float4*)buf767 = hypot(*(float4*)buf768, *(float4*)buf769);
+    *(int*)buf770 = ilogb(*(float*)buf771);
+    *(int2*)buf772 = ilogb(*(float2*)buf773);
+    *(int3*)buf774 = ilogb(*(float3*)buf775);
+    *(int4*)buf776 = ilogb(*(float4*)buf777);
+    *(float*)buf778 = ldexp(*(float*)buf779, *(int*)buf780);
+    *(float2*)buf781 = ldexp(*(float2*)buf782, *(int2*)buf783);
+    *(float3*)buf784 = ldexp(*(float3*)buf785, *(int3*)buf786);
+    *(float4*)buf787 = ldexp(*(float4*)buf788, *(int4*)buf789);
+    *(float2*)buf790 = ldexp(*(float2*)buf791, *(int*)buf792);
+    *(float3*)buf793 = ldexp(*(float3*)buf794, *(int*)buf795);
+    *(float4*)buf796 = ldexp(*(float4*)buf797, *(int*)buf798);
+    *(float*)buf799 = length(*(float*)buf800);
+    *(float*)buf801 = length(*(float2*)buf802);
+    *(float*)buf803 = length(*(float3*)buf804);
+    *(float*)buf805 = length(*(float4*)buf806);
+    *(float*)buf807 = lgamma(*(float*)buf808);
+    *(float2*)buf809 = lgamma(*(float2*)buf810);
+    *(float3*)buf811 = lgamma(*(float3*)buf812);
+    *(float4*)buf813 = lgamma(*(float4*)buf814);
+    *(float*)buf815 = lgamma(*(float*)buf816, (int*) buf817);
+    *(float2*)buf818 = lgamma(*(float2*)buf819, (int2*) buf820);
+    *(float3*)buf821 = lgamma(*(float3*)buf822, (int3*) buf823);
+    *(float4*)buf824 = lgamma(*(float4*)buf825, (int4*) buf826);
+    *(float*)buf827 = log(*(float*)buf828);
+    *(float2*)buf829 = log(*(float2*)buf830);
+    *(float3*)buf831 = log(*(float3*)buf832);
+    *(float4*)buf833 = log(*(float4*)buf834);
+    *(float*)buf835 = log10(*(float*)buf836);
+    *(float2*)buf837 = log10(*(float2*)buf838);
+    *(float3*)buf839 = log10(*(float3*)buf840);
+    *(float4*)buf841 = log10(*(float4*)buf842);
+    *(float*)buf843 = log1p(*(float*)buf844);
+    *(float2*)buf845 = log1p(*(float2*)buf846);
+    *(float3*)buf847 = log1p(*(float3*)buf848);
+    *(float4*)buf849 = log1p(*(float4*)buf850);
+    *(float*)buf851 = log2(*(float*)buf852);
+    *(float2*)buf853 = log2(*(float2*)buf854);
+    *(float3*)buf855 = log2(*(float3*)buf856);
+    *(float4*)buf857 = log2(*(float4*)buf858);
+    *(float*)buf859 = logb(*(float*)buf860);
+    *(float2*)buf861 = logb(*(float2*)buf862);
+    *(float3*)buf863 = logb(*(float3*)buf864);
+    *(float4*)buf865 = logb(*(float4*)buf866);
+    *(float*)buf867 = mad(*(float*)buf868, *(float*)buf869, *(float*)buf870);
+    *(float2*)buf871 = mad(*(float2*)buf872, *(float2*)buf873, *(float2*)buf874);
+    *(float3*)buf875 = mad(*(float3*)buf876, *(float3*)buf877, *(float3*)buf878);
+    *(float4*)buf879 = mad(*(float4*)buf880, *(float4*)buf881, *(float4*)buf882);
+    *(float*)buf883 = max(*(float*)buf884, *(float*)buf885);
+    *(float2*)buf886 = max(*(float2*)buf887, *(float2*)buf888);
+    *(float3*)buf889 = max(*(float3*)buf890, *(float3*)buf891);
+    *(float4*)buf892 = max(*(float4*)buf893, *(float4*)buf894);
+    *(float2*)buf895 = max(*(float2*)buf896, *(float*)buf897);
+    *(float3*)buf898 = max(*(float3*)buf899, *(float*)buf900);
+    *(float4*)buf901 = max(*(float4*)buf902, *(float*)buf903);
+    *(char*)buf904 = max(*(char*)buf905, *(char*)buf906);
+    *(uchar*)buf907 = max(*(uchar*)buf908, *(uchar*)buf909);
+    *(short*)buf910 = max(*(short*)buf911, *(short*)buf912);
+    *(ushort*)buf913 = max(*(ushort*)buf914, *(ushort*)buf915);
+    *(int*)buf916 = max(*(int*)buf917, *(int*)buf918);
+    *(uint*)buf919 = max(*(uint*)buf920, *(uint*)buf921);
+    *(char2*)buf922 = max(*(char2*)buf923, *(char2*)buf924);
+    *(uchar2*)buf925 = max(*(uchar2*)buf926, *(uchar2*)buf927);
+    *(short2*)buf928 = max(*(short2*)buf929, *(short2*)buf930);
+    *(ushort2*)buf931 = max(*(ushort2*)buf932, *(ushort2*)buf933);
+    *(int2*)buf934 = max(*(int2*)buf935, *(int2*)buf936);
+    *(uint2*)buf937 = max(*(uint2*)buf938, *(uint2*)buf939);
+    *(char3*)buf940 = max(*(char3*)buf941, *(char3*)buf942);
+    *(uchar3*)buf943 = max(*(uchar3*)buf944, *(uchar3*)buf945);
+    *(short3*)buf946 = max(*(short3*)buf947, *(short3*)buf948);
+    *(ushort3*)buf949 = max(*(ushort3*)buf950, *(ushort3*)buf951);
+    *(int3*)buf952 = max(*(int3*)buf953, *(int3*)buf954);
+    *(uint3*)buf955 = max(*(uint3*)buf956, *(uint3*)buf957);
+    *(char4*)buf958 = max(*(char4*)buf959, *(char4*)buf960);
+    *(uchar4*)buf961 = max(*(uchar4*)buf962, *(uchar4*)buf963);
+    *(short4*)buf964 = max(*(short4*)buf965, *(short4*)buf966);
+    *(ushort4*)buf967 = max(*(ushort4*)buf968, *(ushort4*)buf969);
+    *(int4*)buf970 = max(*(int4*)buf971, *(int4*)buf972);
+    *(uint4*)buf973 = max(*(uint4*)buf974, *(uint4*)buf975);
+    *(float*)buf976 = min(*(float*)buf977, *(float*)buf978);
+    *(float2*)buf979 = min(*(float2*)buf980, *(float2*)buf981);
+    *(float3*)buf982 = min(*(float3*)buf983, *(float3*)buf984);
+    *(float4*)buf985 = min(*(float4*)buf986, *(float4*)buf987);
+    *(float2*)buf988 = min(*(float2*)buf989, *(float*)buf990);
+    *(float3*)buf991 = min(*(float3*)buf992, *(float*)buf993);
+    *(float4*)buf994 = min(*(float4*)buf995, *(float*)buf996);
+    *(char*)buf997 = min(*(char*)buf998, *(char*)buf999);
+    *(uchar*)buf1000 = min(*(uchar*)buf1001, *(uchar*)buf1002);
+    *(short*)buf1003 = min(*(short*)buf1004, *(short*)buf1005);
+    *(ushort*)buf1006 = min(*(ushort*)buf1007, *(ushort*)buf1008);
+    *(int*)buf1009 = min(*(int*)buf1010, *(int*)buf1011);
+    *(uint*)buf1012 = min(*(uint*)buf1013, *(uint*)buf1014);
+    *(char2*)buf1015 = min(*(char2*)buf1016, *(char2*)buf1017);
+    *(uchar2*)buf1018 = min(*(uchar2*)buf1019, *(uchar2*)buf1020);
+    *(short2*)buf1021 = min(*(short2*)buf1022, *(short2*)buf1023);
+    *(ushort2*)buf1024 = min(*(ushort2*)buf1025, *(ushort2*)buf1026);
+    *(int2*)buf1027 = min(*(int2*)buf1028, *(int2*)buf1029);
+    *(uint2*)buf1030 = min(*(uint2*)buf1031, *(uint2*)buf1032);
+    *(char3*)buf1033 = min(*(char3*)buf1034, *(char3*)buf1035);
+    *(uchar3*)buf1036 = min(*(uchar3*)buf1037, *(uchar3*)buf1038);
+    *(short3*)buf1039 = min(*(short3*)buf1040, *(short3*)buf1041);
+    *(ushort3*)buf1042 = min(*(ushort3*)buf1043, *(ushort3*)buf1044);
+    *(int3*)buf1045 = min(*(int3*)buf1046, *(int3*)buf1047);
+    *(uint3*)buf1048 = min(*(uint3*)buf1049, *(uint3*)buf1050);
+    *(char4*)buf1051 = min(*(char4*)buf1052, *(char4*)buf1053);
+    *(uchar4*)buf1054 = min(*(uchar4*)buf1055, *(uchar4*)buf1056);
+    *(short4*)buf1057 = min(*(short4*)buf1058, *(short4*)buf1059);
+    *(ushort4*)buf1060 = min(*(ushort4*)buf1061, *(ushort4*)buf1062);
+    *(int4*)buf1063 = min(*(int4*)buf1064, *(int4*)buf1065);
+    *(uint4*)buf1066 = min(*(uint4*)buf1067, *(uint4*)buf1068);
+    *(float*)buf1069 = mix(*(float*)buf1070, *(float*)buf1071, *(float*)buf1072);
+    *(float2*)buf1073 = mix(*(float2*)buf1074, *(float2*)buf1075, *(float2*)buf1076);
+    *(float3*)buf1077 = mix(*(float3*)buf1078, *(float3*)buf1079, *(float3*)buf1080);
+    *(float4*)buf1081 = mix(*(float4*)buf1082, *(float4*)buf1083, *(float4*)buf1084);
+    *(float2*)buf1085 = mix(*(float2*)buf1086, *(float2*)buf1087, *(float*)buf1088);
+    *(float3*)buf1089 = mix(*(float3*)buf1090, *(float3*)buf1091, *(float*)buf1092);
+    *(float4*)buf1093 = mix(*(float4*)buf1094, *(float4*)buf1095, *(float*)buf1096);
+    *(float*)buf1097 = modf(*(float*)buf1098, (float*) buf1099);
+    *(float2*)buf1100 = modf(*(float2*)buf1101, (float2*) buf1102);
+    *(float3*)buf1103 = modf(*(float3*)buf1104, (float3*) buf1105);
+    *(float4*)buf1106 = modf(*(float4*)buf1107, (float4*) buf1108);
+    *(float*)buf1109 = nan(*(uint*)buf1110);
+    *(float*)buf1111 = nextafter(*(float*)buf1112, *(float*)buf1113);
+    *(float2*)buf1114 = nextafter(*(float2*)buf1115, *(float2*)buf1116);
+    *(float3*)buf1117 = nextafter(*(float3*)buf1118, *(float3*)buf1119);
+    *(float4*)buf1120 = nextafter(*(float4*)buf1121, *(float4*)buf1122);
+    *(float*)buf1123 = normalize(*(float*)buf1124);
+    *(float2*)buf1125 = normalize(*(float2*)buf1126);
+    *(float3*)buf1127 = normalize(*(float3*)buf1128);
+    *(float4*)buf1129 = normalize(*(float4*)buf1130);
+    *(float*)buf1131 = pow(*(float*)buf1132, *(float*)buf1133);
+    *(float2*)buf1134 = pow(*(float2*)buf1135, *(float2*)buf1136);
+    *(float3*)buf1137 = pow(*(float3*)buf1138, *(float3*)buf1139);
+    *(float4*)buf1140 = pow(*(float4*)buf1141, *(float4*)buf1142);
+    *(float*)buf1143 = pown(*(float*)buf1144, *(int*)buf1145);
+    *(float2*)buf1146 = pown(*(float2*)buf1147, *(int2*)buf1148);
+    *(float3*)buf1149 = pown(*(float3*)buf1150, *(int3*)buf1151);
+    *(float4*)buf1152 = pown(*(float4*)buf1153, *(int4*)buf1154);
+    *(float*)buf1155 = powr(*(float*)buf1156, *(float*)buf1157);
+    *(float2*)buf1158 = powr(*(float2*)buf1159, *(float2*)buf1160);
+    *(float3*)buf1161 = powr(*(float3*)buf1162, *(float3*)buf1163);
+    *(float4*)buf1164 = powr(*(float4*)buf1165, *(float4*)buf1166);
+    *(float*)buf1167 = radians(*(float*)buf1168);
+    *(float2*)buf1169 = radians(*(float2*)buf1170);
+    *(float3*)buf1171 = radians(*(float3*)buf1172);
+    *(float4*)buf1173 = radians(*(float4*)buf1174);
+    *(float*)buf1175 = remainder(*(float*)buf1176, *(float*)buf1177);
+    *(float2*)buf1178 = remainder(*(float2*)buf1179, *(float2*)buf1180);
+    *(float3*)buf1181 = remainder(*(float3*)buf1182, *(float3*)buf1183);
+    *(float4*)buf1184 = remainder(*(float4*)buf1185, *(float4*)buf1186);
+    *(float*)buf1187 = remquo(*(float*)buf1188, *(float*)buf1189, (int*) buf1190);
+    *(float2*)buf1191 = remquo(*(float2*)buf1192, *(float2*)buf1193, (int2*) buf1194);
+    *(float3*)buf1195 = remquo(*(float3*)buf1196, *(float3*)buf1197, (int3*) buf1198);
+    *(float4*)buf1199 = remquo(*(float4*)buf1200, *(float4*)buf1201, (int4*) buf1202);
+    *(float*)buf1203 = rint(*(float*)buf1204);
+    *(float2*)buf1205 = rint(*(float2*)buf1206);
+    *(float3*)buf1207 = rint(*(float3*)buf1208);
+    *(float4*)buf1209 = rint(*(float4*)buf1210);
+    *(float*)buf1211 = rootn(*(float*)buf1212, *(int*)buf1213);
+    *(float2*)buf1214 = rootn(*(float2*)buf1215, *(int2*)buf1216);
+    *(float3*)buf1217 = rootn(*(float3*)buf1218, *(int3*)buf1219);
+    *(float4*)buf1220 = rootn(*(float4*)buf1221, *(int4*)buf1222);
+    *(float*)buf1223 = round(*(float*)buf1224);
+    *(float2*)buf1225 = round(*(float2*)buf1226);
+    *(float3*)buf1227 = round(*(float3*)buf1228);
+    *(float4*)buf1229 = round(*(float4*)buf1230);
+    *(uint32_t*)buf1231 = rsAllocationGetDimFaces(*(rs_allocation*)buf1232);
+    *(uint32_t*)buf1233 = rsAllocationGetDimLOD(*(rs_allocation*)buf1234);
+    *(uint32_t*)buf1235 = rsAllocationGetDimX(*(rs_allocation*)buf1236);
+    *(uint32_t*)buf1237 = rsAllocationGetDimY(*(rs_allocation*)buf1238);
+    *(uint32_t*)buf1239 = rsAllocationGetDimZ(*(rs_allocation*)buf1240);
+    *(rs_element*)buf1241 = rsAllocationGetElement(*(rs_allocation*)buf1242);
+    *(char*)buf1243 = rsClamp(*(char*)buf1244, *(char*)buf1245, *(char*)buf1246);
+    *(uchar*)buf1247 = rsClamp(*(uchar*)buf1248, *(uchar*)buf1249, *(uchar*)buf1250);
+    *(short*)buf1251 = rsClamp(*(short*)buf1252, *(short*)buf1253, *(short*)buf1254);
+    *(ushort*)buf1255 = rsClamp(*(ushort*)buf1256, *(ushort*)buf1257, *(ushort*)buf1258);
+    *(int*)buf1259 = rsClamp(*(int*)buf1260, *(int*)buf1261, *(int*)buf1262);
+    *(uint*)buf1263 = rsClamp(*(uint*)buf1264, *(uint*)buf1265, *(uint*)buf1266);
+    rsClearObject((rs_element*) buf1267);
+    rsClearObject((rs_type*) buf1268);
+    rsClearObject((rs_allocation*) buf1269);
+    rsClearObject((rs_sampler*) buf1270);
+    rsClearObject((rs_script*) buf1271);
+#ifndef __LP64__
+    rsClearObject((rs_mesh*) buf1272);
+    rsClearObject((rs_program_fragment*) buf1273);
+    rsClearObject((rs_program_vertex*) buf1274);
+    rsClearObject((rs_program_raster*) buf1275);
+    rsClearObject((rs_program_store*) buf1276);
+    rsClearObject((rs_font*) buf1277);
+#endif
+    rsDebug((const char*) buf1278, *(double*)buf1279);
+    rsDebug((const char*) buf1280, *(int*)buf1281);
+    rsDebug((const char*) buf1282, *(uint*)buf1283);
+    rsDebug((const char*) buf1284, *(long*)buf1285);
+    rsDebug((const char*) buf1286, *(ulong*)buf1287);
+    rsDebug((const char*) buf1288, *(float*)buf1289);
+    rsDebug((const char*) buf1290, *(float2*)buf1291);
+    rsDebug((const char*) buf1292, *(float3*)buf1293);
+    rsDebug((const char*) buf1294, *(float4*)buf1295);
+    rsDebug((const char*) buf1296, *(float*)buf1297, *(float*)buf1298);
+    rsDebug((const char*) buf1299, *(float*)buf1300, *(float*)buf1301, *(float*)buf1302);
+    rsDebug((const char*) buf1303, *(float*)buf1304, *(float*)buf1305, *(float*)buf1306, *(float*)buf1307);
+    rsDebug((const char*) buf1308, *(long long*)buf1309);
+    rsDebug((const char*) buf1310, *(unsigned long long*)buf1311);
+    rsDebug((const char*) buf1312, (const void*) buf1313);
+    rsDebug((const char*) buf1314, (const rs_matrix4x4*) buf1315);
+    rsDebug((const char*) buf1316, (const rs_matrix3x3*) buf1317);
+    rsDebug((const char*) buf1318, (const rs_matrix2x2*) buf1319);
+    rsExtractFrustumPlanes((const rs_matrix4x4*) buf1320, (float4*) buf1321, (float4*) buf1322, (float4*) buf1323, (float4*) buf1324, (float4*) buf1325, (float4*) buf1326);
+    rsForEach(*(rs_script*)buf1327, *(rs_allocation*)buf1328, *(rs_allocation*)buf1329, (const void*) buf1330, (const rs_script_call_t*) buf1331);
+    rsForEach(*(rs_script*)buf1332, *(rs_allocation*)buf1333, *(rs_allocation*)buf1334, (const void*) buf1335);
+    *(float*)buf1336 = rsFrac(*(float*)buf1337);
+    *(rs_allocation*)buf1338 = rsGetAllocation((const void*) buf1339);
+    *(float*)buf1340 = rsGetDt();
+    *(const void**)buf1341 = rsGetElementAt(*(rs_allocation*)buf1342, *(uint32_t*)buf1343);
+    *(const void**)buf1344 = rsGetElementAt(*(rs_allocation*)buf1345, *(uint32_t*)buf1346, *(uint32_t*)buf1347);
+    *(const void**)buf1348 = rsGetElementAt(*(rs_allocation*)buf1349, *(uint32_t*)buf1350, *(uint32_t*)buf1351, *(uint32_t*)buf1352);
+    *(float*)buf1353 = rsGetElementAt_float(*(rs_allocation*)buf1354, *(uint32_t*)buf1355);
+    *(float2*)buf1356 = rsGetElementAt_float2(*(rs_allocation*)buf1357, *(uint32_t*)buf1358);
+    *(float3*)buf1359 = rsGetElementAt_float3(*(rs_allocation*)buf1360, *(uint32_t*)buf1361);
+    *(float4*)buf1362 = rsGetElementAt_float4(*(rs_allocation*)buf1363, *(uint32_t*)buf1364);
+    *(double*)buf1365 = rsGetElementAt_double(*(rs_allocation*)buf1366, *(uint32_t*)buf1367);
+    *(double2*)buf1368 = rsGetElementAt_double2(*(rs_allocation*)buf1369, *(uint32_t*)buf1370);
+    *(double3*)buf1371 = rsGetElementAt_double3(*(rs_allocation*)buf1372, *(uint32_t*)buf1373);
+    *(double4*)buf1374 = rsGetElementAt_double4(*(rs_allocation*)buf1375, *(uint32_t*)buf1376);
+    *(char*)buf1377 = rsGetElementAt_char(*(rs_allocation*)buf1378, *(uint32_t*)buf1379);
+    *(char2*)buf1380 = rsGetElementAt_char2(*(rs_allocation*)buf1381, *(uint32_t*)buf1382);
+    *(char3*)buf1383 = rsGetElementAt_char3(*(rs_allocation*)buf1384, *(uint32_t*)buf1385);
+    *(char4*)buf1386 = rsGetElementAt_char4(*(rs_allocation*)buf1387, *(uint32_t*)buf1388);
+    *(uchar*)buf1389 = rsGetElementAt_uchar(*(rs_allocation*)buf1390, *(uint32_t*)buf1391);
+    *(uchar2*)buf1392 = rsGetElementAt_uchar2(*(rs_allocation*)buf1393, *(uint32_t*)buf1394);
+    *(uchar3*)buf1395 = rsGetElementAt_uchar3(*(rs_allocation*)buf1396, *(uint32_t*)buf1397);
+    *(uchar4*)buf1398 = rsGetElementAt_uchar4(*(rs_allocation*)buf1399, *(uint32_t*)buf1400);
+    *(short*)buf1401 = rsGetElementAt_short(*(rs_allocation*)buf1402, *(uint32_t*)buf1403);
+    *(short2*)buf1404 = rsGetElementAt_short2(*(rs_allocation*)buf1405, *(uint32_t*)buf1406);
+    *(short3*)buf1407 = rsGetElementAt_short3(*(rs_allocation*)buf1408, *(uint32_t*)buf1409);
+    *(short4*)buf1410 = rsGetElementAt_short4(*(rs_allocation*)buf1411, *(uint32_t*)buf1412);
+    *(ushort*)buf1413 = rsGetElementAt_ushort(*(rs_allocation*)buf1414, *(uint32_t*)buf1415);
+    *(ushort2*)buf1416 = rsGetElementAt_ushort2(*(rs_allocation*)buf1417, *(uint32_t*)buf1418);
+    *(ushort3*)buf1419 = rsGetElementAt_ushort3(*(rs_allocation*)buf1420, *(uint32_t*)buf1421);
+    *(ushort4*)buf1422 = rsGetElementAt_ushort4(*(rs_allocation*)buf1423, *(uint32_t*)buf1424);
+    *(int*)buf1425 = rsGetElementAt_int(*(rs_allocation*)buf1426, *(uint32_t*)buf1427);
+    *(int2*)buf1428 = rsGetElementAt_int2(*(rs_allocation*)buf1429, *(uint32_t*)buf1430);
+    *(int3*)buf1431 = rsGetElementAt_int3(*(rs_allocation*)buf1432, *(uint32_t*)buf1433);
+    *(int4*)buf1434 = rsGetElementAt_int4(*(rs_allocation*)buf1435, *(uint32_t*)buf1436);
+    *(uint*)buf1437 = rsGetElementAt_uint(*(rs_allocation*)buf1438, *(uint32_t*)buf1439);
+    *(uint2*)buf1440 = rsGetElementAt_uint2(*(rs_allocation*)buf1441, *(uint32_t*)buf1442);
+    *(uint3*)buf1443 = rsGetElementAt_uint3(*(rs_allocation*)buf1444, *(uint32_t*)buf1445);
+    *(uint4*)buf1446 = rsGetElementAt_uint4(*(rs_allocation*)buf1447, *(uint32_t*)buf1448);
+    *(long*)buf1449 = rsGetElementAt_long(*(rs_allocation*)buf1450, *(uint32_t*)buf1451);
+    *(long2*)buf1452 = rsGetElementAt_long2(*(rs_allocation*)buf1453, *(uint32_t*)buf1454);
+    *(long3*)buf1455 = rsGetElementAt_long3(*(rs_allocation*)buf1456, *(uint32_t*)buf1457);
+    *(long4*)buf1458 = rsGetElementAt_long4(*(rs_allocation*)buf1459, *(uint32_t*)buf1460);
+    *(ulong*)buf1461 = rsGetElementAt_ulong(*(rs_allocation*)buf1462, *(uint32_t*)buf1463);
+    *(ulong2*)buf1464 = rsGetElementAt_ulong2(*(rs_allocation*)buf1465, *(uint32_t*)buf1466);
+    *(ulong3*)buf1467 = rsGetElementAt_ulong3(*(rs_allocation*)buf1468, *(uint32_t*)buf1469);
+    *(ulong4*)buf1470 = rsGetElementAt_ulong4(*(rs_allocation*)buf1471, *(uint32_t*)buf1472);
+    *(float*)buf1473 = rsGetElementAt_float(*(rs_allocation*)buf1474, *(uint32_t*)buf1475, *(uint32_t*)buf1476);
+    *(float2*)buf1477 = rsGetElementAt_float2(*(rs_allocation*)buf1478, *(uint32_t*)buf1479, *(uint32_t*)buf1480);
+    *(float3*)buf1481 = rsGetElementAt_float3(*(rs_allocation*)buf1482, *(uint32_t*)buf1483, *(uint32_t*)buf1484);
+    *(float4*)buf1485 = rsGetElementAt_float4(*(rs_allocation*)buf1486, *(uint32_t*)buf1487, *(uint32_t*)buf1488);
+    *(double*)buf1489 = rsGetElementAt_double(*(rs_allocation*)buf1490, *(uint32_t*)buf1491, *(uint32_t*)buf1492);
+    *(double2*)buf1493 = rsGetElementAt_double2(*(rs_allocation*)buf1494, *(uint32_t*)buf1495, *(uint32_t*)buf1496);
+    *(double3*)buf1497 = rsGetElementAt_double3(*(rs_allocation*)buf1498, *(uint32_t*)buf1499, *(uint32_t*)buf1500);
+    *(double4*)buf1501 = rsGetElementAt_double4(*(rs_allocation*)buf1502, *(uint32_t*)buf1503, *(uint32_t*)buf1504);
+    *(char*)buf1505 = rsGetElementAt_char(*(rs_allocation*)buf1506, *(uint32_t*)buf1507, *(uint32_t*)buf1508);
+    *(char2*)buf1509 = rsGetElementAt_char2(*(rs_allocation*)buf1510, *(uint32_t*)buf1511, *(uint32_t*)buf1512);
+    *(char3*)buf1513 = rsGetElementAt_char3(*(rs_allocation*)buf1514, *(uint32_t*)buf1515, *(uint32_t*)buf1516);
+    *(char4*)buf1517 = rsGetElementAt_char4(*(rs_allocation*)buf1518, *(uint32_t*)buf1519, *(uint32_t*)buf1520);
+    *(uchar*)buf1521 = rsGetElementAt_uchar(*(rs_allocation*)buf1522, *(uint32_t*)buf1523, *(uint32_t*)buf1524);
+    *(uchar2*)buf1525 = rsGetElementAt_uchar2(*(rs_allocation*)buf1526, *(uint32_t*)buf1527, *(uint32_t*)buf1528);
+    *(uchar3*)buf1529 = rsGetElementAt_uchar3(*(rs_allocation*)buf1530, *(uint32_t*)buf1531, *(uint32_t*)buf1532);
+    *(uchar4*)buf1533 = rsGetElementAt_uchar4(*(rs_allocation*)buf1534, *(uint32_t*)buf1535, *(uint32_t*)buf1536);
+    *(short*)buf1537 = rsGetElementAt_short(*(rs_allocation*)buf1538, *(uint32_t*)buf1539, *(uint32_t*)buf1540);
+    *(short2*)buf1541 = rsGetElementAt_short2(*(rs_allocation*)buf1542, *(uint32_t*)buf1543, *(uint32_t*)buf1544);
+    *(short3*)buf1545 = rsGetElementAt_short3(*(rs_allocation*)buf1546, *(uint32_t*)buf1547, *(uint32_t*)buf1548);
+    *(short4*)buf1549 = rsGetElementAt_short4(*(rs_allocation*)buf1550, *(uint32_t*)buf1551, *(uint32_t*)buf1552);
+    *(ushort*)buf1553 = rsGetElementAt_ushort(*(rs_allocation*)buf1554, *(uint32_t*)buf1555, *(uint32_t*)buf1556);
+    *(ushort2*)buf1557 = rsGetElementAt_ushort2(*(rs_allocation*)buf1558, *(uint32_t*)buf1559, *(uint32_t*)buf1560);
+    *(ushort3*)buf1561 = rsGetElementAt_ushort3(*(rs_allocation*)buf1562, *(uint32_t*)buf1563, *(uint32_t*)buf1564);
+    *(ushort4*)buf1565 = rsGetElementAt_ushort4(*(rs_allocation*)buf1566, *(uint32_t*)buf1567, *(uint32_t*)buf1568);
+    *(int*)buf1569 = rsGetElementAt_int(*(rs_allocation*)buf1570, *(uint32_t*)buf1571, *(uint32_t*)buf1572);
+    *(int2*)buf1573 = rsGetElementAt_int2(*(rs_allocation*)buf1574, *(uint32_t*)buf1575, *(uint32_t*)buf1576);
+    *(int3*)buf1577 = rsGetElementAt_int3(*(rs_allocation*)buf1578, *(uint32_t*)buf1579, *(uint32_t*)buf1580);
+    *(int4*)buf1581 = rsGetElementAt_int4(*(rs_allocation*)buf1582, *(uint32_t*)buf1583, *(uint32_t*)buf1584);
+    *(uint*)buf1585 = rsGetElementAt_uint(*(rs_allocation*)buf1586, *(uint32_t*)buf1587, *(uint32_t*)buf1588);
+    *(uint2*)buf1589 = rsGetElementAt_uint2(*(rs_allocation*)buf1590, *(uint32_t*)buf1591, *(uint32_t*)buf1592);
+    *(uint3*)buf1593 = rsGetElementAt_uint3(*(rs_allocation*)buf1594, *(uint32_t*)buf1595, *(uint32_t*)buf1596);
+    *(uint4*)buf1597 = rsGetElementAt_uint4(*(rs_allocation*)buf1598, *(uint32_t*)buf1599, *(uint32_t*)buf1600);
+    *(long*)buf1601 = rsGetElementAt_long(*(rs_allocation*)buf1602, *(uint32_t*)buf1603, *(uint32_t*)buf1604);
+    *(long2*)buf1605 = rsGetElementAt_long2(*(rs_allocation*)buf1606, *(uint32_t*)buf1607, *(uint32_t*)buf1608);
+    *(long3*)buf1609 = rsGetElementAt_long3(*(rs_allocation*)buf1610, *(uint32_t*)buf1611, *(uint32_t*)buf1612);
+    *(long4*)buf1613 = rsGetElementAt_long4(*(rs_allocation*)buf1614, *(uint32_t*)buf1615, *(uint32_t*)buf1616);
+    *(ulong*)buf1617 = rsGetElementAt_ulong(*(rs_allocation*)buf1618, *(uint32_t*)buf1619, *(uint32_t*)buf1620);
+    *(ulong2*)buf1621 = rsGetElementAt_ulong2(*(rs_allocation*)buf1622, *(uint32_t*)buf1623, *(uint32_t*)buf1624);
+    *(ulong3*)buf1625 = rsGetElementAt_ulong3(*(rs_allocation*)buf1626, *(uint32_t*)buf1627, *(uint32_t*)buf1628);
+    *(ulong4*)buf1629 = rsGetElementAt_ulong4(*(rs_allocation*)buf1630, *(uint32_t*)buf1631, *(uint32_t*)buf1632);
+    *(float*)buf1633 = rsGetElementAt_float(*(rs_allocation*)buf1634, *(uint32_t*)buf1635, *(uint32_t*)buf1636, *(uint32_t*)buf1637);
+    *(float2*)buf1638 = rsGetElementAt_float2(*(rs_allocation*)buf1639, *(uint32_t*)buf1640, *(uint32_t*)buf1641, *(uint32_t*)buf1642);
+    *(float3*)buf1643 = rsGetElementAt_float3(*(rs_allocation*)buf1644, *(uint32_t*)buf1645, *(uint32_t*)buf1646, *(uint32_t*)buf1647);
+    *(float4*)buf1648 = rsGetElementAt_float4(*(rs_allocation*)buf1649, *(uint32_t*)buf1650, *(uint32_t*)buf1651, *(uint32_t*)buf1652);
+    *(double*)buf1653 = rsGetElementAt_double(*(rs_allocation*)buf1654, *(uint32_t*)buf1655, *(uint32_t*)buf1656, *(uint32_t*)buf1657);
+    *(double2*)buf1658 = rsGetElementAt_double2(*(rs_allocation*)buf1659, *(uint32_t*)buf1660, *(uint32_t*)buf1661, *(uint32_t*)buf1662);
+    *(double3*)buf1663 = rsGetElementAt_double3(*(rs_allocation*)buf1664, *(uint32_t*)buf1665, *(uint32_t*)buf1666, *(uint32_t*)buf1667);
+    *(double4*)buf1668 = rsGetElementAt_double4(*(rs_allocation*)buf1669, *(uint32_t*)buf1670, *(uint32_t*)buf1671, *(uint32_t*)buf1672);
+    *(char*)buf1673 = rsGetElementAt_char(*(rs_allocation*)buf1674, *(uint32_t*)buf1675, *(uint32_t*)buf1676, *(uint32_t*)buf1677);
+    *(char2*)buf1678 = rsGetElementAt_char2(*(rs_allocation*)buf1679, *(uint32_t*)buf1680, *(uint32_t*)buf1681, *(uint32_t*)buf1682);
+    *(char3*)buf1683 = rsGetElementAt_char3(*(rs_allocation*)buf1684, *(uint32_t*)buf1685, *(uint32_t*)buf1686, *(uint32_t*)buf1687);
+    *(char4*)buf1688 = rsGetElementAt_char4(*(rs_allocation*)buf1689, *(uint32_t*)buf1690, *(uint32_t*)buf1691, *(uint32_t*)buf1692);
+    *(uchar*)buf1693 = rsGetElementAt_uchar(*(rs_allocation*)buf1694, *(uint32_t*)buf1695, *(uint32_t*)buf1696, *(uint32_t*)buf1697);
+    *(uchar2*)buf1698 = rsGetElementAt_uchar2(*(rs_allocation*)buf1699, *(uint32_t*)buf1700, *(uint32_t*)buf1701, *(uint32_t*)buf1702);
+    *(uchar3*)buf1703 = rsGetElementAt_uchar3(*(rs_allocation*)buf1704, *(uint32_t*)buf1705, *(uint32_t*)buf1706, *(uint32_t*)buf1707);
+    *(uchar4*)buf1708 = rsGetElementAt_uchar4(*(rs_allocation*)buf1709, *(uint32_t*)buf1710, *(uint32_t*)buf1711, *(uint32_t*)buf1712);
+    *(short*)buf1713 = rsGetElementAt_short(*(rs_allocation*)buf1714, *(uint32_t*)buf1715, *(uint32_t*)buf1716, *(uint32_t*)buf1717);
+    *(short2*)buf1718 = rsGetElementAt_short2(*(rs_allocation*)buf1719, *(uint32_t*)buf1720, *(uint32_t*)buf1721, *(uint32_t*)buf1722);
+    *(short3*)buf1723 = rsGetElementAt_short3(*(rs_allocation*)buf1724, *(uint32_t*)buf1725, *(uint32_t*)buf1726, *(uint32_t*)buf1727);
+    *(short4*)buf1728 = rsGetElementAt_short4(*(rs_allocation*)buf1729, *(uint32_t*)buf1730, *(uint32_t*)buf1731, *(uint32_t*)buf1732);
+    *(ushort*)buf1733 = rsGetElementAt_ushort(*(rs_allocation*)buf1734, *(uint32_t*)buf1735, *(uint32_t*)buf1736, *(uint32_t*)buf1737);
+    *(ushort2*)buf1738 = rsGetElementAt_ushort2(*(rs_allocation*)buf1739, *(uint32_t*)buf1740, *(uint32_t*)buf1741, *(uint32_t*)buf1742);
+    *(ushort3*)buf1743 = rsGetElementAt_ushort3(*(rs_allocation*)buf1744, *(uint32_t*)buf1745, *(uint32_t*)buf1746, *(uint32_t*)buf1747);
+    *(ushort4*)buf1748 = rsGetElementAt_ushort4(*(rs_allocation*)buf1749, *(uint32_t*)buf1750, *(uint32_t*)buf1751, *(uint32_t*)buf1752);
+    *(int*)buf1753 = rsGetElementAt_int(*(rs_allocation*)buf1754, *(uint32_t*)buf1755, *(uint32_t*)buf1756, *(uint32_t*)buf1757);
+    *(int2*)buf1758 = rsGetElementAt_int2(*(rs_allocation*)buf1759, *(uint32_t*)buf1760, *(uint32_t*)buf1761, *(uint32_t*)buf1762);
+    *(int3*)buf1763 = rsGetElementAt_int3(*(rs_allocation*)buf1764, *(uint32_t*)buf1765, *(uint32_t*)buf1766, *(uint32_t*)buf1767);
+    *(int4*)buf1768 = rsGetElementAt_int4(*(rs_allocation*)buf1769, *(uint32_t*)buf1770, *(uint32_t*)buf1771, *(uint32_t*)buf1772);
+    *(uint*)buf1773 = rsGetElementAt_uint(*(rs_allocation*)buf1774, *(uint32_t*)buf1775, *(uint32_t*)buf1776, *(uint32_t*)buf1777);
+    *(uint2*)buf1778 = rsGetElementAt_uint2(*(rs_allocation*)buf1779, *(uint32_t*)buf1780, *(uint32_t*)buf1781, *(uint32_t*)buf1782);
+    *(uint3*)buf1783 = rsGetElementAt_uint3(*(rs_allocation*)buf1784, *(uint32_t*)buf1785, *(uint32_t*)buf1786, *(uint32_t*)buf1787);
+    *(uint4*)buf1788 = rsGetElementAt_uint4(*(rs_allocation*)buf1789, *(uint32_t*)buf1790, *(uint32_t*)buf1791, *(uint32_t*)buf1792);
+    *(long*)buf1793 = rsGetElementAt_long(*(rs_allocation*)buf1794, *(uint32_t*)buf1795, *(uint32_t*)buf1796, *(uint32_t*)buf1797);
+    *(long2*)buf1798 = rsGetElementAt_long2(*(rs_allocation*)buf1799, *(uint32_t*)buf1800, *(uint32_t*)buf1801, *(uint32_t*)buf1802);
+    *(long3*)buf1803 = rsGetElementAt_long3(*(rs_allocation*)buf1804, *(uint32_t*)buf1805, *(uint32_t*)buf1806, *(uint32_t*)buf1807);
+    *(long4*)buf1808 = rsGetElementAt_long4(*(rs_allocation*)buf1809, *(uint32_t*)buf1810, *(uint32_t*)buf1811, *(uint32_t*)buf1812);
+    *(ulong*)buf1813 = rsGetElementAt_ulong(*(rs_allocation*)buf1814, *(uint32_t*)buf1815, *(uint32_t*)buf1816, *(uint32_t*)buf1817);
+    *(ulong2*)buf1818 = rsGetElementAt_ulong2(*(rs_allocation*)buf1819, *(uint32_t*)buf1820, *(uint32_t*)buf1821, *(uint32_t*)buf1822);
+    *(ulong3*)buf1823 = rsGetElementAt_ulong3(*(rs_allocation*)buf1824, *(uint32_t*)buf1825, *(uint32_t*)buf1826, *(uint32_t*)buf1827);
+    *(ulong4*)buf1828 = rsGetElementAt_ulong4(*(rs_allocation*)buf1829, *(uint32_t*)buf1830, *(uint32_t*)buf1831, *(uint32_t*)buf1832);
+    *(bool*)buf1833 = rsIsObject(*(rs_element*)buf1834);
+    *(bool*)buf1835 = rsIsObject(*(rs_type*)buf1836);
+    *(bool*)buf1837 = rsIsObject(*(rs_allocation*)buf1838);
+    *(bool*)buf1839 = rsIsObject(*(rs_sampler*)buf1840);
+    *(bool*)buf1841 = rsIsObject(*(rs_script*)buf1842);
+#ifndef __LP64__
+    *(bool*)buf1843 = rsIsObject(*(rs_mesh*)buf1844);
+    *(bool*)buf1845 = rsIsObject(*(rs_program_fragment*)buf1846);
+    *(bool*)buf1847 = rsIsObject(*(rs_program_vertex*)buf1848);
+    *(bool*)buf1849 = rsIsObject(*(rs_program_raster*)buf1850);
+    *(bool*)buf1851 = rsIsObject(*(rs_program_store*)buf1852);
+    *(bool*)buf1853 = rsIsObject(*(rs_font*)buf1854);
+#endif
+    *(bool*)buf1855 = rsIsSphereInFrustum((float4*) buf1856, (float4*) buf1857, (float4*) buf1858, (float4*) buf1859, (float4*) buf1860, (float4*) buf1861, (float4*) buf1862);
+    *(rs_tm**)buf1863 = rsLocaltime((rs_tm*) buf1864, (const rs_time_t*) buf1865);
+    *(float*)buf1866 = rsMatrixGet((const rs_matrix4x4*) buf1867, *(uint32_t*)buf1868, *(uint32_t*)buf1869);
+    *(float*)buf1870 = rsMatrixGet((const rs_matrix3x3*) buf1871, *(uint32_t*)buf1872, *(uint32_t*)buf1873);
+    *(float*)buf1874 = rsMatrixGet((const rs_matrix2x2*) buf1875, *(uint32_t*)buf1876, *(uint32_t*)buf1877);
+    *(bool*)buf1878 = rsMatrixInverse((rs_matrix4x4*) buf1879);
+    *(bool*)buf1880 = rsMatrixInverseTranspose((rs_matrix4x4*) buf1881);
+    rsMatrixLoad((rs_matrix4x4*) buf1882, (const float*) buf1883);
+    rsMatrixLoad((rs_matrix3x3*) buf1884, (const float*) buf1885);
+    rsMatrixLoad((rs_matrix2x2*) buf1886, (const float*) buf1887);
+    rsMatrixLoad((rs_matrix4x4*) buf1888, (const rs_matrix4x4*) buf1889);
+    rsMatrixLoad((rs_matrix3x3*) buf1890, (const rs_matrix3x3*) buf1891);
+    rsMatrixLoad((rs_matrix2x2*) buf1892, (const rs_matrix2x2*) buf1893);
+    rsMatrixLoad((rs_matrix4x4*) buf1894, (const rs_matrix3x3*) buf1895);
+    rsMatrixLoad((rs_matrix4x4*) buf1896, (const rs_matrix2x2*) buf1897);
+    rsMatrixLoadFrustum((rs_matrix4x4*) buf1898, *(float*)buf1899, *(float*)buf1900, *(float*)buf1901, *(float*)buf1902, *(float*)buf1903, *(float*)buf1904);
+    rsMatrixLoadIdentity((rs_matrix4x4*) buf1905);
+    rsMatrixLoadIdentity((rs_matrix3x3*) buf1906);
+    rsMatrixLoadIdentity((rs_matrix2x2*) buf1907);
+    rsMatrixLoadMultiply((rs_matrix4x4*) buf1908, (const rs_matrix4x4*) buf1909, (const rs_matrix4x4*) buf1910);
+    rsMatrixLoadMultiply((rs_matrix3x3*) buf1911, (const rs_matrix3x3*) buf1912, (const rs_matrix3x3*) buf1913);
+    rsMatrixLoadMultiply((rs_matrix2x2*) buf1914, (const rs_matrix2x2*) buf1915, (const rs_matrix2x2*) buf1916);
+    rsMatrixLoadOrtho((rs_matrix4x4*) buf1917, *(float*)buf1918, *(float*)buf1919, *(float*)buf1920, *(float*)buf1921, *(float*)buf1922, *(float*)buf1923);
+    rsMatrixLoadPerspective((rs_matrix4x4*) buf1924, *(float*)buf1925, *(float*)buf1926, *(float*)buf1927, *(float*)buf1928);
+    rsMatrixLoadRotate((rs_matrix4x4*) buf1929, *(float*)buf1930, *(float*)buf1931, *(float*)buf1932, *(float*)buf1933);
+    rsMatrixLoadScale((rs_matrix4x4*) buf1934, *(float*)buf1935, *(float*)buf1936, *(float*)buf1937);
+    rsMatrixLoadTranslate((rs_matrix4x4*) buf1938, *(float*)buf1939, *(float*)buf1940, *(float*)buf1941);
+    rsMatrixMultiply((rs_matrix4x4*) buf1942, (const rs_matrix4x4*) buf1943);
+    rsMatrixMultiply((rs_matrix3x3*) buf1944, (const rs_matrix3x3*) buf1945);
+    rsMatrixMultiply((rs_matrix2x2*) buf1946, (const rs_matrix2x2*) buf1947);
+    *(float4*)buf1948 = rsMatrixMultiply((rs_matrix4x4*) buf1949, *(float4*)buf1950);
+    *(float4*)buf1951 = rsMatrixMultiply((rs_matrix4x4*) buf1952, *(float3*)buf1953);
+    *(float4*)buf1954 = rsMatrixMultiply((rs_matrix4x4*) buf1955, *(float2*)buf1956);
+    *(float3*)buf1957 = rsMatrixMultiply((rs_matrix3x3*) buf1958, *(float3*)buf1959);
+    *(float3*)buf1960 = rsMatrixMultiply((rs_matrix3x3*) buf1961, *(float2*)buf1962);
+    *(float2*)buf1963 = rsMatrixMultiply((rs_matrix2x2*) buf1964, *(float2*)buf1965);
+    rsMatrixRotate((rs_matrix4x4*) buf1966, *(float*)buf1967, *(float*)buf1968, *(float*)buf1969, *(float*)buf1970);
+    rsMatrixScale((rs_matrix4x4*) buf1971, *(float*)buf1972, *(float*)buf1973, *(float*)buf1974);
+    rsMatrixSet((rs_matrix4x4*) buf1975, *(uint32_t*)buf1976, *(uint32_t*)buf1977, *(float*)buf1978);
+    rsMatrixSet((rs_matrix3x3*) buf1979, *(uint32_t*)buf1980, *(uint32_t*)buf1981, *(float*)buf1982);
+    rsMatrixSet((rs_matrix2x2*) buf1983, *(uint32_t*)buf1984, *(uint32_t*)buf1985, *(float*)buf1986);
+    rsMatrixTranslate((rs_matrix4x4*) buf1987, *(float*)buf1988, *(float*)buf1989, *(float*)buf1990);
+    rsMatrixTranspose((rs_matrix4x4*) buf1991);
+    rsMatrixTranspose((rs_matrix3x3*) buf1992);
+    rsMatrixTranspose((rs_matrix2x2*) buf1993);
+    *(uchar4*)buf1994 = rsPackColorTo8888(*(float*)buf1995, *(float*)buf1996, *(float*)buf1997);
+    *(uchar4*)buf1998 = rsPackColorTo8888(*(float*)buf1999, *(float*)buf2000, *(float*)buf2001, *(float*)buf2002);
+    *(uchar4*)buf2003 = rsPackColorTo8888(*(float3*)buf2004);
+    *(uchar4*)buf2005 = rsPackColorTo8888(*(float4*)buf2006);
+    rsQuaternionAdd((rs_quaternion*) buf2007, (const rs_quaternion*) buf2008);
+    rsQuaternionConjugate((rs_quaternion*) buf2009);
+    *(float*)buf2010 = rsQuaternionDot((const rs_quaternion*) buf2011, (const rs_quaternion*) buf2012);
+    rsQuaternionGetMatrixUnit((rs_matrix4x4*) buf2013, (const rs_quaternion*) buf2014);
+    rsQuaternionLoadRotate((rs_quaternion*) buf2015, *(float*)buf2016, *(float*)buf2017, *(float*)buf2018, *(float*)buf2019);
+    rsQuaternionLoadRotateUnit((rs_quaternion*) buf2020, *(float*)buf2021, *(float*)buf2022, *(float*)buf2023, *(float*)buf2024);
+    rsQuaternionMultiply((rs_quaternion*) buf2025, *(float*)buf2026);
+    rsQuaternionMultiply((rs_quaternion*) buf2027, (const rs_quaternion*) buf2028);
+    rsQuaternionNormalize((rs_quaternion*) buf2029);
+    rsQuaternionSet((rs_quaternion*) buf2030, *(float*)buf2031, *(float*)buf2032, *(float*)buf2033, *(float*)buf2034);
+    rsQuaternionSet((rs_quaternion*) buf2035, (const rs_quaternion*) buf2036);
+    rsQuaternionSlerp((rs_quaternion*) buf2037, (const rs_quaternion*) buf2038, (const rs_quaternion*) buf2039, *(float*)buf2040);
+    *(int*)buf2041 = rsRand(*(int*)buf2042);
+    *(int*)buf2043 = rsRand(*(int*)buf2044, *(int*)buf2045);
+    *(float*)buf2046 = rsRand(*(float*)buf2047);
+    *(float*)buf2048 = rsRand(*(float*)buf2049, *(float*)buf2050);
+    *(bool*)buf2051 = rsSendToClient(*(int*)buf2052);
+    *(bool*)buf2053 = rsSendToClient(*(int*)buf2054, (const void*) buf2055, *(uint*)buf2056);
+    rsSendToClientBlocking(*(int*)buf2057);
+    rsSendToClientBlocking(*(int*)buf2058, (const void*) buf2059, *(uint*)buf2060);
+    rsSetObject((rs_element*) buf2061, *(rs_element*)buf2062);
+    rsSetObject((rs_type*) buf2063, *(rs_type*)buf2064);
+    rsSetObject((rs_allocation*) buf2065, *(rs_allocation*)buf2066);
+    rsSetObject((rs_sampler*) buf2067, *(rs_sampler*)buf2068);
+    rsSetObject((rs_script*) buf2069, *(rs_script*)buf2070);
+#ifndef __LP64__
+    rsSetObject((rs_mesh*) buf2071, *(rs_mesh*)buf2072);
+    rsSetObject((rs_program_fragment*) buf2073, *(rs_program_fragment*)buf2074);
+    rsSetObject((rs_program_vertex*) buf2075, *(rs_program_vertex*)buf2076);
+    rsSetObject((rs_program_raster*) buf2077, *(rs_program_raster*)buf2078);
+    rsSetObject((rs_program_store*) buf2079, *(rs_program_store*)buf2080);
+    rsSetObject((rs_font*) buf2081, *(rs_font*)buf2082);
+#endif
+    *(rs_time_t*)buf2083 = rsTime((rs_time_t*) buf2084);
+    *(float4*)buf2085 = rsUnpackColor8888(*(uchar4*)buf2086);
+    *(int64_t*)buf2087 = rsUptimeMillis();
+    *(int64_t*)buf2088 = rsUptimeNanos();
+    *(float4*)buf2089 = rsYuvToRGBA_float4(*(uchar*)buf2090, *(uchar*)buf2091, *(uchar*)buf2092);
+    *(uchar4*)buf2093 = rsYuvToRGBA_uchar4(*(uchar*)buf2094, *(uchar*)buf2095, *(uchar*)buf2096);
+#ifndef __LP64__
+    rsgAllocationSyncAll(*(rs_allocation*)buf2097);
+#endif
+#ifndef __LP64__
+    rsgBindConstant(*(rs_program_fragment*)buf2098, *(uint*)buf2099, *(rs_allocation*)buf2100);
+#endif
+#ifndef __LP64__
+    rsgBindConstant(*(rs_program_vertex*)buf2101, *(uint*)buf2102, *(rs_allocation*)buf2103);
+#endif
+#ifndef __LP64__
+    rsgBindFont(*(rs_font*)buf2104);
+#endif
+#ifndef __LP64__
+    rsgBindProgramFragment(*(rs_program_fragment*)buf2105);
+#endif
+#ifndef __LP64__
+    rsgBindProgramRaster(*(rs_program_raster*)buf2106);
+#endif
+#ifndef __LP64__
+    rsgBindProgramStore(*(rs_program_store*)buf2107);
+#endif
+#ifndef __LP64__
+    rsgBindProgramVertex(*(rs_program_vertex*)buf2108);
+#endif
+#ifndef __LP64__
+    rsgBindSampler(*(rs_program_fragment*)buf2109, *(uint*)buf2110, *(rs_sampler*)buf2111);
+#endif
+#ifndef __LP64__
+    rsgBindTexture(*(rs_program_fragment*)buf2112, *(uint*)buf2113, *(rs_allocation*)buf2114);
+#endif
+#ifndef __LP64__
+    rsgClearColor(*(float*)buf2115, *(float*)buf2116, *(float*)buf2117, *(float*)buf2118);
+#endif
+#ifndef __LP64__
+    rsgClearDepth(*(float*)buf2119);
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf2120);
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf2121, *(uint*)buf2122);
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf2123, *(uint*)buf2124, *(uint*)buf2125, *(uint*)buf2126);
+#endif
+#ifndef __LP64__
+    rsgDrawQuad(*(float*)buf2127, *(float*)buf2128, *(float*)buf2129, *(float*)buf2130, *(float*)buf2131, *(float*)buf2132, *(float*)buf2133, *(float*)buf2134, *(float*)buf2135, *(float*)buf2136, *(float*)buf2137, *(float*)buf2138);
+#endif
+#ifndef __LP64__
+    rsgDrawQuadTexCoords(*(float*)buf2139, *(float*)buf2140, *(float*)buf2141, *(float*)buf2142, *(float*)buf2143, *(float*)buf2144, *(float*)buf2145, *(float*)buf2146, *(float*)buf2147, *(float*)buf2148, *(float*)buf2149, *(float*)buf2150, *(float*)buf2151, *(float*)buf2152, *(float*)buf2153, *(float*)buf2154, *(float*)buf2155, *(float*)buf2156, *(float*)buf2157, *(float*)buf2158);
+#endif
+#ifndef __LP64__
+    rsgDrawRect(*(float*)buf2159, *(float*)buf2160, *(float*)buf2161, *(float*)buf2162, *(float*)buf2163);
+#endif
+#ifndef __LP64__
+    rsgDrawSpriteScreenspace(*(float*)buf2164, *(float*)buf2165, *(float*)buf2166, *(float*)buf2167, *(float*)buf2168);
+#endif
+#ifndef __LP64__
+    rsgDrawText((const char*) buf2169, *(int*)buf2170, *(int*)buf2171);
+#endif
+#ifndef __LP64__
+    rsgDrawText(*(rs_allocation*)buf2172, *(int*)buf2173, *(int*)buf2174);
+#endif
+#ifndef __LP64__
+    rsgFontColor(*(float*)buf2175, *(float*)buf2176, *(float*)buf2177, *(float*)buf2178);
+#endif
+#ifndef __LP64__
+    *(uint*)buf2179 = rsgGetHeight();
+#endif
+#ifndef __LP64__
+    *(uint*)buf2180 = rsgGetWidth();
+#endif
+#ifndef __LP64__
+    rsgMeasureText((const char*) buf2181, (int*) buf2182, (int*) buf2183, (int*) buf2184, (int*) buf2185);
+#endif
+#ifndef __LP64__
+    rsgMeasureText(*(rs_allocation*)buf2186, (int*) buf2187, (int*) buf2188, (int*) buf2189, (int*) buf2190);
+#endif
+#ifndef __LP64__
+    rsgMeshComputeBoundingBox(*(rs_mesh*)buf2191, (float*) buf2192, (float*) buf2193, (float*) buf2194, (float*) buf2195, (float*) buf2196, (float*) buf2197);
+#endif
+#ifndef __LP64__
+    rsgMeshComputeBoundingBox(*(rs_mesh*)buf2198, (float3*) buf2199, (float3*) buf2200);
+#endif
+#ifndef __LP64__
+    rsgProgramFragmentConstantColor(*(rs_program_fragment*)buf2201, *(float*)buf2202, *(float*)buf2203, *(float*)buf2204, *(float*)buf2205);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexGetProjectionMatrix((rs_matrix4x4*) buf2206);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadModelMatrix((const rs_matrix4x4*) buf2207);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadProjectionMatrix((const rs_matrix4x4*) buf2208);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadTextureMatrix((const rs_matrix4x4*) buf2209);
+#endif
+    *(float*)buf2210 = rsqrt(*(float*)buf2211);
+    *(float2*)buf2212 = rsqrt(*(float2*)buf2213);
+    *(float3*)buf2214 = rsqrt(*(float3*)buf2215);
+    *(float4*)buf2216 = rsqrt(*(float4*)buf2217);
+    *(float*)buf2218 = sign(*(float*)buf2219);
+    *(float2*)buf2220 = sign(*(float2*)buf2221);
+    *(float3*)buf2222 = sign(*(float3*)buf2223);
+    *(float4*)buf2224 = sign(*(float4*)buf2225);
+    *(float*)buf2226 = sin(*(float*)buf2227);
+    *(float2*)buf2228 = sin(*(float2*)buf2229);
+    *(float3*)buf2230 = sin(*(float3*)buf2231);
+    *(float4*)buf2232 = sin(*(float4*)buf2233);
+    *(float*)buf2234 = sincos(*(float*)buf2235, (float*) buf2236);
+    *(float2*)buf2237 = sincos(*(float2*)buf2238, (float2*) buf2239);
+    *(float3*)buf2240 = sincos(*(float3*)buf2241, (float3*) buf2242);
+    *(float4*)buf2243 = sincos(*(float4*)buf2244, (float4*) buf2245);
+    *(float*)buf2246 = sinh(*(float*)buf2247);
+    *(float2*)buf2248 = sinh(*(float2*)buf2249);
+    *(float3*)buf2250 = sinh(*(float3*)buf2251);
+    *(float4*)buf2252 = sinh(*(float4*)buf2253);
+    *(float*)buf2254 = sinpi(*(float*)buf2255);
+    *(float2*)buf2256 = sinpi(*(float2*)buf2257);
+    *(float3*)buf2258 = sinpi(*(float3*)buf2259);
+    *(float4*)buf2260 = sinpi(*(float4*)buf2261);
+    *(float*)buf2262 = sqrt(*(float*)buf2263);
+    *(float2*)buf2264 = sqrt(*(float2*)buf2265);
+    *(float3*)buf2266 = sqrt(*(float3*)buf2267);
+    *(float4*)buf2268 = sqrt(*(float4*)buf2269);
+    *(float*)buf2270 = step(*(float*)buf2271, *(float*)buf2272);
+    *(float2*)buf2273 = step(*(float2*)buf2274, *(float2*)buf2275);
+    *(float3*)buf2276 = step(*(float3*)buf2277, *(float3*)buf2278);
+    *(float4*)buf2279 = step(*(float4*)buf2280, *(float4*)buf2281);
+    *(float2*)buf2282 = step(*(float2*)buf2283, *(float*)buf2284);
+    *(float3*)buf2285 = step(*(float3*)buf2286, *(float*)buf2287);
+    *(float4*)buf2288 = step(*(float4*)buf2289, *(float*)buf2290);
+    *(float*)buf2291 = tan(*(float*)buf2292);
+    *(float2*)buf2293 = tan(*(float2*)buf2294);
+    *(float3*)buf2295 = tan(*(float3*)buf2296);
+    *(float4*)buf2297 = tan(*(float4*)buf2298);
+    *(float*)buf2299 = tanh(*(float*)buf2300);
+    *(float2*)buf2301 = tanh(*(float2*)buf2302);
+    *(float3*)buf2303 = tanh(*(float3*)buf2304);
+    *(float4*)buf2305 = tanh(*(float4*)buf2306);
+    *(float*)buf2307 = tanpi(*(float*)buf2308);
+    *(float2*)buf2309 = tanpi(*(float2*)buf2310);
+    *(float3*)buf2311 = tanpi(*(float3*)buf2312);
+    *(float4*)buf2313 = tanpi(*(float4*)buf2314);
+    *(float*)buf2315 = tgamma(*(float*)buf2316);
+    *(float2*)buf2317 = tgamma(*(float2*)buf2318);
+    *(float3*)buf2319 = tgamma(*(float3*)buf2320);
+    *(float4*)buf2321 = tgamma(*(float4*)buf2322);
+    *(float*)buf2323 = trunc(*(float*)buf2324);
+    *(float2*)buf2325 = trunc(*(float2*)buf2326);
+    *(float3*)buf2327 = trunc(*(float3*)buf2328);
+    *(float4*)buf2329 = trunc(*(float4*)buf2330);
+}
diff --git a/slang/tests/P_all_api_12/stderr.txt.expect b/slang/tests/P_all_api_12/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_all_api_12/stderr.txt.expect
diff --git a/slang/tests/P_all_api_12/stdout.txt.expect b/slang/tests/P_all_api_12/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_all_api_12/stdout.txt.expect
diff --git a/slang/tests/P_all_api_13/all13.rs b/slang/tests/P_all_api_13/all13.rs
new file mode 100644
index 0000000..0e14e1a
--- /dev/null
+++ b/slang/tests/P_all_api_13/all13.rs
@@ -0,0 +1,3296 @@
+// -target-api 13 -Wno-deprecated-declarations
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Don't edit this file!  It is auto-generated by frameworks/rs/api/generate.sh.
+
+#pragma version(1)
+#pragma rs java_package_name(com.example.renderscript.testallapi)
+
+#include "rs_graphics.rsh"
+
+char buf0[200];
+char buf1[200];
+char buf2[200];
+char buf3[200];
+char buf4[200];
+char buf5[200];
+char buf6[200];
+char buf7[200];
+char buf8[200];
+char buf9[200];
+char buf10[200];
+char buf11[200];
+char buf12[200];
+char buf13[200];
+char buf14[200];
+char buf15[200];
+char buf16[200];
+char buf17[200];
+char buf18[200];
+char buf19[200];
+char buf20[200];
+char buf21[200];
+char buf22[200];
+char buf23[200];
+char buf24[200];
+char buf25[200];
+char buf26[200];
+char buf27[200];
+char buf28[200];
+char buf29[200];
+char buf30[200];
+char buf31[200];
+char buf32[200];
+char buf33[200];
+char buf34[200];
+char buf35[200];
+char buf36[200];
+char buf37[200];
+char buf38[200];
+char buf39[200];
+char buf40[200];
+char buf41[200];
+char buf42[200];
+char buf43[200];
+char buf44[200];
+char buf45[200];
+char buf46[200];
+char buf47[200];
+char buf48[200];
+char buf49[200];
+char buf50[200];
+char buf51[200];
+char buf52[200];
+char buf53[200];
+char buf54[200];
+char buf55[200];
+char buf56[200];
+char buf57[200];
+char buf58[200];
+char buf59[200];
+char buf60[200];
+char buf61[200];
+char buf62[200];
+char buf63[200];
+char buf64[200];
+char buf65[200];
+char buf66[200];
+char buf67[200];
+char buf68[200];
+char buf69[200];
+char buf70[200];
+char buf71[200];
+char buf72[200];
+char buf73[200];
+char buf74[200];
+char buf75[200];
+char buf76[200];
+char buf77[200];
+char buf78[200];
+char buf79[200];
+char buf80[200];
+char buf81[200];
+char buf82[200];
+char buf83[200];
+char buf84[200];
+char buf85[200];
+char buf86[200];
+char buf87[200];
+char buf88[200];
+char buf89[200];
+char buf90[200];
+char buf91[200];
+char buf92[200];
+char buf93[200];
+char buf94[200];
+char buf95[200];
+char buf96[200];
+char buf97[200];
+char buf98[200];
+char buf99[200];
+char buf100[200];
+char buf101[200];
+char buf102[200];
+char buf103[200];
+char buf104[200];
+char buf105[200];
+char buf106[200];
+char buf107[200];
+char buf108[200];
+char buf109[200];
+char buf110[200];
+char buf111[200];
+char buf112[200];
+char buf113[200];
+char buf114[200];
+char buf115[200];
+char buf116[200];
+char buf117[200];
+char buf118[200];
+char buf119[200];
+char buf120[200];
+char buf121[200];
+char buf122[200];
+char buf123[200];
+char buf124[200];
+char buf125[200];
+char buf126[200];
+char buf127[200];
+char buf128[200];
+char buf129[200];
+char buf130[200];
+char buf131[200];
+char buf132[200];
+char buf133[200];
+char buf134[200];
+char buf135[200];
+char buf136[200];
+char buf137[200];
+char buf138[200];
+char buf139[200];
+char buf140[200];
+char buf141[200];
+char buf142[200];
+char buf143[200];
+char buf144[200];
+char buf145[200];
+char buf146[200];
+char buf147[200];
+char buf148[200];
+char buf149[200];
+char buf150[200];
+char buf151[200];
+char buf152[200];
+char buf153[200];
+char buf154[200];
+char buf155[200];
+char buf156[200];
+char buf157[200];
+char buf158[200];
+char buf159[200];
+char buf160[200];
+char buf161[200];
+char buf162[200];
+char buf163[200];
+char buf164[200];
+char buf165[200];
+char buf166[200];
+char buf167[200];
+char buf168[200];
+char buf169[200];
+char buf170[200];
+char buf171[200];
+char buf172[200];
+char buf173[200];
+char buf174[200];
+char buf175[200];
+char buf176[200];
+char buf177[200];
+char buf178[200];
+char buf179[200];
+char buf180[200];
+char buf181[200];
+char buf182[200];
+char buf183[200];
+char buf184[200];
+char buf185[200];
+char buf186[200];
+char buf187[200];
+char buf188[200];
+char buf189[200];
+char buf190[200];
+char buf191[200];
+char buf192[200];
+char buf193[200];
+char buf194[200];
+char buf195[200];
+char buf196[200];
+char buf197[200];
+char buf198[200];
+char buf199[200];
+char buf200[200];
+char buf201[200];
+char buf202[200];
+char buf203[200];
+char buf204[200];
+char buf205[200];
+char buf206[200];
+char buf207[200];
+char buf208[200];
+char buf209[200];
+char buf210[200];
+char buf211[200];
+char buf212[200];
+char buf213[200];
+char buf214[200];
+char buf215[200];
+char buf216[200];
+char buf217[200];
+char buf218[200];
+char buf219[200];
+char buf220[200];
+char buf221[200];
+char buf222[200];
+char buf223[200];
+char buf224[200];
+char buf225[200];
+char buf226[200];
+char buf227[200];
+char buf228[200];
+char buf229[200];
+char buf230[200];
+char buf231[200];
+char buf232[200];
+char buf233[200];
+char buf234[200];
+char buf235[200];
+char buf236[200];
+char buf237[200];
+char buf238[200];
+char buf239[200];
+char buf240[200];
+char buf241[200];
+char buf242[200];
+char buf243[200];
+char buf244[200];
+char buf245[200];
+char buf246[200];
+char buf247[200];
+char buf248[200];
+char buf249[200];
+char buf250[200];
+char buf251[200];
+char buf252[200];
+char buf253[200];
+char buf254[200];
+char buf255[200];
+char buf256[200];
+char buf257[200];
+char buf258[200];
+char buf259[200];
+char buf260[200];
+char buf261[200];
+char buf262[200];
+char buf263[200];
+char buf264[200];
+char buf265[200];
+char buf266[200];
+char buf267[200];
+char buf268[200];
+char buf269[200];
+char buf270[200];
+char buf271[200];
+char buf272[200];
+char buf273[200];
+char buf274[200];
+char buf275[200];
+char buf276[200];
+char buf277[200];
+char buf278[200];
+char buf279[200];
+char buf280[200];
+char buf281[200];
+char buf282[200];
+char buf283[200];
+char buf284[200];
+char buf285[200];
+char buf286[200];
+char buf287[200];
+char buf288[200];
+char buf289[200];
+char buf290[200];
+char buf291[200];
+char buf292[200];
+char buf293[200];
+char buf294[200];
+char buf295[200];
+char buf296[200];
+char buf297[200];
+char buf298[200];
+char buf299[200];
+char buf300[200];
+char buf301[200];
+char buf302[200];
+char buf303[200];
+char buf304[200];
+char buf305[200];
+char buf306[200];
+char buf307[200];
+char buf308[200];
+char buf309[200];
+char buf310[200];
+char buf311[200];
+char buf312[200];
+char buf313[200];
+char buf314[200];
+char buf315[200];
+char buf316[200];
+char buf317[200];
+char buf318[200];
+char buf319[200];
+char buf320[200];
+char buf321[200];
+char buf322[200];
+char buf323[200];
+char buf324[200];
+char buf325[200];
+char buf326[200];
+char buf327[200];
+char buf328[200];
+char buf329[200];
+char buf330[200];
+char buf331[200];
+char buf332[200];
+char buf333[200];
+char buf334[200];
+char buf335[200];
+char buf336[200];
+char buf337[200];
+char buf338[200];
+char buf339[200];
+char buf340[200];
+char buf341[200];
+char buf342[200];
+char buf343[200];
+char buf344[200];
+char buf345[200];
+char buf346[200];
+char buf347[200];
+char buf348[200];
+char buf349[200];
+char buf350[200];
+char buf351[200];
+char buf352[200];
+char buf353[200];
+char buf354[200];
+char buf355[200];
+char buf356[200];
+char buf357[200];
+char buf358[200];
+char buf359[200];
+char buf360[200];
+char buf361[200];
+char buf362[200];
+char buf363[200];
+char buf364[200];
+char buf365[200];
+char buf366[200];
+char buf367[200];
+char buf368[200];
+char buf369[200];
+char buf370[200];
+char buf371[200];
+char buf372[200];
+char buf373[200];
+char buf374[200];
+char buf375[200];
+char buf376[200];
+char buf377[200];
+char buf378[200];
+char buf379[200];
+char buf380[200];
+char buf381[200];
+char buf382[200];
+char buf383[200];
+char buf384[200];
+char buf385[200];
+char buf386[200];
+char buf387[200];
+char buf388[200];
+char buf389[200];
+char buf390[200];
+char buf391[200];
+char buf392[200];
+char buf393[200];
+char buf394[200];
+char buf395[200];
+char buf396[200];
+char buf397[200];
+char buf398[200];
+char buf399[200];
+char buf400[200];
+char buf401[200];
+char buf402[200];
+char buf403[200];
+char buf404[200];
+char buf405[200];
+char buf406[200];
+char buf407[200];
+char buf408[200];
+char buf409[200];
+char buf410[200];
+char buf411[200];
+char buf412[200];
+char buf413[200];
+char buf414[200];
+char buf415[200];
+char buf416[200];
+char buf417[200];
+char buf418[200];
+char buf419[200];
+char buf420[200];
+char buf421[200];
+char buf422[200];
+char buf423[200];
+char buf424[200];
+char buf425[200];
+char buf426[200];
+char buf427[200];
+char buf428[200];
+char buf429[200];
+char buf430[200];
+char buf431[200];
+char buf432[200];
+char buf433[200];
+char buf434[200];
+char buf435[200];
+char buf436[200];
+char buf437[200];
+char buf438[200];
+char buf439[200];
+char buf440[200];
+char buf441[200];
+char buf442[200];
+char buf443[200];
+char buf444[200];
+char buf445[200];
+char buf446[200];
+char buf447[200];
+char buf448[200];
+char buf449[200];
+char buf450[200];
+char buf451[200];
+char buf452[200];
+char buf453[200];
+char buf454[200];
+char buf455[200];
+char buf456[200];
+char buf457[200];
+char buf458[200];
+char buf459[200];
+char buf460[200];
+char buf461[200];
+char buf462[200];
+char buf463[200];
+char buf464[200];
+char buf465[200];
+char buf466[200];
+char buf467[200];
+char buf468[200];
+char buf469[200];
+char buf470[200];
+char buf471[200];
+char buf472[200];
+char buf473[200];
+char buf474[200];
+char buf475[200];
+char buf476[200];
+char buf477[200];
+char buf478[200];
+char buf479[200];
+char buf480[200];
+char buf481[200];
+char buf482[200];
+char buf483[200];
+char buf484[200];
+char buf485[200];
+char buf486[200];
+char buf487[200];
+char buf488[200];
+char buf489[200];
+char buf490[200];
+char buf491[200];
+char buf492[200];
+char buf493[200];
+char buf494[200];
+char buf495[200];
+char buf496[200];
+char buf497[200];
+char buf498[200];
+char buf499[200];
+char buf500[200];
+char buf501[200];
+char buf502[200];
+char buf503[200];
+char buf504[200];
+char buf505[200];
+char buf506[200];
+char buf507[200];
+char buf508[200];
+char buf509[200];
+char buf510[200];
+char buf511[200];
+char buf512[200];
+char buf513[200];
+char buf514[200];
+char buf515[200];
+char buf516[200];
+char buf517[200];
+char buf518[200];
+char buf519[200];
+char buf520[200];
+char buf521[200];
+char buf522[200];
+char buf523[200];
+char buf524[200];
+char buf525[200];
+char buf526[200];
+char buf527[200];
+char buf528[200];
+char buf529[200];
+char buf530[200];
+char buf531[200];
+char buf532[200];
+char buf533[200];
+char buf534[200];
+char buf535[200];
+char buf536[200];
+char buf537[200];
+char buf538[200];
+char buf539[200];
+char buf540[200];
+char buf541[200];
+char buf542[200];
+char buf543[200];
+char buf544[200];
+char buf545[200];
+char buf546[200];
+char buf547[200];
+char buf548[200];
+char buf549[200];
+char buf550[200];
+char buf551[200];
+char buf552[200];
+char buf553[200];
+char buf554[200];
+char buf555[200];
+char buf556[200];
+char buf557[200];
+char buf558[200];
+char buf559[200];
+char buf560[200];
+char buf561[200];
+char buf562[200];
+char buf563[200];
+char buf564[200];
+char buf565[200];
+char buf566[200];
+char buf567[200];
+char buf568[200];
+char buf569[200];
+char buf570[200];
+char buf571[200];
+char buf572[200];
+char buf573[200];
+char buf574[200];
+char buf575[200];
+char buf576[200];
+char buf577[200];
+char buf578[200];
+char buf579[200];
+char buf580[200];
+char buf581[200];
+char buf582[200];
+char buf583[200];
+char buf584[200];
+char buf585[200];
+char buf586[200];
+char buf587[200];
+char buf588[200];
+char buf589[200];
+char buf590[200];
+char buf591[200];
+char buf592[200];
+char buf593[200];
+char buf594[200];
+char buf595[200];
+char buf596[200];
+char buf597[200];
+char buf598[200];
+char buf599[200];
+char buf600[200];
+char buf601[200];
+char buf602[200];
+char buf603[200];
+char buf604[200];
+char buf605[200];
+char buf606[200];
+char buf607[200];
+char buf608[200];
+char buf609[200];
+char buf610[200];
+char buf611[200];
+char buf612[200];
+char buf613[200];
+char buf614[200];
+char buf615[200];
+char buf616[200];
+char buf617[200];
+char buf618[200];
+char buf619[200];
+char buf620[200];
+char buf621[200];
+char buf622[200];
+char buf623[200];
+char buf624[200];
+char buf625[200];
+char buf626[200];
+char buf627[200];
+char buf628[200];
+char buf629[200];
+char buf630[200];
+char buf631[200];
+char buf632[200];
+char buf633[200];
+char buf634[200];
+char buf635[200];
+char buf636[200];
+char buf637[200];
+char buf638[200];
+char buf639[200];
+char buf640[200];
+char buf641[200];
+char buf642[200];
+char buf643[200];
+char buf644[200];
+char buf645[200];
+char buf646[200];
+char buf647[200];
+char buf648[200];
+char buf649[200];
+char buf650[200];
+char buf651[200];
+char buf652[200];
+char buf653[200];
+char buf654[200];
+char buf655[200];
+char buf656[200];
+char buf657[200];
+char buf658[200];
+char buf659[200];
+char buf660[200];
+char buf661[200];
+char buf662[200];
+char buf663[200];
+char buf664[200];
+char buf665[200];
+char buf666[200];
+char buf667[200];
+char buf668[200];
+char buf669[200];
+char buf670[200];
+char buf671[200];
+char buf672[200];
+char buf673[200];
+char buf674[200];
+char buf675[200];
+char buf676[200];
+char buf677[200];
+char buf678[200];
+char buf679[200];
+char buf680[200];
+char buf681[200];
+char buf682[200];
+char buf683[200];
+char buf684[200];
+char buf685[200];
+char buf686[200];
+char buf687[200];
+char buf688[200];
+char buf689[200];
+char buf690[200];
+char buf691[200];
+char buf692[200];
+char buf693[200];
+char buf694[200];
+char buf695[200];
+char buf696[200];
+char buf697[200];
+char buf698[200];
+char buf699[200];
+char buf700[200];
+char buf701[200];
+char buf702[200];
+char buf703[200];
+char buf704[200];
+char buf705[200];
+char buf706[200];
+char buf707[200];
+char buf708[200];
+char buf709[200];
+char buf710[200];
+char buf711[200];
+char buf712[200];
+char buf713[200];
+char buf714[200];
+char buf715[200];
+char buf716[200];
+char buf717[200];
+char buf718[200];
+char buf719[200];
+char buf720[200];
+char buf721[200];
+char buf722[200];
+char buf723[200];
+char buf724[200];
+char buf725[200];
+char buf726[200];
+char buf727[200];
+char buf728[200];
+char buf729[200];
+char buf730[200];
+char buf731[200];
+char buf732[200];
+char buf733[200];
+char buf734[200];
+char buf735[200];
+char buf736[200];
+char buf737[200];
+char buf738[200];
+char buf739[200];
+char buf740[200];
+char buf741[200];
+char buf742[200];
+char buf743[200];
+char buf744[200];
+char buf745[200];
+char buf746[200];
+char buf747[200];
+char buf748[200];
+char buf749[200];
+char buf750[200];
+char buf751[200];
+char buf752[200];
+char buf753[200];
+char buf754[200];
+char buf755[200];
+char buf756[200];
+char buf757[200];
+char buf758[200];
+char buf759[200];
+char buf760[200];
+char buf761[200];
+char buf762[200];
+char buf763[200];
+char buf764[200];
+char buf765[200];
+char buf766[200];
+char buf767[200];
+char buf768[200];
+char buf769[200];
+char buf770[200];
+char buf771[200];
+char buf772[200];
+char buf773[200];
+char buf774[200];
+char buf775[200];
+char buf776[200];
+char buf777[200];
+char buf778[200];
+char buf779[200];
+char buf780[200];
+char buf781[200];
+char buf782[200];
+char buf783[200];
+char buf784[200];
+char buf785[200];
+char buf786[200];
+char buf787[200];
+char buf788[200];
+char buf789[200];
+char buf790[200];
+char buf791[200];
+char buf792[200];
+char buf793[200];
+char buf794[200];
+char buf795[200];
+char buf796[200];
+char buf797[200];
+char buf798[200];
+char buf799[200];
+char buf800[200];
+char buf801[200];
+char buf802[200];
+char buf803[200];
+char buf804[200];
+char buf805[200];
+char buf806[200];
+char buf807[200];
+char buf808[200];
+char buf809[200];
+char buf810[200];
+char buf811[200];
+char buf812[200];
+char buf813[200];
+char buf814[200];
+char buf815[200];
+char buf816[200];
+char buf817[200];
+char buf818[200];
+char buf819[200];
+char buf820[200];
+char buf821[200];
+char buf822[200];
+char buf823[200];
+char buf824[200];
+char buf825[200];
+char buf826[200];
+char buf827[200];
+char buf828[200];
+char buf829[200];
+char buf830[200];
+char buf831[200];
+char buf832[200];
+char buf833[200];
+char buf834[200];
+char buf835[200];
+char buf836[200];
+char buf837[200];
+char buf838[200];
+char buf839[200];
+char buf840[200];
+char buf841[200];
+char buf842[200];
+char buf843[200];
+char buf844[200];
+char buf845[200];
+char buf846[200];
+char buf847[200];
+char buf848[200];
+char buf849[200];
+char buf850[200];
+char buf851[200];
+char buf852[200];
+char buf853[200];
+char buf854[200];
+char buf855[200];
+char buf856[200];
+char buf857[200];
+char buf858[200];
+char buf859[200];
+char buf860[200];
+char buf861[200];
+char buf862[200];
+char buf863[200];
+char buf864[200];
+char buf865[200];
+char buf866[200];
+char buf867[200];
+char buf868[200];
+char buf869[200];
+char buf870[200];
+char buf871[200];
+char buf872[200];
+char buf873[200];
+char buf874[200];
+char buf875[200];
+char buf876[200];
+char buf877[200];
+char buf878[200];
+char buf879[200];
+char buf880[200];
+char buf881[200];
+char buf882[200];
+char buf883[200];
+char buf884[200];
+char buf885[200];
+char buf886[200];
+char buf887[200];
+char buf888[200];
+char buf889[200];
+char buf890[200];
+char buf891[200];
+char buf892[200];
+char buf893[200];
+char buf894[200];
+char buf895[200];
+char buf896[200];
+char buf897[200];
+char buf898[200];
+char buf899[200];
+char buf900[200];
+char buf901[200];
+char buf902[200];
+char buf903[200];
+char buf904[200];
+char buf905[200];
+char buf906[200];
+char buf907[200];
+char buf908[200];
+char buf909[200];
+char buf910[200];
+char buf911[200];
+char buf912[200];
+char buf913[200];
+char buf914[200];
+char buf915[200];
+char buf916[200];
+char buf917[200];
+char buf918[200];
+char buf919[200];
+char buf920[200];
+char buf921[200];
+char buf922[200];
+char buf923[200];
+char buf924[200];
+char buf925[200];
+char buf926[200];
+char buf927[200];
+char buf928[200];
+char buf929[200];
+char buf930[200];
+char buf931[200];
+char buf932[200];
+char buf933[200];
+char buf934[200];
+char buf935[200];
+char buf936[200];
+char buf937[200];
+char buf938[200];
+char buf939[200];
+char buf940[200];
+char buf941[200];
+char buf942[200];
+char buf943[200];
+char buf944[200];
+char buf945[200];
+char buf946[200];
+char buf947[200];
+char buf948[200];
+char buf949[200];
+char buf950[200];
+char buf951[200];
+char buf952[200];
+char buf953[200];
+char buf954[200];
+char buf955[200];
+char buf956[200];
+char buf957[200];
+char buf958[200];
+char buf959[200];
+char buf960[200];
+char buf961[200];
+char buf962[200];
+char buf963[200];
+char buf964[200];
+char buf965[200];
+char buf966[200];
+char buf967[200];
+char buf968[200];
+char buf969[200];
+char buf970[200];
+char buf971[200];
+char buf972[200];
+char buf973[200];
+char buf974[200];
+char buf975[200];
+char buf976[200];
+char buf977[200];
+char buf978[200];
+char buf979[200];
+char buf980[200];
+char buf981[200];
+char buf982[200];
+char buf983[200];
+char buf984[200];
+char buf985[200];
+char buf986[200];
+char buf987[200];
+char buf988[200];
+char buf989[200];
+char buf990[200];
+char buf991[200];
+char buf992[200];
+char buf993[200];
+char buf994[200];
+char buf995[200];
+char buf996[200];
+char buf997[200];
+char buf998[200];
+char buf999[200];
+char buf1000[200];
+char buf1001[200];
+char buf1002[200];
+char buf1003[200];
+char buf1004[200];
+char buf1005[200];
+char buf1006[200];
+char buf1007[200];
+char buf1008[200];
+char buf1009[200];
+char buf1010[200];
+char buf1011[200];
+char buf1012[200];
+char buf1013[200];
+char buf1014[200];
+char buf1015[200];
+char buf1016[200];
+char buf1017[200];
+char buf1018[200];
+char buf1019[200];
+char buf1020[200];
+char buf1021[200];
+char buf1022[200];
+char buf1023[200];
+char buf1024[200];
+char buf1025[200];
+char buf1026[200];
+char buf1027[200];
+char buf1028[200];
+char buf1029[200];
+char buf1030[200];
+char buf1031[200];
+char buf1032[200];
+char buf1033[200];
+char buf1034[200];
+char buf1035[200];
+char buf1036[200];
+char buf1037[200];
+char buf1038[200];
+char buf1039[200];
+char buf1040[200];
+char buf1041[200];
+char buf1042[200];
+char buf1043[200];
+char buf1044[200];
+char buf1045[200];
+char buf1046[200];
+char buf1047[200];
+char buf1048[200];
+char buf1049[200];
+char buf1050[200];
+char buf1051[200];
+char buf1052[200];
+char buf1053[200];
+char buf1054[200];
+char buf1055[200];
+char buf1056[200];
+char buf1057[200];
+char buf1058[200];
+char buf1059[200];
+char buf1060[200];
+char buf1061[200];
+char buf1062[200];
+char buf1063[200];
+char buf1064[200];
+char buf1065[200];
+char buf1066[200];
+char buf1067[200];
+char buf1068[200];
+char buf1069[200];
+char buf1070[200];
+char buf1071[200];
+char buf1072[200];
+char buf1073[200];
+char buf1074[200];
+char buf1075[200];
+char buf1076[200];
+char buf1077[200];
+char buf1078[200];
+char buf1079[200];
+char buf1080[200];
+char buf1081[200];
+char buf1082[200];
+char buf1083[200];
+char buf1084[200];
+char buf1085[200];
+char buf1086[200];
+char buf1087[200];
+char buf1088[200];
+char buf1089[200];
+char buf1090[200];
+char buf1091[200];
+char buf1092[200];
+char buf1093[200];
+char buf1094[200];
+char buf1095[200];
+char buf1096[200];
+char buf1097[200];
+char buf1098[200];
+char buf1099[200];
+char buf1100[200];
+char buf1101[200];
+char buf1102[200];
+char buf1103[200];
+char buf1104[200];
+char buf1105[200];
+char buf1106[200];
+char buf1107[200];
+char buf1108[200];
+char buf1109[200];
+char buf1110[200];
+char buf1111[200];
+char buf1112[200];
+char buf1113[200];
+char buf1114[200];
+char buf1115[200];
+char buf1116[200];
+char buf1117[200];
+char buf1118[200];
+char buf1119[200];
+char buf1120[200];
+char buf1121[200];
+char buf1122[200];
+char buf1123[200];
+char buf1124[200];
+char buf1125[200];
+char buf1126[200];
+char buf1127[200];
+char buf1128[200];
+char buf1129[200];
+char buf1130[200];
+char buf1131[200];
+char buf1132[200];
+char buf1133[200];
+char buf1134[200];
+char buf1135[200];
+char buf1136[200];
+char buf1137[200];
+char buf1138[200];
+char buf1139[200];
+char buf1140[200];
+char buf1141[200];
+char buf1142[200];
+char buf1143[200];
+char buf1144[200];
+char buf1145[200];
+char buf1146[200];
+char buf1147[200];
+char buf1148[200];
+char buf1149[200];
+char buf1150[200];
+char buf1151[200];
+char buf1152[200];
+char buf1153[200];
+char buf1154[200];
+char buf1155[200];
+char buf1156[200];
+char buf1157[200];
+char buf1158[200];
+char buf1159[200];
+char buf1160[200];
+char buf1161[200];
+char buf1162[200];
+char buf1163[200];
+char buf1164[200];
+char buf1165[200];
+char buf1166[200];
+char buf1167[200];
+char buf1168[200];
+char buf1169[200];
+char buf1170[200];
+char buf1171[200];
+char buf1172[200];
+char buf1173[200];
+char buf1174[200];
+char buf1175[200];
+char buf1176[200];
+char buf1177[200];
+char buf1178[200];
+char buf1179[200];
+char buf1180[200];
+char buf1181[200];
+char buf1182[200];
+char buf1183[200];
+char buf1184[200];
+char buf1185[200];
+char buf1186[200];
+char buf1187[200];
+char buf1188[200];
+char buf1189[200];
+char buf1190[200];
+char buf1191[200];
+char buf1192[200];
+char buf1193[200];
+char buf1194[200];
+char buf1195[200];
+char buf1196[200];
+char buf1197[200];
+char buf1198[200];
+char buf1199[200];
+char buf1200[200];
+char buf1201[200];
+char buf1202[200];
+char buf1203[200];
+char buf1204[200];
+char buf1205[200];
+char buf1206[200];
+char buf1207[200];
+char buf1208[200];
+char buf1209[200];
+char buf1210[200];
+char buf1211[200];
+char buf1212[200];
+char buf1213[200];
+char buf1214[200];
+char buf1215[200];
+char buf1216[200];
+char buf1217[200];
+char buf1218[200];
+char buf1219[200];
+char buf1220[200];
+char buf1221[200];
+char buf1222[200];
+char buf1223[200];
+char buf1224[200];
+char buf1225[200];
+char buf1226[200];
+char buf1227[200];
+char buf1228[200];
+char buf1229[200];
+char buf1230[200];
+char buf1231[200];
+char buf1232[200];
+char buf1233[200];
+char buf1234[200];
+char buf1235[200];
+char buf1236[200];
+char buf1237[200];
+char buf1238[200];
+char buf1239[200];
+char buf1240[200];
+char buf1241[200];
+char buf1242[200];
+char buf1243[200];
+char buf1244[200];
+char buf1245[200];
+char buf1246[200];
+char buf1247[200];
+char buf1248[200];
+char buf1249[200];
+char buf1250[200];
+char buf1251[200];
+char buf1252[200];
+char buf1253[200];
+char buf1254[200];
+char buf1255[200];
+char buf1256[200];
+char buf1257[200];
+char buf1258[200];
+char buf1259[200];
+char buf1260[200];
+char buf1261[200];
+char buf1262[200];
+char buf1263[200];
+char buf1264[200];
+char buf1265[200];
+char buf1266[200];
+char buf1267[200];
+char buf1268[200];
+char buf1269[200];
+char buf1270[200];
+char buf1271[200];
+char buf1272[200];
+char buf1273[200];
+char buf1274[200];
+char buf1275[200];
+char buf1276[200];
+char buf1277[200];
+char buf1278[200];
+char buf1279[200];
+char buf1280[200];
+char buf1281[200];
+char buf1282[200];
+char buf1283[200];
+char buf1284[200];
+char buf1285[200];
+char buf1286[200];
+char buf1287[200];
+char buf1288[200];
+char buf1289[200];
+char buf1290[200];
+char buf1291[200];
+char buf1292[200];
+char buf1293[200];
+char buf1294[200];
+char buf1295[200];
+char buf1296[200];
+char buf1297[200];
+char buf1298[200];
+char buf1299[200];
+char buf1300[200];
+char buf1301[200];
+char buf1302[200];
+char buf1303[200];
+char buf1304[200];
+char buf1305[200];
+char buf1306[200];
+char buf1307[200];
+char buf1308[200];
+char buf1309[200];
+char buf1310[200];
+char buf1311[200];
+char buf1312[200];
+char buf1313[200];
+char buf1314[200];
+char buf1315[200];
+char buf1316[200];
+char buf1317[200];
+char buf1318[200];
+char buf1319[200];
+char buf1320[200];
+char buf1321[200];
+char buf1322[200];
+char buf1323[200];
+char buf1324[200];
+char buf1325[200];
+char buf1326[200];
+char buf1327[200];
+char buf1328[200];
+char buf1329[200];
+char buf1330[200];
+char buf1331[200];
+char buf1332[200];
+char buf1333[200];
+char buf1334[200];
+char buf1335[200];
+char buf1336[200];
+char buf1337[200];
+char buf1338[200];
+char buf1339[200];
+char buf1340[200];
+char buf1341[200];
+char buf1342[200];
+char buf1343[200];
+char buf1344[200];
+char buf1345[200];
+char buf1346[200];
+char buf1347[200];
+char buf1348[200];
+char buf1349[200];
+char buf1350[200];
+char buf1351[200];
+char buf1352[200];
+char buf1353[200];
+char buf1354[200];
+char buf1355[200];
+char buf1356[200];
+char buf1357[200];
+char buf1358[200];
+char buf1359[200];
+char buf1360[200];
+char buf1361[200];
+char buf1362[200];
+char buf1363[200];
+char buf1364[200];
+char buf1365[200];
+char buf1366[200];
+char buf1367[200];
+char buf1368[200];
+char buf1369[200];
+char buf1370[200];
+char buf1371[200];
+char buf1372[200];
+char buf1373[200];
+char buf1374[200];
+char buf1375[200];
+char buf1376[200];
+char buf1377[200];
+char buf1378[200];
+char buf1379[200];
+char buf1380[200];
+char buf1381[200];
+char buf1382[200];
+char buf1383[200];
+char buf1384[200];
+char buf1385[200];
+char buf1386[200];
+char buf1387[200];
+char buf1388[200];
+char buf1389[200];
+char buf1390[200];
+char buf1391[200];
+char buf1392[200];
+char buf1393[200];
+char buf1394[200];
+char buf1395[200];
+char buf1396[200];
+char buf1397[200];
+char buf1398[200];
+char buf1399[200];
+char buf1400[200];
+char buf1401[200];
+char buf1402[200];
+char buf1403[200];
+char buf1404[200];
+char buf1405[200];
+char buf1406[200];
+char buf1407[200];
+char buf1408[200];
+char buf1409[200];
+char buf1410[200];
+char buf1411[200];
+char buf1412[200];
+char buf1413[200];
+char buf1414[200];
+char buf1415[200];
+char buf1416[200];
+char buf1417[200];
+char buf1418[200];
+char buf1419[200];
+char buf1420[200];
+char buf1421[200];
+char buf1422[200];
+char buf1423[200];
+char buf1424[200];
+char buf1425[200];
+char buf1426[200];
+char buf1427[200];
+char buf1428[200];
+char buf1429[200];
+char buf1430[200];
+char buf1431[200];
+char buf1432[200];
+char buf1433[200];
+char buf1434[200];
+char buf1435[200];
+char buf1436[200];
+char buf1437[200];
+char buf1438[200];
+char buf1439[200];
+char buf1440[200];
+char buf1441[200];
+char buf1442[200];
+char buf1443[200];
+char buf1444[200];
+char buf1445[200];
+char buf1446[200];
+char buf1447[200];
+char buf1448[200];
+char buf1449[200];
+char buf1450[200];
+char buf1451[200];
+char buf1452[200];
+char buf1453[200];
+char buf1454[200];
+char buf1455[200];
+char buf1456[200];
+char buf1457[200];
+char buf1458[200];
+char buf1459[200];
+char buf1460[200];
+char buf1461[200];
+char buf1462[200];
+char buf1463[200];
+char buf1464[200];
+char buf1465[200];
+char buf1466[200];
+char buf1467[200];
+char buf1468[200];
+char buf1469[200];
+char buf1470[200];
+char buf1471[200];
+char buf1472[200];
+char buf1473[200];
+char buf1474[200];
+char buf1475[200];
+char buf1476[200];
+char buf1477[200];
+char buf1478[200];
+char buf1479[200];
+char buf1480[200];
+char buf1481[200];
+char buf1482[200];
+char buf1483[200];
+char buf1484[200];
+char buf1485[200];
+char buf1486[200];
+char buf1487[200];
+char buf1488[200];
+char buf1489[200];
+char buf1490[200];
+char buf1491[200];
+char buf1492[200];
+char buf1493[200];
+char buf1494[200];
+char buf1495[200];
+char buf1496[200];
+char buf1497[200];
+char buf1498[200];
+char buf1499[200];
+char buf1500[200];
+char buf1501[200];
+char buf1502[200];
+char buf1503[200];
+char buf1504[200];
+char buf1505[200];
+char buf1506[200];
+char buf1507[200];
+char buf1508[200];
+char buf1509[200];
+char buf1510[200];
+char buf1511[200];
+char buf1512[200];
+char buf1513[200];
+char buf1514[200];
+char buf1515[200];
+char buf1516[200];
+char buf1517[200];
+char buf1518[200];
+char buf1519[200];
+char buf1520[200];
+char buf1521[200];
+char buf1522[200];
+char buf1523[200];
+char buf1524[200];
+char buf1525[200];
+char buf1526[200];
+char buf1527[200];
+char buf1528[200];
+char buf1529[200];
+char buf1530[200];
+char buf1531[200];
+char buf1532[200];
+char buf1533[200];
+char buf1534[200];
+char buf1535[200];
+char buf1536[200];
+char buf1537[200];
+char buf1538[200];
+char buf1539[200];
+char buf1540[200];
+char buf1541[200];
+char buf1542[200];
+char buf1543[200];
+char buf1544[200];
+char buf1545[200];
+char buf1546[200];
+char buf1547[200];
+char buf1548[200];
+char buf1549[200];
+char buf1550[200];
+char buf1551[200];
+char buf1552[200];
+char buf1553[200];
+char buf1554[200];
+char buf1555[200];
+char buf1556[200];
+char buf1557[200];
+char buf1558[200];
+char buf1559[200];
+char buf1560[200];
+char buf1561[200];
+char buf1562[200];
+char buf1563[200];
+char buf1564[200];
+char buf1565[200];
+char buf1566[200];
+char buf1567[200];
+char buf1568[200];
+char buf1569[200];
+char buf1570[200];
+char buf1571[200];
+char buf1572[200];
+char buf1573[200];
+char buf1574[200];
+char buf1575[200];
+char buf1576[200];
+char buf1577[200];
+char buf1578[200];
+char buf1579[200];
+char buf1580[200];
+char buf1581[200];
+char buf1582[200];
+char buf1583[200];
+char buf1584[200];
+char buf1585[200];
+char buf1586[200];
+char buf1587[200];
+char buf1588[200];
+char buf1589[200];
+char buf1590[200];
+char buf1591[200];
+char buf1592[200];
+char buf1593[200];
+char buf1594[200];
+char buf1595[200];
+char buf1596[200];
+char buf1597[200];
+char buf1598[200];
+char buf1599[200];
+char buf1600[200];
+char buf1601[200];
+char buf1602[200];
+char buf1603[200];
+char buf1604[200];
+char buf1605[200];
+char buf1606[200];
+char buf1607[200];
+char buf1608[200];
+char buf1609[200];
+char buf1610[200];
+char buf1611[200];
+char buf1612[200];
+char buf1613[200];
+char buf1614[200];
+char buf1615[200];
+char buf1616[200];
+char buf1617[200];
+char buf1618[200];
+char buf1619[200];
+char buf1620[200];
+char buf1621[200];
+char buf1622[200];
+char buf1623[200];
+char buf1624[200];
+char buf1625[200];
+char buf1626[200];
+char buf1627[200];
+char buf1628[200];
+char buf1629[200];
+char buf1630[200];
+char buf1631[200];
+char buf1632[200];
+char buf1633[200];
+char buf1634[200];
+char buf1635[200];
+char buf1636[200];
+char buf1637[200];
+char buf1638[200];
+char buf1639[200];
+char buf1640[200];
+char buf1641[200];
+char buf1642[200];
+char buf1643[200];
+char buf1644[200];
+char buf1645[200];
+char buf1646[200];
+char buf1647[200];
+char buf1648[200];
+char buf1649[200];
+char buf1650[200];
+char buf1651[200];
+char buf1652[200];
+char buf1653[200];
+char buf1654[200];
+char buf1655[200];
+char buf1656[200];
+char buf1657[200];
+char buf1658[200];
+char buf1659[200];
+char buf1660[200];
+char buf1661[200];
+char buf1662[200];
+char buf1663[200];
+char buf1664[200];
+char buf1665[200];
+char buf1666[200];
+char buf1667[200];
+char buf1668[200];
+char buf1669[200];
+char buf1670[200];
+char buf1671[200];
+char buf1672[200];
+char buf1673[200];
+char buf1674[200];
+char buf1675[200];
+char buf1676[200];
+char buf1677[200];
+char buf1678[200];
+char buf1679[200];
+char buf1680[200];
+char buf1681[200];
+char buf1682[200];
+char buf1683[200];
+char buf1684[200];
+char buf1685[200];
+char buf1686[200];
+char buf1687[200];
+char buf1688[200];
+char buf1689[200];
+char buf1690[200];
+char buf1691[200];
+char buf1692[200];
+char buf1693[200];
+char buf1694[200];
+char buf1695[200];
+char buf1696[200];
+char buf1697[200];
+char buf1698[200];
+char buf1699[200];
+char buf1700[200];
+char buf1701[200];
+char buf1702[200];
+char buf1703[200];
+char buf1704[200];
+char buf1705[200];
+char buf1706[200];
+char buf1707[200];
+char buf1708[200];
+char buf1709[200];
+char buf1710[200];
+char buf1711[200];
+char buf1712[200];
+char buf1713[200];
+char buf1714[200];
+char buf1715[200];
+char buf1716[200];
+char buf1717[200];
+char buf1718[200];
+char buf1719[200];
+char buf1720[200];
+char buf1721[200];
+char buf1722[200];
+char buf1723[200];
+char buf1724[200];
+char buf1725[200];
+char buf1726[200];
+char buf1727[200];
+char buf1728[200];
+char buf1729[200];
+char buf1730[200];
+char buf1731[200];
+char buf1732[200];
+char buf1733[200];
+char buf1734[200];
+char buf1735[200];
+char buf1736[200];
+char buf1737[200];
+char buf1738[200];
+char buf1739[200];
+char buf1740[200];
+char buf1741[200];
+char buf1742[200];
+char buf1743[200];
+char buf1744[200];
+char buf1745[200];
+char buf1746[200];
+char buf1747[200];
+char buf1748[200];
+char buf1749[200];
+char buf1750[200];
+char buf1751[200];
+char buf1752[200];
+char buf1753[200];
+char buf1754[200];
+char buf1755[200];
+char buf1756[200];
+char buf1757[200];
+char buf1758[200];
+char buf1759[200];
+char buf1760[200];
+char buf1761[200];
+char buf1762[200];
+char buf1763[200];
+char buf1764[200];
+char buf1765[200];
+char buf1766[200];
+char buf1767[200];
+char buf1768[200];
+char buf1769[200];
+char buf1770[200];
+char buf1771[200];
+char buf1772[200];
+char buf1773[200];
+char buf1774[200];
+char buf1775[200];
+char buf1776[200];
+char buf1777[200];
+char buf1778[200];
+char buf1779[200];
+char buf1780[200];
+char buf1781[200];
+char buf1782[200];
+char buf1783[200];
+char buf1784[200];
+char buf1785[200];
+char buf1786[200];
+char buf1787[200];
+char buf1788[200];
+char buf1789[200];
+char buf1790[200];
+char buf1791[200];
+char buf1792[200];
+char buf1793[200];
+char buf1794[200];
+char buf1795[200];
+char buf1796[200];
+char buf1797[200];
+char buf1798[200];
+char buf1799[200];
+char buf1800[200];
+char buf1801[200];
+char buf1802[200];
+char buf1803[200];
+char buf1804[200];
+char buf1805[200];
+char buf1806[200];
+char buf1807[200];
+char buf1808[200];
+char buf1809[200];
+char buf1810[200];
+char buf1811[200];
+char buf1812[200];
+char buf1813[200];
+char buf1814[200];
+char buf1815[200];
+char buf1816[200];
+char buf1817[200];
+char buf1818[200];
+char buf1819[200];
+char buf1820[200];
+char buf1821[200];
+char buf1822[200];
+char buf1823[200];
+char buf1824[200];
+char buf1825[200];
+char buf1826[200];
+char buf1827[200];
+char buf1828[200];
+char buf1829[200];
+char buf1830[200];
+char buf1831[200];
+char buf1832[200];
+char buf1833[200];
+char buf1834[200];
+char buf1835[200];
+char buf1836[200];
+char buf1837[200];
+char buf1838[200];
+char buf1839[200];
+char buf1840[200];
+char buf1841[200];
+char buf1842[200];
+char buf1843[200];
+char buf1844[200];
+char buf1845[200];
+char buf1846[200];
+char buf1847[200];
+char buf1848[200];
+char buf1849[200];
+char buf1850[200];
+char buf1851[200];
+char buf1852[200];
+char buf1853[200];
+char buf1854[200];
+char buf1855[200];
+char buf1856[200];
+char buf1857[200];
+char buf1858[200];
+char buf1859[200];
+char buf1860[200];
+char buf1861[200];
+char buf1862[200];
+char buf1863[200];
+char buf1864[200];
+char buf1865[200];
+char buf1866[200];
+char buf1867[200];
+char buf1868[200];
+char buf1869[200];
+char buf1870[200];
+char buf1871[200];
+char buf1872[200];
+char buf1873[200];
+char buf1874[200];
+char buf1875[200];
+char buf1876[200];
+char buf1877[200];
+char buf1878[200];
+char buf1879[200];
+char buf1880[200];
+char buf1881[200];
+char buf1882[200];
+char buf1883[200];
+char buf1884[200];
+char buf1885[200];
+char buf1886[200];
+char buf1887[200];
+char buf1888[200];
+char buf1889[200];
+char buf1890[200];
+char buf1891[200];
+char buf1892[200];
+char buf1893[200];
+char buf1894[200];
+char buf1895[200];
+char buf1896[200];
+char buf1897[200];
+char buf1898[200];
+char buf1899[200];
+char buf1900[200];
+char buf1901[200];
+char buf1902[200];
+char buf1903[200];
+char buf1904[200];
+char buf1905[200];
+char buf1906[200];
+char buf1907[200];
+char buf1908[200];
+char buf1909[200];
+char buf1910[200];
+char buf1911[200];
+char buf1912[200];
+char buf1913[200];
+char buf1914[200];
+char buf1915[200];
+char buf1916[200];
+char buf1917[200];
+char buf1918[200];
+char buf1919[200];
+char buf1920[200];
+char buf1921[200];
+char buf1922[200];
+char buf1923[200];
+char buf1924[200];
+char buf1925[200];
+char buf1926[200];
+char buf1927[200];
+char buf1928[200];
+char buf1929[200];
+char buf1930[200];
+char buf1931[200];
+char buf1932[200];
+char buf1933[200];
+char buf1934[200];
+char buf1935[200];
+char buf1936[200];
+char buf1937[200];
+char buf1938[200];
+char buf1939[200];
+char buf1940[200];
+char buf1941[200];
+char buf1942[200];
+char buf1943[200];
+char buf1944[200];
+char buf1945[200];
+char buf1946[200];
+char buf1947[200];
+char buf1948[200];
+char buf1949[200];
+char buf1950[200];
+char buf1951[200];
+char buf1952[200];
+char buf1953[200];
+char buf1954[200];
+char buf1955[200];
+char buf1956[200];
+char buf1957[200];
+char buf1958[200];
+char buf1959[200];
+char buf1960[200];
+char buf1961[200];
+char buf1962[200];
+char buf1963[200];
+char buf1964[200];
+char buf1965[200];
+char buf1966[200];
+char buf1967[200];
+char buf1968[200];
+char buf1969[200];
+char buf1970[200];
+char buf1971[200];
+char buf1972[200];
+char buf1973[200];
+char buf1974[200];
+char buf1975[200];
+char buf1976[200];
+char buf1977[200];
+char buf1978[200];
+char buf1979[200];
+char buf1980[200];
+char buf1981[200];
+char buf1982[200];
+char buf1983[200];
+char buf1984[200];
+char buf1985[200];
+char buf1986[200];
+char buf1987[200];
+char buf1988[200];
+char buf1989[200];
+char buf1990[200];
+char buf1991[200];
+char buf1992[200];
+char buf1993[200];
+char buf1994[200];
+char buf1995[200];
+char buf1996[200];
+char buf1997[200];
+char buf1998[200];
+char buf1999[200];
+char buf2000[200];
+char buf2001[200];
+char buf2002[200];
+char buf2003[200];
+char buf2004[200];
+char buf2005[200];
+char buf2006[200];
+char buf2007[200];
+char buf2008[200];
+char buf2009[200];
+char buf2010[200];
+char buf2011[200];
+char buf2012[200];
+char buf2013[200];
+char buf2014[200];
+char buf2015[200];
+char buf2016[200];
+char buf2017[200];
+char buf2018[200];
+char buf2019[200];
+char buf2020[200];
+char buf2021[200];
+char buf2022[200];
+char buf2023[200];
+char buf2024[200];
+char buf2025[200];
+char buf2026[200];
+char buf2027[200];
+char buf2028[200];
+char buf2029[200];
+char buf2030[200];
+char buf2031[200];
+char buf2032[200];
+char buf2033[200];
+char buf2034[200];
+char buf2035[200];
+char buf2036[200];
+char buf2037[200];
+char buf2038[200];
+char buf2039[200];
+char buf2040[200];
+char buf2041[200];
+char buf2042[200];
+char buf2043[200];
+char buf2044[200];
+char buf2045[200];
+char buf2046[200];
+char buf2047[200];
+char buf2048[200];
+char buf2049[200];
+char buf2050[200];
+char buf2051[200];
+char buf2052[200];
+char buf2053[200];
+char buf2054[200];
+char buf2055[200];
+char buf2056[200];
+char buf2057[200];
+char buf2058[200];
+char buf2059[200];
+char buf2060[200];
+char buf2061[200];
+char buf2062[200];
+char buf2063[200];
+char buf2064[200];
+char buf2065[200];
+char buf2066[200];
+char buf2067[200];
+char buf2068[200];
+char buf2069[200];
+char buf2070[200];
+char buf2071[200];
+char buf2072[200];
+char buf2073[200];
+char buf2074[200];
+char buf2075[200];
+char buf2076[200];
+char buf2077[200];
+char buf2078[200];
+char buf2079[200];
+char buf2080[200];
+char buf2081[200];
+char buf2082[200];
+char buf2083[200];
+char buf2084[200];
+char buf2085[200];
+char buf2086[200];
+char buf2087[200];
+char buf2088[200];
+char buf2089[200];
+char buf2090[200];
+char buf2091[200];
+char buf2092[200];
+char buf2093[200];
+char buf2094[200];
+char buf2095[200];
+char buf2096[200];
+char buf2097[200];
+char buf2098[200];
+char buf2099[200];
+char buf2100[200];
+char buf2101[200];
+char buf2102[200];
+char buf2103[200];
+char buf2104[200];
+char buf2105[200];
+char buf2106[200];
+char buf2107[200];
+char buf2108[200];
+char buf2109[200];
+char buf2110[200];
+char buf2111[200];
+char buf2112[200];
+char buf2113[200];
+char buf2114[200];
+char buf2115[200];
+char buf2116[200];
+char buf2117[200];
+char buf2118[200];
+char buf2119[200];
+char buf2120[200];
+char buf2121[200];
+char buf2122[200];
+char buf2123[200];
+char buf2124[200];
+char buf2125[200];
+char buf2126[200];
+char buf2127[200];
+char buf2128[200];
+char buf2129[200];
+char buf2130[200];
+char buf2131[200];
+char buf2132[200];
+char buf2133[200];
+char buf2134[200];
+char buf2135[200];
+char buf2136[200];
+char buf2137[200];
+char buf2138[200];
+char buf2139[200];
+char buf2140[200];
+char buf2141[200];
+char buf2142[200];
+char buf2143[200];
+char buf2144[200];
+char buf2145[200];
+char buf2146[200];
+char buf2147[200];
+char buf2148[200];
+char buf2149[200];
+char buf2150[200];
+char buf2151[200];
+char buf2152[200];
+char buf2153[200];
+char buf2154[200];
+char buf2155[200];
+char buf2156[200];
+char buf2157[200];
+char buf2158[200];
+char buf2159[200];
+char buf2160[200];
+char buf2161[200];
+char buf2162[200];
+char buf2163[200];
+char buf2164[200];
+char buf2165[200];
+char buf2166[200];
+char buf2167[200];
+char buf2168[200];
+char buf2169[200];
+char buf2170[200];
+char buf2171[200];
+char buf2172[200];
+char buf2173[200];
+char buf2174[200];
+char buf2175[200];
+char buf2176[200];
+char buf2177[200];
+char buf2178[200];
+char buf2179[200];
+char buf2180[200];
+char buf2181[200];
+char buf2182[200];
+char buf2183[200];
+char buf2184[200];
+char buf2185[200];
+char buf2186[200];
+char buf2187[200];
+char buf2188[200];
+char buf2189[200];
+char buf2190[200];
+char buf2191[200];
+char buf2192[200];
+char buf2193[200];
+char buf2194[200];
+char buf2195[200];
+char buf2196[200];
+char buf2197[200];
+char buf2198[200];
+char buf2199[200];
+char buf2200[200];
+char buf2201[200];
+char buf2202[200];
+char buf2203[200];
+char buf2204[200];
+char buf2205[200];
+char buf2206[200];
+char buf2207[200];
+char buf2208[200];
+char buf2209[200];
+char buf2210[200];
+char buf2211[200];
+char buf2212[200];
+char buf2213[200];
+char buf2214[200];
+char buf2215[200];
+char buf2216[200];
+char buf2217[200];
+char buf2218[200];
+char buf2219[200];
+char buf2220[200];
+char buf2221[200];
+char buf2222[200];
+char buf2223[200];
+char buf2224[200];
+char buf2225[200];
+char buf2226[200];
+char buf2227[200];
+char buf2228[200];
+char buf2229[200];
+char buf2230[200];
+char buf2231[200];
+char buf2232[200];
+char buf2233[200];
+char buf2234[200];
+char buf2235[200];
+char buf2236[200];
+char buf2237[200];
+char buf2238[200];
+char buf2239[200];
+char buf2240[200];
+char buf2241[200];
+char buf2242[200];
+char buf2243[200];
+char buf2244[200];
+char buf2245[200];
+char buf2246[200];
+char buf2247[200];
+char buf2248[200];
+char buf2249[200];
+char buf2250[200];
+char buf2251[200];
+char buf2252[200];
+char buf2253[200];
+char buf2254[200];
+char buf2255[200];
+char buf2256[200];
+char buf2257[200];
+char buf2258[200];
+char buf2259[200];
+char buf2260[200];
+char buf2261[200];
+char buf2262[200];
+char buf2263[200];
+char buf2264[200];
+char buf2265[200];
+char buf2266[200];
+char buf2267[200];
+char buf2268[200];
+char buf2269[200];
+char buf2270[200];
+char buf2271[200];
+char buf2272[200];
+char buf2273[200];
+char buf2274[200];
+char buf2275[200];
+char buf2276[200];
+char buf2277[200];
+char buf2278[200];
+char buf2279[200];
+char buf2280[200];
+char buf2281[200];
+char buf2282[200];
+char buf2283[200];
+char buf2284[200];
+char buf2285[200];
+char buf2286[200];
+char buf2287[200];
+char buf2288[200];
+char buf2289[200];
+char buf2290[200];
+char buf2291[200];
+char buf2292[200];
+char buf2293[200];
+char buf2294[200];
+char buf2295[200];
+char buf2296[200];
+char buf2297[200];
+char buf2298[200];
+char buf2299[200];
+char buf2300[200];
+char buf2301[200];
+char buf2302[200];
+char buf2303[200];
+char buf2304[200];
+char buf2305[200];
+char buf2306[200];
+char buf2307[200];
+char buf2308[200];
+char buf2309[200];
+char buf2310[200];
+char buf2311[200];
+char buf2312[200];
+char buf2313[200];
+char buf2314[200];
+char buf2315[200];
+char buf2316[200];
+char buf2317[200];
+char buf2318[200];
+char buf2319[200];
+char buf2320[200];
+char buf2321[200];
+char buf2322[200];
+char buf2323[200];
+char buf2324[200];
+char buf2325[200];
+char buf2326[200];
+char buf2327[200];
+char buf2328[200];
+char buf2329[200];
+char buf2330[200];
+
+void root(const int* in) {
+    *(uchar*)buf0 = abs(*(char*)buf1);
+    *(uchar2*)buf2 = abs(*(char2*)buf3);
+    *(uchar3*)buf4 = abs(*(char3*)buf5);
+    *(uchar4*)buf6 = abs(*(char4*)buf7);
+    *(ushort*)buf8 = abs(*(short*)buf9);
+    *(ushort2*)buf10 = abs(*(short2*)buf11);
+    *(ushort3*)buf12 = abs(*(short3*)buf13);
+    *(ushort4*)buf14 = abs(*(short4*)buf15);
+    *(uint*)buf16 = abs(*(int*)buf17);
+    *(uint2*)buf18 = abs(*(int2*)buf19);
+    *(uint3*)buf20 = abs(*(int3*)buf21);
+    *(uint4*)buf22 = abs(*(int4*)buf23);
+    *(float*)buf24 = acos(*(float*)buf25);
+    *(float2*)buf26 = acos(*(float2*)buf27);
+    *(float3*)buf28 = acos(*(float3*)buf29);
+    *(float4*)buf30 = acos(*(float4*)buf31);
+    *(float*)buf32 = acosh(*(float*)buf33);
+    *(float2*)buf34 = acosh(*(float2*)buf35);
+    *(float3*)buf36 = acosh(*(float3*)buf37);
+    *(float4*)buf38 = acosh(*(float4*)buf39);
+    *(float*)buf40 = acospi(*(float*)buf41);
+    *(float2*)buf42 = acospi(*(float2*)buf43);
+    *(float3*)buf44 = acospi(*(float3*)buf45);
+    *(float4*)buf46 = acospi(*(float4*)buf47);
+    *(float*)buf48 = asin(*(float*)buf49);
+    *(float2*)buf50 = asin(*(float2*)buf51);
+    *(float3*)buf52 = asin(*(float3*)buf53);
+    *(float4*)buf54 = asin(*(float4*)buf55);
+    *(float*)buf56 = asinh(*(float*)buf57);
+    *(float2*)buf58 = asinh(*(float2*)buf59);
+    *(float3*)buf60 = asinh(*(float3*)buf61);
+    *(float4*)buf62 = asinh(*(float4*)buf63);
+    *(float*)buf64 = asinpi(*(float*)buf65);
+    *(float2*)buf66 = asinpi(*(float2*)buf67);
+    *(float3*)buf68 = asinpi(*(float3*)buf69);
+    *(float4*)buf70 = asinpi(*(float4*)buf71);
+    *(float*)buf72 = atan(*(float*)buf73);
+    *(float2*)buf74 = atan(*(float2*)buf75);
+    *(float3*)buf76 = atan(*(float3*)buf77);
+    *(float4*)buf78 = atan(*(float4*)buf79);
+    *(float*)buf80 = atan2(*(float*)buf81, *(float*)buf82);
+    *(float2*)buf83 = atan2(*(float2*)buf84, *(float2*)buf85);
+    *(float3*)buf86 = atan2(*(float3*)buf87, *(float3*)buf88);
+    *(float4*)buf89 = atan2(*(float4*)buf90, *(float4*)buf91);
+    *(float*)buf92 = atan2pi(*(float*)buf93, *(float*)buf94);
+    *(float2*)buf95 = atan2pi(*(float2*)buf96, *(float2*)buf97);
+    *(float3*)buf98 = atan2pi(*(float3*)buf99, *(float3*)buf100);
+    *(float4*)buf101 = atan2pi(*(float4*)buf102, *(float4*)buf103);
+    *(float*)buf104 = atanh(*(float*)buf105);
+    *(float2*)buf106 = atanh(*(float2*)buf107);
+    *(float3*)buf108 = atanh(*(float3*)buf109);
+    *(float4*)buf110 = atanh(*(float4*)buf111);
+    *(float*)buf112 = atanpi(*(float*)buf113);
+    *(float2*)buf114 = atanpi(*(float2*)buf115);
+    *(float3*)buf116 = atanpi(*(float3*)buf117);
+    *(float4*)buf118 = atanpi(*(float4*)buf119);
+    *(float*)buf120 = cbrt(*(float*)buf121);
+    *(float2*)buf122 = cbrt(*(float2*)buf123);
+    *(float3*)buf124 = cbrt(*(float3*)buf125);
+    *(float4*)buf126 = cbrt(*(float4*)buf127);
+    *(float*)buf128 = ceil(*(float*)buf129);
+    *(float2*)buf130 = ceil(*(float2*)buf131);
+    *(float3*)buf132 = ceil(*(float3*)buf133);
+    *(float4*)buf134 = ceil(*(float4*)buf135);
+    *(float*)buf136 = clamp(*(float*)buf137, *(float*)buf138, *(float*)buf139);
+    *(float2*)buf140 = clamp(*(float2*)buf141, *(float2*)buf142, *(float2*)buf143);
+    *(float3*)buf144 = clamp(*(float3*)buf145, *(float3*)buf146, *(float3*)buf147);
+    *(float4*)buf148 = clamp(*(float4*)buf149, *(float4*)buf150, *(float4*)buf151);
+    *(float2*)buf152 = clamp(*(float2*)buf153, *(float*)buf154, *(float*)buf155);
+    *(float3*)buf156 = clamp(*(float3*)buf157, *(float*)buf158, *(float*)buf159);
+    *(float4*)buf160 = clamp(*(float4*)buf161, *(float*)buf162, *(float*)buf163);
+    *(char*)buf164 = clz(*(char*)buf165);
+    *(char2*)buf166 = clz(*(char2*)buf167);
+    *(char3*)buf168 = clz(*(char3*)buf169);
+    *(char4*)buf170 = clz(*(char4*)buf171);
+    *(uchar*)buf172 = clz(*(uchar*)buf173);
+    *(uchar2*)buf174 = clz(*(uchar2*)buf175);
+    *(uchar3*)buf176 = clz(*(uchar3*)buf177);
+    *(uchar4*)buf178 = clz(*(uchar4*)buf179);
+    *(short*)buf180 = clz(*(short*)buf181);
+    *(short2*)buf182 = clz(*(short2*)buf183);
+    *(short3*)buf184 = clz(*(short3*)buf185);
+    *(short4*)buf186 = clz(*(short4*)buf187);
+    *(ushort*)buf188 = clz(*(ushort*)buf189);
+    *(ushort2*)buf190 = clz(*(ushort2*)buf191);
+    *(ushort3*)buf192 = clz(*(ushort3*)buf193);
+    *(ushort4*)buf194 = clz(*(ushort4*)buf195);
+    *(int*)buf196 = clz(*(int*)buf197);
+    *(int2*)buf198 = clz(*(int2*)buf199);
+    *(int3*)buf200 = clz(*(int3*)buf201);
+    *(int4*)buf202 = clz(*(int4*)buf203);
+    *(uint*)buf204 = clz(*(uint*)buf205);
+    *(uint2*)buf206 = clz(*(uint2*)buf207);
+    *(uint3*)buf208 = clz(*(uint3*)buf209);
+    *(uint4*)buf210 = clz(*(uint4*)buf211);
+    *(float2*)buf212 = convert_float2(*(float2*)buf213);
+    *(float3*)buf214 = convert_float3(*(float3*)buf215);
+    *(float4*)buf216 = convert_float4(*(float4*)buf217);
+    *(float2*)buf218 = convert_float2(*(char2*)buf219);
+    *(float3*)buf220 = convert_float3(*(char3*)buf221);
+    *(float4*)buf222 = convert_float4(*(char4*)buf223);
+    *(float2*)buf224 = convert_float2(*(uchar2*)buf225);
+    *(float3*)buf226 = convert_float3(*(uchar3*)buf227);
+    *(float4*)buf228 = convert_float4(*(uchar4*)buf229);
+    *(float2*)buf230 = convert_float2(*(short2*)buf231);
+    *(float3*)buf232 = convert_float3(*(short3*)buf233);
+    *(float4*)buf234 = convert_float4(*(short4*)buf235);
+    *(float2*)buf236 = convert_float2(*(ushort2*)buf237);
+    *(float3*)buf238 = convert_float3(*(ushort3*)buf239);
+    *(float4*)buf240 = convert_float4(*(ushort4*)buf241);
+    *(float2*)buf242 = convert_float2(*(int2*)buf243);
+    *(float3*)buf244 = convert_float3(*(int3*)buf245);
+    *(float4*)buf246 = convert_float4(*(int4*)buf247);
+    *(float2*)buf248 = convert_float2(*(uint2*)buf249);
+    *(float3*)buf250 = convert_float3(*(uint3*)buf251);
+    *(float4*)buf252 = convert_float4(*(uint4*)buf253);
+    *(char2*)buf254 = convert_char2(*(float2*)buf255);
+    *(char3*)buf256 = convert_char3(*(float3*)buf257);
+    *(char4*)buf258 = convert_char4(*(float4*)buf259);
+    *(char2*)buf260 = convert_char2(*(char2*)buf261);
+    *(char3*)buf262 = convert_char3(*(char3*)buf263);
+    *(char4*)buf264 = convert_char4(*(char4*)buf265);
+    *(char2*)buf266 = convert_char2(*(uchar2*)buf267);
+    *(char3*)buf268 = convert_char3(*(uchar3*)buf269);
+    *(char4*)buf270 = convert_char4(*(uchar4*)buf271);
+    *(char2*)buf272 = convert_char2(*(short2*)buf273);
+    *(char3*)buf274 = convert_char3(*(short3*)buf275);
+    *(char4*)buf276 = convert_char4(*(short4*)buf277);
+    *(char2*)buf278 = convert_char2(*(ushort2*)buf279);
+    *(char3*)buf280 = convert_char3(*(ushort3*)buf281);
+    *(char4*)buf282 = convert_char4(*(ushort4*)buf283);
+    *(char2*)buf284 = convert_char2(*(int2*)buf285);
+    *(char3*)buf286 = convert_char3(*(int3*)buf287);
+    *(char4*)buf288 = convert_char4(*(int4*)buf289);
+    *(char2*)buf290 = convert_char2(*(uint2*)buf291);
+    *(char3*)buf292 = convert_char3(*(uint3*)buf293);
+    *(char4*)buf294 = convert_char4(*(uint4*)buf295);
+    *(uchar2*)buf296 = convert_uchar2(*(float2*)buf297);
+    *(uchar3*)buf298 = convert_uchar3(*(float3*)buf299);
+    *(uchar4*)buf300 = convert_uchar4(*(float4*)buf301);
+    *(uchar2*)buf302 = convert_uchar2(*(char2*)buf303);
+    *(uchar3*)buf304 = convert_uchar3(*(char3*)buf305);
+    *(uchar4*)buf306 = convert_uchar4(*(char4*)buf307);
+    *(uchar2*)buf308 = convert_uchar2(*(uchar2*)buf309);
+    *(uchar3*)buf310 = convert_uchar3(*(uchar3*)buf311);
+    *(uchar4*)buf312 = convert_uchar4(*(uchar4*)buf313);
+    *(uchar2*)buf314 = convert_uchar2(*(short2*)buf315);
+    *(uchar3*)buf316 = convert_uchar3(*(short3*)buf317);
+    *(uchar4*)buf318 = convert_uchar4(*(short4*)buf319);
+    *(uchar2*)buf320 = convert_uchar2(*(ushort2*)buf321);
+    *(uchar3*)buf322 = convert_uchar3(*(ushort3*)buf323);
+    *(uchar4*)buf324 = convert_uchar4(*(ushort4*)buf325);
+    *(uchar2*)buf326 = convert_uchar2(*(int2*)buf327);
+    *(uchar3*)buf328 = convert_uchar3(*(int3*)buf329);
+    *(uchar4*)buf330 = convert_uchar4(*(int4*)buf331);
+    *(uchar2*)buf332 = convert_uchar2(*(uint2*)buf333);
+    *(uchar3*)buf334 = convert_uchar3(*(uint3*)buf335);
+    *(uchar4*)buf336 = convert_uchar4(*(uint4*)buf337);
+    *(short2*)buf338 = convert_short2(*(float2*)buf339);
+    *(short3*)buf340 = convert_short3(*(float3*)buf341);
+    *(short4*)buf342 = convert_short4(*(float4*)buf343);
+    *(short2*)buf344 = convert_short2(*(char2*)buf345);
+    *(short3*)buf346 = convert_short3(*(char3*)buf347);
+    *(short4*)buf348 = convert_short4(*(char4*)buf349);
+    *(short2*)buf350 = convert_short2(*(uchar2*)buf351);
+    *(short3*)buf352 = convert_short3(*(uchar3*)buf353);
+    *(short4*)buf354 = convert_short4(*(uchar4*)buf355);
+    *(short2*)buf356 = convert_short2(*(short2*)buf357);
+    *(short3*)buf358 = convert_short3(*(short3*)buf359);
+    *(short4*)buf360 = convert_short4(*(short4*)buf361);
+    *(short2*)buf362 = convert_short2(*(ushort2*)buf363);
+    *(short3*)buf364 = convert_short3(*(ushort3*)buf365);
+    *(short4*)buf366 = convert_short4(*(ushort4*)buf367);
+    *(short2*)buf368 = convert_short2(*(int2*)buf369);
+    *(short3*)buf370 = convert_short3(*(int3*)buf371);
+    *(short4*)buf372 = convert_short4(*(int4*)buf373);
+    *(short2*)buf374 = convert_short2(*(uint2*)buf375);
+    *(short3*)buf376 = convert_short3(*(uint3*)buf377);
+    *(short4*)buf378 = convert_short4(*(uint4*)buf379);
+    *(ushort2*)buf380 = convert_ushort2(*(float2*)buf381);
+    *(ushort3*)buf382 = convert_ushort3(*(float3*)buf383);
+    *(ushort4*)buf384 = convert_ushort4(*(float4*)buf385);
+    *(ushort2*)buf386 = convert_ushort2(*(char2*)buf387);
+    *(ushort3*)buf388 = convert_ushort3(*(char3*)buf389);
+    *(ushort4*)buf390 = convert_ushort4(*(char4*)buf391);
+    *(ushort2*)buf392 = convert_ushort2(*(uchar2*)buf393);
+    *(ushort3*)buf394 = convert_ushort3(*(uchar3*)buf395);
+    *(ushort4*)buf396 = convert_ushort4(*(uchar4*)buf397);
+    *(ushort2*)buf398 = convert_ushort2(*(short2*)buf399);
+    *(ushort3*)buf400 = convert_ushort3(*(short3*)buf401);
+    *(ushort4*)buf402 = convert_ushort4(*(short4*)buf403);
+    *(ushort2*)buf404 = convert_ushort2(*(ushort2*)buf405);
+    *(ushort3*)buf406 = convert_ushort3(*(ushort3*)buf407);
+    *(ushort4*)buf408 = convert_ushort4(*(ushort4*)buf409);
+    *(ushort2*)buf410 = convert_ushort2(*(int2*)buf411);
+    *(ushort3*)buf412 = convert_ushort3(*(int3*)buf413);
+    *(ushort4*)buf414 = convert_ushort4(*(int4*)buf415);
+    *(ushort2*)buf416 = convert_ushort2(*(uint2*)buf417);
+    *(ushort3*)buf418 = convert_ushort3(*(uint3*)buf419);
+    *(ushort4*)buf420 = convert_ushort4(*(uint4*)buf421);
+    *(int2*)buf422 = convert_int2(*(float2*)buf423);
+    *(int3*)buf424 = convert_int3(*(float3*)buf425);
+    *(int4*)buf426 = convert_int4(*(float4*)buf427);
+    *(int2*)buf428 = convert_int2(*(char2*)buf429);
+    *(int3*)buf430 = convert_int3(*(char3*)buf431);
+    *(int4*)buf432 = convert_int4(*(char4*)buf433);
+    *(int2*)buf434 = convert_int2(*(uchar2*)buf435);
+    *(int3*)buf436 = convert_int3(*(uchar3*)buf437);
+    *(int4*)buf438 = convert_int4(*(uchar4*)buf439);
+    *(int2*)buf440 = convert_int2(*(short2*)buf441);
+    *(int3*)buf442 = convert_int3(*(short3*)buf443);
+    *(int4*)buf444 = convert_int4(*(short4*)buf445);
+    *(int2*)buf446 = convert_int2(*(ushort2*)buf447);
+    *(int3*)buf448 = convert_int3(*(ushort3*)buf449);
+    *(int4*)buf450 = convert_int4(*(ushort4*)buf451);
+    *(int2*)buf452 = convert_int2(*(int2*)buf453);
+    *(int3*)buf454 = convert_int3(*(int3*)buf455);
+    *(int4*)buf456 = convert_int4(*(int4*)buf457);
+    *(int2*)buf458 = convert_int2(*(uint2*)buf459);
+    *(int3*)buf460 = convert_int3(*(uint3*)buf461);
+    *(int4*)buf462 = convert_int4(*(uint4*)buf463);
+    *(uint2*)buf464 = convert_uint2(*(float2*)buf465);
+    *(uint3*)buf466 = convert_uint3(*(float3*)buf467);
+    *(uint4*)buf468 = convert_uint4(*(float4*)buf469);
+    *(uint2*)buf470 = convert_uint2(*(char2*)buf471);
+    *(uint3*)buf472 = convert_uint3(*(char3*)buf473);
+    *(uint4*)buf474 = convert_uint4(*(char4*)buf475);
+    *(uint2*)buf476 = convert_uint2(*(uchar2*)buf477);
+    *(uint3*)buf478 = convert_uint3(*(uchar3*)buf479);
+    *(uint4*)buf480 = convert_uint4(*(uchar4*)buf481);
+    *(uint2*)buf482 = convert_uint2(*(short2*)buf483);
+    *(uint3*)buf484 = convert_uint3(*(short3*)buf485);
+    *(uint4*)buf486 = convert_uint4(*(short4*)buf487);
+    *(uint2*)buf488 = convert_uint2(*(ushort2*)buf489);
+    *(uint3*)buf490 = convert_uint3(*(ushort3*)buf491);
+    *(uint4*)buf492 = convert_uint4(*(ushort4*)buf493);
+    *(uint2*)buf494 = convert_uint2(*(int2*)buf495);
+    *(uint3*)buf496 = convert_uint3(*(int3*)buf497);
+    *(uint4*)buf498 = convert_uint4(*(int4*)buf499);
+    *(uint2*)buf500 = convert_uint2(*(uint2*)buf501);
+    *(uint3*)buf502 = convert_uint3(*(uint3*)buf503);
+    *(uint4*)buf504 = convert_uint4(*(uint4*)buf505);
+    *(float*)buf506 = copysign(*(float*)buf507, *(float*)buf508);
+    *(float2*)buf509 = copysign(*(float2*)buf510, *(float2*)buf511);
+    *(float3*)buf512 = copysign(*(float3*)buf513, *(float3*)buf514);
+    *(float4*)buf515 = copysign(*(float4*)buf516, *(float4*)buf517);
+    *(float*)buf518 = cos(*(float*)buf519);
+    *(float2*)buf520 = cos(*(float2*)buf521);
+    *(float3*)buf522 = cos(*(float3*)buf523);
+    *(float4*)buf524 = cos(*(float4*)buf525);
+    *(float*)buf526 = cosh(*(float*)buf527);
+    *(float2*)buf528 = cosh(*(float2*)buf529);
+    *(float3*)buf530 = cosh(*(float3*)buf531);
+    *(float4*)buf532 = cosh(*(float4*)buf533);
+    *(float*)buf534 = cospi(*(float*)buf535);
+    *(float2*)buf536 = cospi(*(float2*)buf537);
+    *(float3*)buf538 = cospi(*(float3*)buf539);
+    *(float4*)buf540 = cospi(*(float4*)buf541);
+    *(float3*)buf542 = cross(*(float3*)buf543, *(float3*)buf544);
+    *(float4*)buf545 = cross(*(float4*)buf546, *(float4*)buf547);
+    *(float*)buf548 = degrees(*(float*)buf549);
+    *(float2*)buf550 = degrees(*(float2*)buf551);
+    *(float3*)buf552 = degrees(*(float3*)buf553);
+    *(float4*)buf554 = degrees(*(float4*)buf555);
+    *(float*)buf556 = distance(*(float*)buf557, *(float*)buf558);
+    *(float*)buf559 = distance(*(float2*)buf560, *(float2*)buf561);
+    *(float*)buf562 = distance(*(float3*)buf563, *(float3*)buf564);
+    *(float*)buf565 = distance(*(float4*)buf566, *(float4*)buf567);
+    *(float*)buf568 = dot(*(float*)buf569, *(float*)buf570);
+    *(float*)buf571 = dot(*(float2*)buf572, *(float2*)buf573);
+    *(float*)buf574 = dot(*(float3*)buf575, *(float3*)buf576);
+    *(float*)buf577 = dot(*(float4*)buf578, *(float4*)buf579);
+    *(float*)buf580 = erf(*(float*)buf581);
+    *(float2*)buf582 = erf(*(float2*)buf583);
+    *(float3*)buf584 = erf(*(float3*)buf585);
+    *(float4*)buf586 = erf(*(float4*)buf587);
+    *(float*)buf588 = erfc(*(float*)buf589);
+    *(float2*)buf590 = erfc(*(float2*)buf591);
+    *(float3*)buf592 = erfc(*(float3*)buf593);
+    *(float4*)buf594 = erfc(*(float4*)buf595);
+    *(float*)buf596 = exp(*(float*)buf597);
+    *(float2*)buf598 = exp(*(float2*)buf599);
+    *(float3*)buf600 = exp(*(float3*)buf601);
+    *(float4*)buf602 = exp(*(float4*)buf603);
+    *(float*)buf604 = exp10(*(float*)buf605);
+    *(float2*)buf606 = exp10(*(float2*)buf607);
+    *(float3*)buf608 = exp10(*(float3*)buf609);
+    *(float4*)buf610 = exp10(*(float4*)buf611);
+    *(float*)buf612 = exp2(*(float*)buf613);
+    *(float2*)buf614 = exp2(*(float2*)buf615);
+    *(float3*)buf616 = exp2(*(float3*)buf617);
+    *(float4*)buf618 = exp2(*(float4*)buf619);
+    *(float*)buf620 = expm1(*(float*)buf621);
+    *(float2*)buf622 = expm1(*(float2*)buf623);
+    *(float3*)buf624 = expm1(*(float3*)buf625);
+    *(float4*)buf626 = expm1(*(float4*)buf627);
+    *(float*)buf628 = fabs(*(float*)buf629);
+    *(float2*)buf630 = fabs(*(float2*)buf631);
+    *(float3*)buf632 = fabs(*(float3*)buf633);
+    *(float4*)buf634 = fabs(*(float4*)buf635);
+    *(float*)buf636 = fdim(*(float*)buf637, *(float*)buf638);
+    *(float2*)buf639 = fdim(*(float2*)buf640, *(float2*)buf641);
+    *(float3*)buf642 = fdim(*(float3*)buf643, *(float3*)buf644);
+    *(float4*)buf645 = fdim(*(float4*)buf646, *(float4*)buf647);
+    *(float*)buf648 = floor(*(float*)buf649);
+    *(float2*)buf650 = floor(*(float2*)buf651);
+    *(float3*)buf652 = floor(*(float3*)buf653);
+    *(float4*)buf654 = floor(*(float4*)buf655);
+    *(float*)buf656 = fma(*(float*)buf657, *(float*)buf658, *(float*)buf659);
+    *(float2*)buf660 = fma(*(float2*)buf661, *(float2*)buf662, *(float2*)buf663);
+    *(float3*)buf664 = fma(*(float3*)buf665, *(float3*)buf666, *(float3*)buf667);
+    *(float4*)buf668 = fma(*(float4*)buf669, *(float4*)buf670, *(float4*)buf671);
+    *(float*)buf672 = fmax(*(float*)buf673, *(float*)buf674);
+    *(float2*)buf675 = fmax(*(float2*)buf676, *(float2*)buf677);
+    *(float3*)buf678 = fmax(*(float3*)buf679, *(float3*)buf680);
+    *(float4*)buf681 = fmax(*(float4*)buf682, *(float4*)buf683);
+    *(float2*)buf684 = fmax(*(float2*)buf685, *(float*)buf686);
+    *(float3*)buf687 = fmax(*(float3*)buf688, *(float*)buf689);
+    *(float4*)buf690 = fmax(*(float4*)buf691, *(float*)buf692);
+    *(float*)buf693 = fmin(*(float*)buf694, *(float*)buf695);
+    *(float2*)buf696 = fmin(*(float2*)buf697, *(float2*)buf698);
+    *(float3*)buf699 = fmin(*(float3*)buf700, *(float3*)buf701);
+    *(float4*)buf702 = fmin(*(float4*)buf703, *(float4*)buf704);
+    *(float2*)buf705 = fmin(*(float2*)buf706, *(float*)buf707);
+    *(float3*)buf708 = fmin(*(float3*)buf709, *(float*)buf710);
+    *(float4*)buf711 = fmin(*(float4*)buf712, *(float*)buf713);
+    *(float*)buf714 = fmod(*(float*)buf715, *(float*)buf716);
+    *(float2*)buf717 = fmod(*(float2*)buf718, *(float2*)buf719);
+    *(float3*)buf720 = fmod(*(float3*)buf721, *(float3*)buf722);
+    *(float4*)buf723 = fmod(*(float4*)buf724, *(float4*)buf725);
+    *(float*)buf726 = fract(*(float*)buf727, (float*) buf728);
+    *(float2*)buf729 = fract(*(float2*)buf730, (float2*) buf731);
+    *(float3*)buf732 = fract(*(float3*)buf733, (float3*) buf734);
+    *(float4*)buf735 = fract(*(float4*)buf736, (float4*) buf737);
+    *(float*)buf738 = fract(*(float*)buf739);
+    *(float2*)buf740 = fract(*(float2*)buf741);
+    *(float3*)buf742 = fract(*(float3*)buf743);
+    *(float4*)buf744 = fract(*(float4*)buf745);
+    *(float*)buf746 = frexp(*(float*)buf747, (int*) buf748);
+    *(float2*)buf749 = frexp(*(float2*)buf750, (int2*) buf751);
+    *(float3*)buf752 = frexp(*(float3*)buf753, (int3*) buf754);
+    *(float4*)buf755 = frexp(*(float4*)buf756, (int4*) buf757);
+    *(float*)buf758 = hypot(*(float*)buf759, *(float*)buf760);
+    *(float2*)buf761 = hypot(*(float2*)buf762, *(float2*)buf763);
+    *(float3*)buf764 = hypot(*(float3*)buf765, *(float3*)buf766);
+    *(float4*)buf767 = hypot(*(float4*)buf768, *(float4*)buf769);
+    *(int*)buf770 = ilogb(*(float*)buf771);
+    *(int2*)buf772 = ilogb(*(float2*)buf773);
+    *(int3*)buf774 = ilogb(*(float3*)buf775);
+    *(int4*)buf776 = ilogb(*(float4*)buf777);
+    *(float*)buf778 = ldexp(*(float*)buf779, *(int*)buf780);
+    *(float2*)buf781 = ldexp(*(float2*)buf782, *(int2*)buf783);
+    *(float3*)buf784 = ldexp(*(float3*)buf785, *(int3*)buf786);
+    *(float4*)buf787 = ldexp(*(float4*)buf788, *(int4*)buf789);
+    *(float2*)buf790 = ldexp(*(float2*)buf791, *(int*)buf792);
+    *(float3*)buf793 = ldexp(*(float3*)buf794, *(int*)buf795);
+    *(float4*)buf796 = ldexp(*(float4*)buf797, *(int*)buf798);
+    *(float*)buf799 = length(*(float*)buf800);
+    *(float*)buf801 = length(*(float2*)buf802);
+    *(float*)buf803 = length(*(float3*)buf804);
+    *(float*)buf805 = length(*(float4*)buf806);
+    *(float*)buf807 = lgamma(*(float*)buf808);
+    *(float2*)buf809 = lgamma(*(float2*)buf810);
+    *(float3*)buf811 = lgamma(*(float3*)buf812);
+    *(float4*)buf813 = lgamma(*(float4*)buf814);
+    *(float*)buf815 = lgamma(*(float*)buf816, (int*) buf817);
+    *(float2*)buf818 = lgamma(*(float2*)buf819, (int2*) buf820);
+    *(float3*)buf821 = lgamma(*(float3*)buf822, (int3*) buf823);
+    *(float4*)buf824 = lgamma(*(float4*)buf825, (int4*) buf826);
+    *(float*)buf827 = log(*(float*)buf828);
+    *(float2*)buf829 = log(*(float2*)buf830);
+    *(float3*)buf831 = log(*(float3*)buf832);
+    *(float4*)buf833 = log(*(float4*)buf834);
+    *(float*)buf835 = log10(*(float*)buf836);
+    *(float2*)buf837 = log10(*(float2*)buf838);
+    *(float3*)buf839 = log10(*(float3*)buf840);
+    *(float4*)buf841 = log10(*(float4*)buf842);
+    *(float*)buf843 = log1p(*(float*)buf844);
+    *(float2*)buf845 = log1p(*(float2*)buf846);
+    *(float3*)buf847 = log1p(*(float3*)buf848);
+    *(float4*)buf849 = log1p(*(float4*)buf850);
+    *(float*)buf851 = log2(*(float*)buf852);
+    *(float2*)buf853 = log2(*(float2*)buf854);
+    *(float3*)buf855 = log2(*(float3*)buf856);
+    *(float4*)buf857 = log2(*(float4*)buf858);
+    *(float*)buf859 = logb(*(float*)buf860);
+    *(float2*)buf861 = logb(*(float2*)buf862);
+    *(float3*)buf863 = logb(*(float3*)buf864);
+    *(float4*)buf865 = logb(*(float4*)buf866);
+    *(float*)buf867 = mad(*(float*)buf868, *(float*)buf869, *(float*)buf870);
+    *(float2*)buf871 = mad(*(float2*)buf872, *(float2*)buf873, *(float2*)buf874);
+    *(float3*)buf875 = mad(*(float3*)buf876, *(float3*)buf877, *(float3*)buf878);
+    *(float4*)buf879 = mad(*(float4*)buf880, *(float4*)buf881, *(float4*)buf882);
+    *(float*)buf883 = max(*(float*)buf884, *(float*)buf885);
+    *(float2*)buf886 = max(*(float2*)buf887, *(float2*)buf888);
+    *(float3*)buf889 = max(*(float3*)buf890, *(float3*)buf891);
+    *(float4*)buf892 = max(*(float4*)buf893, *(float4*)buf894);
+    *(float2*)buf895 = max(*(float2*)buf896, *(float*)buf897);
+    *(float3*)buf898 = max(*(float3*)buf899, *(float*)buf900);
+    *(float4*)buf901 = max(*(float4*)buf902, *(float*)buf903);
+    *(char*)buf904 = max(*(char*)buf905, *(char*)buf906);
+    *(uchar*)buf907 = max(*(uchar*)buf908, *(uchar*)buf909);
+    *(short*)buf910 = max(*(short*)buf911, *(short*)buf912);
+    *(ushort*)buf913 = max(*(ushort*)buf914, *(ushort*)buf915);
+    *(int*)buf916 = max(*(int*)buf917, *(int*)buf918);
+    *(uint*)buf919 = max(*(uint*)buf920, *(uint*)buf921);
+    *(char2*)buf922 = max(*(char2*)buf923, *(char2*)buf924);
+    *(uchar2*)buf925 = max(*(uchar2*)buf926, *(uchar2*)buf927);
+    *(short2*)buf928 = max(*(short2*)buf929, *(short2*)buf930);
+    *(ushort2*)buf931 = max(*(ushort2*)buf932, *(ushort2*)buf933);
+    *(int2*)buf934 = max(*(int2*)buf935, *(int2*)buf936);
+    *(uint2*)buf937 = max(*(uint2*)buf938, *(uint2*)buf939);
+    *(char3*)buf940 = max(*(char3*)buf941, *(char3*)buf942);
+    *(uchar3*)buf943 = max(*(uchar3*)buf944, *(uchar3*)buf945);
+    *(short3*)buf946 = max(*(short3*)buf947, *(short3*)buf948);
+    *(ushort3*)buf949 = max(*(ushort3*)buf950, *(ushort3*)buf951);
+    *(int3*)buf952 = max(*(int3*)buf953, *(int3*)buf954);
+    *(uint3*)buf955 = max(*(uint3*)buf956, *(uint3*)buf957);
+    *(char4*)buf958 = max(*(char4*)buf959, *(char4*)buf960);
+    *(uchar4*)buf961 = max(*(uchar4*)buf962, *(uchar4*)buf963);
+    *(short4*)buf964 = max(*(short4*)buf965, *(short4*)buf966);
+    *(ushort4*)buf967 = max(*(ushort4*)buf968, *(ushort4*)buf969);
+    *(int4*)buf970 = max(*(int4*)buf971, *(int4*)buf972);
+    *(uint4*)buf973 = max(*(uint4*)buf974, *(uint4*)buf975);
+    *(float*)buf976 = min(*(float*)buf977, *(float*)buf978);
+    *(float2*)buf979 = min(*(float2*)buf980, *(float2*)buf981);
+    *(float3*)buf982 = min(*(float3*)buf983, *(float3*)buf984);
+    *(float4*)buf985 = min(*(float4*)buf986, *(float4*)buf987);
+    *(float2*)buf988 = min(*(float2*)buf989, *(float*)buf990);
+    *(float3*)buf991 = min(*(float3*)buf992, *(float*)buf993);
+    *(float4*)buf994 = min(*(float4*)buf995, *(float*)buf996);
+    *(char*)buf997 = min(*(char*)buf998, *(char*)buf999);
+    *(uchar*)buf1000 = min(*(uchar*)buf1001, *(uchar*)buf1002);
+    *(short*)buf1003 = min(*(short*)buf1004, *(short*)buf1005);
+    *(ushort*)buf1006 = min(*(ushort*)buf1007, *(ushort*)buf1008);
+    *(int*)buf1009 = min(*(int*)buf1010, *(int*)buf1011);
+    *(uint*)buf1012 = min(*(uint*)buf1013, *(uint*)buf1014);
+    *(char2*)buf1015 = min(*(char2*)buf1016, *(char2*)buf1017);
+    *(uchar2*)buf1018 = min(*(uchar2*)buf1019, *(uchar2*)buf1020);
+    *(short2*)buf1021 = min(*(short2*)buf1022, *(short2*)buf1023);
+    *(ushort2*)buf1024 = min(*(ushort2*)buf1025, *(ushort2*)buf1026);
+    *(int2*)buf1027 = min(*(int2*)buf1028, *(int2*)buf1029);
+    *(uint2*)buf1030 = min(*(uint2*)buf1031, *(uint2*)buf1032);
+    *(char3*)buf1033 = min(*(char3*)buf1034, *(char3*)buf1035);
+    *(uchar3*)buf1036 = min(*(uchar3*)buf1037, *(uchar3*)buf1038);
+    *(short3*)buf1039 = min(*(short3*)buf1040, *(short3*)buf1041);
+    *(ushort3*)buf1042 = min(*(ushort3*)buf1043, *(ushort3*)buf1044);
+    *(int3*)buf1045 = min(*(int3*)buf1046, *(int3*)buf1047);
+    *(uint3*)buf1048 = min(*(uint3*)buf1049, *(uint3*)buf1050);
+    *(char4*)buf1051 = min(*(char4*)buf1052, *(char4*)buf1053);
+    *(uchar4*)buf1054 = min(*(uchar4*)buf1055, *(uchar4*)buf1056);
+    *(short4*)buf1057 = min(*(short4*)buf1058, *(short4*)buf1059);
+    *(ushort4*)buf1060 = min(*(ushort4*)buf1061, *(ushort4*)buf1062);
+    *(int4*)buf1063 = min(*(int4*)buf1064, *(int4*)buf1065);
+    *(uint4*)buf1066 = min(*(uint4*)buf1067, *(uint4*)buf1068);
+    *(float*)buf1069 = mix(*(float*)buf1070, *(float*)buf1071, *(float*)buf1072);
+    *(float2*)buf1073 = mix(*(float2*)buf1074, *(float2*)buf1075, *(float2*)buf1076);
+    *(float3*)buf1077 = mix(*(float3*)buf1078, *(float3*)buf1079, *(float3*)buf1080);
+    *(float4*)buf1081 = mix(*(float4*)buf1082, *(float4*)buf1083, *(float4*)buf1084);
+    *(float2*)buf1085 = mix(*(float2*)buf1086, *(float2*)buf1087, *(float*)buf1088);
+    *(float3*)buf1089 = mix(*(float3*)buf1090, *(float3*)buf1091, *(float*)buf1092);
+    *(float4*)buf1093 = mix(*(float4*)buf1094, *(float4*)buf1095, *(float*)buf1096);
+    *(float*)buf1097 = modf(*(float*)buf1098, (float*) buf1099);
+    *(float2*)buf1100 = modf(*(float2*)buf1101, (float2*) buf1102);
+    *(float3*)buf1103 = modf(*(float3*)buf1104, (float3*) buf1105);
+    *(float4*)buf1106 = modf(*(float4*)buf1107, (float4*) buf1108);
+    *(float*)buf1109 = nan(*(uint*)buf1110);
+    *(float*)buf1111 = nextafter(*(float*)buf1112, *(float*)buf1113);
+    *(float2*)buf1114 = nextafter(*(float2*)buf1115, *(float2*)buf1116);
+    *(float3*)buf1117 = nextafter(*(float3*)buf1118, *(float3*)buf1119);
+    *(float4*)buf1120 = nextafter(*(float4*)buf1121, *(float4*)buf1122);
+    *(float*)buf1123 = normalize(*(float*)buf1124);
+    *(float2*)buf1125 = normalize(*(float2*)buf1126);
+    *(float3*)buf1127 = normalize(*(float3*)buf1128);
+    *(float4*)buf1129 = normalize(*(float4*)buf1130);
+    *(float*)buf1131 = pow(*(float*)buf1132, *(float*)buf1133);
+    *(float2*)buf1134 = pow(*(float2*)buf1135, *(float2*)buf1136);
+    *(float3*)buf1137 = pow(*(float3*)buf1138, *(float3*)buf1139);
+    *(float4*)buf1140 = pow(*(float4*)buf1141, *(float4*)buf1142);
+    *(float*)buf1143 = pown(*(float*)buf1144, *(int*)buf1145);
+    *(float2*)buf1146 = pown(*(float2*)buf1147, *(int2*)buf1148);
+    *(float3*)buf1149 = pown(*(float3*)buf1150, *(int3*)buf1151);
+    *(float4*)buf1152 = pown(*(float4*)buf1153, *(int4*)buf1154);
+    *(float*)buf1155 = powr(*(float*)buf1156, *(float*)buf1157);
+    *(float2*)buf1158 = powr(*(float2*)buf1159, *(float2*)buf1160);
+    *(float3*)buf1161 = powr(*(float3*)buf1162, *(float3*)buf1163);
+    *(float4*)buf1164 = powr(*(float4*)buf1165, *(float4*)buf1166);
+    *(float*)buf1167 = radians(*(float*)buf1168);
+    *(float2*)buf1169 = radians(*(float2*)buf1170);
+    *(float3*)buf1171 = radians(*(float3*)buf1172);
+    *(float4*)buf1173 = radians(*(float4*)buf1174);
+    *(float*)buf1175 = remainder(*(float*)buf1176, *(float*)buf1177);
+    *(float2*)buf1178 = remainder(*(float2*)buf1179, *(float2*)buf1180);
+    *(float3*)buf1181 = remainder(*(float3*)buf1182, *(float3*)buf1183);
+    *(float4*)buf1184 = remainder(*(float4*)buf1185, *(float4*)buf1186);
+    *(float*)buf1187 = remquo(*(float*)buf1188, *(float*)buf1189, (int*) buf1190);
+    *(float2*)buf1191 = remquo(*(float2*)buf1192, *(float2*)buf1193, (int2*) buf1194);
+    *(float3*)buf1195 = remquo(*(float3*)buf1196, *(float3*)buf1197, (int3*) buf1198);
+    *(float4*)buf1199 = remquo(*(float4*)buf1200, *(float4*)buf1201, (int4*) buf1202);
+    *(float*)buf1203 = rint(*(float*)buf1204);
+    *(float2*)buf1205 = rint(*(float2*)buf1206);
+    *(float3*)buf1207 = rint(*(float3*)buf1208);
+    *(float4*)buf1209 = rint(*(float4*)buf1210);
+    *(float*)buf1211 = rootn(*(float*)buf1212, *(int*)buf1213);
+    *(float2*)buf1214 = rootn(*(float2*)buf1215, *(int2*)buf1216);
+    *(float3*)buf1217 = rootn(*(float3*)buf1218, *(int3*)buf1219);
+    *(float4*)buf1220 = rootn(*(float4*)buf1221, *(int4*)buf1222);
+    *(float*)buf1223 = round(*(float*)buf1224);
+    *(float2*)buf1225 = round(*(float2*)buf1226);
+    *(float3*)buf1227 = round(*(float3*)buf1228);
+    *(float4*)buf1229 = round(*(float4*)buf1230);
+    *(uint32_t*)buf1231 = rsAllocationGetDimFaces(*(rs_allocation*)buf1232);
+    *(uint32_t*)buf1233 = rsAllocationGetDimLOD(*(rs_allocation*)buf1234);
+    *(uint32_t*)buf1235 = rsAllocationGetDimX(*(rs_allocation*)buf1236);
+    *(uint32_t*)buf1237 = rsAllocationGetDimY(*(rs_allocation*)buf1238);
+    *(uint32_t*)buf1239 = rsAllocationGetDimZ(*(rs_allocation*)buf1240);
+    *(rs_element*)buf1241 = rsAllocationGetElement(*(rs_allocation*)buf1242);
+    *(char*)buf1243 = rsClamp(*(char*)buf1244, *(char*)buf1245, *(char*)buf1246);
+    *(uchar*)buf1247 = rsClamp(*(uchar*)buf1248, *(uchar*)buf1249, *(uchar*)buf1250);
+    *(short*)buf1251 = rsClamp(*(short*)buf1252, *(short*)buf1253, *(short*)buf1254);
+    *(ushort*)buf1255 = rsClamp(*(ushort*)buf1256, *(ushort*)buf1257, *(ushort*)buf1258);
+    *(int*)buf1259 = rsClamp(*(int*)buf1260, *(int*)buf1261, *(int*)buf1262);
+    *(uint*)buf1263 = rsClamp(*(uint*)buf1264, *(uint*)buf1265, *(uint*)buf1266);
+    rsClearObject((rs_element*) buf1267);
+    rsClearObject((rs_type*) buf1268);
+    rsClearObject((rs_allocation*) buf1269);
+    rsClearObject((rs_sampler*) buf1270);
+    rsClearObject((rs_script*) buf1271);
+#ifndef __LP64__
+    rsClearObject((rs_mesh*) buf1272);
+    rsClearObject((rs_program_fragment*) buf1273);
+    rsClearObject((rs_program_vertex*) buf1274);
+    rsClearObject((rs_program_raster*) buf1275);
+    rsClearObject((rs_program_store*) buf1276);
+    rsClearObject((rs_font*) buf1277);
+#endif
+    rsDebug((const char*) buf1278, *(double*)buf1279);
+    rsDebug((const char*) buf1280, *(int*)buf1281);
+    rsDebug((const char*) buf1282, *(uint*)buf1283);
+    rsDebug((const char*) buf1284, *(long*)buf1285);
+    rsDebug((const char*) buf1286, *(ulong*)buf1287);
+    rsDebug((const char*) buf1288, *(float*)buf1289);
+    rsDebug((const char*) buf1290, *(float2*)buf1291);
+    rsDebug((const char*) buf1292, *(float3*)buf1293);
+    rsDebug((const char*) buf1294, *(float4*)buf1295);
+    rsDebug((const char*) buf1296, *(float*)buf1297, *(float*)buf1298);
+    rsDebug((const char*) buf1299, *(float*)buf1300, *(float*)buf1301, *(float*)buf1302);
+    rsDebug((const char*) buf1303, *(float*)buf1304, *(float*)buf1305, *(float*)buf1306, *(float*)buf1307);
+    rsDebug((const char*) buf1308, *(long long*)buf1309);
+    rsDebug((const char*) buf1310, *(unsigned long long*)buf1311);
+    rsDebug((const char*) buf1312, (const void*) buf1313);
+    rsDebug((const char*) buf1314, (const rs_matrix4x4*) buf1315);
+    rsDebug((const char*) buf1316, (const rs_matrix3x3*) buf1317);
+    rsDebug((const char*) buf1318, (const rs_matrix2x2*) buf1319);
+    rsExtractFrustumPlanes((const rs_matrix4x4*) buf1320, (float4*) buf1321, (float4*) buf1322, (float4*) buf1323, (float4*) buf1324, (float4*) buf1325, (float4*) buf1326);
+    rsForEach(*(rs_script*)buf1327, *(rs_allocation*)buf1328, *(rs_allocation*)buf1329, (const void*) buf1330, (const rs_script_call_t*) buf1331);
+    rsForEach(*(rs_script*)buf1332, *(rs_allocation*)buf1333, *(rs_allocation*)buf1334, (const void*) buf1335);
+    *(float*)buf1336 = rsFrac(*(float*)buf1337);
+    *(rs_allocation*)buf1338 = rsGetAllocation((const void*) buf1339);
+    *(float*)buf1340 = rsGetDt();
+    *(const void**)buf1341 = rsGetElementAt(*(rs_allocation*)buf1342, *(uint32_t*)buf1343);
+    *(const void**)buf1344 = rsGetElementAt(*(rs_allocation*)buf1345, *(uint32_t*)buf1346, *(uint32_t*)buf1347);
+    *(const void**)buf1348 = rsGetElementAt(*(rs_allocation*)buf1349, *(uint32_t*)buf1350, *(uint32_t*)buf1351, *(uint32_t*)buf1352);
+    *(float*)buf1353 = rsGetElementAt_float(*(rs_allocation*)buf1354, *(uint32_t*)buf1355);
+    *(float2*)buf1356 = rsGetElementAt_float2(*(rs_allocation*)buf1357, *(uint32_t*)buf1358);
+    *(float3*)buf1359 = rsGetElementAt_float3(*(rs_allocation*)buf1360, *(uint32_t*)buf1361);
+    *(float4*)buf1362 = rsGetElementAt_float4(*(rs_allocation*)buf1363, *(uint32_t*)buf1364);
+    *(double*)buf1365 = rsGetElementAt_double(*(rs_allocation*)buf1366, *(uint32_t*)buf1367);
+    *(double2*)buf1368 = rsGetElementAt_double2(*(rs_allocation*)buf1369, *(uint32_t*)buf1370);
+    *(double3*)buf1371 = rsGetElementAt_double3(*(rs_allocation*)buf1372, *(uint32_t*)buf1373);
+    *(double4*)buf1374 = rsGetElementAt_double4(*(rs_allocation*)buf1375, *(uint32_t*)buf1376);
+    *(char*)buf1377 = rsGetElementAt_char(*(rs_allocation*)buf1378, *(uint32_t*)buf1379);
+    *(char2*)buf1380 = rsGetElementAt_char2(*(rs_allocation*)buf1381, *(uint32_t*)buf1382);
+    *(char3*)buf1383 = rsGetElementAt_char3(*(rs_allocation*)buf1384, *(uint32_t*)buf1385);
+    *(char4*)buf1386 = rsGetElementAt_char4(*(rs_allocation*)buf1387, *(uint32_t*)buf1388);
+    *(uchar*)buf1389 = rsGetElementAt_uchar(*(rs_allocation*)buf1390, *(uint32_t*)buf1391);
+    *(uchar2*)buf1392 = rsGetElementAt_uchar2(*(rs_allocation*)buf1393, *(uint32_t*)buf1394);
+    *(uchar3*)buf1395 = rsGetElementAt_uchar3(*(rs_allocation*)buf1396, *(uint32_t*)buf1397);
+    *(uchar4*)buf1398 = rsGetElementAt_uchar4(*(rs_allocation*)buf1399, *(uint32_t*)buf1400);
+    *(short*)buf1401 = rsGetElementAt_short(*(rs_allocation*)buf1402, *(uint32_t*)buf1403);
+    *(short2*)buf1404 = rsGetElementAt_short2(*(rs_allocation*)buf1405, *(uint32_t*)buf1406);
+    *(short3*)buf1407 = rsGetElementAt_short3(*(rs_allocation*)buf1408, *(uint32_t*)buf1409);
+    *(short4*)buf1410 = rsGetElementAt_short4(*(rs_allocation*)buf1411, *(uint32_t*)buf1412);
+    *(ushort*)buf1413 = rsGetElementAt_ushort(*(rs_allocation*)buf1414, *(uint32_t*)buf1415);
+    *(ushort2*)buf1416 = rsGetElementAt_ushort2(*(rs_allocation*)buf1417, *(uint32_t*)buf1418);
+    *(ushort3*)buf1419 = rsGetElementAt_ushort3(*(rs_allocation*)buf1420, *(uint32_t*)buf1421);
+    *(ushort4*)buf1422 = rsGetElementAt_ushort4(*(rs_allocation*)buf1423, *(uint32_t*)buf1424);
+    *(int*)buf1425 = rsGetElementAt_int(*(rs_allocation*)buf1426, *(uint32_t*)buf1427);
+    *(int2*)buf1428 = rsGetElementAt_int2(*(rs_allocation*)buf1429, *(uint32_t*)buf1430);
+    *(int3*)buf1431 = rsGetElementAt_int3(*(rs_allocation*)buf1432, *(uint32_t*)buf1433);
+    *(int4*)buf1434 = rsGetElementAt_int4(*(rs_allocation*)buf1435, *(uint32_t*)buf1436);
+    *(uint*)buf1437 = rsGetElementAt_uint(*(rs_allocation*)buf1438, *(uint32_t*)buf1439);
+    *(uint2*)buf1440 = rsGetElementAt_uint2(*(rs_allocation*)buf1441, *(uint32_t*)buf1442);
+    *(uint3*)buf1443 = rsGetElementAt_uint3(*(rs_allocation*)buf1444, *(uint32_t*)buf1445);
+    *(uint4*)buf1446 = rsGetElementAt_uint4(*(rs_allocation*)buf1447, *(uint32_t*)buf1448);
+    *(long*)buf1449 = rsGetElementAt_long(*(rs_allocation*)buf1450, *(uint32_t*)buf1451);
+    *(long2*)buf1452 = rsGetElementAt_long2(*(rs_allocation*)buf1453, *(uint32_t*)buf1454);
+    *(long3*)buf1455 = rsGetElementAt_long3(*(rs_allocation*)buf1456, *(uint32_t*)buf1457);
+    *(long4*)buf1458 = rsGetElementAt_long4(*(rs_allocation*)buf1459, *(uint32_t*)buf1460);
+    *(ulong*)buf1461 = rsGetElementAt_ulong(*(rs_allocation*)buf1462, *(uint32_t*)buf1463);
+    *(ulong2*)buf1464 = rsGetElementAt_ulong2(*(rs_allocation*)buf1465, *(uint32_t*)buf1466);
+    *(ulong3*)buf1467 = rsGetElementAt_ulong3(*(rs_allocation*)buf1468, *(uint32_t*)buf1469);
+    *(ulong4*)buf1470 = rsGetElementAt_ulong4(*(rs_allocation*)buf1471, *(uint32_t*)buf1472);
+    *(float*)buf1473 = rsGetElementAt_float(*(rs_allocation*)buf1474, *(uint32_t*)buf1475, *(uint32_t*)buf1476);
+    *(float2*)buf1477 = rsGetElementAt_float2(*(rs_allocation*)buf1478, *(uint32_t*)buf1479, *(uint32_t*)buf1480);
+    *(float3*)buf1481 = rsGetElementAt_float3(*(rs_allocation*)buf1482, *(uint32_t*)buf1483, *(uint32_t*)buf1484);
+    *(float4*)buf1485 = rsGetElementAt_float4(*(rs_allocation*)buf1486, *(uint32_t*)buf1487, *(uint32_t*)buf1488);
+    *(double*)buf1489 = rsGetElementAt_double(*(rs_allocation*)buf1490, *(uint32_t*)buf1491, *(uint32_t*)buf1492);
+    *(double2*)buf1493 = rsGetElementAt_double2(*(rs_allocation*)buf1494, *(uint32_t*)buf1495, *(uint32_t*)buf1496);
+    *(double3*)buf1497 = rsGetElementAt_double3(*(rs_allocation*)buf1498, *(uint32_t*)buf1499, *(uint32_t*)buf1500);
+    *(double4*)buf1501 = rsGetElementAt_double4(*(rs_allocation*)buf1502, *(uint32_t*)buf1503, *(uint32_t*)buf1504);
+    *(char*)buf1505 = rsGetElementAt_char(*(rs_allocation*)buf1506, *(uint32_t*)buf1507, *(uint32_t*)buf1508);
+    *(char2*)buf1509 = rsGetElementAt_char2(*(rs_allocation*)buf1510, *(uint32_t*)buf1511, *(uint32_t*)buf1512);
+    *(char3*)buf1513 = rsGetElementAt_char3(*(rs_allocation*)buf1514, *(uint32_t*)buf1515, *(uint32_t*)buf1516);
+    *(char4*)buf1517 = rsGetElementAt_char4(*(rs_allocation*)buf1518, *(uint32_t*)buf1519, *(uint32_t*)buf1520);
+    *(uchar*)buf1521 = rsGetElementAt_uchar(*(rs_allocation*)buf1522, *(uint32_t*)buf1523, *(uint32_t*)buf1524);
+    *(uchar2*)buf1525 = rsGetElementAt_uchar2(*(rs_allocation*)buf1526, *(uint32_t*)buf1527, *(uint32_t*)buf1528);
+    *(uchar3*)buf1529 = rsGetElementAt_uchar3(*(rs_allocation*)buf1530, *(uint32_t*)buf1531, *(uint32_t*)buf1532);
+    *(uchar4*)buf1533 = rsGetElementAt_uchar4(*(rs_allocation*)buf1534, *(uint32_t*)buf1535, *(uint32_t*)buf1536);
+    *(short*)buf1537 = rsGetElementAt_short(*(rs_allocation*)buf1538, *(uint32_t*)buf1539, *(uint32_t*)buf1540);
+    *(short2*)buf1541 = rsGetElementAt_short2(*(rs_allocation*)buf1542, *(uint32_t*)buf1543, *(uint32_t*)buf1544);
+    *(short3*)buf1545 = rsGetElementAt_short3(*(rs_allocation*)buf1546, *(uint32_t*)buf1547, *(uint32_t*)buf1548);
+    *(short4*)buf1549 = rsGetElementAt_short4(*(rs_allocation*)buf1550, *(uint32_t*)buf1551, *(uint32_t*)buf1552);
+    *(ushort*)buf1553 = rsGetElementAt_ushort(*(rs_allocation*)buf1554, *(uint32_t*)buf1555, *(uint32_t*)buf1556);
+    *(ushort2*)buf1557 = rsGetElementAt_ushort2(*(rs_allocation*)buf1558, *(uint32_t*)buf1559, *(uint32_t*)buf1560);
+    *(ushort3*)buf1561 = rsGetElementAt_ushort3(*(rs_allocation*)buf1562, *(uint32_t*)buf1563, *(uint32_t*)buf1564);
+    *(ushort4*)buf1565 = rsGetElementAt_ushort4(*(rs_allocation*)buf1566, *(uint32_t*)buf1567, *(uint32_t*)buf1568);
+    *(int*)buf1569 = rsGetElementAt_int(*(rs_allocation*)buf1570, *(uint32_t*)buf1571, *(uint32_t*)buf1572);
+    *(int2*)buf1573 = rsGetElementAt_int2(*(rs_allocation*)buf1574, *(uint32_t*)buf1575, *(uint32_t*)buf1576);
+    *(int3*)buf1577 = rsGetElementAt_int3(*(rs_allocation*)buf1578, *(uint32_t*)buf1579, *(uint32_t*)buf1580);
+    *(int4*)buf1581 = rsGetElementAt_int4(*(rs_allocation*)buf1582, *(uint32_t*)buf1583, *(uint32_t*)buf1584);
+    *(uint*)buf1585 = rsGetElementAt_uint(*(rs_allocation*)buf1586, *(uint32_t*)buf1587, *(uint32_t*)buf1588);
+    *(uint2*)buf1589 = rsGetElementAt_uint2(*(rs_allocation*)buf1590, *(uint32_t*)buf1591, *(uint32_t*)buf1592);
+    *(uint3*)buf1593 = rsGetElementAt_uint3(*(rs_allocation*)buf1594, *(uint32_t*)buf1595, *(uint32_t*)buf1596);
+    *(uint4*)buf1597 = rsGetElementAt_uint4(*(rs_allocation*)buf1598, *(uint32_t*)buf1599, *(uint32_t*)buf1600);
+    *(long*)buf1601 = rsGetElementAt_long(*(rs_allocation*)buf1602, *(uint32_t*)buf1603, *(uint32_t*)buf1604);
+    *(long2*)buf1605 = rsGetElementAt_long2(*(rs_allocation*)buf1606, *(uint32_t*)buf1607, *(uint32_t*)buf1608);
+    *(long3*)buf1609 = rsGetElementAt_long3(*(rs_allocation*)buf1610, *(uint32_t*)buf1611, *(uint32_t*)buf1612);
+    *(long4*)buf1613 = rsGetElementAt_long4(*(rs_allocation*)buf1614, *(uint32_t*)buf1615, *(uint32_t*)buf1616);
+    *(ulong*)buf1617 = rsGetElementAt_ulong(*(rs_allocation*)buf1618, *(uint32_t*)buf1619, *(uint32_t*)buf1620);
+    *(ulong2*)buf1621 = rsGetElementAt_ulong2(*(rs_allocation*)buf1622, *(uint32_t*)buf1623, *(uint32_t*)buf1624);
+    *(ulong3*)buf1625 = rsGetElementAt_ulong3(*(rs_allocation*)buf1626, *(uint32_t*)buf1627, *(uint32_t*)buf1628);
+    *(ulong4*)buf1629 = rsGetElementAt_ulong4(*(rs_allocation*)buf1630, *(uint32_t*)buf1631, *(uint32_t*)buf1632);
+    *(float*)buf1633 = rsGetElementAt_float(*(rs_allocation*)buf1634, *(uint32_t*)buf1635, *(uint32_t*)buf1636, *(uint32_t*)buf1637);
+    *(float2*)buf1638 = rsGetElementAt_float2(*(rs_allocation*)buf1639, *(uint32_t*)buf1640, *(uint32_t*)buf1641, *(uint32_t*)buf1642);
+    *(float3*)buf1643 = rsGetElementAt_float3(*(rs_allocation*)buf1644, *(uint32_t*)buf1645, *(uint32_t*)buf1646, *(uint32_t*)buf1647);
+    *(float4*)buf1648 = rsGetElementAt_float4(*(rs_allocation*)buf1649, *(uint32_t*)buf1650, *(uint32_t*)buf1651, *(uint32_t*)buf1652);
+    *(double*)buf1653 = rsGetElementAt_double(*(rs_allocation*)buf1654, *(uint32_t*)buf1655, *(uint32_t*)buf1656, *(uint32_t*)buf1657);
+    *(double2*)buf1658 = rsGetElementAt_double2(*(rs_allocation*)buf1659, *(uint32_t*)buf1660, *(uint32_t*)buf1661, *(uint32_t*)buf1662);
+    *(double3*)buf1663 = rsGetElementAt_double3(*(rs_allocation*)buf1664, *(uint32_t*)buf1665, *(uint32_t*)buf1666, *(uint32_t*)buf1667);
+    *(double4*)buf1668 = rsGetElementAt_double4(*(rs_allocation*)buf1669, *(uint32_t*)buf1670, *(uint32_t*)buf1671, *(uint32_t*)buf1672);
+    *(char*)buf1673 = rsGetElementAt_char(*(rs_allocation*)buf1674, *(uint32_t*)buf1675, *(uint32_t*)buf1676, *(uint32_t*)buf1677);
+    *(char2*)buf1678 = rsGetElementAt_char2(*(rs_allocation*)buf1679, *(uint32_t*)buf1680, *(uint32_t*)buf1681, *(uint32_t*)buf1682);
+    *(char3*)buf1683 = rsGetElementAt_char3(*(rs_allocation*)buf1684, *(uint32_t*)buf1685, *(uint32_t*)buf1686, *(uint32_t*)buf1687);
+    *(char4*)buf1688 = rsGetElementAt_char4(*(rs_allocation*)buf1689, *(uint32_t*)buf1690, *(uint32_t*)buf1691, *(uint32_t*)buf1692);
+    *(uchar*)buf1693 = rsGetElementAt_uchar(*(rs_allocation*)buf1694, *(uint32_t*)buf1695, *(uint32_t*)buf1696, *(uint32_t*)buf1697);
+    *(uchar2*)buf1698 = rsGetElementAt_uchar2(*(rs_allocation*)buf1699, *(uint32_t*)buf1700, *(uint32_t*)buf1701, *(uint32_t*)buf1702);
+    *(uchar3*)buf1703 = rsGetElementAt_uchar3(*(rs_allocation*)buf1704, *(uint32_t*)buf1705, *(uint32_t*)buf1706, *(uint32_t*)buf1707);
+    *(uchar4*)buf1708 = rsGetElementAt_uchar4(*(rs_allocation*)buf1709, *(uint32_t*)buf1710, *(uint32_t*)buf1711, *(uint32_t*)buf1712);
+    *(short*)buf1713 = rsGetElementAt_short(*(rs_allocation*)buf1714, *(uint32_t*)buf1715, *(uint32_t*)buf1716, *(uint32_t*)buf1717);
+    *(short2*)buf1718 = rsGetElementAt_short2(*(rs_allocation*)buf1719, *(uint32_t*)buf1720, *(uint32_t*)buf1721, *(uint32_t*)buf1722);
+    *(short3*)buf1723 = rsGetElementAt_short3(*(rs_allocation*)buf1724, *(uint32_t*)buf1725, *(uint32_t*)buf1726, *(uint32_t*)buf1727);
+    *(short4*)buf1728 = rsGetElementAt_short4(*(rs_allocation*)buf1729, *(uint32_t*)buf1730, *(uint32_t*)buf1731, *(uint32_t*)buf1732);
+    *(ushort*)buf1733 = rsGetElementAt_ushort(*(rs_allocation*)buf1734, *(uint32_t*)buf1735, *(uint32_t*)buf1736, *(uint32_t*)buf1737);
+    *(ushort2*)buf1738 = rsGetElementAt_ushort2(*(rs_allocation*)buf1739, *(uint32_t*)buf1740, *(uint32_t*)buf1741, *(uint32_t*)buf1742);
+    *(ushort3*)buf1743 = rsGetElementAt_ushort3(*(rs_allocation*)buf1744, *(uint32_t*)buf1745, *(uint32_t*)buf1746, *(uint32_t*)buf1747);
+    *(ushort4*)buf1748 = rsGetElementAt_ushort4(*(rs_allocation*)buf1749, *(uint32_t*)buf1750, *(uint32_t*)buf1751, *(uint32_t*)buf1752);
+    *(int*)buf1753 = rsGetElementAt_int(*(rs_allocation*)buf1754, *(uint32_t*)buf1755, *(uint32_t*)buf1756, *(uint32_t*)buf1757);
+    *(int2*)buf1758 = rsGetElementAt_int2(*(rs_allocation*)buf1759, *(uint32_t*)buf1760, *(uint32_t*)buf1761, *(uint32_t*)buf1762);
+    *(int3*)buf1763 = rsGetElementAt_int3(*(rs_allocation*)buf1764, *(uint32_t*)buf1765, *(uint32_t*)buf1766, *(uint32_t*)buf1767);
+    *(int4*)buf1768 = rsGetElementAt_int4(*(rs_allocation*)buf1769, *(uint32_t*)buf1770, *(uint32_t*)buf1771, *(uint32_t*)buf1772);
+    *(uint*)buf1773 = rsGetElementAt_uint(*(rs_allocation*)buf1774, *(uint32_t*)buf1775, *(uint32_t*)buf1776, *(uint32_t*)buf1777);
+    *(uint2*)buf1778 = rsGetElementAt_uint2(*(rs_allocation*)buf1779, *(uint32_t*)buf1780, *(uint32_t*)buf1781, *(uint32_t*)buf1782);
+    *(uint3*)buf1783 = rsGetElementAt_uint3(*(rs_allocation*)buf1784, *(uint32_t*)buf1785, *(uint32_t*)buf1786, *(uint32_t*)buf1787);
+    *(uint4*)buf1788 = rsGetElementAt_uint4(*(rs_allocation*)buf1789, *(uint32_t*)buf1790, *(uint32_t*)buf1791, *(uint32_t*)buf1792);
+    *(long*)buf1793 = rsGetElementAt_long(*(rs_allocation*)buf1794, *(uint32_t*)buf1795, *(uint32_t*)buf1796, *(uint32_t*)buf1797);
+    *(long2*)buf1798 = rsGetElementAt_long2(*(rs_allocation*)buf1799, *(uint32_t*)buf1800, *(uint32_t*)buf1801, *(uint32_t*)buf1802);
+    *(long3*)buf1803 = rsGetElementAt_long3(*(rs_allocation*)buf1804, *(uint32_t*)buf1805, *(uint32_t*)buf1806, *(uint32_t*)buf1807);
+    *(long4*)buf1808 = rsGetElementAt_long4(*(rs_allocation*)buf1809, *(uint32_t*)buf1810, *(uint32_t*)buf1811, *(uint32_t*)buf1812);
+    *(ulong*)buf1813 = rsGetElementAt_ulong(*(rs_allocation*)buf1814, *(uint32_t*)buf1815, *(uint32_t*)buf1816, *(uint32_t*)buf1817);
+    *(ulong2*)buf1818 = rsGetElementAt_ulong2(*(rs_allocation*)buf1819, *(uint32_t*)buf1820, *(uint32_t*)buf1821, *(uint32_t*)buf1822);
+    *(ulong3*)buf1823 = rsGetElementAt_ulong3(*(rs_allocation*)buf1824, *(uint32_t*)buf1825, *(uint32_t*)buf1826, *(uint32_t*)buf1827);
+    *(ulong4*)buf1828 = rsGetElementAt_ulong4(*(rs_allocation*)buf1829, *(uint32_t*)buf1830, *(uint32_t*)buf1831, *(uint32_t*)buf1832);
+    *(bool*)buf1833 = rsIsObject(*(rs_element*)buf1834);
+    *(bool*)buf1835 = rsIsObject(*(rs_type*)buf1836);
+    *(bool*)buf1837 = rsIsObject(*(rs_allocation*)buf1838);
+    *(bool*)buf1839 = rsIsObject(*(rs_sampler*)buf1840);
+    *(bool*)buf1841 = rsIsObject(*(rs_script*)buf1842);
+#ifndef __LP64__
+    *(bool*)buf1843 = rsIsObject(*(rs_mesh*)buf1844);
+    *(bool*)buf1845 = rsIsObject(*(rs_program_fragment*)buf1846);
+    *(bool*)buf1847 = rsIsObject(*(rs_program_vertex*)buf1848);
+    *(bool*)buf1849 = rsIsObject(*(rs_program_raster*)buf1850);
+    *(bool*)buf1851 = rsIsObject(*(rs_program_store*)buf1852);
+    *(bool*)buf1853 = rsIsObject(*(rs_font*)buf1854);
+#endif
+    *(bool*)buf1855 = rsIsSphereInFrustum((float4*) buf1856, (float4*) buf1857, (float4*) buf1858, (float4*) buf1859, (float4*) buf1860, (float4*) buf1861, (float4*) buf1862);
+    *(rs_tm**)buf1863 = rsLocaltime((rs_tm*) buf1864, (const rs_time_t*) buf1865);
+    *(float*)buf1866 = rsMatrixGet((const rs_matrix4x4*) buf1867, *(uint32_t*)buf1868, *(uint32_t*)buf1869);
+    *(float*)buf1870 = rsMatrixGet((const rs_matrix3x3*) buf1871, *(uint32_t*)buf1872, *(uint32_t*)buf1873);
+    *(float*)buf1874 = rsMatrixGet((const rs_matrix2x2*) buf1875, *(uint32_t*)buf1876, *(uint32_t*)buf1877);
+    *(bool*)buf1878 = rsMatrixInverse((rs_matrix4x4*) buf1879);
+    *(bool*)buf1880 = rsMatrixInverseTranspose((rs_matrix4x4*) buf1881);
+    rsMatrixLoad((rs_matrix4x4*) buf1882, (const float*) buf1883);
+    rsMatrixLoad((rs_matrix3x3*) buf1884, (const float*) buf1885);
+    rsMatrixLoad((rs_matrix2x2*) buf1886, (const float*) buf1887);
+    rsMatrixLoad((rs_matrix4x4*) buf1888, (const rs_matrix4x4*) buf1889);
+    rsMatrixLoad((rs_matrix3x3*) buf1890, (const rs_matrix3x3*) buf1891);
+    rsMatrixLoad((rs_matrix2x2*) buf1892, (const rs_matrix2x2*) buf1893);
+    rsMatrixLoad((rs_matrix4x4*) buf1894, (const rs_matrix3x3*) buf1895);
+    rsMatrixLoad((rs_matrix4x4*) buf1896, (const rs_matrix2x2*) buf1897);
+    rsMatrixLoadFrustum((rs_matrix4x4*) buf1898, *(float*)buf1899, *(float*)buf1900, *(float*)buf1901, *(float*)buf1902, *(float*)buf1903, *(float*)buf1904);
+    rsMatrixLoadIdentity((rs_matrix4x4*) buf1905);
+    rsMatrixLoadIdentity((rs_matrix3x3*) buf1906);
+    rsMatrixLoadIdentity((rs_matrix2x2*) buf1907);
+    rsMatrixLoadMultiply((rs_matrix4x4*) buf1908, (const rs_matrix4x4*) buf1909, (const rs_matrix4x4*) buf1910);
+    rsMatrixLoadMultiply((rs_matrix3x3*) buf1911, (const rs_matrix3x3*) buf1912, (const rs_matrix3x3*) buf1913);
+    rsMatrixLoadMultiply((rs_matrix2x2*) buf1914, (const rs_matrix2x2*) buf1915, (const rs_matrix2x2*) buf1916);
+    rsMatrixLoadOrtho((rs_matrix4x4*) buf1917, *(float*)buf1918, *(float*)buf1919, *(float*)buf1920, *(float*)buf1921, *(float*)buf1922, *(float*)buf1923);
+    rsMatrixLoadPerspective((rs_matrix4x4*) buf1924, *(float*)buf1925, *(float*)buf1926, *(float*)buf1927, *(float*)buf1928);
+    rsMatrixLoadRotate((rs_matrix4x4*) buf1929, *(float*)buf1930, *(float*)buf1931, *(float*)buf1932, *(float*)buf1933);
+    rsMatrixLoadScale((rs_matrix4x4*) buf1934, *(float*)buf1935, *(float*)buf1936, *(float*)buf1937);
+    rsMatrixLoadTranslate((rs_matrix4x4*) buf1938, *(float*)buf1939, *(float*)buf1940, *(float*)buf1941);
+    rsMatrixMultiply((rs_matrix4x4*) buf1942, (const rs_matrix4x4*) buf1943);
+    rsMatrixMultiply((rs_matrix3x3*) buf1944, (const rs_matrix3x3*) buf1945);
+    rsMatrixMultiply((rs_matrix2x2*) buf1946, (const rs_matrix2x2*) buf1947);
+    *(float4*)buf1948 = rsMatrixMultiply((rs_matrix4x4*) buf1949, *(float4*)buf1950);
+    *(float4*)buf1951 = rsMatrixMultiply((rs_matrix4x4*) buf1952, *(float3*)buf1953);
+    *(float4*)buf1954 = rsMatrixMultiply((rs_matrix4x4*) buf1955, *(float2*)buf1956);
+    *(float3*)buf1957 = rsMatrixMultiply((rs_matrix3x3*) buf1958, *(float3*)buf1959);
+    *(float3*)buf1960 = rsMatrixMultiply((rs_matrix3x3*) buf1961, *(float2*)buf1962);
+    *(float2*)buf1963 = rsMatrixMultiply((rs_matrix2x2*) buf1964, *(float2*)buf1965);
+    rsMatrixRotate((rs_matrix4x4*) buf1966, *(float*)buf1967, *(float*)buf1968, *(float*)buf1969, *(float*)buf1970);
+    rsMatrixScale((rs_matrix4x4*) buf1971, *(float*)buf1972, *(float*)buf1973, *(float*)buf1974);
+    rsMatrixSet((rs_matrix4x4*) buf1975, *(uint32_t*)buf1976, *(uint32_t*)buf1977, *(float*)buf1978);
+    rsMatrixSet((rs_matrix3x3*) buf1979, *(uint32_t*)buf1980, *(uint32_t*)buf1981, *(float*)buf1982);
+    rsMatrixSet((rs_matrix2x2*) buf1983, *(uint32_t*)buf1984, *(uint32_t*)buf1985, *(float*)buf1986);
+    rsMatrixTranslate((rs_matrix4x4*) buf1987, *(float*)buf1988, *(float*)buf1989, *(float*)buf1990);
+    rsMatrixTranspose((rs_matrix4x4*) buf1991);
+    rsMatrixTranspose((rs_matrix3x3*) buf1992);
+    rsMatrixTranspose((rs_matrix2x2*) buf1993);
+    *(uchar4*)buf1994 = rsPackColorTo8888(*(float*)buf1995, *(float*)buf1996, *(float*)buf1997);
+    *(uchar4*)buf1998 = rsPackColorTo8888(*(float*)buf1999, *(float*)buf2000, *(float*)buf2001, *(float*)buf2002);
+    *(uchar4*)buf2003 = rsPackColorTo8888(*(float3*)buf2004);
+    *(uchar4*)buf2005 = rsPackColorTo8888(*(float4*)buf2006);
+    rsQuaternionAdd((rs_quaternion*) buf2007, (const rs_quaternion*) buf2008);
+    rsQuaternionConjugate((rs_quaternion*) buf2009);
+    *(float*)buf2010 = rsQuaternionDot((const rs_quaternion*) buf2011, (const rs_quaternion*) buf2012);
+    rsQuaternionGetMatrixUnit((rs_matrix4x4*) buf2013, (const rs_quaternion*) buf2014);
+    rsQuaternionLoadRotate((rs_quaternion*) buf2015, *(float*)buf2016, *(float*)buf2017, *(float*)buf2018, *(float*)buf2019);
+    rsQuaternionLoadRotateUnit((rs_quaternion*) buf2020, *(float*)buf2021, *(float*)buf2022, *(float*)buf2023, *(float*)buf2024);
+    rsQuaternionMultiply((rs_quaternion*) buf2025, *(float*)buf2026);
+    rsQuaternionMultiply((rs_quaternion*) buf2027, (const rs_quaternion*) buf2028);
+    rsQuaternionNormalize((rs_quaternion*) buf2029);
+    rsQuaternionSet((rs_quaternion*) buf2030, *(float*)buf2031, *(float*)buf2032, *(float*)buf2033, *(float*)buf2034);
+    rsQuaternionSet((rs_quaternion*) buf2035, (const rs_quaternion*) buf2036);
+    rsQuaternionSlerp((rs_quaternion*) buf2037, (const rs_quaternion*) buf2038, (const rs_quaternion*) buf2039, *(float*)buf2040);
+    *(int*)buf2041 = rsRand(*(int*)buf2042);
+    *(int*)buf2043 = rsRand(*(int*)buf2044, *(int*)buf2045);
+    *(float*)buf2046 = rsRand(*(float*)buf2047);
+    *(float*)buf2048 = rsRand(*(float*)buf2049, *(float*)buf2050);
+    *(bool*)buf2051 = rsSendToClient(*(int*)buf2052);
+    *(bool*)buf2053 = rsSendToClient(*(int*)buf2054, (const void*) buf2055, *(uint*)buf2056);
+    rsSendToClientBlocking(*(int*)buf2057);
+    rsSendToClientBlocking(*(int*)buf2058, (const void*) buf2059, *(uint*)buf2060);
+    rsSetObject((rs_element*) buf2061, *(rs_element*)buf2062);
+    rsSetObject((rs_type*) buf2063, *(rs_type*)buf2064);
+    rsSetObject((rs_allocation*) buf2065, *(rs_allocation*)buf2066);
+    rsSetObject((rs_sampler*) buf2067, *(rs_sampler*)buf2068);
+    rsSetObject((rs_script*) buf2069, *(rs_script*)buf2070);
+#ifndef __LP64__
+    rsSetObject((rs_mesh*) buf2071, *(rs_mesh*)buf2072);
+    rsSetObject((rs_program_fragment*) buf2073, *(rs_program_fragment*)buf2074);
+    rsSetObject((rs_program_vertex*) buf2075, *(rs_program_vertex*)buf2076);
+    rsSetObject((rs_program_raster*) buf2077, *(rs_program_raster*)buf2078);
+    rsSetObject((rs_program_store*) buf2079, *(rs_program_store*)buf2080);
+    rsSetObject((rs_font*) buf2081, *(rs_font*)buf2082);
+#endif
+    *(rs_time_t*)buf2083 = rsTime((rs_time_t*) buf2084);
+    *(float4*)buf2085 = rsUnpackColor8888(*(uchar4*)buf2086);
+    *(int64_t*)buf2087 = rsUptimeMillis();
+    *(int64_t*)buf2088 = rsUptimeNanos();
+    *(float4*)buf2089 = rsYuvToRGBA_float4(*(uchar*)buf2090, *(uchar*)buf2091, *(uchar*)buf2092);
+    *(uchar4*)buf2093 = rsYuvToRGBA_uchar4(*(uchar*)buf2094, *(uchar*)buf2095, *(uchar*)buf2096);
+#ifndef __LP64__
+    rsgAllocationSyncAll(*(rs_allocation*)buf2097);
+#endif
+#ifndef __LP64__
+    rsgBindConstant(*(rs_program_fragment*)buf2098, *(uint*)buf2099, *(rs_allocation*)buf2100);
+#endif
+#ifndef __LP64__
+    rsgBindConstant(*(rs_program_vertex*)buf2101, *(uint*)buf2102, *(rs_allocation*)buf2103);
+#endif
+#ifndef __LP64__
+    rsgBindFont(*(rs_font*)buf2104);
+#endif
+#ifndef __LP64__
+    rsgBindProgramFragment(*(rs_program_fragment*)buf2105);
+#endif
+#ifndef __LP64__
+    rsgBindProgramRaster(*(rs_program_raster*)buf2106);
+#endif
+#ifndef __LP64__
+    rsgBindProgramStore(*(rs_program_store*)buf2107);
+#endif
+#ifndef __LP64__
+    rsgBindProgramVertex(*(rs_program_vertex*)buf2108);
+#endif
+#ifndef __LP64__
+    rsgBindSampler(*(rs_program_fragment*)buf2109, *(uint*)buf2110, *(rs_sampler*)buf2111);
+#endif
+#ifndef __LP64__
+    rsgBindTexture(*(rs_program_fragment*)buf2112, *(uint*)buf2113, *(rs_allocation*)buf2114);
+#endif
+#ifndef __LP64__
+    rsgClearColor(*(float*)buf2115, *(float*)buf2116, *(float*)buf2117, *(float*)buf2118);
+#endif
+#ifndef __LP64__
+    rsgClearDepth(*(float*)buf2119);
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf2120);
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf2121, *(uint*)buf2122);
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf2123, *(uint*)buf2124, *(uint*)buf2125, *(uint*)buf2126);
+#endif
+#ifndef __LP64__
+    rsgDrawQuad(*(float*)buf2127, *(float*)buf2128, *(float*)buf2129, *(float*)buf2130, *(float*)buf2131, *(float*)buf2132, *(float*)buf2133, *(float*)buf2134, *(float*)buf2135, *(float*)buf2136, *(float*)buf2137, *(float*)buf2138);
+#endif
+#ifndef __LP64__
+    rsgDrawQuadTexCoords(*(float*)buf2139, *(float*)buf2140, *(float*)buf2141, *(float*)buf2142, *(float*)buf2143, *(float*)buf2144, *(float*)buf2145, *(float*)buf2146, *(float*)buf2147, *(float*)buf2148, *(float*)buf2149, *(float*)buf2150, *(float*)buf2151, *(float*)buf2152, *(float*)buf2153, *(float*)buf2154, *(float*)buf2155, *(float*)buf2156, *(float*)buf2157, *(float*)buf2158);
+#endif
+#ifndef __LP64__
+    rsgDrawRect(*(float*)buf2159, *(float*)buf2160, *(float*)buf2161, *(float*)buf2162, *(float*)buf2163);
+#endif
+#ifndef __LP64__
+    rsgDrawSpriteScreenspace(*(float*)buf2164, *(float*)buf2165, *(float*)buf2166, *(float*)buf2167, *(float*)buf2168);
+#endif
+#ifndef __LP64__
+    rsgDrawText((const char*) buf2169, *(int*)buf2170, *(int*)buf2171);
+#endif
+#ifndef __LP64__
+    rsgDrawText(*(rs_allocation*)buf2172, *(int*)buf2173, *(int*)buf2174);
+#endif
+#ifndef __LP64__
+    rsgFontColor(*(float*)buf2175, *(float*)buf2176, *(float*)buf2177, *(float*)buf2178);
+#endif
+#ifndef __LP64__
+    *(uint*)buf2179 = rsgGetHeight();
+#endif
+#ifndef __LP64__
+    *(uint*)buf2180 = rsgGetWidth();
+#endif
+#ifndef __LP64__
+    rsgMeasureText((const char*) buf2181, (int*) buf2182, (int*) buf2183, (int*) buf2184, (int*) buf2185);
+#endif
+#ifndef __LP64__
+    rsgMeasureText(*(rs_allocation*)buf2186, (int*) buf2187, (int*) buf2188, (int*) buf2189, (int*) buf2190);
+#endif
+#ifndef __LP64__
+    rsgMeshComputeBoundingBox(*(rs_mesh*)buf2191, (float*) buf2192, (float*) buf2193, (float*) buf2194, (float*) buf2195, (float*) buf2196, (float*) buf2197);
+#endif
+#ifndef __LP64__
+    rsgMeshComputeBoundingBox(*(rs_mesh*)buf2198, (float3*) buf2199, (float3*) buf2200);
+#endif
+#ifndef __LP64__
+    rsgProgramFragmentConstantColor(*(rs_program_fragment*)buf2201, *(float*)buf2202, *(float*)buf2203, *(float*)buf2204, *(float*)buf2205);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexGetProjectionMatrix((rs_matrix4x4*) buf2206);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadModelMatrix((const rs_matrix4x4*) buf2207);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadProjectionMatrix((const rs_matrix4x4*) buf2208);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadTextureMatrix((const rs_matrix4x4*) buf2209);
+#endif
+    *(float*)buf2210 = rsqrt(*(float*)buf2211);
+    *(float2*)buf2212 = rsqrt(*(float2*)buf2213);
+    *(float3*)buf2214 = rsqrt(*(float3*)buf2215);
+    *(float4*)buf2216 = rsqrt(*(float4*)buf2217);
+    *(float*)buf2218 = sign(*(float*)buf2219);
+    *(float2*)buf2220 = sign(*(float2*)buf2221);
+    *(float3*)buf2222 = sign(*(float3*)buf2223);
+    *(float4*)buf2224 = sign(*(float4*)buf2225);
+    *(float*)buf2226 = sin(*(float*)buf2227);
+    *(float2*)buf2228 = sin(*(float2*)buf2229);
+    *(float3*)buf2230 = sin(*(float3*)buf2231);
+    *(float4*)buf2232 = sin(*(float4*)buf2233);
+    *(float*)buf2234 = sincos(*(float*)buf2235, (float*) buf2236);
+    *(float2*)buf2237 = sincos(*(float2*)buf2238, (float2*) buf2239);
+    *(float3*)buf2240 = sincos(*(float3*)buf2241, (float3*) buf2242);
+    *(float4*)buf2243 = sincos(*(float4*)buf2244, (float4*) buf2245);
+    *(float*)buf2246 = sinh(*(float*)buf2247);
+    *(float2*)buf2248 = sinh(*(float2*)buf2249);
+    *(float3*)buf2250 = sinh(*(float3*)buf2251);
+    *(float4*)buf2252 = sinh(*(float4*)buf2253);
+    *(float*)buf2254 = sinpi(*(float*)buf2255);
+    *(float2*)buf2256 = sinpi(*(float2*)buf2257);
+    *(float3*)buf2258 = sinpi(*(float3*)buf2259);
+    *(float4*)buf2260 = sinpi(*(float4*)buf2261);
+    *(float*)buf2262 = sqrt(*(float*)buf2263);
+    *(float2*)buf2264 = sqrt(*(float2*)buf2265);
+    *(float3*)buf2266 = sqrt(*(float3*)buf2267);
+    *(float4*)buf2268 = sqrt(*(float4*)buf2269);
+    *(float*)buf2270 = step(*(float*)buf2271, *(float*)buf2272);
+    *(float2*)buf2273 = step(*(float2*)buf2274, *(float2*)buf2275);
+    *(float3*)buf2276 = step(*(float3*)buf2277, *(float3*)buf2278);
+    *(float4*)buf2279 = step(*(float4*)buf2280, *(float4*)buf2281);
+    *(float2*)buf2282 = step(*(float2*)buf2283, *(float*)buf2284);
+    *(float3*)buf2285 = step(*(float3*)buf2286, *(float*)buf2287);
+    *(float4*)buf2288 = step(*(float4*)buf2289, *(float*)buf2290);
+    *(float*)buf2291 = tan(*(float*)buf2292);
+    *(float2*)buf2293 = tan(*(float2*)buf2294);
+    *(float3*)buf2295 = tan(*(float3*)buf2296);
+    *(float4*)buf2297 = tan(*(float4*)buf2298);
+    *(float*)buf2299 = tanh(*(float*)buf2300);
+    *(float2*)buf2301 = tanh(*(float2*)buf2302);
+    *(float3*)buf2303 = tanh(*(float3*)buf2304);
+    *(float4*)buf2305 = tanh(*(float4*)buf2306);
+    *(float*)buf2307 = tanpi(*(float*)buf2308);
+    *(float2*)buf2309 = tanpi(*(float2*)buf2310);
+    *(float3*)buf2311 = tanpi(*(float3*)buf2312);
+    *(float4*)buf2313 = tanpi(*(float4*)buf2314);
+    *(float*)buf2315 = tgamma(*(float*)buf2316);
+    *(float2*)buf2317 = tgamma(*(float2*)buf2318);
+    *(float3*)buf2319 = tgamma(*(float3*)buf2320);
+    *(float4*)buf2321 = tgamma(*(float4*)buf2322);
+    *(float*)buf2323 = trunc(*(float*)buf2324);
+    *(float2*)buf2325 = trunc(*(float2*)buf2326);
+    *(float3*)buf2327 = trunc(*(float3*)buf2328);
+    *(float4*)buf2329 = trunc(*(float4*)buf2330);
+}
diff --git a/slang/tests/P_all_api_13/stderr.txt.expect b/slang/tests/P_all_api_13/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_all_api_13/stderr.txt.expect
diff --git a/slang/tests/P_all_api_13/stdout.txt.expect b/slang/tests/P_all_api_13/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_all_api_13/stdout.txt.expect
diff --git a/slang/tests/P_all_api_14/all14.rs b/slang/tests/P_all_api_14/all14.rs
new file mode 100644
index 0000000..9e69767
--- /dev/null
+++ b/slang/tests/P_all_api_14/all14.rs
@@ -0,0 +1,3403 @@
+// -target-api 14 -Wno-deprecated-declarations
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Don't edit this file!  It is auto-generated by frameworks/rs/api/generate.sh.
+
+#pragma version(1)
+#pragma rs java_package_name(com.example.renderscript.testallapi)
+
+#include "rs_graphics.rsh"
+
+char buf0[200];
+char buf1[200];
+char buf2[200];
+char buf3[200];
+char buf4[200];
+char buf5[200];
+char buf6[200];
+char buf7[200];
+char buf8[200];
+char buf9[200];
+char buf10[200];
+char buf11[200];
+char buf12[200];
+char buf13[200];
+char buf14[200];
+char buf15[200];
+char buf16[200];
+char buf17[200];
+char buf18[200];
+char buf19[200];
+char buf20[200];
+char buf21[200];
+char buf22[200];
+char buf23[200];
+char buf24[200];
+char buf25[200];
+char buf26[200];
+char buf27[200];
+char buf28[200];
+char buf29[200];
+char buf30[200];
+char buf31[200];
+char buf32[200];
+char buf33[200];
+char buf34[200];
+char buf35[200];
+char buf36[200];
+char buf37[200];
+char buf38[200];
+char buf39[200];
+char buf40[200];
+char buf41[200];
+char buf42[200];
+char buf43[200];
+char buf44[200];
+char buf45[200];
+char buf46[200];
+char buf47[200];
+char buf48[200];
+char buf49[200];
+char buf50[200];
+char buf51[200];
+char buf52[200];
+char buf53[200];
+char buf54[200];
+char buf55[200];
+char buf56[200];
+char buf57[200];
+char buf58[200];
+char buf59[200];
+char buf60[200];
+char buf61[200];
+char buf62[200];
+char buf63[200];
+char buf64[200];
+char buf65[200];
+char buf66[200];
+char buf67[200];
+char buf68[200];
+char buf69[200];
+char buf70[200];
+char buf71[200];
+char buf72[200];
+char buf73[200];
+char buf74[200];
+char buf75[200];
+char buf76[200];
+char buf77[200];
+char buf78[200];
+char buf79[200];
+char buf80[200];
+char buf81[200];
+char buf82[200];
+char buf83[200];
+char buf84[200];
+char buf85[200];
+char buf86[200];
+char buf87[200];
+char buf88[200];
+char buf89[200];
+char buf90[200];
+char buf91[200];
+char buf92[200];
+char buf93[200];
+char buf94[200];
+char buf95[200];
+char buf96[200];
+char buf97[200];
+char buf98[200];
+char buf99[200];
+char buf100[200];
+char buf101[200];
+char buf102[200];
+char buf103[200];
+char buf104[200];
+char buf105[200];
+char buf106[200];
+char buf107[200];
+char buf108[200];
+char buf109[200];
+char buf110[200];
+char buf111[200];
+char buf112[200];
+char buf113[200];
+char buf114[200];
+char buf115[200];
+char buf116[200];
+char buf117[200];
+char buf118[200];
+char buf119[200];
+char buf120[200];
+char buf121[200];
+char buf122[200];
+char buf123[200];
+char buf124[200];
+char buf125[200];
+char buf126[200];
+char buf127[200];
+char buf128[200];
+char buf129[200];
+char buf130[200];
+char buf131[200];
+char buf132[200];
+char buf133[200];
+char buf134[200];
+char buf135[200];
+char buf136[200];
+char buf137[200];
+char buf138[200];
+char buf139[200];
+char buf140[200];
+char buf141[200];
+char buf142[200];
+char buf143[200];
+char buf144[200];
+char buf145[200];
+char buf146[200];
+char buf147[200];
+char buf148[200];
+char buf149[200];
+char buf150[200];
+char buf151[200];
+char buf152[200];
+char buf153[200];
+char buf154[200];
+char buf155[200];
+char buf156[200];
+char buf157[200];
+char buf158[200];
+char buf159[200];
+char buf160[200];
+char buf161[200];
+char buf162[200];
+char buf163[200];
+char buf164[200];
+char buf165[200];
+char buf166[200];
+char buf167[200];
+char buf168[200];
+char buf169[200];
+char buf170[200];
+char buf171[200];
+char buf172[200];
+char buf173[200];
+char buf174[200];
+char buf175[200];
+char buf176[200];
+char buf177[200];
+char buf178[200];
+char buf179[200];
+char buf180[200];
+char buf181[200];
+char buf182[200];
+char buf183[200];
+char buf184[200];
+char buf185[200];
+char buf186[200];
+char buf187[200];
+char buf188[200];
+char buf189[200];
+char buf190[200];
+char buf191[200];
+char buf192[200];
+char buf193[200];
+char buf194[200];
+char buf195[200];
+char buf196[200];
+char buf197[200];
+char buf198[200];
+char buf199[200];
+char buf200[200];
+char buf201[200];
+char buf202[200];
+char buf203[200];
+char buf204[200];
+char buf205[200];
+char buf206[200];
+char buf207[200];
+char buf208[200];
+char buf209[200];
+char buf210[200];
+char buf211[200];
+char buf212[200];
+char buf213[200];
+char buf214[200];
+char buf215[200];
+char buf216[200];
+char buf217[200];
+char buf218[200];
+char buf219[200];
+char buf220[200];
+char buf221[200];
+char buf222[200];
+char buf223[200];
+char buf224[200];
+char buf225[200];
+char buf226[200];
+char buf227[200];
+char buf228[200];
+char buf229[200];
+char buf230[200];
+char buf231[200];
+char buf232[200];
+char buf233[200];
+char buf234[200];
+char buf235[200];
+char buf236[200];
+char buf237[200];
+char buf238[200];
+char buf239[200];
+char buf240[200];
+char buf241[200];
+char buf242[200];
+char buf243[200];
+char buf244[200];
+char buf245[200];
+char buf246[200];
+char buf247[200];
+char buf248[200];
+char buf249[200];
+char buf250[200];
+char buf251[200];
+char buf252[200];
+char buf253[200];
+char buf254[200];
+char buf255[200];
+char buf256[200];
+char buf257[200];
+char buf258[200];
+char buf259[200];
+char buf260[200];
+char buf261[200];
+char buf262[200];
+char buf263[200];
+char buf264[200];
+char buf265[200];
+char buf266[200];
+char buf267[200];
+char buf268[200];
+char buf269[200];
+char buf270[200];
+char buf271[200];
+char buf272[200];
+char buf273[200];
+char buf274[200];
+char buf275[200];
+char buf276[200];
+char buf277[200];
+char buf278[200];
+char buf279[200];
+char buf280[200];
+char buf281[200];
+char buf282[200];
+char buf283[200];
+char buf284[200];
+char buf285[200];
+char buf286[200];
+char buf287[200];
+char buf288[200];
+char buf289[200];
+char buf290[200];
+char buf291[200];
+char buf292[200];
+char buf293[200];
+char buf294[200];
+char buf295[200];
+char buf296[200];
+char buf297[200];
+char buf298[200];
+char buf299[200];
+char buf300[200];
+char buf301[200];
+char buf302[200];
+char buf303[200];
+char buf304[200];
+char buf305[200];
+char buf306[200];
+char buf307[200];
+char buf308[200];
+char buf309[200];
+char buf310[200];
+char buf311[200];
+char buf312[200];
+char buf313[200];
+char buf314[200];
+char buf315[200];
+char buf316[200];
+char buf317[200];
+char buf318[200];
+char buf319[200];
+char buf320[200];
+char buf321[200];
+char buf322[200];
+char buf323[200];
+char buf324[200];
+char buf325[200];
+char buf326[200];
+char buf327[200];
+char buf328[200];
+char buf329[200];
+char buf330[200];
+char buf331[200];
+char buf332[200];
+char buf333[200];
+char buf334[200];
+char buf335[200];
+char buf336[200];
+char buf337[200];
+char buf338[200];
+char buf339[200];
+char buf340[200];
+char buf341[200];
+char buf342[200];
+char buf343[200];
+char buf344[200];
+char buf345[200];
+char buf346[200];
+char buf347[200];
+char buf348[200];
+char buf349[200];
+char buf350[200];
+char buf351[200];
+char buf352[200];
+char buf353[200];
+char buf354[200];
+char buf355[200];
+char buf356[200];
+char buf357[200];
+char buf358[200];
+char buf359[200];
+char buf360[200];
+char buf361[200];
+char buf362[200];
+char buf363[200];
+char buf364[200];
+char buf365[200];
+char buf366[200];
+char buf367[200];
+char buf368[200];
+char buf369[200];
+char buf370[200];
+char buf371[200];
+char buf372[200];
+char buf373[200];
+char buf374[200];
+char buf375[200];
+char buf376[200];
+char buf377[200];
+char buf378[200];
+char buf379[200];
+char buf380[200];
+char buf381[200];
+char buf382[200];
+char buf383[200];
+char buf384[200];
+char buf385[200];
+char buf386[200];
+char buf387[200];
+char buf388[200];
+char buf389[200];
+char buf390[200];
+char buf391[200];
+char buf392[200];
+char buf393[200];
+char buf394[200];
+char buf395[200];
+char buf396[200];
+char buf397[200];
+char buf398[200];
+char buf399[200];
+char buf400[200];
+char buf401[200];
+char buf402[200];
+char buf403[200];
+char buf404[200];
+char buf405[200];
+char buf406[200];
+char buf407[200];
+char buf408[200];
+char buf409[200];
+char buf410[200];
+char buf411[200];
+char buf412[200];
+char buf413[200];
+char buf414[200];
+char buf415[200];
+char buf416[200];
+char buf417[200];
+char buf418[200];
+char buf419[200];
+char buf420[200];
+char buf421[200];
+char buf422[200];
+char buf423[200];
+char buf424[200];
+char buf425[200];
+char buf426[200];
+char buf427[200];
+char buf428[200];
+char buf429[200];
+char buf430[200];
+char buf431[200];
+char buf432[200];
+char buf433[200];
+char buf434[200];
+char buf435[200];
+char buf436[200];
+char buf437[200];
+char buf438[200];
+char buf439[200];
+char buf440[200];
+char buf441[200];
+char buf442[200];
+char buf443[200];
+char buf444[200];
+char buf445[200];
+char buf446[200];
+char buf447[200];
+char buf448[200];
+char buf449[200];
+char buf450[200];
+char buf451[200];
+char buf452[200];
+char buf453[200];
+char buf454[200];
+char buf455[200];
+char buf456[200];
+char buf457[200];
+char buf458[200];
+char buf459[200];
+char buf460[200];
+char buf461[200];
+char buf462[200];
+char buf463[200];
+char buf464[200];
+char buf465[200];
+char buf466[200];
+char buf467[200];
+char buf468[200];
+char buf469[200];
+char buf470[200];
+char buf471[200];
+char buf472[200];
+char buf473[200];
+char buf474[200];
+char buf475[200];
+char buf476[200];
+char buf477[200];
+char buf478[200];
+char buf479[200];
+char buf480[200];
+char buf481[200];
+char buf482[200];
+char buf483[200];
+char buf484[200];
+char buf485[200];
+char buf486[200];
+char buf487[200];
+char buf488[200];
+char buf489[200];
+char buf490[200];
+char buf491[200];
+char buf492[200];
+char buf493[200];
+char buf494[200];
+char buf495[200];
+char buf496[200];
+char buf497[200];
+char buf498[200];
+char buf499[200];
+char buf500[200];
+char buf501[200];
+char buf502[200];
+char buf503[200];
+char buf504[200];
+char buf505[200];
+char buf506[200];
+char buf507[200];
+char buf508[200];
+char buf509[200];
+char buf510[200];
+char buf511[200];
+char buf512[200];
+char buf513[200];
+char buf514[200];
+char buf515[200];
+char buf516[200];
+char buf517[200];
+char buf518[200];
+char buf519[200];
+char buf520[200];
+char buf521[200];
+char buf522[200];
+char buf523[200];
+char buf524[200];
+char buf525[200];
+char buf526[200];
+char buf527[200];
+char buf528[200];
+char buf529[200];
+char buf530[200];
+char buf531[200];
+char buf532[200];
+char buf533[200];
+char buf534[200];
+char buf535[200];
+char buf536[200];
+char buf537[200];
+char buf538[200];
+char buf539[200];
+char buf540[200];
+char buf541[200];
+char buf542[200];
+char buf543[200];
+char buf544[200];
+char buf545[200];
+char buf546[200];
+char buf547[200];
+char buf548[200];
+char buf549[200];
+char buf550[200];
+char buf551[200];
+char buf552[200];
+char buf553[200];
+char buf554[200];
+char buf555[200];
+char buf556[200];
+char buf557[200];
+char buf558[200];
+char buf559[200];
+char buf560[200];
+char buf561[200];
+char buf562[200];
+char buf563[200];
+char buf564[200];
+char buf565[200];
+char buf566[200];
+char buf567[200];
+char buf568[200];
+char buf569[200];
+char buf570[200];
+char buf571[200];
+char buf572[200];
+char buf573[200];
+char buf574[200];
+char buf575[200];
+char buf576[200];
+char buf577[200];
+char buf578[200];
+char buf579[200];
+char buf580[200];
+char buf581[200];
+char buf582[200];
+char buf583[200];
+char buf584[200];
+char buf585[200];
+char buf586[200];
+char buf587[200];
+char buf588[200];
+char buf589[200];
+char buf590[200];
+char buf591[200];
+char buf592[200];
+char buf593[200];
+char buf594[200];
+char buf595[200];
+char buf596[200];
+char buf597[200];
+char buf598[200];
+char buf599[200];
+char buf600[200];
+char buf601[200];
+char buf602[200];
+char buf603[200];
+char buf604[200];
+char buf605[200];
+char buf606[200];
+char buf607[200];
+char buf608[200];
+char buf609[200];
+char buf610[200];
+char buf611[200];
+char buf612[200];
+char buf613[200];
+char buf614[200];
+char buf615[200];
+char buf616[200];
+char buf617[200];
+char buf618[200];
+char buf619[200];
+char buf620[200];
+char buf621[200];
+char buf622[200];
+char buf623[200];
+char buf624[200];
+char buf625[200];
+char buf626[200];
+char buf627[200];
+char buf628[200];
+char buf629[200];
+char buf630[200];
+char buf631[200];
+char buf632[200];
+char buf633[200];
+char buf634[200];
+char buf635[200];
+char buf636[200];
+char buf637[200];
+char buf638[200];
+char buf639[200];
+char buf640[200];
+char buf641[200];
+char buf642[200];
+char buf643[200];
+char buf644[200];
+char buf645[200];
+char buf646[200];
+char buf647[200];
+char buf648[200];
+char buf649[200];
+char buf650[200];
+char buf651[200];
+char buf652[200];
+char buf653[200];
+char buf654[200];
+char buf655[200];
+char buf656[200];
+char buf657[200];
+char buf658[200];
+char buf659[200];
+char buf660[200];
+char buf661[200];
+char buf662[200];
+char buf663[200];
+char buf664[200];
+char buf665[200];
+char buf666[200];
+char buf667[200];
+char buf668[200];
+char buf669[200];
+char buf670[200];
+char buf671[200];
+char buf672[200];
+char buf673[200];
+char buf674[200];
+char buf675[200];
+char buf676[200];
+char buf677[200];
+char buf678[200];
+char buf679[200];
+char buf680[200];
+char buf681[200];
+char buf682[200];
+char buf683[200];
+char buf684[200];
+char buf685[200];
+char buf686[200];
+char buf687[200];
+char buf688[200];
+char buf689[200];
+char buf690[200];
+char buf691[200];
+char buf692[200];
+char buf693[200];
+char buf694[200];
+char buf695[200];
+char buf696[200];
+char buf697[200];
+char buf698[200];
+char buf699[200];
+char buf700[200];
+char buf701[200];
+char buf702[200];
+char buf703[200];
+char buf704[200];
+char buf705[200];
+char buf706[200];
+char buf707[200];
+char buf708[200];
+char buf709[200];
+char buf710[200];
+char buf711[200];
+char buf712[200];
+char buf713[200];
+char buf714[200];
+char buf715[200];
+char buf716[200];
+char buf717[200];
+char buf718[200];
+char buf719[200];
+char buf720[200];
+char buf721[200];
+char buf722[200];
+char buf723[200];
+char buf724[200];
+char buf725[200];
+char buf726[200];
+char buf727[200];
+char buf728[200];
+char buf729[200];
+char buf730[200];
+char buf731[200];
+char buf732[200];
+char buf733[200];
+char buf734[200];
+char buf735[200];
+char buf736[200];
+char buf737[200];
+char buf738[200];
+char buf739[200];
+char buf740[200];
+char buf741[200];
+char buf742[200];
+char buf743[200];
+char buf744[200];
+char buf745[200];
+char buf746[200];
+char buf747[200];
+char buf748[200];
+char buf749[200];
+char buf750[200];
+char buf751[200];
+char buf752[200];
+char buf753[200];
+char buf754[200];
+char buf755[200];
+char buf756[200];
+char buf757[200];
+char buf758[200];
+char buf759[200];
+char buf760[200];
+char buf761[200];
+char buf762[200];
+char buf763[200];
+char buf764[200];
+char buf765[200];
+char buf766[200];
+char buf767[200];
+char buf768[200];
+char buf769[200];
+char buf770[200];
+char buf771[200];
+char buf772[200];
+char buf773[200];
+char buf774[200];
+char buf775[200];
+char buf776[200];
+char buf777[200];
+char buf778[200];
+char buf779[200];
+char buf780[200];
+char buf781[200];
+char buf782[200];
+char buf783[200];
+char buf784[200];
+char buf785[200];
+char buf786[200];
+char buf787[200];
+char buf788[200];
+char buf789[200];
+char buf790[200];
+char buf791[200];
+char buf792[200];
+char buf793[200];
+char buf794[200];
+char buf795[200];
+char buf796[200];
+char buf797[200];
+char buf798[200];
+char buf799[200];
+char buf800[200];
+char buf801[200];
+char buf802[200];
+char buf803[200];
+char buf804[200];
+char buf805[200];
+char buf806[200];
+char buf807[200];
+char buf808[200];
+char buf809[200];
+char buf810[200];
+char buf811[200];
+char buf812[200];
+char buf813[200];
+char buf814[200];
+char buf815[200];
+char buf816[200];
+char buf817[200];
+char buf818[200];
+char buf819[200];
+char buf820[200];
+char buf821[200];
+char buf822[200];
+char buf823[200];
+char buf824[200];
+char buf825[200];
+char buf826[200];
+char buf827[200];
+char buf828[200];
+char buf829[200];
+char buf830[200];
+char buf831[200];
+char buf832[200];
+char buf833[200];
+char buf834[200];
+char buf835[200];
+char buf836[200];
+char buf837[200];
+char buf838[200];
+char buf839[200];
+char buf840[200];
+char buf841[200];
+char buf842[200];
+char buf843[200];
+char buf844[200];
+char buf845[200];
+char buf846[200];
+char buf847[200];
+char buf848[200];
+char buf849[200];
+char buf850[200];
+char buf851[200];
+char buf852[200];
+char buf853[200];
+char buf854[200];
+char buf855[200];
+char buf856[200];
+char buf857[200];
+char buf858[200];
+char buf859[200];
+char buf860[200];
+char buf861[200];
+char buf862[200];
+char buf863[200];
+char buf864[200];
+char buf865[200];
+char buf866[200];
+char buf867[200];
+char buf868[200];
+char buf869[200];
+char buf870[200];
+char buf871[200];
+char buf872[200];
+char buf873[200];
+char buf874[200];
+char buf875[200];
+char buf876[200];
+char buf877[200];
+char buf878[200];
+char buf879[200];
+char buf880[200];
+char buf881[200];
+char buf882[200];
+char buf883[200];
+char buf884[200];
+char buf885[200];
+char buf886[200];
+char buf887[200];
+char buf888[200];
+char buf889[200];
+char buf890[200];
+char buf891[200];
+char buf892[200];
+char buf893[200];
+char buf894[200];
+char buf895[200];
+char buf896[200];
+char buf897[200];
+char buf898[200];
+char buf899[200];
+char buf900[200];
+char buf901[200];
+char buf902[200];
+char buf903[200];
+char buf904[200];
+char buf905[200];
+char buf906[200];
+char buf907[200];
+char buf908[200];
+char buf909[200];
+char buf910[200];
+char buf911[200];
+char buf912[200];
+char buf913[200];
+char buf914[200];
+char buf915[200];
+char buf916[200];
+char buf917[200];
+char buf918[200];
+char buf919[200];
+char buf920[200];
+char buf921[200];
+char buf922[200];
+char buf923[200];
+char buf924[200];
+char buf925[200];
+char buf926[200];
+char buf927[200];
+char buf928[200];
+char buf929[200];
+char buf930[200];
+char buf931[200];
+char buf932[200];
+char buf933[200];
+char buf934[200];
+char buf935[200];
+char buf936[200];
+char buf937[200];
+char buf938[200];
+char buf939[200];
+char buf940[200];
+char buf941[200];
+char buf942[200];
+char buf943[200];
+char buf944[200];
+char buf945[200];
+char buf946[200];
+char buf947[200];
+char buf948[200];
+char buf949[200];
+char buf950[200];
+char buf951[200];
+char buf952[200];
+char buf953[200];
+char buf954[200];
+char buf955[200];
+char buf956[200];
+char buf957[200];
+char buf958[200];
+char buf959[200];
+char buf960[200];
+char buf961[200];
+char buf962[200];
+char buf963[200];
+char buf964[200];
+char buf965[200];
+char buf966[200];
+char buf967[200];
+char buf968[200];
+char buf969[200];
+char buf970[200];
+char buf971[200];
+char buf972[200];
+char buf973[200];
+char buf974[200];
+char buf975[200];
+char buf976[200];
+char buf977[200];
+char buf978[200];
+char buf979[200];
+char buf980[200];
+char buf981[200];
+char buf982[200];
+char buf983[200];
+char buf984[200];
+char buf985[200];
+char buf986[200];
+char buf987[200];
+char buf988[200];
+char buf989[200];
+char buf990[200];
+char buf991[200];
+char buf992[200];
+char buf993[200];
+char buf994[200];
+char buf995[200];
+char buf996[200];
+char buf997[200];
+char buf998[200];
+char buf999[200];
+char buf1000[200];
+char buf1001[200];
+char buf1002[200];
+char buf1003[200];
+char buf1004[200];
+char buf1005[200];
+char buf1006[200];
+char buf1007[200];
+char buf1008[200];
+char buf1009[200];
+char buf1010[200];
+char buf1011[200];
+char buf1012[200];
+char buf1013[200];
+char buf1014[200];
+char buf1015[200];
+char buf1016[200];
+char buf1017[200];
+char buf1018[200];
+char buf1019[200];
+char buf1020[200];
+char buf1021[200];
+char buf1022[200];
+char buf1023[200];
+char buf1024[200];
+char buf1025[200];
+char buf1026[200];
+char buf1027[200];
+char buf1028[200];
+char buf1029[200];
+char buf1030[200];
+char buf1031[200];
+char buf1032[200];
+char buf1033[200];
+char buf1034[200];
+char buf1035[200];
+char buf1036[200];
+char buf1037[200];
+char buf1038[200];
+char buf1039[200];
+char buf1040[200];
+char buf1041[200];
+char buf1042[200];
+char buf1043[200];
+char buf1044[200];
+char buf1045[200];
+char buf1046[200];
+char buf1047[200];
+char buf1048[200];
+char buf1049[200];
+char buf1050[200];
+char buf1051[200];
+char buf1052[200];
+char buf1053[200];
+char buf1054[200];
+char buf1055[200];
+char buf1056[200];
+char buf1057[200];
+char buf1058[200];
+char buf1059[200];
+char buf1060[200];
+char buf1061[200];
+char buf1062[200];
+char buf1063[200];
+char buf1064[200];
+char buf1065[200];
+char buf1066[200];
+char buf1067[200];
+char buf1068[200];
+char buf1069[200];
+char buf1070[200];
+char buf1071[200];
+char buf1072[200];
+char buf1073[200];
+char buf1074[200];
+char buf1075[200];
+char buf1076[200];
+char buf1077[200];
+char buf1078[200];
+char buf1079[200];
+char buf1080[200];
+char buf1081[200];
+char buf1082[200];
+char buf1083[200];
+char buf1084[200];
+char buf1085[200];
+char buf1086[200];
+char buf1087[200];
+char buf1088[200];
+char buf1089[200];
+char buf1090[200];
+char buf1091[200];
+char buf1092[200];
+char buf1093[200];
+char buf1094[200];
+char buf1095[200];
+char buf1096[200];
+char buf1097[200];
+char buf1098[200];
+char buf1099[200];
+char buf1100[200];
+char buf1101[200];
+char buf1102[200];
+char buf1103[200];
+char buf1104[200];
+char buf1105[200];
+char buf1106[200];
+char buf1107[200];
+char buf1108[200];
+char buf1109[200];
+char buf1110[200];
+char buf1111[200];
+char buf1112[200];
+char buf1113[200];
+char buf1114[200];
+char buf1115[200];
+char buf1116[200];
+char buf1117[200];
+char buf1118[200];
+char buf1119[200];
+char buf1120[200];
+char buf1121[200];
+char buf1122[200];
+char buf1123[200];
+char buf1124[200];
+char buf1125[200];
+char buf1126[200];
+char buf1127[200];
+char buf1128[200];
+char buf1129[200];
+char buf1130[200];
+char buf1131[200];
+char buf1132[200];
+char buf1133[200];
+char buf1134[200];
+char buf1135[200];
+char buf1136[200];
+char buf1137[200];
+char buf1138[200];
+char buf1139[200];
+char buf1140[200];
+char buf1141[200];
+char buf1142[200];
+char buf1143[200];
+char buf1144[200];
+char buf1145[200];
+char buf1146[200];
+char buf1147[200];
+char buf1148[200];
+char buf1149[200];
+char buf1150[200];
+char buf1151[200];
+char buf1152[200];
+char buf1153[200];
+char buf1154[200];
+char buf1155[200];
+char buf1156[200];
+char buf1157[200];
+char buf1158[200];
+char buf1159[200];
+char buf1160[200];
+char buf1161[200];
+char buf1162[200];
+char buf1163[200];
+char buf1164[200];
+char buf1165[200];
+char buf1166[200];
+char buf1167[200];
+char buf1168[200];
+char buf1169[200];
+char buf1170[200];
+char buf1171[200];
+char buf1172[200];
+char buf1173[200];
+char buf1174[200];
+char buf1175[200];
+char buf1176[200];
+char buf1177[200];
+char buf1178[200];
+char buf1179[200];
+char buf1180[200];
+char buf1181[200];
+char buf1182[200];
+char buf1183[200];
+char buf1184[200];
+char buf1185[200];
+char buf1186[200];
+char buf1187[200];
+char buf1188[200];
+char buf1189[200];
+char buf1190[200];
+char buf1191[200];
+char buf1192[200];
+char buf1193[200];
+char buf1194[200];
+char buf1195[200];
+char buf1196[200];
+char buf1197[200];
+char buf1198[200];
+char buf1199[200];
+char buf1200[200];
+char buf1201[200];
+char buf1202[200];
+char buf1203[200];
+char buf1204[200];
+char buf1205[200];
+char buf1206[200];
+char buf1207[200];
+char buf1208[200];
+char buf1209[200];
+char buf1210[200];
+char buf1211[200];
+char buf1212[200];
+char buf1213[200];
+char buf1214[200];
+char buf1215[200];
+char buf1216[200];
+char buf1217[200];
+char buf1218[200];
+char buf1219[200];
+char buf1220[200];
+char buf1221[200];
+char buf1222[200];
+char buf1223[200];
+char buf1224[200];
+char buf1225[200];
+char buf1226[200];
+char buf1227[200];
+char buf1228[200];
+char buf1229[200];
+char buf1230[200];
+char buf1231[200];
+char buf1232[200];
+char buf1233[200];
+char buf1234[200];
+char buf1235[200];
+char buf1236[200];
+char buf1237[200];
+char buf1238[200];
+char buf1239[200];
+char buf1240[200];
+char buf1241[200];
+char buf1242[200];
+char buf1243[200];
+char buf1244[200];
+char buf1245[200];
+char buf1246[200];
+char buf1247[200];
+char buf1248[200];
+char buf1249[200];
+char buf1250[200];
+char buf1251[200];
+char buf1252[200];
+char buf1253[200];
+char buf1254[200];
+char buf1255[200];
+char buf1256[200];
+char buf1257[200];
+char buf1258[200];
+char buf1259[200];
+char buf1260[200];
+char buf1261[200];
+char buf1262[200];
+char buf1263[200];
+char buf1264[200];
+char buf1265[200];
+char buf1266[200];
+char buf1267[200];
+char buf1268[200];
+char buf1269[200];
+char buf1270[200];
+char buf1271[200];
+char buf1272[200];
+char buf1273[200];
+char buf1274[200];
+char buf1275[200];
+char buf1276[200];
+char buf1277[200];
+char buf1278[200];
+char buf1279[200];
+char buf1280[200];
+char buf1281[200];
+char buf1282[200];
+char buf1283[200];
+char buf1284[200];
+char buf1285[200];
+char buf1286[200];
+char buf1287[200];
+char buf1288[200];
+char buf1289[200];
+char buf1290[200];
+char buf1291[200];
+char buf1292[200];
+char buf1293[200];
+char buf1294[200];
+char buf1295[200];
+char buf1296[200];
+char buf1297[200];
+char buf1298[200];
+char buf1299[200];
+char buf1300[200];
+char buf1301[200];
+char buf1302[200];
+char buf1303[200];
+char buf1304[200];
+char buf1305[200];
+char buf1306[200];
+char buf1307[200];
+char buf1308[200];
+char buf1309[200];
+char buf1310[200];
+char buf1311[200];
+char buf1312[200];
+char buf1313[200];
+char buf1314[200];
+char buf1315[200];
+char buf1316[200];
+char buf1317[200];
+char buf1318[200];
+char buf1319[200];
+char buf1320[200];
+char buf1321[200];
+char buf1322[200];
+char buf1323[200];
+char buf1324[200];
+char buf1325[200];
+char buf1326[200];
+char buf1327[200];
+char buf1328[200];
+char buf1329[200];
+char buf1330[200];
+char buf1331[200];
+char buf1332[200];
+char buf1333[200];
+char buf1334[200];
+char buf1335[200];
+char buf1336[200];
+char buf1337[200];
+char buf1338[200];
+char buf1339[200];
+char buf1340[200];
+char buf1341[200];
+char buf1342[200];
+char buf1343[200];
+char buf1344[200];
+char buf1345[200];
+char buf1346[200];
+char buf1347[200];
+char buf1348[200];
+char buf1349[200];
+char buf1350[200];
+char buf1351[200];
+char buf1352[200];
+char buf1353[200];
+char buf1354[200];
+char buf1355[200];
+char buf1356[200];
+char buf1357[200];
+char buf1358[200];
+char buf1359[200];
+char buf1360[200];
+char buf1361[200];
+char buf1362[200];
+char buf1363[200];
+char buf1364[200];
+char buf1365[200];
+char buf1366[200];
+char buf1367[200];
+char buf1368[200];
+char buf1369[200];
+char buf1370[200];
+char buf1371[200];
+char buf1372[200];
+char buf1373[200];
+char buf1374[200];
+char buf1375[200];
+char buf1376[200];
+char buf1377[200];
+char buf1378[200];
+char buf1379[200];
+char buf1380[200];
+char buf1381[200];
+char buf1382[200];
+char buf1383[200];
+char buf1384[200];
+char buf1385[200];
+char buf1386[200];
+char buf1387[200];
+char buf1388[200];
+char buf1389[200];
+char buf1390[200];
+char buf1391[200];
+char buf1392[200];
+char buf1393[200];
+char buf1394[200];
+char buf1395[200];
+char buf1396[200];
+char buf1397[200];
+char buf1398[200];
+char buf1399[200];
+char buf1400[200];
+char buf1401[200];
+char buf1402[200];
+char buf1403[200];
+char buf1404[200];
+char buf1405[200];
+char buf1406[200];
+char buf1407[200];
+char buf1408[200];
+char buf1409[200];
+char buf1410[200];
+char buf1411[200];
+char buf1412[200];
+char buf1413[200];
+char buf1414[200];
+char buf1415[200];
+char buf1416[200];
+char buf1417[200];
+char buf1418[200];
+char buf1419[200];
+char buf1420[200];
+char buf1421[200];
+char buf1422[200];
+char buf1423[200];
+char buf1424[200];
+char buf1425[200];
+char buf1426[200];
+char buf1427[200];
+char buf1428[200];
+char buf1429[200];
+char buf1430[200];
+char buf1431[200];
+char buf1432[200];
+char buf1433[200];
+char buf1434[200];
+char buf1435[200];
+char buf1436[200];
+char buf1437[200];
+char buf1438[200];
+char buf1439[200];
+char buf1440[200];
+char buf1441[200];
+char buf1442[200];
+char buf1443[200];
+char buf1444[200];
+char buf1445[200];
+char buf1446[200];
+char buf1447[200];
+char buf1448[200];
+char buf1449[200];
+char buf1450[200];
+char buf1451[200];
+char buf1452[200];
+char buf1453[200];
+char buf1454[200];
+char buf1455[200];
+char buf1456[200];
+char buf1457[200];
+char buf1458[200];
+char buf1459[200];
+char buf1460[200];
+char buf1461[200];
+char buf1462[200];
+char buf1463[200];
+char buf1464[200];
+char buf1465[200];
+char buf1466[200];
+char buf1467[200];
+char buf1468[200];
+char buf1469[200];
+char buf1470[200];
+char buf1471[200];
+char buf1472[200];
+char buf1473[200];
+char buf1474[200];
+char buf1475[200];
+char buf1476[200];
+char buf1477[200];
+char buf1478[200];
+char buf1479[200];
+char buf1480[200];
+char buf1481[200];
+char buf1482[200];
+char buf1483[200];
+char buf1484[200];
+char buf1485[200];
+char buf1486[200];
+char buf1487[200];
+char buf1488[200];
+char buf1489[200];
+char buf1490[200];
+char buf1491[200];
+char buf1492[200];
+char buf1493[200];
+char buf1494[200];
+char buf1495[200];
+char buf1496[200];
+char buf1497[200];
+char buf1498[200];
+char buf1499[200];
+char buf1500[200];
+char buf1501[200];
+char buf1502[200];
+char buf1503[200];
+char buf1504[200];
+char buf1505[200];
+char buf1506[200];
+char buf1507[200];
+char buf1508[200];
+char buf1509[200];
+char buf1510[200];
+char buf1511[200];
+char buf1512[200];
+char buf1513[200];
+char buf1514[200];
+char buf1515[200];
+char buf1516[200];
+char buf1517[200];
+char buf1518[200];
+char buf1519[200];
+char buf1520[200];
+char buf1521[200];
+char buf1522[200];
+char buf1523[200];
+char buf1524[200];
+char buf1525[200];
+char buf1526[200];
+char buf1527[200];
+char buf1528[200];
+char buf1529[200];
+char buf1530[200];
+char buf1531[200];
+char buf1532[200];
+char buf1533[200];
+char buf1534[200];
+char buf1535[200];
+char buf1536[200];
+char buf1537[200];
+char buf1538[200];
+char buf1539[200];
+char buf1540[200];
+char buf1541[200];
+char buf1542[200];
+char buf1543[200];
+char buf1544[200];
+char buf1545[200];
+char buf1546[200];
+char buf1547[200];
+char buf1548[200];
+char buf1549[200];
+char buf1550[200];
+char buf1551[200];
+char buf1552[200];
+char buf1553[200];
+char buf1554[200];
+char buf1555[200];
+char buf1556[200];
+char buf1557[200];
+char buf1558[200];
+char buf1559[200];
+char buf1560[200];
+char buf1561[200];
+char buf1562[200];
+char buf1563[200];
+char buf1564[200];
+char buf1565[200];
+char buf1566[200];
+char buf1567[200];
+char buf1568[200];
+char buf1569[200];
+char buf1570[200];
+char buf1571[200];
+char buf1572[200];
+char buf1573[200];
+char buf1574[200];
+char buf1575[200];
+char buf1576[200];
+char buf1577[200];
+char buf1578[200];
+char buf1579[200];
+char buf1580[200];
+char buf1581[200];
+char buf1582[200];
+char buf1583[200];
+char buf1584[200];
+char buf1585[200];
+char buf1586[200];
+char buf1587[200];
+char buf1588[200];
+char buf1589[200];
+char buf1590[200];
+char buf1591[200];
+char buf1592[200];
+char buf1593[200];
+char buf1594[200];
+char buf1595[200];
+char buf1596[200];
+char buf1597[200];
+char buf1598[200];
+char buf1599[200];
+char buf1600[200];
+char buf1601[200];
+char buf1602[200];
+char buf1603[200];
+char buf1604[200];
+char buf1605[200];
+char buf1606[200];
+char buf1607[200];
+char buf1608[200];
+char buf1609[200];
+char buf1610[200];
+char buf1611[200];
+char buf1612[200];
+char buf1613[200];
+char buf1614[200];
+char buf1615[200];
+char buf1616[200];
+char buf1617[200];
+char buf1618[200];
+char buf1619[200];
+char buf1620[200];
+char buf1621[200];
+char buf1622[200];
+char buf1623[200];
+char buf1624[200];
+char buf1625[200];
+char buf1626[200];
+char buf1627[200];
+char buf1628[200];
+char buf1629[200];
+char buf1630[200];
+char buf1631[200];
+char buf1632[200];
+char buf1633[200];
+char buf1634[200];
+char buf1635[200];
+char buf1636[200];
+char buf1637[200];
+char buf1638[200];
+char buf1639[200];
+char buf1640[200];
+char buf1641[200];
+char buf1642[200];
+char buf1643[200];
+char buf1644[200];
+char buf1645[200];
+char buf1646[200];
+char buf1647[200];
+char buf1648[200];
+char buf1649[200];
+char buf1650[200];
+char buf1651[200];
+char buf1652[200];
+char buf1653[200];
+char buf1654[200];
+char buf1655[200];
+char buf1656[200];
+char buf1657[200];
+char buf1658[200];
+char buf1659[200];
+char buf1660[200];
+char buf1661[200];
+char buf1662[200];
+char buf1663[200];
+char buf1664[200];
+char buf1665[200];
+char buf1666[200];
+char buf1667[200];
+char buf1668[200];
+char buf1669[200];
+char buf1670[200];
+char buf1671[200];
+char buf1672[200];
+char buf1673[200];
+char buf1674[200];
+char buf1675[200];
+char buf1676[200];
+char buf1677[200];
+char buf1678[200];
+char buf1679[200];
+char buf1680[200];
+char buf1681[200];
+char buf1682[200];
+char buf1683[200];
+char buf1684[200];
+char buf1685[200];
+char buf1686[200];
+char buf1687[200];
+char buf1688[200];
+char buf1689[200];
+char buf1690[200];
+char buf1691[200];
+char buf1692[200];
+char buf1693[200];
+char buf1694[200];
+char buf1695[200];
+char buf1696[200];
+char buf1697[200];
+char buf1698[200];
+char buf1699[200];
+char buf1700[200];
+char buf1701[200];
+char buf1702[200];
+char buf1703[200];
+char buf1704[200];
+char buf1705[200];
+char buf1706[200];
+char buf1707[200];
+char buf1708[200];
+char buf1709[200];
+char buf1710[200];
+char buf1711[200];
+char buf1712[200];
+char buf1713[200];
+char buf1714[200];
+char buf1715[200];
+char buf1716[200];
+char buf1717[200];
+char buf1718[200];
+char buf1719[200];
+char buf1720[200];
+char buf1721[200];
+char buf1722[200];
+char buf1723[200];
+char buf1724[200];
+char buf1725[200];
+char buf1726[200];
+char buf1727[200];
+char buf1728[200];
+char buf1729[200];
+char buf1730[200];
+char buf1731[200];
+char buf1732[200];
+char buf1733[200];
+char buf1734[200];
+char buf1735[200];
+char buf1736[200];
+char buf1737[200];
+char buf1738[200];
+char buf1739[200];
+char buf1740[200];
+char buf1741[200];
+char buf1742[200];
+char buf1743[200];
+char buf1744[200];
+char buf1745[200];
+char buf1746[200];
+char buf1747[200];
+char buf1748[200];
+char buf1749[200];
+char buf1750[200];
+char buf1751[200];
+char buf1752[200];
+char buf1753[200];
+char buf1754[200];
+char buf1755[200];
+char buf1756[200];
+char buf1757[200];
+char buf1758[200];
+char buf1759[200];
+char buf1760[200];
+char buf1761[200];
+char buf1762[200];
+char buf1763[200];
+char buf1764[200];
+char buf1765[200];
+char buf1766[200];
+char buf1767[200];
+char buf1768[200];
+char buf1769[200];
+char buf1770[200];
+char buf1771[200];
+char buf1772[200];
+char buf1773[200];
+char buf1774[200];
+char buf1775[200];
+char buf1776[200];
+char buf1777[200];
+char buf1778[200];
+char buf1779[200];
+char buf1780[200];
+char buf1781[200];
+char buf1782[200];
+char buf1783[200];
+char buf1784[200];
+char buf1785[200];
+char buf1786[200];
+char buf1787[200];
+char buf1788[200];
+char buf1789[200];
+char buf1790[200];
+char buf1791[200];
+char buf1792[200];
+char buf1793[200];
+char buf1794[200];
+char buf1795[200];
+char buf1796[200];
+char buf1797[200];
+char buf1798[200];
+char buf1799[200];
+char buf1800[200];
+char buf1801[200];
+char buf1802[200];
+char buf1803[200];
+char buf1804[200];
+char buf1805[200];
+char buf1806[200];
+char buf1807[200];
+char buf1808[200];
+char buf1809[200];
+char buf1810[200];
+char buf1811[200];
+char buf1812[200];
+char buf1813[200];
+char buf1814[200];
+char buf1815[200];
+char buf1816[200];
+char buf1817[200];
+char buf1818[200];
+char buf1819[200];
+char buf1820[200];
+char buf1821[200];
+char buf1822[200];
+char buf1823[200];
+char buf1824[200];
+char buf1825[200];
+char buf1826[200];
+char buf1827[200];
+char buf1828[200];
+char buf1829[200];
+char buf1830[200];
+char buf1831[200];
+char buf1832[200];
+char buf1833[200];
+char buf1834[200];
+char buf1835[200];
+char buf1836[200];
+char buf1837[200];
+char buf1838[200];
+char buf1839[200];
+char buf1840[200];
+char buf1841[200];
+char buf1842[200];
+char buf1843[200];
+char buf1844[200];
+char buf1845[200];
+char buf1846[200];
+char buf1847[200];
+char buf1848[200];
+char buf1849[200];
+char buf1850[200];
+char buf1851[200];
+char buf1852[200];
+char buf1853[200];
+char buf1854[200];
+char buf1855[200];
+char buf1856[200];
+char buf1857[200];
+char buf1858[200];
+char buf1859[200];
+char buf1860[200];
+char buf1861[200];
+char buf1862[200];
+char buf1863[200];
+char buf1864[200];
+char buf1865[200];
+char buf1866[200];
+char buf1867[200];
+char buf1868[200];
+char buf1869[200];
+char buf1870[200];
+char buf1871[200];
+char buf1872[200];
+char buf1873[200];
+char buf1874[200];
+char buf1875[200];
+char buf1876[200];
+char buf1877[200];
+char buf1878[200];
+char buf1879[200];
+char buf1880[200];
+char buf1881[200];
+char buf1882[200];
+char buf1883[200];
+char buf1884[200];
+char buf1885[200];
+char buf1886[200];
+char buf1887[200];
+char buf1888[200];
+char buf1889[200];
+char buf1890[200];
+char buf1891[200];
+char buf1892[200];
+char buf1893[200];
+char buf1894[200];
+char buf1895[200];
+char buf1896[200];
+char buf1897[200];
+char buf1898[200];
+char buf1899[200];
+char buf1900[200];
+char buf1901[200];
+char buf1902[200];
+char buf1903[200];
+char buf1904[200];
+char buf1905[200];
+char buf1906[200];
+char buf1907[200];
+char buf1908[200];
+char buf1909[200];
+char buf1910[200];
+char buf1911[200];
+char buf1912[200];
+char buf1913[200];
+char buf1914[200];
+char buf1915[200];
+char buf1916[200];
+char buf1917[200];
+char buf1918[200];
+char buf1919[200];
+char buf1920[200];
+char buf1921[200];
+char buf1922[200];
+char buf1923[200];
+char buf1924[200];
+char buf1925[200];
+char buf1926[200];
+char buf1927[200];
+char buf1928[200];
+char buf1929[200];
+char buf1930[200];
+char buf1931[200];
+char buf1932[200];
+char buf1933[200];
+char buf1934[200];
+char buf1935[200];
+char buf1936[200];
+char buf1937[200];
+char buf1938[200];
+char buf1939[200];
+char buf1940[200];
+char buf1941[200];
+char buf1942[200];
+char buf1943[200];
+char buf1944[200];
+char buf1945[200];
+char buf1946[200];
+char buf1947[200];
+char buf1948[200];
+char buf1949[200];
+char buf1950[200];
+char buf1951[200];
+char buf1952[200];
+char buf1953[200];
+char buf1954[200];
+char buf1955[200];
+char buf1956[200];
+char buf1957[200];
+char buf1958[200];
+char buf1959[200];
+char buf1960[200];
+char buf1961[200];
+char buf1962[200];
+char buf1963[200];
+char buf1964[200];
+char buf1965[200];
+char buf1966[200];
+char buf1967[200];
+char buf1968[200];
+char buf1969[200];
+char buf1970[200];
+char buf1971[200];
+char buf1972[200];
+char buf1973[200];
+char buf1974[200];
+char buf1975[200];
+char buf1976[200];
+char buf1977[200];
+char buf1978[200];
+char buf1979[200];
+char buf1980[200];
+char buf1981[200];
+char buf1982[200];
+char buf1983[200];
+char buf1984[200];
+char buf1985[200];
+char buf1986[200];
+char buf1987[200];
+char buf1988[200];
+char buf1989[200];
+char buf1990[200];
+char buf1991[200];
+char buf1992[200];
+char buf1993[200];
+char buf1994[200];
+char buf1995[200];
+char buf1996[200];
+char buf1997[200];
+char buf1998[200];
+char buf1999[200];
+char buf2000[200];
+char buf2001[200];
+char buf2002[200];
+char buf2003[200];
+char buf2004[200];
+char buf2005[200];
+char buf2006[200];
+char buf2007[200];
+char buf2008[200];
+char buf2009[200];
+char buf2010[200];
+char buf2011[200];
+char buf2012[200];
+char buf2013[200];
+char buf2014[200];
+char buf2015[200];
+char buf2016[200];
+char buf2017[200];
+char buf2018[200];
+char buf2019[200];
+char buf2020[200];
+char buf2021[200];
+char buf2022[200];
+char buf2023[200];
+char buf2024[200];
+char buf2025[200];
+char buf2026[200];
+char buf2027[200];
+char buf2028[200];
+char buf2029[200];
+char buf2030[200];
+char buf2031[200];
+char buf2032[200];
+char buf2033[200];
+char buf2034[200];
+char buf2035[200];
+char buf2036[200];
+char buf2037[200];
+char buf2038[200];
+char buf2039[200];
+char buf2040[200];
+char buf2041[200];
+char buf2042[200];
+char buf2043[200];
+char buf2044[200];
+char buf2045[200];
+char buf2046[200];
+char buf2047[200];
+char buf2048[200];
+char buf2049[200];
+char buf2050[200];
+char buf2051[200];
+char buf2052[200];
+char buf2053[200];
+char buf2054[200];
+char buf2055[200];
+char buf2056[200];
+char buf2057[200];
+char buf2058[200];
+char buf2059[200];
+char buf2060[200];
+char buf2061[200];
+char buf2062[200];
+char buf2063[200];
+char buf2064[200];
+char buf2065[200];
+char buf2066[200];
+char buf2067[200];
+char buf2068[200];
+char buf2069[200];
+char buf2070[200];
+char buf2071[200];
+char buf2072[200];
+char buf2073[200];
+char buf2074[200];
+char buf2075[200];
+char buf2076[200];
+char buf2077[200];
+char buf2078[200];
+char buf2079[200];
+char buf2080[200];
+char buf2081[200];
+char buf2082[200];
+char buf2083[200];
+char buf2084[200];
+char buf2085[200];
+char buf2086[200];
+char buf2087[200];
+char buf2088[200];
+char buf2089[200];
+char buf2090[200];
+char buf2091[200];
+char buf2092[200];
+char buf2093[200];
+char buf2094[200];
+char buf2095[200];
+char buf2096[200];
+char buf2097[200];
+char buf2098[200];
+char buf2099[200];
+char buf2100[200];
+char buf2101[200];
+char buf2102[200];
+char buf2103[200];
+char buf2104[200];
+char buf2105[200];
+char buf2106[200];
+char buf2107[200];
+char buf2108[200];
+char buf2109[200];
+char buf2110[200];
+char buf2111[200];
+char buf2112[200];
+char buf2113[200];
+char buf2114[200];
+char buf2115[200];
+char buf2116[200];
+char buf2117[200];
+char buf2118[200];
+char buf2119[200];
+char buf2120[200];
+char buf2121[200];
+char buf2122[200];
+char buf2123[200];
+char buf2124[200];
+char buf2125[200];
+char buf2126[200];
+char buf2127[200];
+char buf2128[200];
+char buf2129[200];
+char buf2130[200];
+char buf2131[200];
+char buf2132[200];
+char buf2133[200];
+char buf2134[200];
+char buf2135[200];
+char buf2136[200];
+char buf2137[200];
+char buf2138[200];
+char buf2139[200];
+char buf2140[200];
+char buf2141[200];
+char buf2142[200];
+char buf2143[200];
+char buf2144[200];
+char buf2145[200];
+char buf2146[200];
+char buf2147[200];
+char buf2148[200];
+char buf2149[200];
+char buf2150[200];
+char buf2151[200];
+char buf2152[200];
+char buf2153[200];
+char buf2154[200];
+char buf2155[200];
+char buf2156[200];
+char buf2157[200];
+char buf2158[200];
+char buf2159[200];
+char buf2160[200];
+char buf2161[200];
+char buf2162[200];
+char buf2163[200];
+char buf2164[200];
+char buf2165[200];
+char buf2166[200];
+char buf2167[200];
+char buf2168[200];
+char buf2169[200];
+char buf2170[200];
+char buf2171[200];
+char buf2172[200];
+char buf2173[200];
+char buf2174[200];
+char buf2175[200];
+char buf2176[200];
+char buf2177[200];
+char buf2178[200];
+char buf2179[200];
+char buf2180[200];
+char buf2181[200];
+char buf2182[200];
+char buf2183[200];
+char buf2184[200];
+char buf2185[200];
+char buf2186[200];
+char buf2187[200];
+char buf2188[200];
+char buf2189[200];
+char buf2190[200];
+char buf2191[200];
+char buf2192[200];
+char buf2193[200];
+char buf2194[200];
+char buf2195[200];
+char buf2196[200];
+char buf2197[200];
+char buf2198[200];
+char buf2199[200];
+char buf2200[200];
+char buf2201[200];
+char buf2202[200];
+char buf2203[200];
+char buf2204[200];
+char buf2205[200];
+char buf2206[200];
+char buf2207[200];
+char buf2208[200];
+char buf2209[200];
+char buf2210[200];
+char buf2211[200];
+char buf2212[200];
+char buf2213[200];
+char buf2214[200];
+char buf2215[200];
+char buf2216[200];
+char buf2217[200];
+char buf2218[200];
+char buf2219[200];
+char buf2220[200];
+char buf2221[200];
+char buf2222[200];
+char buf2223[200];
+char buf2224[200];
+char buf2225[200];
+char buf2226[200];
+char buf2227[200];
+char buf2228[200];
+char buf2229[200];
+char buf2230[200];
+char buf2231[200];
+char buf2232[200];
+char buf2233[200];
+char buf2234[200];
+char buf2235[200];
+char buf2236[200];
+char buf2237[200];
+char buf2238[200];
+char buf2239[200];
+char buf2240[200];
+char buf2241[200];
+char buf2242[200];
+char buf2243[200];
+char buf2244[200];
+char buf2245[200];
+char buf2246[200];
+char buf2247[200];
+char buf2248[200];
+char buf2249[200];
+char buf2250[200];
+char buf2251[200];
+char buf2252[200];
+char buf2253[200];
+char buf2254[200];
+char buf2255[200];
+char buf2256[200];
+char buf2257[200];
+char buf2258[200];
+char buf2259[200];
+char buf2260[200];
+char buf2261[200];
+char buf2262[200];
+char buf2263[200];
+char buf2264[200];
+char buf2265[200];
+char buf2266[200];
+char buf2267[200];
+char buf2268[200];
+char buf2269[200];
+char buf2270[200];
+char buf2271[200];
+char buf2272[200];
+char buf2273[200];
+char buf2274[200];
+char buf2275[200];
+char buf2276[200];
+char buf2277[200];
+char buf2278[200];
+char buf2279[200];
+char buf2280[200];
+char buf2281[200];
+char buf2282[200];
+char buf2283[200];
+char buf2284[200];
+char buf2285[200];
+char buf2286[200];
+char buf2287[200];
+char buf2288[200];
+char buf2289[200];
+char buf2290[200];
+char buf2291[200];
+char buf2292[200];
+char buf2293[200];
+char buf2294[200];
+char buf2295[200];
+char buf2296[200];
+char buf2297[200];
+char buf2298[200];
+char buf2299[200];
+char buf2300[200];
+char buf2301[200];
+char buf2302[200];
+char buf2303[200];
+char buf2304[200];
+char buf2305[200];
+char buf2306[200];
+char buf2307[200];
+char buf2308[200];
+char buf2309[200];
+char buf2310[200];
+char buf2311[200];
+char buf2312[200];
+char buf2313[200];
+char buf2314[200];
+char buf2315[200];
+char buf2316[200];
+char buf2317[200];
+char buf2318[200];
+char buf2319[200];
+char buf2320[200];
+char buf2321[200];
+char buf2322[200];
+char buf2323[200];
+char buf2324[200];
+char buf2325[200];
+char buf2326[200];
+char buf2327[200];
+char buf2328[200];
+char buf2329[200];
+char buf2330[200];
+char buf2331[200];
+char buf2332[200];
+char buf2333[200];
+char buf2334[200];
+char buf2335[200];
+char buf2336[200];
+char buf2337[200];
+char buf2338[200];
+char buf2339[200];
+char buf2340[200];
+char buf2341[200];
+char buf2342[200];
+char buf2343[200];
+char buf2344[200];
+char buf2345[200];
+char buf2346[200];
+char buf2347[200];
+char buf2348[200];
+char buf2349[200];
+char buf2350[200];
+char buf2351[200];
+char buf2352[200];
+char buf2353[200];
+char buf2354[200];
+char buf2355[200];
+char buf2356[200];
+char buf2357[200];
+char buf2358[200];
+char buf2359[200];
+char buf2360[200];
+char buf2361[200];
+char buf2362[200];
+char buf2363[200];
+char buf2364[200];
+char buf2365[200];
+char buf2366[200];
+char buf2367[200];
+char buf2368[200];
+char buf2369[200];
+char buf2370[200];
+char buf2371[200];
+char buf2372[200];
+char buf2373[200];
+char buf2374[200];
+char buf2375[200];
+char buf2376[200];
+char buf2377[200];
+char buf2378[200];
+char buf2379[200];
+char buf2380[200];
+char buf2381[200];
+char buf2382[200];
+char buf2383[200];
+char buf2384[200];
+char buf2385[200];
+char buf2386[200];
+char buf2387[200];
+char buf2388[200];
+char buf2389[200];
+char buf2390[200];
+char buf2391[200];
+char buf2392[200];
+char buf2393[200];
+char buf2394[200];
+char buf2395[200];
+char buf2396[200];
+char buf2397[200];
+char buf2398[200];
+char buf2399[200];
+char buf2400[200];
+
+void root(const int* in) {
+    *(uchar*)buf0 = abs(*(char*)buf1);
+    *(uchar2*)buf2 = abs(*(char2*)buf3);
+    *(uchar3*)buf4 = abs(*(char3*)buf5);
+    *(uchar4*)buf6 = abs(*(char4*)buf7);
+    *(ushort*)buf8 = abs(*(short*)buf9);
+    *(ushort2*)buf10 = abs(*(short2*)buf11);
+    *(ushort3*)buf12 = abs(*(short3*)buf13);
+    *(ushort4*)buf14 = abs(*(short4*)buf15);
+    *(uint*)buf16 = abs(*(int*)buf17);
+    *(uint2*)buf18 = abs(*(int2*)buf19);
+    *(uint3*)buf20 = abs(*(int3*)buf21);
+    *(uint4*)buf22 = abs(*(int4*)buf23);
+    *(float*)buf24 = acos(*(float*)buf25);
+    *(float2*)buf26 = acos(*(float2*)buf27);
+    *(float3*)buf28 = acos(*(float3*)buf29);
+    *(float4*)buf30 = acos(*(float4*)buf31);
+    *(float*)buf32 = acosh(*(float*)buf33);
+    *(float2*)buf34 = acosh(*(float2*)buf35);
+    *(float3*)buf36 = acosh(*(float3*)buf37);
+    *(float4*)buf38 = acosh(*(float4*)buf39);
+    *(float*)buf40 = acospi(*(float*)buf41);
+    *(float2*)buf42 = acospi(*(float2*)buf43);
+    *(float3*)buf44 = acospi(*(float3*)buf45);
+    *(float4*)buf46 = acospi(*(float4*)buf47);
+    *(float*)buf48 = asin(*(float*)buf49);
+    *(float2*)buf50 = asin(*(float2*)buf51);
+    *(float3*)buf52 = asin(*(float3*)buf53);
+    *(float4*)buf54 = asin(*(float4*)buf55);
+    *(float*)buf56 = asinh(*(float*)buf57);
+    *(float2*)buf58 = asinh(*(float2*)buf59);
+    *(float3*)buf60 = asinh(*(float3*)buf61);
+    *(float4*)buf62 = asinh(*(float4*)buf63);
+    *(float*)buf64 = asinpi(*(float*)buf65);
+    *(float2*)buf66 = asinpi(*(float2*)buf67);
+    *(float3*)buf68 = asinpi(*(float3*)buf69);
+    *(float4*)buf70 = asinpi(*(float4*)buf71);
+    *(float*)buf72 = atan(*(float*)buf73);
+    *(float2*)buf74 = atan(*(float2*)buf75);
+    *(float3*)buf76 = atan(*(float3*)buf77);
+    *(float4*)buf78 = atan(*(float4*)buf79);
+    *(float*)buf80 = atan2(*(float*)buf81, *(float*)buf82);
+    *(float2*)buf83 = atan2(*(float2*)buf84, *(float2*)buf85);
+    *(float3*)buf86 = atan2(*(float3*)buf87, *(float3*)buf88);
+    *(float4*)buf89 = atan2(*(float4*)buf90, *(float4*)buf91);
+    *(float*)buf92 = atan2pi(*(float*)buf93, *(float*)buf94);
+    *(float2*)buf95 = atan2pi(*(float2*)buf96, *(float2*)buf97);
+    *(float3*)buf98 = atan2pi(*(float3*)buf99, *(float3*)buf100);
+    *(float4*)buf101 = atan2pi(*(float4*)buf102, *(float4*)buf103);
+    *(float*)buf104 = atanh(*(float*)buf105);
+    *(float2*)buf106 = atanh(*(float2*)buf107);
+    *(float3*)buf108 = atanh(*(float3*)buf109);
+    *(float4*)buf110 = atanh(*(float4*)buf111);
+    *(float*)buf112 = atanpi(*(float*)buf113);
+    *(float2*)buf114 = atanpi(*(float2*)buf115);
+    *(float3*)buf116 = atanpi(*(float3*)buf117);
+    *(float4*)buf118 = atanpi(*(float4*)buf119);
+    *(float*)buf120 = cbrt(*(float*)buf121);
+    *(float2*)buf122 = cbrt(*(float2*)buf123);
+    *(float3*)buf124 = cbrt(*(float3*)buf125);
+    *(float4*)buf126 = cbrt(*(float4*)buf127);
+    *(float*)buf128 = ceil(*(float*)buf129);
+    *(float2*)buf130 = ceil(*(float2*)buf131);
+    *(float3*)buf132 = ceil(*(float3*)buf133);
+    *(float4*)buf134 = ceil(*(float4*)buf135);
+    *(float*)buf136 = clamp(*(float*)buf137, *(float*)buf138, *(float*)buf139);
+    *(float2*)buf140 = clamp(*(float2*)buf141, *(float2*)buf142, *(float2*)buf143);
+    *(float3*)buf144 = clamp(*(float3*)buf145, *(float3*)buf146, *(float3*)buf147);
+    *(float4*)buf148 = clamp(*(float4*)buf149, *(float4*)buf150, *(float4*)buf151);
+    *(float2*)buf152 = clamp(*(float2*)buf153, *(float*)buf154, *(float*)buf155);
+    *(float3*)buf156 = clamp(*(float3*)buf157, *(float*)buf158, *(float*)buf159);
+    *(float4*)buf160 = clamp(*(float4*)buf161, *(float*)buf162, *(float*)buf163);
+    *(char*)buf164 = clz(*(char*)buf165);
+    *(char2*)buf166 = clz(*(char2*)buf167);
+    *(char3*)buf168 = clz(*(char3*)buf169);
+    *(char4*)buf170 = clz(*(char4*)buf171);
+    *(uchar*)buf172 = clz(*(uchar*)buf173);
+    *(uchar2*)buf174 = clz(*(uchar2*)buf175);
+    *(uchar3*)buf176 = clz(*(uchar3*)buf177);
+    *(uchar4*)buf178 = clz(*(uchar4*)buf179);
+    *(short*)buf180 = clz(*(short*)buf181);
+    *(short2*)buf182 = clz(*(short2*)buf183);
+    *(short3*)buf184 = clz(*(short3*)buf185);
+    *(short4*)buf186 = clz(*(short4*)buf187);
+    *(ushort*)buf188 = clz(*(ushort*)buf189);
+    *(ushort2*)buf190 = clz(*(ushort2*)buf191);
+    *(ushort3*)buf192 = clz(*(ushort3*)buf193);
+    *(ushort4*)buf194 = clz(*(ushort4*)buf195);
+    *(int*)buf196 = clz(*(int*)buf197);
+    *(int2*)buf198 = clz(*(int2*)buf199);
+    *(int3*)buf200 = clz(*(int3*)buf201);
+    *(int4*)buf202 = clz(*(int4*)buf203);
+    *(uint*)buf204 = clz(*(uint*)buf205);
+    *(uint2*)buf206 = clz(*(uint2*)buf207);
+    *(uint3*)buf208 = clz(*(uint3*)buf209);
+    *(uint4*)buf210 = clz(*(uint4*)buf211);
+    *(float2*)buf212 = convert_float2(*(float2*)buf213);
+    *(float3*)buf214 = convert_float3(*(float3*)buf215);
+    *(float4*)buf216 = convert_float4(*(float4*)buf217);
+    *(float2*)buf218 = convert_float2(*(char2*)buf219);
+    *(float3*)buf220 = convert_float3(*(char3*)buf221);
+    *(float4*)buf222 = convert_float4(*(char4*)buf223);
+    *(float2*)buf224 = convert_float2(*(uchar2*)buf225);
+    *(float3*)buf226 = convert_float3(*(uchar3*)buf227);
+    *(float4*)buf228 = convert_float4(*(uchar4*)buf229);
+    *(float2*)buf230 = convert_float2(*(short2*)buf231);
+    *(float3*)buf232 = convert_float3(*(short3*)buf233);
+    *(float4*)buf234 = convert_float4(*(short4*)buf235);
+    *(float2*)buf236 = convert_float2(*(ushort2*)buf237);
+    *(float3*)buf238 = convert_float3(*(ushort3*)buf239);
+    *(float4*)buf240 = convert_float4(*(ushort4*)buf241);
+    *(float2*)buf242 = convert_float2(*(int2*)buf243);
+    *(float3*)buf244 = convert_float3(*(int3*)buf245);
+    *(float4*)buf246 = convert_float4(*(int4*)buf247);
+    *(float2*)buf248 = convert_float2(*(uint2*)buf249);
+    *(float3*)buf250 = convert_float3(*(uint3*)buf251);
+    *(float4*)buf252 = convert_float4(*(uint4*)buf253);
+    *(char2*)buf254 = convert_char2(*(float2*)buf255);
+    *(char3*)buf256 = convert_char3(*(float3*)buf257);
+    *(char4*)buf258 = convert_char4(*(float4*)buf259);
+    *(char2*)buf260 = convert_char2(*(char2*)buf261);
+    *(char3*)buf262 = convert_char3(*(char3*)buf263);
+    *(char4*)buf264 = convert_char4(*(char4*)buf265);
+    *(char2*)buf266 = convert_char2(*(uchar2*)buf267);
+    *(char3*)buf268 = convert_char3(*(uchar3*)buf269);
+    *(char4*)buf270 = convert_char4(*(uchar4*)buf271);
+    *(char2*)buf272 = convert_char2(*(short2*)buf273);
+    *(char3*)buf274 = convert_char3(*(short3*)buf275);
+    *(char4*)buf276 = convert_char4(*(short4*)buf277);
+    *(char2*)buf278 = convert_char2(*(ushort2*)buf279);
+    *(char3*)buf280 = convert_char3(*(ushort3*)buf281);
+    *(char4*)buf282 = convert_char4(*(ushort4*)buf283);
+    *(char2*)buf284 = convert_char2(*(int2*)buf285);
+    *(char3*)buf286 = convert_char3(*(int3*)buf287);
+    *(char4*)buf288 = convert_char4(*(int4*)buf289);
+    *(char2*)buf290 = convert_char2(*(uint2*)buf291);
+    *(char3*)buf292 = convert_char3(*(uint3*)buf293);
+    *(char4*)buf294 = convert_char4(*(uint4*)buf295);
+    *(uchar2*)buf296 = convert_uchar2(*(float2*)buf297);
+    *(uchar3*)buf298 = convert_uchar3(*(float3*)buf299);
+    *(uchar4*)buf300 = convert_uchar4(*(float4*)buf301);
+    *(uchar2*)buf302 = convert_uchar2(*(char2*)buf303);
+    *(uchar3*)buf304 = convert_uchar3(*(char3*)buf305);
+    *(uchar4*)buf306 = convert_uchar4(*(char4*)buf307);
+    *(uchar2*)buf308 = convert_uchar2(*(uchar2*)buf309);
+    *(uchar3*)buf310 = convert_uchar3(*(uchar3*)buf311);
+    *(uchar4*)buf312 = convert_uchar4(*(uchar4*)buf313);
+    *(uchar2*)buf314 = convert_uchar2(*(short2*)buf315);
+    *(uchar3*)buf316 = convert_uchar3(*(short3*)buf317);
+    *(uchar4*)buf318 = convert_uchar4(*(short4*)buf319);
+    *(uchar2*)buf320 = convert_uchar2(*(ushort2*)buf321);
+    *(uchar3*)buf322 = convert_uchar3(*(ushort3*)buf323);
+    *(uchar4*)buf324 = convert_uchar4(*(ushort4*)buf325);
+    *(uchar2*)buf326 = convert_uchar2(*(int2*)buf327);
+    *(uchar3*)buf328 = convert_uchar3(*(int3*)buf329);
+    *(uchar4*)buf330 = convert_uchar4(*(int4*)buf331);
+    *(uchar2*)buf332 = convert_uchar2(*(uint2*)buf333);
+    *(uchar3*)buf334 = convert_uchar3(*(uint3*)buf335);
+    *(uchar4*)buf336 = convert_uchar4(*(uint4*)buf337);
+    *(short2*)buf338 = convert_short2(*(float2*)buf339);
+    *(short3*)buf340 = convert_short3(*(float3*)buf341);
+    *(short4*)buf342 = convert_short4(*(float4*)buf343);
+    *(short2*)buf344 = convert_short2(*(char2*)buf345);
+    *(short3*)buf346 = convert_short3(*(char3*)buf347);
+    *(short4*)buf348 = convert_short4(*(char4*)buf349);
+    *(short2*)buf350 = convert_short2(*(uchar2*)buf351);
+    *(short3*)buf352 = convert_short3(*(uchar3*)buf353);
+    *(short4*)buf354 = convert_short4(*(uchar4*)buf355);
+    *(short2*)buf356 = convert_short2(*(short2*)buf357);
+    *(short3*)buf358 = convert_short3(*(short3*)buf359);
+    *(short4*)buf360 = convert_short4(*(short4*)buf361);
+    *(short2*)buf362 = convert_short2(*(ushort2*)buf363);
+    *(short3*)buf364 = convert_short3(*(ushort3*)buf365);
+    *(short4*)buf366 = convert_short4(*(ushort4*)buf367);
+    *(short2*)buf368 = convert_short2(*(int2*)buf369);
+    *(short3*)buf370 = convert_short3(*(int3*)buf371);
+    *(short4*)buf372 = convert_short4(*(int4*)buf373);
+    *(short2*)buf374 = convert_short2(*(uint2*)buf375);
+    *(short3*)buf376 = convert_short3(*(uint3*)buf377);
+    *(short4*)buf378 = convert_short4(*(uint4*)buf379);
+    *(ushort2*)buf380 = convert_ushort2(*(float2*)buf381);
+    *(ushort3*)buf382 = convert_ushort3(*(float3*)buf383);
+    *(ushort4*)buf384 = convert_ushort4(*(float4*)buf385);
+    *(ushort2*)buf386 = convert_ushort2(*(char2*)buf387);
+    *(ushort3*)buf388 = convert_ushort3(*(char3*)buf389);
+    *(ushort4*)buf390 = convert_ushort4(*(char4*)buf391);
+    *(ushort2*)buf392 = convert_ushort2(*(uchar2*)buf393);
+    *(ushort3*)buf394 = convert_ushort3(*(uchar3*)buf395);
+    *(ushort4*)buf396 = convert_ushort4(*(uchar4*)buf397);
+    *(ushort2*)buf398 = convert_ushort2(*(short2*)buf399);
+    *(ushort3*)buf400 = convert_ushort3(*(short3*)buf401);
+    *(ushort4*)buf402 = convert_ushort4(*(short4*)buf403);
+    *(ushort2*)buf404 = convert_ushort2(*(ushort2*)buf405);
+    *(ushort3*)buf406 = convert_ushort3(*(ushort3*)buf407);
+    *(ushort4*)buf408 = convert_ushort4(*(ushort4*)buf409);
+    *(ushort2*)buf410 = convert_ushort2(*(int2*)buf411);
+    *(ushort3*)buf412 = convert_ushort3(*(int3*)buf413);
+    *(ushort4*)buf414 = convert_ushort4(*(int4*)buf415);
+    *(ushort2*)buf416 = convert_ushort2(*(uint2*)buf417);
+    *(ushort3*)buf418 = convert_ushort3(*(uint3*)buf419);
+    *(ushort4*)buf420 = convert_ushort4(*(uint4*)buf421);
+    *(int2*)buf422 = convert_int2(*(float2*)buf423);
+    *(int3*)buf424 = convert_int3(*(float3*)buf425);
+    *(int4*)buf426 = convert_int4(*(float4*)buf427);
+    *(int2*)buf428 = convert_int2(*(char2*)buf429);
+    *(int3*)buf430 = convert_int3(*(char3*)buf431);
+    *(int4*)buf432 = convert_int4(*(char4*)buf433);
+    *(int2*)buf434 = convert_int2(*(uchar2*)buf435);
+    *(int3*)buf436 = convert_int3(*(uchar3*)buf437);
+    *(int4*)buf438 = convert_int4(*(uchar4*)buf439);
+    *(int2*)buf440 = convert_int2(*(short2*)buf441);
+    *(int3*)buf442 = convert_int3(*(short3*)buf443);
+    *(int4*)buf444 = convert_int4(*(short4*)buf445);
+    *(int2*)buf446 = convert_int2(*(ushort2*)buf447);
+    *(int3*)buf448 = convert_int3(*(ushort3*)buf449);
+    *(int4*)buf450 = convert_int4(*(ushort4*)buf451);
+    *(int2*)buf452 = convert_int2(*(int2*)buf453);
+    *(int3*)buf454 = convert_int3(*(int3*)buf455);
+    *(int4*)buf456 = convert_int4(*(int4*)buf457);
+    *(int2*)buf458 = convert_int2(*(uint2*)buf459);
+    *(int3*)buf460 = convert_int3(*(uint3*)buf461);
+    *(int4*)buf462 = convert_int4(*(uint4*)buf463);
+    *(uint2*)buf464 = convert_uint2(*(float2*)buf465);
+    *(uint3*)buf466 = convert_uint3(*(float3*)buf467);
+    *(uint4*)buf468 = convert_uint4(*(float4*)buf469);
+    *(uint2*)buf470 = convert_uint2(*(char2*)buf471);
+    *(uint3*)buf472 = convert_uint3(*(char3*)buf473);
+    *(uint4*)buf474 = convert_uint4(*(char4*)buf475);
+    *(uint2*)buf476 = convert_uint2(*(uchar2*)buf477);
+    *(uint3*)buf478 = convert_uint3(*(uchar3*)buf479);
+    *(uint4*)buf480 = convert_uint4(*(uchar4*)buf481);
+    *(uint2*)buf482 = convert_uint2(*(short2*)buf483);
+    *(uint3*)buf484 = convert_uint3(*(short3*)buf485);
+    *(uint4*)buf486 = convert_uint4(*(short4*)buf487);
+    *(uint2*)buf488 = convert_uint2(*(ushort2*)buf489);
+    *(uint3*)buf490 = convert_uint3(*(ushort3*)buf491);
+    *(uint4*)buf492 = convert_uint4(*(ushort4*)buf493);
+    *(uint2*)buf494 = convert_uint2(*(int2*)buf495);
+    *(uint3*)buf496 = convert_uint3(*(int3*)buf497);
+    *(uint4*)buf498 = convert_uint4(*(int4*)buf499);
+    *(uint2*)buf500 = convert_uint2(*(uint2*)buf501);
+    *(uint3*)buf502 = convert_uint3(*(uint3*)buf503);
+    *(uint4*)buf504 = convert_uint4(*(uint4*)buf505);
+    *(float*)buf506 = copysign(*(float*)buf507, *(float*)buf508);
+    *(float2*)buf509 = copysign(*(float2*)buf510, *(float2*)buf511);
+    *(float3*)buf512 = copysign(*(float3*)buf513, *(float3*)buf514);
+    *(float4*)buf515 = copysign(*(float4*)buf516, *(float4*)buf517);
+    *(float*)buf518 = cos(*(float*)buf519);
+    *(float2*)buf520 = cos(*(float2*)buf521);
+    *(float3*)buf522 = cos(*(float3*)buf523);
+    *(float4*)buf524 = cos(*(float4*)buf525);
+    *(float*)buf526 = cosh(*(float*)buf527);
+    *(float2*)buf528 = cosh(*(float2*)buf529);
+    *(float3*)buf530 = cosh(*(float3*)buf531);
+    *(float4*)buf532 = cosh(*(float4*)buf533);
+    *(float*)buf534 = cospi(*(float*)buf535);
+    *(float2*)buf536 = cospi(*(float2*)buf537);
+    *(float3*)buf538 = cospi(*(float3*)buf539);
+    *(float4*)buf540 = cospi(*(float4*)buf541);
+    *(float3*)buf542 = cross(*(float3*)buf543, *(float3*)buf544);
+    *(float4*)buf545 = cross(*(float4*)buf546, *(float4*)buf547);
+    *(float*)buf548 = degrees(*(float*)buf549);
+    *(float2*)buf550 = degrees(*(float2*)buf551);
+    *(float3*)buf552 = degrees(*(float3*)buf553);
+    *(float4*)buf554 = degrees(*(float4*)buf555);
+    *(float*)buf556 = distance(*(float*)buf557, *(float*)buf558);
+    *(float*)buf559 = distance(*(float2*)buf560, *(float2*)buf561);
+    *(float*)buf562 = distance(*(float3*)buf563, *(float3*)buf564);
+    *(float*)buf565 = distance(*(float4*)buf566, *(float4*)buf567);
+    *(float*)buf568 = dot(*(float*)buf569, *(float*)buf570);
+    *(float*)buf571 = dot(*(float2*)buf572, *(float2*)buf573);
+    *(float*)buf574 = dot(*(float3*)buf575, *(float3*)buf576);
+    *(float*)buf577 = dot(*(float4*)buf578, *(float4*)buf579);
+    *(float*)buf580 = erf(*(float*)buf581);
+    *(float2*)buf582 = erf(*(float2*)buf583);
+    *(float3*)buf584 = erf(*(float3*)buf585);
+    *(float4*)buf586 = erf(*(float4*)buf587);
+    *(float*)buf588 = erfc(*(float*)buf589);
+    *(float2*)buf590 = erfc(*(float2*)buf591);
+    *(float3*)buf592 = erfc(*(float3*)buf593);
+    *(float4*)buf594 = erfc(*(float4*)buf595);
+    *(float*)buf596 = exp(*(float*)buf597);
+    *(float2*)buf598 = exp(*(float2*)buf599);
+    *(float3*)buf600 = exp(*(float3*)buf601);
+    *(float4*)buf602 = exp(*(float4*)buf603);
+    *(float*)buf604 = exp10(*(float*)buf605);
+    *(float2*)buf606 = exp10(*(float2*)buf607);
+    *(float3*)buf608 = exp10(*(float3*)buf609);
+    *(float4*)buf610 = exp10(*(float4*)buf611);
+    *(float*)buf612 = exp2(*(float*)buf613);
+    *(float2*)buf614 = exp2(*(float2*)buf615);
+    *(float3*)buf616 = exp2(*(float3*)buf617);
+    *(float4*)buf618 = exp2(*(float4*)buf619);
+    *(float*)buf620 = expm1(*(float*)buf621);
+    *(float2*)buf622 = expm1(*(float2*)buf623);
+    *(float3*)buf624 = expm1(*(float3*)buf625);
+    *(float4*)buf626 = expm1(*(float4*)buf627);
+    *(float*)buf628 = fabs(*(float*)buf629);
+    *(float2*)buf630 = fabs(*(float2*)buf631);
+    *(float3*)buf632 = fabs(*(float3*)buf633);
+    *(float4*)buf634 = fabs(*(float4*)buf635);
+    *(float*)buf636 = fdim(*(float*)buf637, *(float*)buf638);
+    *(float2*)buf639 = fdim(*(float2*)buf640, *(float2*)buf641);
+    *(float3*)buf642 = fdim(*(float3*)buf643, *(float3*)buf644);
+    *(float4*)buf645 = fdim(*(float4*)buf646, *(float4*)buf647);
+    *(float*)buf648 = floor(*(float*)buf649);
+    *(float2*)buf650 = floor(*(float2*)buf651);
+    *(float3*)buf652 = floor(*(float3*)buf653);
+    *(float4*)buf654 = floor(*(float4*)buf655);
+    *(float*)buf656 = fma(*(float*)buf657, *(float*)buf658, *(float*)buf659);
+    *(float2*)buf660 = fma(*(float2*)buf661, *(float2*)buf662, *(float2*)buf663);
+    *(float3*)buf664 = fma(*(float3*)buf665, *(float3*)buf666, *(float3*)buf667);
+    *(float4*)buf668 = fma(*(float4*)buf669, *(float4*)buf670, *(float4*)buf671);
+    *(float*)buf672 = fmax(*(float*)buf673, *(float*)buf674);
+    *(float2*)buf675 = fmax(*(float2*)buf676, *(float2*)buf677);
+    *(float3*)buf678 = fmax(*(float3*)buf679, *(float3*)buf680);
+    *(float4*)buf681 = fmax(*(float4*)buf682, *(float4*)buf683);
+    *(float2*)buf684 = fmax(*(float2*)buf685, *(float*)buf686);
+    *(float3*)buf687 = fmax(*(float3*)buf688, *(float*)buf689);
+    *(float4*)buf690 = fmax(*(float4*)buf691, *(float*)buf692);
+    *(float*)buf693 = fmin(*(float*)buf694, *(float*)buf695);
+    *(float2*)buf696 = fmin(*(float2*)buf697, *(float2*)buf698);
+    *(float3*)buf699 = fmin(*(float3*)buf700, *(float3*)buf701);
+    *(float4*)buf702 = fmin(*(float4*)buf703, *(float4*)buf704);
+    *(float2*)buf705 = fmin(*(float2*)buf706, *(float*)buf707);
+    *(float3*)buf708 = fmin(*(float3*)buf709, *(float*)buf710);
+    *(float4*)buf711 = fmin(*(float4*)buf712, *(float*)buf713);
+    *(float*)buf714 = fmod(*(float*)buf715, *(float*)buf716);
+    *(float2*)buf717 = fmod(*(float2*)buf718, *(float2*)buf719);
+    *(float3*)buf720 = fmod(*(float3*)buf721, *(float3*)buf722);
+    *(float4*)buf723 = fmod(*(float4*)buf724, *(float4*)buf725);
+    *(float*)buf726 = fract(*(float*)buf727, (float*) buf728);
+    *(float2*)buf729 = fract(*(float2*)buf730, (float2*) buf731);
+    *(float3*)buf732 = fract(*(float3*)buf733, (float3*) buf734);
+    *(float4*)buf735 = fract(*(float4*)buf736, (float4*) buf737);
+    *(float*)buf738 = fract(*(float*)buf739);
+    *(float2*)buf740 = fract(*(float2*)buf741);
+    *(float3*)buf742 = fract(*(float3*)buf743);
+    *(float4*)buf744 = fract(*(float4*)buf745);
+    *(float*)buf746 = frexp(*(float*)buf747, (int*) buf748);
+    *(float2*)buf749 = frexp(*(float2*)buf750, (int2*) buf751);
+    *(float3*)buf752 = frexp(*(float3*)buf753, (int3*) buf754);
+    *(float4*)buf755 = frexp(*(float4*)buf756, (int4*) buf757);
+    *(float*)buf758 = hypot(*(float*)buf759, *(float*)buf760);
+    *(float2*)buf761 = hypot(*(float2*)buf762, *(float2*)buf763);
+    *(float3*)buf764 = hypot(*(float3*)buf765, *(float3*)buf766);
+    *(float4*)buf767 = hypot(*(float4*)buf768, *(float4*)buf769);
+    *(int*)buf770 = ilogb(*(float*)buf771);
+    *(int2*)buf772 = ilogb(*(float2*)buf773);
+    *(int3*)buf774 = ilogb(*(float3*)buf775);
+    *(int4*)buf776 = ilogb(*(float4*)buf777);
+    *(float*)buf778 = ldexp(*(float*)buf779, *(int*)buf780);
+    *(float2*)buf781 = ldexp(*(float2*)buf782, *(int2*)buf783);
+    *(float3*)buf784 = ldexp(*(float3*)buf785, *(int3*)buf786);
+    *(float4*)buf787 = ldexp(*(float4*)buf788, *(int4*)buf789);
+    *(float2*)buf790 = ldexp(*(float2*)buf791, *(int*)buf792);
+    *(float3*)buf793 = ldexp(*(float3*)buf794, *(int*)buf795);
+    *(float4*)buf796 = ldexp(*(float4*)buf797, *(int*)buf798);
+    *(float*)buf799 = length(*(float*)buf800);
+    *(float*)buf801 = length(*(float2*)buf802);
+    *(float*)buf803 = length(*(float3*)buf804);
+    *(float*)buf805 = length(*(float4*)buf806);
+    *(float*)buf807 = lgamma(*(float*)buf808);
+    *(float2*)buf809 = lgamma(*(float2*)buf810);
+    *(float3*)buf811 = lgamma(*(float3*)buf812);
+    *(float4*)buf813 = lgamma(*(float4*)buf814);
+    *(float*)buf815 = lgamma(*(float*)buf816, (int*) buf817);
+    *(float2*)buf818 = lgamma(*(float2*)buf819, (int2*) buf820);
+    *(float3*)buf821 = lgamma(*(float3*)buf822, (int3*) buf823);
+    *(float4*)buf824 = lgamma(*(float4*)buf825, (int4*) buf826);
+    *(float*)buf827 = log(*(float*)buf828);
+    *(float2*)buf829 = log(*(float2*)buf830);
+    *(float3*)buf831 = log(*(float3*)buf832);
+    *(float4*)buf833 = log(*(float4*)buf834);
+    *(float*)buf835 = log10(*(float*)buf836);
+    *(float2*)buf837 = log10(*(float2*)buf838);
+    *(float3*)buf839 = log10(*(float3*)buf840);
+    *(float4*)buf841 = log10(*(float4*)buf842);
+    *(float*)buf843 = log1p(*(float*)buf844);
+    *(float2*)buf845 = log1p(*(float2*)buf846);
+    *(float3*)buf847 = log1p(*(float3*)buf848);
+    *(float4*)buf849 = log1p(*(float4*)buf850);
+    *(float*)buf851 = log2(*(float*)buf852);
+    *(float2*)buf853 = log2(*(float2*)buf854);
+    *(float3*)buf855 = log2(*(float3*)buf856);
+    *(float4*)buf857 = log2(*(float4*)buf858);
+    *(float*)buf859 = logb(*(float*)buf860);
+    *(float2*)buf861 = logb(*(float2*)buf862);
+    *(float3*)buf863 = logb(*(float3*)buf864);
+    *(float4*)buf865 = logb(*(float4*)buf866);
+    *(float*)buf867 = mad(*(float*)buf868, *(float*)buf869, *(float*)buf870);
+    *(float2*)buf871 = mad(*(float2*)buf872, *(float2*)buf873, *(float2*)buf874);
+    *(float3*)buf875 = mad(*(float3*)buf876, *(float3*)buf877, *(float3*)buf878);
+    *(float4*)buf879 = mad(*(float4*)buf880, *(float4*)buf881, *(float4*)buf882);
+    *(float*)buf883 = max(*(float*)buf884, *(float*)buf885);
+    *(float2*)buf886 = max(*(float2*)buf887, *(float2*)buf888);
+    *(float3*)buf889 = max(*(float3*)buf890, *(float3*)buf891);
+    *(float4*)buf892 = max(*(float4*)buf893, *(float4*)buf894);
+    *(float2*)buf895 = max(*(float2*)buf896, *(float*)buf897);
+    *(float3*)buf898 = max(*(float3*)buf899, *(float*)buf900);
+    *(float4*)buf901 = max(*(float4*)buf902, *(float*)buf903);
+    *(char*)buf904 = max(*(char*)buf905, *(char*)buf906);
+    *(uchar*)buf907 = max(*(uchar*)buf908, *(uchar*)buf909);
+    *(short*)buf910 = max(*(short*)buf911, *(short*)buf912);
+    *(ushort*)buf913 = max(*(ushort*)buf914, *(ushort*)buf915);
+    *(int*)buf916 = max(*(int*)buf917, *(int*)buf918);
+    *(uint*)buf919 = max(*(uint*)buf920, *(uint*)buf921);
+    *(char2*)buf922 = max(*(char2*)buf923, *(char2*)buf924);
+    *(uchar2*)buf925 = max(*(uchar2*)buf926, *(uchar2*)buf927);
+    *(short2*)buf928 = max(*(short2*)buf929, *(short2*)buf930);
+    *(ushort2*)buf931 = max(*(ushort2*)buf932, *(ushort2*)buf933);
+    *(int2*)buf934 = max(*(int2*)buf935, *(int2*)buf936);
+    *(uint2*)buf937 = max(*(uint2*)buf938, *(uint2*)buf939);
+    *(char3*)buf940 = max(*(char3*)buf941, *(char3*)buf942);
+    *(uchar3*)buf943 = max(*(uchar3*)buf944, *(uchar3*)buf945);
+    *(short3*)buf946 = max(*(short3*)buf947, *(short3*)buf948);
+    *(ushort3*)buf949 = max(*(ushort3*)buf950, *(ushort3*)buf951);
+    *(int3*)buf952 = max(*(int3*)buf953, *(int3*)buf954);
+    *(uint3*)buf955 = max(*(uint3*)buf956, *(uint3*)buf957);
+    *(char4*)buf958 = max(*(char4*)buf959, *(char4*)buf960);
+    *(uchar4*)buf961 = max(*(uchar4*)buf962, *(uchar4*)buf963);
+    *(short4*)buf964 = max(*(short4*)buf965, *(short4*)buf966);
+    *(ushort4*)buf967 = max(*(ushort4*)buf968, *(ushort4*)buf969);
+    *(int4*)buf970 = max(*(int4*)buf971, *(int4*)buf972);
+    *(uint4*)buf973 = max(*(uint4*)buf974, *(uint4*)buf975);
+    *(float*)buf976 = min(*(float*)buf977, *(float*)buf978);
+    *(float2*)buf979 = min(*(float2*)buf980, *(float2*)buf981);
+    *(float3*)buf982 = min(*(float3*)buf983, *(float3*)buf984);
+    *(float4*)buf985 = min(*(float4*)buf986, *(float4*)buf987);
+    *(float2*)buf988 = min(*(float2*)buf989, *(float*)buf990);
+    *(float3*)buf991 = min(*(float3*)buf992, *(float*)buf993);
+    *(float4*)buf994 = min(*(float4*)buf995, *(float*)buf996);
+    *(char*)buf997 = min(*(char*)buf998, *(char*)buf999);
+    *(uchar*)buf1000 = min(*(uchar*)buf1001, *(uchar*)buf1002);
+    *(short*)buf1003 = min(*(short*)buf1004, *(short*)buf1005);
+    *(ushort*)buf1006 = min(*(ushort*)buf1007, *(ushort*)buf1008);
+    *(int*)buf1009 = min(*(int*)buf1010, *(int*)buf1011);
+    *(uint*)buf1012 = min(*(uint*)buf1013, *(uint*)buf1014);
+    *(char2*)buf1015 = min(*(char2*)buf1016, *(char2*)buf1017);
+    *(uchar2*)buf1018 = min(*(uchar2*)buf1019, *(uchar2*)buf1020);
+    *(short2*)buf1021 = min(*(short2*)buf1022, *(short2*)buf1023);
+    *(ushort2*)buf1024 = min(*(ushort2*)buf1025, *(ushort2*)buf1026);
+    *(int2*)buf1027 = min(*(int2*)buf1028, *(int2*)buf1029);
+    *(uint2*)buf1030 = min(*(uint2*)buf1031, *(uint2*)buf1032);
+    *(char3*)buf1033 = min(*(char3*)buf1034, *(char3*)buf1035);
+    *(uchar3*)buf1036 = min(*(uchar3*)buf1037, *(uchar3*)buf1038);
+    *(short3*)buf1039 = min(*(short3*)buf1040, *(short3*)buf1041);
+    *(ushort3*)buf1042 = min(*(ushort3*)buf1043, *(ushort3*)buf1044);
+    *(int3*)buf1045 = min(*(int3*)buf1046, *(int3*)buf1047);
+    *(uint3*)buf1048 = min(*(uint3*)buf1049, *(uint3*)buf1050);
+    *(char4*)buf1051 = min(*(char4*)buf1052, *(char4*)buf1053);
+    *(uchar4*)buf1054 = min(*(uchar4*)buf1055, *(uchar4*)buf1056);
+    *(short4*)buf1057 = min(*(short4*)buf1058, *(short4*)buf1059);
+    *(ushort4*)buf1060 = min(*(ushort4*)buf1061, *(ushort4*)buf1062);
+    *(int4*)buf1063 = min(*(int4*)buf1064, *(int4*)buf1065);
+    *(uint4*)buf1066 = min(*(uint4*)buf1067, *(uint4*)buf1068);
+    *(float*)buf1069 = mix(*(float*)buf1070, *(float*)buf1071, *(float*)buf1072);
+    *(float2*)buf1073 = mix(*(float2*)buf1074, *(float2*)buf1075, *(float2*)buf1076);
+    *(float3*)buf1077 = mix(*(float3*)buf1078, *(float3*)buf1079, *(float3*)buf1080);
+    *(float4*)buf1081 = mix(*(float4*)buf1082, *(float4*)buf1083, *(float4*)buf1084);
+    *(float2*)buf1085 = mix(*(float2*)buf1086, *(float2*)buf1087, *(float*)buf1088);
+    *(float3*)buf1089 = mix(*(float3*)buf1090, *(float3*)buf1091, *(float*)buf1092);
+    *(float4*)buf1093 = mix(*(float4*)buf1094, *(float4*)buf1095, *(float*)buf1096);
+    *(float*)buf1097 = modf(*(float*)buf1098, (float*) buf1099);
+    *(float2*)buf1100 = modf(*(float2*)buf1101, (float2*) buf1102);
+    *(float3*)buf1103 = modf(*(float3*)buf1104, (float3*) buf1105);
+    *(float4*)buf1106 = modf(*(float4*)buf1107, (float4*) buf1108);
+    *(float*)buf1109 = nan(*(uint*)buf1110);
+    *(float*)buf1111 = nextafter(*(float*)buf1112, *(float*)buf1113);
+    *(float2*)buf1114 = nextafter(*(float2*)buf1115, *(float2*)buf1116);
+    *(float3*)buf1117 = nextafter(*(float3*)buf1118, *(float3*)buf1119);
+    *(float4*)buf1120 = nextafter(*(float4*)buf1121, *(float4*)buf1122);
+    *(float*)buf1123 = normalize(*(float*)buf1124);
+    *(float2*)buf1125 = normalize(*(float2*)buf1126);
+    *(float3*)buf1127 = normalize(*(float3*)buf1128);
+    *(float4*)buf1129 = normalize(*(float4*)buf1130);
+    *(float*)buf1131 = pow(*(float*)buf1132, *(float*)buf1133);
+    *(float2*)buf1134 = pow(*(float2*)buf1135, *(float2*)buf1136);
+    *(float3*)buf1137 = pow(*(float3*)buf1138, *(float3*)buf1139);
+    *(float4*)buf1140 = pow(*(float4*)buf1141, *(float4*)buf1142);
+    *(float*)buf1143 = pown(*(float*)buf1144, *(int*)buf1145);
+    *(float2*)buf1146 = pown(*(float2*)buf1147, *(int2*)buf1148);
+    *(float3*)buf1149 = pown(*(float3*)buf1150, *(int3*)buf1151);
+    *(float4*)buf1152 = pown(*(float4*)buf1153, *(int4*)buf1154);
+    *(float*)buf1155 = powr(*(float*)buf1156, *(float*)buf1157);
+    *(float2*)buf1158 = powr(*(float2*)buf1159, *(float2*)buf1160);
+    *(float3*)buf1161 = powr(*(float3*)buf1162, *(float3*)buf1163);
+    *(float4*)buf1164 = powr(*(float4*)buf1165, *(float4*)buf1166);
+    *(float*)buf1167 = radians(*(float*)buf1168);
+    *(float2*)buf1169 = radians(*(float2*)buf1170);
+    *(float3*)buf1171 = radians(*(float3*)buf1172);
+    *(float4*)buf1173 = radians(*(float4*)buf1174);
+    *(float*)buf1175 = remainder(*(float*)buf1176, *(float*)buf1177);
+    *(float2*)buf1178 = remainder(*(float2*)buf1179, *(float2*)buf1180);
+    *(float3*)buf1181 = remainder(*(float3*)buf1182, *(float3*)buf1183);
+    *(float4*)buf1184 = remainder(*(float4*)buf1185, *(float4*)buf1186);
+    *(float*)buf1187 = remquo(*(float*)buf1188, *(float*)buf1189, (int*) buf1190);
+    *(float2*)buf1191 = remquo(*(float2*)buf1192, *(float2*)buf1193, (int2*) buf1194);
+    *(float3*)buf1195 = remquo(*(float3*)buf1196, *(float3*)buf1197, (int3*) buf1198);
+    *(float4*)buf1199 = remquo(*(float4*)buf1200, *(float4*)buf1201, (int4*) buf1202);
+    *(float*)buf1203 = rint(*(float*)buf1204);
+    *(float2*)buf1205 = rint(*(float2*)buf1206);
+    *(float3*)buf1207 = rint(*(float3*)buf1208);
+    *(float4*)buf1209 = rint(*(float4*)buf1210);
+    *(float*)buf1211 = rootn(*(float*)buf1212, *(int*)buf1213);
+    *(float2*)buf1214 = rootn(*(float2*)buf1215, *(int2*)buf1216);
+    *(float3*)buf1217 = rootn(*(float3*)buf1218, *(int3*)buf1219);
+    *(float4*)buf1220 = rootn(*(float4*)buf1221, *(int4*)buf1222);
+    *(float*)buf1223 = round(*(float*)buf1224);
+    *(float2*)buf1225 = round(*(float2*)buf1226);
+    *(float3*)buf1227 = round(*(float3*)buf1228);
+    *(float4*)buf1229 = round(*(float4*)buf1230);
+    rsAllocationCopy1DRange(*(rs_allocation*)buf1231, *(uint32_t*)buf1232, *(uint32_t*)buf1233, *(uint32_t*)buf1234, *(rs_allocation*)buf1235, *(uint32_t*)buf1236, *(uint32_t*)buf1237);
+    rsAllocationCopy2DRange(*(rs_allocation*)buf1238, *(uint32_t*)buf1239, *(uint32_t*)buf1240, *(uint32_t*)buf1241, *(rs_allocation_cubemap_face*)buf1242, *(uint32_t*)buf1243, *(uint32_t*)buf1244, *(rs_allocation*)buf1245, *(uint32_t*)buf1246, *(uint32_t*)buf1247, *(uint32_t*)buf1248, *(rs_allocation_cubemap_face*)buf1249);
+    *(uint32_t*)buf1250 = rsAllocationGetDimFaces(*(rs_allocation*)buf1251);
+    *(uint32_t*)buf1252 = rsAllocationGetDimLOD(*(rs_allocation*)buf1253);
+    *(uint32_t*)buf1254 = rsAllocationGetDimX(*(rs_allocation*)buf1255);
+    *(uint32_t*)buf1256 = rsAllocationGetDimY(*(rs_allocation*)buf1257);
+    *(uint32_t*)buf1258 = rsAllocationGetDimZ(*(rs_allocation*)buf1259);
+    *(rs_element*)buf1260 = rsAllocationGetElement(*(rs_allocation*)buf1261);
+    *(int32_t*)buf1262 = rsAtomicAdd((volatile int32_t*) buf1263, *(int32_t*)buf1264);
+    *(int32_t*)buf1265 = rsAtomicAnd((volatile int32_t*) buf1266, *(int32_t*)buf1267);
+    *(int32_t*)buf1268 = rsAtomicCas((volatile int32_t*) buf1269, *(int32_t*)buf1270, *(int32_t*)buf1271);
+    *(uint32_t*)buf1272 = rsAtomicCas((volatile uint32_t*) buf1273, *(uint32_t*)buf1274, *(uint32_t*)buf1275);
+    *(int32_t*)buf1276 = rsAtomicDec((volatile int32_t*) buf1277);
+    *(int32_t*)buf1278 = rsAtomicInc((volatile int32_t*) buf1279);
+    *(uint32_t*)buf1280 = rsAtomicMax((volatile uint32_t*) buf1281, *(uint32_t*)buf1282);
+    *(int32_t*)buf1283 = rsAtomicMax((volatile int32_t*) buf1284, *(int32_t*)buf1285);
+    *(uint32_t*)buf1286 = rsAtomicMin((volatile uint32_t*) buf1287, *(uint32_t*)buf1288);
+    *(int32_t*)buf1289 = rsAtomicMin((volatile int32_t*) buf1290, *(int32_t*)buf1291);
+    *(int32_t*)buf1292 = rsAtomicOr((volatile int32_t*) buf1293, *(int32_t*)buf1294);
+    *(int32_t*)buf1295 = rsAtomicSub((volatile int32_t*) buf1296, *(int32_t*)buf1297);
+    *(int32_t*)buf1298 = rsAtomicXor((volatile int32_t*) buf1299, *(int32_t*)buf1300);
+    *(char*)buf1301 = rsClamp(*(char*)buf1302, *(char*)buf1303, *(char*)buf1304);
+    *(uchar*)buf1305 = rsClamp(*(uchar*)buf1306, *(uchar*)buf1307, *(uchar*)buf1308);
+    *(short*)buf1309 = rsClamp(*(short*)buf1310, *(short*)buf1311, *(short*)buf1312);
+    *(ushort*)buf1313 = rsClamp(*(ushort*)buf1314, *(ushort*)buf1315, *(ushort*)buf1316);
+    *(int*)buf1317 = rsClamp(*(int*)buf1318, *(int*)buf1319, *(int*)buf1320);
+    *(uint*)buf1321 = rsClamp(*(uint*)buf1322, *(uint*)buf1323, *(uint*)buf1324);
+    rsClearObject((rs_element*) buf1325);
+    rsClearObject((rs_type*) buf1326);
+    rsClearObject((rs_allocation*) buf1327);
+    rsClearObject((rs_sampler*) buf1328);
+    rsClearObject((rs_script*) buf1329);
+#ifndef __LP64__
+    rsClearObject((rs_mesh*) buf1330);
+    rsClearObject((rs_program_fragment*) buf1331);
+    rsClearObject((rs_program_vertex*) buf1332);
+    rsClearObject((rs_program_raster*) buf1333);
+    rsClearObject((rs_program_store*) buf1334);
+    rsClearObject((rs_font*) buf1335);
+#endif
+    rsDebug((const char*) buf1336, *(double*)buf1337);
+    rsDebug((const char*) buf1338, *(int*)buf1339);
+    rsDebug((const char*) buf1340, *(uint*)buf1341);
+    rsDebug((const char*) buf1342, *(long*)buf1343);
+    rsDebug((const char*) buf1344, *(ulong*)buf1345);
+    rsDebug((const char*) buf1346, *(float*)buf1347);
+    rsDebug((const char*) buf1348, *(float2*)buf1349);
+    rsDebug((const char*) buf1350, *(float3*)buf1351);
+    rsDebug((const char*) buf1352, *(float4*)buf1353);
+    rsDebug((const char*) buf1354, *(float*)buf1355, *(float*)buf1356);
+    rsDebug((const char*) buf1357, *(float*)buf1358, *(float*)buf1359, *(float*)buf1360);
+    rsDebug((const char*) buf1361, *(float*)buf1362, *(float*)buf1363, *(float*)buf1364, *(float*)buf1365);
+    rsDebug((const char*) buf1366, *(long long*)buf1367);
+    rsDebug((const char*) buf1368, *(unsigned long long*)buf1369);
+    rsDebug((const char*) buf1370, (const void*) buf1371);
+    rsDebug((const char*) buf1372, (const rs_matrix4x4*) buf1373);
+    rsDebug((const char*) buf1374, (const rs_matrix3x3*) buf1375);
+    rsDebug((const char*) buf1376, (const rs_matrix2x2*) buf1377);
+    rsExtractFrustumPlanes((const rs_matrix4x4*) buf1378, (float4*) buf1379, (float4*) buf1380, (float4*) buf1381, (float4*) buf1382, (float4*) buf1383, (float4*) buf1384);
+    rsForEach(*(rs_script*)buf1385, *(rs_allocation*)buf1386, *(rs_allocation*)buf1387, (const void*) buf1388, *(size_t*)buf1389, (const rs_script_call_t*) buf1390);
+    rsForEach(*(rs_script*)buf1391, *(rs_allocation*)buf1392, *(rs_allocation*)buf1393, (const void*) buf1394, *(size_t*)buf1395);
+    rsForEach(*(rs_script*)buf1396, *(rs_allocation*)buf1397, *(rs_allocation*)buf1398);
+    *(float*)buf1399 = rsFrac(*(float*)buf1400);
+    *(rs_allocation*)buf1401 = rsGetAllocation((const void*) buf1402);
+    *(float*)buf1403 = rsGetDt();
+    *(const void**)buf1404 = rsGetElementAt(*(rs_allocation*)buf1405, *(uint32_t*)buf1406);
+    *(const void**)buf1407 = rsGetElementAt(*(rs_allocation*)buf1408, *(uint32_t*)buf1409, *(uint32_t*)buf1410);
+    *(const void**)buf1411 = rsGetElementAt(*(rs_allocation*)buf1412, *(uint32_t*)buf1413, *(uint32_t*)buf1414, *(uint32_t*)buf1415);
+    *(float*)buf1416 = rsGetElementAt_float(*(rs_allocation*)buf1417, *(uint32_t*)buf1418);
+    *(float2*)buf1419 = rsGetElementAt_float2(*(rs_allocation*)buf1420, *(uint32_t*)buf1421);
+    *(float3*)buf1422 = rsGetElementAt_float3(*(rs_allocation*)buf1423, *(uint32_t*)buf1424);
+    *(float4*)buf1425 = rsGetElementAt_float4(*(rs_allocation*)buf1426, *(uint32_t*)buf1427);
+    *(double*)buf1428 = rsGetElementAt_double(*(rs_allocation*)buf1429, *(uint32_t*)buf1430);
+    *(double2*)buf1431 = rsGetElementAt_double2(*(rs_allocation*)buf1432, *(uint32_t*)buf1433);
+    *(double3*)buf1434 = rsGetElementAt_double3(*(rs_allocation*)buf1435, *(uint32_t*)buf1436);
+    *(double4*)buf1437 = rsGetElementAt_double4(*(rs_allocation*)buf1438, *(uint32_t*)buf1439);
+    *(char*)buf1440 = rsGetElementAt_char(*(rs_allocation*)buf1441, *(uint32_t*)buf1442);
+    *(char2*)buf1443 = rsGetElementAt_char2(*(rs_allocation*)buf1444, *(uint32_t*)buf1445);
+    *(char3*)buf1446 = rsGetElementAt_char3(*(rs_allocation*)buf1447, *(uint32_t*)buf1448);
+    *(char4*)buf1449 = rsGetElementAt_char4(*(rs_allocation*)buf1450, *(uint32_t*)buf1451);
+    *(uchar*)buf1452 = rsGetElementAt_uchar(*(rs_allocation*)buf1453, *(uint32_t*)buf1454);
+    *(uchar2*)buf1455 = rsGetElementAt_uchar2(*(rs_allocation*)buf1456, *(uint32_t*)buf1457);
+    *(uchar3*)buf1458 = rsGetElementAt_uchar3(*(rs_allocation*)buf1459, *(uint32_t*)buf1460);
+    *(uchar4*)buf1461 = rsGetElementAt_uchar4(*(rs_allocation*)buf1462, *(uint32_t*)buf1463);
+    *(short*)buf1464 = rsGetElementAt_short(*(rs_allocation*)buf1465, *(uint32_t*)buf1466);
+    *(short2*)buf1467 = rsGetElementAt_short2(*(rs_allocation*)buf1468, *(uint32_t*)buf1469);
+    *(short3*)buf1470 = rsGetElementAt_short3(*(rs_allocation*)buf1471, *(uint32_t*)buf1472);
+    *(short4*)buf1473 = rsGetElementAt_short4(*(rs_allocation*)buf1474, *(uint32_t*)buf1475);
+    *(ushort*)buf1476 = rsGetElementAt_ushort(*(rs_allocation*)buf1477, *(uint32_t*)buf1478);
+    *(ushort2*)buf1479 = rsGetElementAt_ushort2(*(rs_allocation*)buf1480, *(uint32_t*)buf1481);
+    *(ushort3*)buf1482 = rsGetElementAt_ushort3(*(rs_allocation*)buf1483, *(uint32_t*)buf1484);
+    *(ushort4*)buf1485 = rsGetElementAt_ushort4(*(rs_allocation*)buf1486, *(uint32_t*)buf1487);
+    *(int*)buf1488 = rsGetElementAt_int(*(rs_allocation*)buf1489, *(uint32_t*)buf1490);
+    *(int2*)buf1491 = rsGetElementAt_int2(*(rs_allocation*)buf1492, *(uint32_t*)buf1493);
+    *(int3*)buf1494 = rsGetElementAt_int3(*(rs_allocation*)buf1495, *(uint32_t*)buf1496);
+    *(int4*)buf1497 = rsGetElementAt_int4(*(rs_allocation*)buf1498, *(uint32_t*)buf1499);
+    *(uint*)buf1500 = rsGetElementAt_uint(*(rs_allocation*)buf1501, *(uint32_t*)buf1502);
+    *(uint2*)buf1503 = rsGetElementAt_uint2(*(rs_allocation*)buf1504, *(uint32_t*)buf1505);
+    *(uint3*)buf1506 = rsGetElementAt_uint3(*(rs_allocation*)buf1507, *(uint32_t*)buf1508);
+    *(uint4*)buf1509 = rsGetElementAt_uint4(*(rs_allocation*)buf1510, *(uint32_t*)buf1511);
+    *(long*)buf1512 = rsGetElementAt_long(*(rs_allocation*)buf1513, *(uint32_t*)buf1514);
+    *(long2*)buf1515 = rsGetElementAt_long2(*(rs_allocation*)buf1516, *(uint32_t*)buf1517);
+    *(long3*)buf1518 = rsGetElementAt_long3(*(rs_allocation*)buf1519, *(uint32_t*)buf1520);
+    *(long4*)buf1521 = rsGetElementAt_long4(*(rs_allocation*)buf1522, *(uint32_t*)buf1523);
+    *(ulong*)buf1524 = rsGetElementAt_ulong(*(rs_allocation*)buf1525, *(uint32_t*)buf1526);
+    *(ulong2*)buf1527 = rsGetElementAt_ulong2(*(rs_allocation*)buf1528, *(uint32_t*)buf1529);
+    *(ulong3*)buf1530 = rsGetElementAt_ulong3(*(rs_allocation*)buf1531, *(uint32_t*)buf1532);
+    *(ulong4*)buf1533 = rsGetElementAt_ulong4(*(rs_allocation*)buf1534, *(uint32_t*)buf1535);
+    *(float*)buf1536 = rsGetElementAt_float(*(rs_allocation*)buf1537, *(uint32_t*)buf1538, *(uint32_t*)buf1539);
+    *(float2*)buf1540 = rsGetElementAt_float2(*(rs_allocation*)buf1541, *(uint32_t*)buf1542, *(uint32_t*)buf1543);
+    *(float3*)buf1544 = rsGetElementAt_float3(*(rs_allocation*)buf1545, *(uint32_t*)buf1546, *(uint32_t*)buf1547);
+    *(float4*)buf1548 = rsGetElementAt_float4(*(rs_allocation*)buf1549, *(uint32_t*)buf1550, *(uint32_t*)buf1551);
+    *(double*)buf1552 = rsGetElementAt_double(*(rs_allocation*)buf1553, *(uint32_t*)buf1554, *(uint32_t*)buf1555);
+    *(double2*)buf1556 = rsGetElementAt_double2(*(rs_allocation*)buf1557, *(uint32_t*)buf1558, *(uint32_t*)buf1559);
+    *(double3*)buf1560 = rsGetElementAt_double3(*(rs_allocation*)buf1561, *(uint32_t*)buf1562, *(uint32_t*)buf1563);
+    *(double4*)buf1564 = rsGetElementAt_double4(*(rs_allocation*)buf1565, *(uint32_t*)buf1566, *(uint32_t*)buf1567);
+    *(char*)buf1568 = rsGetElementAt_char(*(rs_allocation*)buf1569, *(uint32_t*)buf1570, *(uint32_t*)buf1571);
+    *(char2*)buf1572 = rsGetElementAt_char2(*(rs_allocation*)buf1573, *(uint32_t*)buf1574, *(uint32_t*)buf1575);
+    *(char3*)buf1576 = rsGetElementAt_char3(*(rs_allocation*)buf1577, *(uint32_t*)buf1578, *(uint32_t*)buf1579);
+    *(char4*)buf1580 = rsGetElementAt_char4(*(rs_allocation*)buf1581, *(uint32_t*)buf1582, *(uint32_t*)buf1583);
+    *(uchar*)buf1584 = rsGetElementAt_uchar(*(rs_allocation*)buf1585, *(uint32_t*)buf1586, *(uint32_t*)buf1587);
+    *(uchar2*)buf1588 = rsGetElementAt_uchar2(*(rs_allocation*)buf1589, *(uint32_t*)buf1590, *(uint32_t*)buf1591);
+    *(uchar3*)buf1592 = rsGetElementAt_uchar3(*(rs_allocation*)buf1593, *(uint32_t*)buf1594, *(uint32_t*)buf1595);
+    *(uchar4*)buf1596 = rsGetElementAt_uchar4(*(rs_allocation*)buf1597, *(uint32_t*)buf1598, *(uint32_t*)buf1599);
+    *(short*)buf1600 = rsGetElementAt_short(*(rs_allocation*)buf1601, *(uint32_t*)buf1602, *(uint32_t*)buf1603);
+    *(short2*)buf1604 = rsGetElementAt_short2(*(rs_allocation*)buf1605, *(uint32_t*)buf1606, *(uint32_t*)buf1607);
+    *(short3*)buf1608 = rsGetElementAt_short3(*(rs_allocation*)buf1609, *(uint32_t*)buf1610, *(uint32_t*)buf1611);
+    *(short4*)buf1612 = rsGetElementAt_short4(*(rs_allocation*)buf1613, *(uint32_t*)buf1614, *(uint32_t*)buf1615);
+    *(ushort*)buf1616 = rsGetElementAt_ushort(*(rs_allocation*)buf1617, *(uint32_t*)buf1618, *(uint32_t*)buf1619);
+    *(ushort2*)buf1620 = rsGetElementAt_ushort2(*(rs_allocation*)buf1621, *(uint32_t*)buf1622, *(uint32_t*)buf1623);
+    *(ushort3*)buf1624 = rsGetElementAt_ushort3(*(rs_allocation*)buf1625, *(uint32_t*)buf1626, *(uint32_t*)buf1627);
+    *(ushort4*)buf1628 = rsGetElementAt_ushort4(*(rs_allocation*)buf1629, *(uint32_t*)buf1630, *(uint32_t*)buf1631);
+    *(int*)buf1632 = rsGetElementAt_int(*(rs_allocation*)buf1633, *(uint32_t*)buf1634, *(uint32_t*)buf1635);
+    *(int2*)buf1636 = rsGetElementAt_int2(*(rs_allocation*)buf1637, *(uint32_t*)buf1638, *(uint32_t*)buf1639);
+    *(int3*)buf1640 = rsGetElementAt_int3(*(rs_allocation*)buf1641, *(uint32_t*)buf1642, *(uint32_t*)buf1643);
+    *(int4*)buf1644 = rsGetElementAt_int4(*(rs_allocation*)buf1645, *(uint32_t*)buf1646, *(uint32_t*)buf1647);
+    *(uint*)buf1648 = rsGetElementAt_uint(*(rs_allocation*)buf1649, *(uint32_t*)buf1650, *(uint32_t*)buf1651);
+    *(uint2*)buf1652 = rsGetElementAt_uint2(*(rs_allocation*)buf1653, *(uint32_t*)buf1654, *(uint32_t*)buf1655);
+    *(uint3*)buf1656 = rsGetElementAt_uint3(*(rs_allocation*)buf1657, *(uint32_t*)buf1658, *(uint32_t*)buf1659);
+    *(uint4*)buf1660 = rsGetElementAt_uint4(*(rs_allocation*)buf1661, *(uint32_t*)buf1662, *(uint32_t*)buf1663);
+    *(long*)buf1664 = rsGetElementAt_long(*(rs_allocation*)buf1665, *(uint32_t*)buf1666, *(uint32_t*)buf1667);
+    *(long2*)buf1668 = rsGetElementAt_long2(*(rs_allocation*)buf1669, *(uint32_t*)buf1670, *(uint32_t*)buf1671);
+    *(long3*)buf1672 = rsGetElementAt_long3(*(rs_allocation*)buf1673, *(uint32_t*)buf1674, *(uint32_t*)buf1675);
+    *(long4*)buf1676 = rsGetElementAt_long4(*(rs_allocation*)buf1677, *(uint32_t*)buf1678, *(uint32_t*)buf1679);
+    *(ulong*)buf1680 = rsGetElementAt_ulong(*(rs_allocation*)buf1681, *(uint32_t*)buf1682, *(uint32_t*)buf1683);
+    *(ulong2*)buf1684 = rsGetElementAt_ulong2(*(rs_allocation*)buf1685, *(uint32_t*)buf1686, *(uint32_t*)buf1687);
+    *(ulong3*)buf1688 = rsGetElementAt_ulong3(*(rs_allocation*)buf1689, *(uint32_t*)buf1690, *(uint32_t*)buf1691);
+    *(ulong4*)buf1692 = rsGetElementAt_ulong4(*(rs_allocation*)buf1693, *(uint32_t*)buf1694, *(uint32_t*)buf1695);
+    *(float*)buf1696 = rsGetElementAt_float(*(rs_allocation*)buf1697, *(uint32_t*)buf1698, *(uint32_t*)buf1699, *(uint32_t*)buf1700);
+    *(float2*)buf1701 = rsGetElementAt_float2(*(rs_allocation*)buf1702, *(uint32_t*)buf1703, *(uint32_t*)buf1704, *(uint32_t*)buf1705);
+    *(float3*)buf1706 = rsGetElementAt_float3(*(rs_allocation*)buf1707, *(uint32_t*)buf1708, *(uint32_t*)buf1709, *(uint32_t*)buf1710);
+    *(float4*)buf1711 = rsGetElementAt_float4(*(rs_allocation*)buf1712, *(uint32_t*)buf1713, *(uint32_t*)buf1714, *(uint32_t*)buf1715);
+    *(double*)buf1716 = rsGetElementAt_double(*(rs_allocation*)buf1717, *(uint32_t*)buf1718, *(uint32_t*)buf1719, *(uint32_t*)buf1720);
+    *(double2*)buf1721 = rsGetElementAt_double2(*(rs_allocation*)buf1722, *(uint32_t*)buf1723, *(uint32_t*)buf1724, *(uint32_t*)buf1725);
+    *(double3*)buf1726 = rsGetElementAt_double3(*(rs_allocation*)buf1727, *(uint32_t*)buf1728, *(uint32_t*)buf1729, *(uint32_t*)buf1730);
+    *(double4*)buf1731 = rsGetElementAt_double4(*(rs_allocation*)buf1732, *(uint32_t*)buf1733, *(uint32_t*)buf1734, *(uint32_t*)buf1735);
+    *(char*)buf1736 = rsGetElementAt_char(*(rs_allocation*)buf1737, *(uint32_t*)buf1738, *(uint32_t*)buf1739, *(uint32_t*)buf1740);
+    *(char2*)buf1741 = rsGetElementAt_char2(*(rs_allocation*)buf1742, *(uint32_t*)buf1743, *(uint32_t*)buf1744, *(uint32_t*)buf1745);
+    *(char3*)buf1746 = rsGetElementAt_char3(*(rs_allocation*)buf1747, *(uint32_t*)buf1748, *(uint32_t*)buf1749, *(uint32_t*)buf1750);
+    *(char4*)buf1751 = rsGetElementAt_char4(*(rs_allocation*)buf1752, *(uint32_t*)buf1753, *(uint32_t*)buf1754, *(uint32_t*)buf1755);
+    *(uchar*)buf1756 = rsGetElementAt_uchar(*(rs_allocation*)buf1757, *(uint32_t*)buf1758, *(uint32_t*)buf1759, *(uint32_t*)buf1760);
+    *(uchar2*)buf1761 = rsGetElementAt_uchar2(*(rs_allocation*)buf1762, *(uint32_t*)buf1763, *(uint32_t*)buf1764, *(uint32_t*)buf1765);
+    *(uchar3*)buf1766 = rsGetElementAt_uchar3(*(rs_allocation*)buf1767, *(uint32_t*)buf1768, *(uint32_t*)buf1769, *(uint32_t*)buf1770);
+    *(uchar4*)buf1771 = rsGetElementAt_uchar4(*(rs_allocation*)buf1772, *(uint32_t*)buf1773, *(uint32_t*)buf1774, *(uint32_t*)buf1775);
+    *(short*)buf1776 = rsGetElementAt_short(*(rs_allocation*)buf1777, *(uint32_t*)buf1778, *(uint32_t*)buf1779, *(uint32_t*)buf1780);
+    *(short2*)buf1781 = rsGetElementAt_short2(*(rs_allocation*)buf1782, *(uint32_t*)buf1783, *(uint32_t*)buf1784, *(uint32_t*)buf1785);
+    *(short3*)buf1786 = rsGetElementAt_short3(*(rs_allocation*)buf1787, *(uint32_t*)buf1788, *(uint32_t*)buf1789, *(uint32_t*)buf1790);
+    *(short4*)buf1791 = rsGetElementAt_short4(*(rs_allocation*)buf1792, *(uint32_t*)buf1793, *(uint32_t*)buf1794, *(uint32_t*)buf1795);
+    *(ushort*)buf1796 = rsGetElementAt_ushort(*(rs_allocation*)buf1797, *(uint32_t*)buf1798, *(uint32_t*)buf1799, *(uint32_t*)buf1800);
+    *(ushort2*)buf1801 = rsGetElementAt_ushort2(*(rs_allocation*)buf1802, *(uint32_t*)buf1803, *(uint32_t*)buf1804, *(uint32_t*)buf1805);
+    *(ushort3*)buf1806 = rsGetElementAt_ushort3(*(rs_allocation*)buf1807, *(uint32_t*)buf1808, *(uint32_t*)buf1809, *(uint32_t*)buf1810);
+    *(ushort4*)buf1811 = rsGetElementAt_ushort4(*(rs_allocation*)buf1812, *(uint32_t*)buf1813, *(uint32_t*)buf1814, *(uint32_t*)buf1815);
+    *(int*)buf1816 = rsGetElementAt_int(*(rs_allocation*)buf1817, *(uint32_t*)buf1818, *(uint32_t*)buf1819, *(uint32_t*)buf1820);
+    *(int2*)buf1821 = rsGetElementAt_int2(*(rs_allocation*)buf1822, *(uint32_t*)buf1823, *(uint32_t*)buf1824, *(uint32_t*)buf1825);
+    *(int3*)buf1826 = rsGetElementAt_int3(*(rs_allocation*)buf1827, *(uint32_t*)buf1828, *(uint32_t*)buf1829, *(uint32_t*)buf1830);
+    *(int4*)buf1831 = rsGetElementAt_int4(*(rs_allocation*)buf1832, *(uint32_t*)buf1833, *(uint32_t*)buf1834, *(uint32_t*)buf1835);
+    *(uint*)buf1836 = rsGetElementAt_uint(*(rs_allocation*)buf1837, *(uint32_t*)buf1838, *(uint32_t*)buf1839, *(uint32_t*)buf1840);
+    *(uint2*)buf1841 = rsGetElementAt_uint2(*(rs_allocation*)buf1842, *(uint32_t*)buf1843, *(uint32_t*)buf1844, *(uint32_t*)buf1845);
+    *(uint3*)buf1846 = rsGetElementAt_uint3(*(rs_allocation*)buf1847, *(uint32_t*)buf1848, *(uint32_t*)buf1849, *(uint32_t*)buf1850);
+    *(uint4*)buf1851 = rsGetElementAt_uint4(*(rs_allocation*)buf1852, *(uint32_t*)buf1853, *(uint32_t*)buf1854, *(uint32_t*)buf1855);
+    *(long*)buf1856 = rsGetElementAt_long(*(rs_allocation*)buf1857, *(uint32_t*)buf1858, *(uint32_t*)buf1859, *(uint32_t*)buf1860);
+    *(long2*)buf1861 = rsGetElementAt_long2(*(rs_allocation*)buf1862, *(uint32_t*)buf1863, *(uint32_t*)buf1864, *(uint32_t*)buf1865);
+    *(long3*)buf1866 = rsGetElementAt_long3(*(rs_allocation*)buf1867, *(uint32_t*)buf1868, *(uint32_t*)buf1869, *(uint32_t*)buf1870);
+    *(long4*)buf1871 = rsGetElementAt_long4(*(rs_allocation*)buf1872, *(uint32_t*)buf1873, *(uint32_t*)buf1874, *(uint32_t*)buf1875);
+    *(ulong*)buf1876 = rsGetElementAt_ulong(*(rs_allocation*)buf1877, *(uint32_t*)buf1878, *(uint32_t*)buf1879, *(uint32_t*)buf1880);
+    *(ulong2*)buf1881 = rsGetElementAt_ulong2(*(rs_allocation*)buf1882, *(uint32_t*)buf1883, *(uint32_t*)buf1884, *(uint32_t*)buf1885);
+    *(ulong3*)buf1886 = rsGetElementAt_ulong3(*(rs_allocation*)buf1887, *(uint32_t*)buf1888, *(uint32_t*)buf1889, *(uint32_t*)buf1890);
+    *(ulong4*)buf1891 = rsGetElementAt_ulong4(*(rs_allocation*)buf1892, *(uint32_t*)buf1893, *(uint32_t*)buf1894, *(uint32_t*)buf1895);
+    *(bool*)buf1896 = rsIsObject(*(rs_element*)buf1897);
+    *(bool*)buf1898 = rsIsObject(*(rs_type*)buf1899);
+    *(bool*)buf1900 = rsIsObject(*(rs_allocation*)buf1901);
+    *(bool*)buf1902 = rsIsObject(*(rs_sampler*)buf1903);
+    *(bool*)buf1904 = rsIsObject(*(rs_script*)buf1905);
+#ifndef __LP64__
+    *(bool*)buf1906 = rsIsObject(*(rs_mesh*)buf1907);
+    *(bool*)buf1908 = rsIsObject(*(rs_program_fragment*)buf1909);
+    *(bool*)buf1910 = rsIsObject(*(rs_program_vertex*)buf1911);
+    *(bool*)buf1912 = rsIsObject(*(rs_program_raster*)buf1913);
+    *(bool*)buf1914 = rsIsObject(*(rs_program_store*)buf1915);
+    *(bool*)buf1916 = rsIsObject(*(rs_font*)buf1917);
+#endif
+    *(bool*)buf1918 = rsIsSphereInFrustum((float4*) buf1919, (float4*) buf1920, (float4*) buf1921, (float4*) buf1922, (float4*) buf1923, (float4*) buf1924, (float4*) buf1925);
+    *(rs_tm**)buf1926 = rsLocaltime((rs_tm*) buf1927, (const rs_time_t*) buf1928);
+    *(float*)buf1929 = rsMatrixGet((const rs_matrix4x4*) buf1930, *(uint32_t*)buf1931, *(uint32_t*)buf1932);
+    *(float*)buf1933 = rsMatrixGet((const rs_matrix3x3*) buf1934, *(uint32_t*)buf1935, *(uint32_t*)buf1936);
+    *(float*)buf1937 = rsMatrixGet((const rs_matrix2x2*) buf1938, *(uint32_t*)buf1939, *(uint32_t*)buf1940);
+    *(bool*)buf1941 = rsMatrixInverse((rs_matrix4x4*) buf1942);
+    *(bool*)buf1943 = rsMatrixInverseTranspose((rs_matrix4x4*) buf1944);
+    rsMatrixLoad((rs_matrix4x4*) buf1945, (const float*) buf1946);
+    rsMatrixLoad((rs_matrix3x3*) buf1947, (const float*) buf1948);
+    rsMatrixLoad((rs_matrix2x2*) buf1949, (const float*) buf1950);
+    rsMatrixLoad((rs_matrix4x4*) buf1951, (const rs_matrix4x4*) buf1952);
+    rsMatrixLoad((rs_matrix3x3*) buf1953, (const rs_matrix3x3*) buf1954);
+    rsMatrixLoad((rs_matrix2x2*) buf1955, (const rs_matrix2x2*) buf1956);
+    rsMatrixLoad((rs_matrix4x4*) buf1957, (const rs_matrix3x3*) buf1958);
+    rsMatrixLoad((rs_matrix4x4*) buf1959, (const rs_matrix2x2*) buf1960);
+    rsMatrixLoadFrustum((rs_matrix4x4*) buf1961, *(float*)buf1962, *(float*)buf1963, *(float*)buf1964, *(float*)buf1965, *(float*)buf1966, *(float*)buf1967);
+    rsMatrixLoadIdentity((rs_matrix4x4*) buf1968);
+    rsMatrixLoadIdentity((rs_matrix3x3*) buf1969);
+    rsMatrixLoadIdentity((rs_matrix2x2*) buf1970);
+    rsMatrixLoadMultiply((rs_matrix4x4*) buf1971, (const rs_matrix4x4*) buf1972, (const rs_matrix4x4*) buf1973);
+    rsMatrixLoadMultiply((rs_matrix3x3*) buf1974, (const rs_matrix3x3*) buf1975, (const rs_matrix3x3*) buf1976);
+    rsMatrixLoadMultiply((rs_matrix2x2*) buf1977, (const rs_matrix2x2*) buf1978, (const rs_matrix2x2*) buf1979);
+    rsMatrixLoadOrtho((rs_matrix4x4*) buf1980, *(float*)buf1981, *(float*)buf1982, *(float*)buf1983, *(float*)buf1984, *(float*)buf1985, *(float*)buf1986);
+    rsMatrixLoadPerspective((rs_matrix4x4*) buf1987, *(float*)buf1988, *(float*)buf1989, *(float*)buf1990, *(float*)buf1991);
+    rsMatrixLoadRotate((rs_matrix4x4*) buf1992, *(float*)buf1993, *(float*)buf1994, *(float*)buf1995, *(float*)buf1996);
+    rsMatrixLoadScale((rs_matrix4x4*) buf1997, *(float*)buf1998, *(float*)buf1999, *(float*)buf2000);
+    rsMatrixLoadTranslate((rs_matrix4x4*) buf2001, *(float*)buf2002, *(float*)buf2003, *(float*)buf2004);
+    rsMatrixMultiply((rs_matrix4x4*) buf2005, (const rs_matrix4x4*) buf2006);
+    rsMatrixMultiply((rs_matrix3x3*) buf2007, (const rs_matrix3x3*) buf2008);
+    rsMatrixMultiply((rs_matrix2x2*) buf2009, (const rs_matrix2x2*) buf2010);
+    *(float4*)buf2011 = rsMatrixMultiply((const rs_matrix4x4*) buf2012, *(float4*)buf2013);
+    *(float4*)buf2014 = rsMatrixMultiply((const rs_matrix4x4*) buf2015, *(float3*)buf2016);
+    *(float4*)buf2017 = rsMatrixMultiply((const rs_matrix4x4*) buf2018, *(float2*)buf2019);
+    *(float3*)buf2020 = rsMatrixMultiply((const rs_matrix3x3*) buf2021, *(float3*)buf2022);
+    *(float3*)buf2023 = rsMatrixMultiply((const rs_matrix3x3*) buf2024, *(float2*)buf2025);
+    *(float2*)buf2026 = rsMatrixMultiply((const rs_matrix2x2*) buf2027, *(float2*)buf2028);
+    rsMatrixRotate((rs_matrix4x4*) buf2029, *(float*)buf2030, *(float*)buf2031, *(float*)buf2032, *(float*)buf2033);
+    rsMatrixScale((rs_matrix4x4*) buf2034, *(float*)buf2035, *(float*)buf2036, *(float*)buf2037);
+    rsMatrixSet((rs_matrix4x4*) buf2038, *(uint32_t*)buf2039, *(uint32_t*)buf2040, *(float*)buf2041);
+    rsMatrixSet((rs_matrix3x3*) buf2042, *(uint32_t*)buf2043, *(uint32_t*)buf2044, *(float*)buf2045);
+    rsMatrixSet((rs_matrix2x2*) buf2046, *(uint32_t*)buf2047, *(uint32_t*)buf2048, *(float*)buf2049);
+    rsMatrixTranslate((rs_matrix4x4*) buf2050, *(float*)buf2051, *(float*)buf2052, *(float*)buf2053);
+    rsMatrixTranspose((rs_matrix4x4*) buf2054);
+    rsMatrixTranspose((rs_matrix3x3*) buf2055);
+    rsMatrixTranspose((rs_matrix2x2*) buf2056);
+    *(uchar4*)buf2057 = rsPackColorTo8888(*(float*)buf2058, *(float*)buf2059, *(float*)buf2060);
+    *(uchar4*)buf2061 = rsPackColorTo8888(*(float*)buf2062, *(float*)buf2063, *(float*)buf2064, *(float*)buf2065);
+    *(uchar4*)buf2066 = rsPackColorTo8888(*(float3*)buf2067);
+    *(uchar4*)buf2068 = rsPackColorTo8888(*(float4*)buf2069);
+    rsQuaternionAdd((rs_quaternion*) buf2070, (const rs_quaternion*) buf2071);
+    rsQuaternionConjugate((rs_quaternion*) buf2072);
+    *(float*)buf2073 = rsQuaternionDot((const rs_quaternion*) buf2074, (const rs_quaternion*) buf2075);
+    rsQuaternionGetMatrixUnit((rs_matrix4x4*) buf2076, (const rs_quaternion*) buf2077);
+    rsQuaternionLoadRotate((rs_quaternion*) buf2078, *(float*)buf2079, *(float*)buf2080, *(float*)buf2081, *(float*)buf2082);
+    rsQuaternionLoadRotateUnit((rs_quaternion*) buf2083, *(float*)buf2084, *(float*)buf2085, *(float*)buf2086, *(float*)buf2087);
+    rsQuaternionMultiply((rs_quaternion*) buf2088, *(float*)buf2089);
+    rsQuaternionMultiply((rs_quaternion*) buf2090, (const rs_quaternion*) buf2091);
+    rsQuaternionNormalize((rs_quaternion*) buf2092);
+    rsQuaternionSet((rs_quaternion*) buf2093, *(float*)buf2094, *(float*)buf2095, *(float*)buf2096, *(float*)buf2097);
+    rsQuaternionSet((rs_quaternion*) buf2098, (const rs_quaternion*) buf2099);
+    rsQuaternionSlerp((rs_quaternion*) buf2100, (const rs_quaternion*) buf2101, (const rs_quaternion*) buf2102, *(float*)buf2103);
+    *(int*)buf2104 = rsRand(*(int*)buf2105);
+    *(int*)buf2106 = rsRand(*(int*)buf2107, *(int*)buf2108);
+    *(float*)buf2109 = rsRand(*(float*)buf2110);
+    *(float*)buf2111 = rsRand(*(float*)buf2112, *(float*)buf2113);
+    *(bool*)buf2114 = rsSendToClient(*(int*)buf2115);
+    *(bool*)buf2116 = rsSendToClient(*(int*)buf2117, (const void*) buf2118, *(uint*)buf2119);
+    rsSendToClientBlocking(*(int*)buf2120);
+    rsSendToClientBlocking(*(int*)buf2121, (const void*) buf2122, *(uint*)buf2123);
+    rsSetObject((rs_element*) buf2124, *(rs_element*)buf2125);
+    rsSetObject((rs_type*) buf2126, *(rs_type*)buf2127);
+    rsSetObject((rs_allocation*) buf2128, *(rs_allocation*)buf2129);
+    rsSetObject((rs_sampler*) buf2130, *(rs_sampler*)buf2131);
+    rsSetObject((rs_script*) buf2132, *(rs_script*)buf2133);
+#ifndef __LP64__
+    rsSetObject((rs_mesh*) buf2134, *(rs_mesh*)buf2135);
+    rsSetObject((rs_program_fragment*) buf2136, *(rs_program_fragment*)buf2137);
+    rsSetObject((rs_program_vertex*) buf2138, *(rs_program_vertex*)buf2139);
+    rsSetObject((rs_program_raster*) buf2140, *(rs_program_raster*)buf2141);
+    rsSetObject((rs_program_store*) buf2142, *(rs_program_store*)buf2143);
+    rsSetObject((rs_font*) buf2144, *(rs_font*)buf2145);
+#endif
+    *(rs_time_t*)buf2146 = rsTime((rs_time_t*) buf2147);
+    *(float4*)buf2148 = rsUnpackColor8888(*(uchar4*)buf2149);
+    *(int64_t*)buf2150 = rsUptimeMillis();
+    *(int64_t*)buf2151 = rsUptimeNanos();
+    *(float4*)buf2152 = rsYuvToRGBA_float4(*(uchar*)buf2153, *(uchar*)buf2154, *(uchar*)buf2155);
+    *(uchar4*)buf2156 = rsYuvToRGBA_uchar4(*(uchar*)buf2157, *(uchar*)buf2158, *(uchar*)buf2159);
+#ifndef __LP64__
+    rsgAllocationSyncAll(*(rs_allocation*)buf2160);
+#endif
+#ifndef __LP64__
+    rsgAllocationSyncAll(*(rs_allocation*)buf2161, *(rs_allocation_usage_type*)buf2162);
+#endif
+#ifndef __LP64__
+    rsgBindColorTarget(*(rs_allocation*)buf2163, *(uint*)buf2164);
+#endif
+#ifndef __LP64__
+    rsgBindConstant(*(rs_program_fragment*)buf2165, *(uint*)buf2166, *(rs_allocation*)buf2167);
+#endif
+#ifndef __LP64__
+    rsgBindConstant(*(rs_program_vertex*)buf2168, *(uint*)buf2169, *(rs_allocation*)buf2170);
+#endif
+#ifndef __LP64__
+    rsgBindDepthTarget(*(rs_allocation*)buf2171);
+#endif
+#ifndef __LP64__
+    rsgBindFont(*(rs_font*)buf2172);
+#endif
+#ifndef __LP64__
+    rsgBindProgramFragment(*(rs_program_fragment*)buf2173);
+#endif
+#ifndef __LP64__
+    rsgBindProgramRaster(*(rs_program_raster*)buf2174);
+#endif
+#ifndef __LP64__
+    rsgBindProgramStore(*(rs_program_store*)buf2175);
+#endif
+#ifndef __LP64__
+    rsgBindProgramVertex(*(rs_program_vertex*)buf2176);
+#endif
+#ifndef __LP64__
+    rsgBindSampler(*(rs_program_fragment*)buf2177, *(uint*)buf2178, *(rs_sampler*)buf2179);
+#endif
+#ifndef __LP64__
+    rsgBindTexture(*(rs_program_fragment*)buf2180, *(uint*)buf2181, *(rs_allocation*)buf2182);
+#endif
+#ifndef __LP64__
+    rsgClearAllRenderTargets();
+#endif
+#ifndef __LP64__
+    rsgClearColor(*(float*)buf2183, *(float*)buf2184, *(float*)buf2185, *(float*)buf2186);
+#endif
+#ifndef __LP64__
+    rsgClearColorTarget(*(uint*)buf2187);
+#endif
+#ifndef __LP64__
+    rsgClearDepth(*(float*)buf2188);
+#endif
+#ifndef __LP64__
+    rsgClearDepthTarget();
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf2189);
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf2190, *(uint*)buf2191);
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf2192, *(uint*)buf2193, *(uint*)buf2194, *(uint*)buf2195);
+#endif
+#ifndef __LP64__
+    rsgDrawQuad(*(float*)buf2196, *(float*)buf2197, *(float*)buf2198, *(float*)buf2199, *(float*)buf2200, *(float*)buf2201, *(float*)buf2202, *(float*)buf2203, *(float*)buf2204, *(float*)buf2205, *(float*)buf2206, *(float*)buf2207);
+#endif
+#ifndef __LP64__
+    rsgDrawQuadTexCoords(*(float*)buf2208, *(float*)buf2209, *(float*)buf2210, *(float*)buf2211, *(float*)buf2212, *(float*)buf2213, *(float*)buf2214, *(float*)buf2215, *(float*)buf2216, *(float*)buf2217, *(float*)buf2218, *(float*)buf2219, *(float*)buf2220, *(float*)buf2221, *(float*)buf2222, *(float*)buf2223, *(float*)buf2224, *(float*)buf2225, *(float*)buf2226, *(float*)buf2227);
+#endif
+#ifndef __LP64__
+    rsgDrawRect(*(float*)buf2228, *(float*)buf2229, *(float*)buf2230, *(float*)buf2231, *(float*)buf2232);
+#endif
+#ifndef __LP64__
+    rsgDrawSpriteScreenspace(*(float*)buf2233, *(float*)buf2234, *(float*)buf2235, *(float*)buf2236, *(float*)buf2237);
+#endif
+#ifndef __LP64__
+    rsgDrawText((const char*) buf2238, *(int*)buf2239, *(int*)buf2240);
+#endif
+#ifndef __LP64__
+    rsgDrawText(*(rs_allocation*)buf2241, *(int*)buf2242, *(int*)buf2243);
+#endif
+#ifndef __LP64__
+    *(uint*)buf2244 = rsgFinish();
+#endif
+#ifndef __LP64__
+    rsgFontColor(*(float*)buf2245, *(float*)buf2246, *(float*)buf2247, *(float*)buf2248);
+#endif
+#ifndef __LP64__
+    *(uint*)buf2249 = rsgGetHeight();
+#endif
+#ifndef __LP64__
+    *(uint*)buf2250 = rsgGetWidth();
+#endif
+#ifndef __LP64__
+    rsgMeasureText((const char*) buf2251, (int*) buf2252, (int*) buf2253, (int*) buf2254, (int*) buf2255);
+#endif
+#ifndef __LP64__
+    rsgMeasureText(*(rs_allocation*)buf2256, (int*) buf2257, (int*) buf2258, (int*) buf2259, (int*) buf2260);
+#endif
+#ifndef __LP64__
+    rsgMeshComputeBoundingBox(*(rs_mesh*)buf2261, (float*) buf2262, (float*) buf2263, (float*) buf2264, (float*) buf2265, (float*) buf2266, (float*) buf2267);
+#endif
+#ifndef __LP64__
+    rsgMeshComputeBoundingBox(*(rs_mesh*)buf2268, (float3*) buf2269, (float3*) buf2270);
+#endif
+#ifndef __LP64__
+    rsgProgramFragmentConstantColor(*(rs_program_fragment*)buf2271, *(float*)buf2272, *(float*)buf2273, *(float*)buf2274, *(float*)buf2275);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexGetProjectionMatrix((rs_matrix4x4*) buf2276);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadModelMatrix((const rs_matrix4x4*) buf2277);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadProjectionMatrix((const rs_matrix4x4*) buf2278);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadTextureMatrix((const rs_matrix4x4*) buf2279);
+#endif
+    *(float*)buf2280 = rsqrt(*(float*)buf2281);
+    *(float2*)buf2282 = rsqrt(*(float2*)buf2283);
+    *(float3*)buf2284 = rsqrt(*(float3*)buf2285);
+    *(float4*)buf2286 = rsqrt(*(float4*)buf2287);
+    *(float*)buf2288 = sign(*(float*)buf2289);
+    *(float2*)buf2290 = sign(*(float2*)buf2291);
+    *(float3*)buf2292 = sign(*(float3*)buf2293);
+    *(float4*)buf2294 = sign(*(float4*)buf2295);
+    *(float*)buf2296 = sin(*(float*)buf2297);
+    *(float2*)buf2298 = sin(*(float2*)buf2299);
+    *(float3*)buf2300 = sin(*(float3*)buf2301);
+    *(float4*)buf2302 = sin(*(float4*)buf2303);
+    *(float*)buf2304 = sincos(*(float*)buf2305, (float*) buf2306);
+    *(float2*)buf2307 = sincos(*(float2*)buf2308, (float2*) buf2309);
+    *(float3*)buf2310 = sincos(*(float3*)buf2311, (float3*) buf2312);
+    *(float4*)buf2313 = sincos(*(float4*)buf2314, (float4*) buf2315);
+    *(float*)buf2316 = sinh(*(float*)buf2317);
+    *(float2*)buf2318 = sinh(*(float2*)buf2319);
+    *(float3*)buf2320 = sinh(*(float3*)buf2321);
+    *(float4*)buf2322 = sinh(*(float4*)buf2323);
+    *(float*)buf2324 = sinpi(*(float*)buf2325);
+    *(float2*)buf2326 = sinpi(*(float2*)buf2327);
+    *(float3*)buf2328 = sinpi(*(float3*)buf2329);
+    *(float4*)buf2330 = sinpi(*(float4*)buf2331);
+    *(float*)buf2332 = sqrt(*(float*)buf2333);
+    *(float2*)buf2334 = sqrt(*(float2*)buf2335);
+    *(float3*)buf2336 = sqrt(*(float3*)buf2337);
+    *(float4*)buf2338 = sqrt(*(float4*)buf2339);
+    *(float*)buf2340 = step(*(float*)buf2341, *(float*)buf2342);
+    *(float2*)buf2343 = step(*(float2*)buf2344, *(float2*)buf2345);
+    *(float3*)buf2346 = step(*(float3*)buf2347, *(float3*)buf2348);
+    *(float4*)buf2349 = step(*(float4*)buf2350, *(float4*)buf2351);
+    *(float2*)buf2352 = step(*(float2*)buf2353, *(float*)buf2354);
+    *(float3*)buf2355 = step(*(float3*)buf2356, *(float*)buf2357);
+    *(float4*)buf2358 = step(*(float4*)buf2359, *(float*)buf2360);
+    *(float*)buf2361 = tan(*(float*)buf2362);
+    *(float2*)buf2363 = tan(*(float2*)buf2364);
+    *(float3*)buf2365 = tan(*(float3*)buf2366);
+    *(float4*)buf2367 = tan(*(float4*)buf2368);
+    *(float*)buf2369 = tanh(*(float*)buf2370);
+    *(float2*)buf2371 = tanh(*(float2*)buf2372);
+    *(float3*)buf2373 = tanh(*(float3*)buf2374);
+    *(float4*)buf2375 = tanh(*(float4*)buf2376);
+    *(float*)buf2377 = tanpi(*(float*)buf2378);
+    *(float2*)buf2379 = tanpi(*(float2*)buf2380);
+    *(float3*)buf2381 = tanpi(*(float3*)buf2382);
+    *(float4*)buf2383 = tanpi(*(float4*)buf2384);
+    *(float*)buf2385 = tgamma(*(float*)buf2386);
+    *(float2*)buf2387 = tgamma(*(float2*)buf2388);
+    *(float3*)buf2389 = tgamma(*(float3*)buf2390);
+    *(float4*)buf2391 = tgamma(*(float4*)buf2392);
+    *(float*)buf2393 = trunc(*(float*)buf2394);
+    *(float2*)buf2395 = trunc(*(float2*)buf2396);
+    *(float3*)buf2397 = trunc(*(float3*)buf2398);
+    *(float4*)buf2399 = trunc(*(float4*)buf2400);
+}
diff --git a/slang/tests/P_all_api_14/stderr.txt.expect b/slang/tests/P_all_api_14/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_all_api_14/stderr.txt.expect
diff --git a/slang/tests/P_all_api_14/stdout.txt.expect b/slang/tests/P_all_api_14/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_all_api_14/stdout.txt.expect
diff --git a/slang/tests/P_all_api_15/all15.rs b/slang/tests/P_all_api_15/all15.rs
new file mode 100644
index 0000000..1ce2798
--- /dev/null
+++ b/slang/tests/P_all_api_15/all15.rs
@@ -0,0 +1,3403 @@
+// -target-api 15 -Wno-deprecated-declarations
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Don't edit this file!  It is auto-generated by frameworks/rs/api/generate.sh.
+
+#pragma version(1)
+#pragma rs java_package_name(com.example.renderscript.testallapi)
+
+#include "rs_graphics.rsh"
+
+char buf0[200];
+char buf1[200];
+char buf2[200];
+char buf3[200];
+char buf4[200];
+char buf5[200];
+char buf6[200];
+char buf7[200];
+char buf8[200];
+char buf9[200];
+char buf10[200];
+char buf11[200];
+char buf12[200];
+char buf13[200];
+char buf14[200];
+char buf15[200];
+char buf16[200];
+char buf17[200];
+char buf18[200];
+char buf19[200];
+char buf20[200];
+char buf21[200];
+char buf22[200];
+char buf23[200];
+char buf24[200];
+char buf25[200];
+char buf26[200];
+char buf27[200];
+char buf28[200];
+char buf29[200];
+char buf30[200];
+char buf31[200];
+char buf32[200];
+char buf33[200];
+char buf34[200];
+char buf35[200];
+char buf36[200];
+char buf37[200];
+char buf38[200];
+char buf39[200];
+char buf40[200];
+char buf41[200];
+char buf42[200];
+char buf43[200];
+char buf44[200];
+char buf45[200];
+char buf46[200];
+char buf47[200];
+char buf48[200];
+char buf49[200];
+char buf50[200];
+char buf51[200];
+char buf52[200];
+char buf53[200];
+char buf54[200];
+char buf55[200];
+char buf56[200];
+char buf57[200];
+char buf58[200];
+char buf59[200];
+char buf60[200];
+char buf61[200];
+char buf62[200];
+char buf63[200];
+char buf64[200];
+char buf65[200];
+char buf66[200];
+char buf67[200];
+char buf68[200];
+char buf69[200];
+char buf70[200];
+char buf71[200];
+char buf72[200];
+char buf73[200];
+char buf74[200];
+char buf75[200];
+char buf76[200];
+char buf77[200];
+char buf78[200];
+char buf79[200];
+char buf80[200];
+char buf81[200];
+char buf82[200];
+char buf83[200];
+char buf84[200];
+char buf85[200];
+char buf86[200];
+char buf87[200];
+char buf88[200];
+char buf89[200];
+char buf90[200];
+char buf91[200];
+char buf92[200];
+char buf93[200];
+char buf94[200];
+char buf95[200];
+char buf96[200];
+char buf97[200];
+char buf98[200];
+char buf99[200];
+char buf100[200];
+char buf101[200];
+char buf102[200];
+char buf103[200];
+char buf104[200];
+char buf105[200];
+char buf106[200];
+char buf107[200];
+char buf108[200];
+char buf109[200];
+char buf110[200];
+char buf111[200];
+char buf112[200];
+char buf113[200];
+char buf114[200];
+char buf115[200];
+char buf116[200];
+char buf117[200];
+char buf118[200];
+char buf119[200];
+char buf120[200];
+char buf121[200];
+char buf122[200];
+char buf123[200];
+char buf124[200];
+char buf125[200];
+char buf126[200];
+char buf127[200];
+char buf128[200];
+char buf129[200];
+char buf130[200];
+char buf131[200];
+char buf132[200];
+char buf133[200];
+char buf134[200];
+char buf135[200];
+char buf136[200];
+char buf137[200];
+char buf138[200];
+char buf139[200];
+char buf140[200];
+char buf141[200];
+char buf142[200];
+char buf143[200];
+char buf144[200];
+char buf145[200];
+char buf146[200];
+char buf147[200];
+char buf148[200];
+char buf149[200];
+char buf150[200];
+char buf151[200];
+char buf152[200];
+char buf153[200];
+char buf154[200];
+char buf155[200];
+char buf156[200];
+char buf157[200];
+char buf158[200];
+char buf159[200];
+char buf160[200];
+char buf161[200];
+char buf162[200];
+char buf163[200];
+char buf164[200];
+char buf165[200];
+char buf166[200];
+char buf167[200];
+char buf168[200];
+char buf169[200];
+char buf170[200];
+char buf171[200];
+char buf172[200];
+char buf173[200];
+char buf174[200];
+char buf175[200];
+char buf176[200];
+char buf177[200];
+char buf178[200];
+char buf179[200];
+char buf180[200];
+char buf181[200];
+char buf182[200];
+char buf183[200];
+char buf184[200];
+char buf185[200];
+char buf186[200];
+char buf187[200];
+char buf188[200];
+char buf189[200];
+char buf190[200];
+char buf191[200];
+char buf192[200];
+char buf193[200];
+char buf194[200];
+char buf195[200];
+char buf196[200];
+char buf197[200];
+char buf198[200];
+char buf199[200];
+char buf200[200];
+char buf201[200];
+char buf202[200];
+char buf203[200];
+char buf204[200];
+char buf205[200];
+char buf206[200];
+char buf207[200];
+char buf208[200];
+char buf209[200];
+char buf210[200];
+char buf211[200];
+char buf212[200];
+char buf213[200];
+char buf214[200];
+char buf215[200];
+char buf216[200];
+char buf217[200];
+char buf218[200];
+char buf219[200];
+char buf220[200];
+char buf221[200];
+char buf222[200];
+char buf223[200];
+char buf224[200];
+char buf225[200];
+char buf226[200];
+char buf227[200];
+char buf228[200];
+char buf229[200];
+char buf230[200];
+char buf231[200];
+char buf232[200];
+char buf233[200];
+char buf234[200];
+char buf235[200];
+char buf236[200];
+char buf237[200];
+char buf238[200];
+char buf239[200];
+char buf240[200];
+char buf241[200];
+char buf242[200];
+char buf243[200];
+char buf244[200];
+char buf245[200];
+char buf246[200];
+char buf247[200];
+char buf248[200];
+char buf249[200];
+char buf250[200];
+char buf251[200];
+char buf252[200];
+char buf253[200];
+char buf254[200];
+char buf255[200];
+char buf256[200];
+char buf257[200];
+char buf258[200];
+char buf259[200];
+char buf260[200];
+char buf261[200];
+char buf262[200];
+char buf263[200];
+char buf264[200];
+char buf265[200];
+char buf266[200];
+char buf267[200];
+char buf268[200];
+char buf269[200];
+char buf270[200];
+char buf271[200];
+char buf272[200];
+char buf273[200];
+char buf274[200];
+char buf275[200];
+char buf276[200];
+char buf277[200];
+char buf278[200];
+char buf279[200];
+char buf280[200];
+char buf281[200];
+char buf282[200];
+char buf283[200];
+char buf284[200];
+char buf285[200];
+char buf286[200];
+char buf287[200];
+char buf288[200];
+char buf289[200];
+char buf290[200];
+char buf291[200];
+char buf292[200];
+char buf293[200];
+char buf294[200];
+char buf295[200];
+char buf296[200];
+char buf297[200];
+char buf298[200];
+char buf299[200];
+char buf300[200];
+char buf301[200];
+char buf302[200];
+char buf303[200];
+char buf304[200];
+char buf305[200];
+char buf306[200];
+char buf307[200];
+char buf308[200];
+char buf309[200];
+char buf310[200];
+char buf311[200];
+char buf312[200];
+char buf313[200];
+char buf314[200];
+char buf315[200];
+char buf316[200];
+char buf317[200];
+char buf318[200];
+char buf319[200];
+char buf320[200];
+char buf321[200];
+char buf322[200];
+char buf323[200];
+char buf324[200];
+char buf325[200];
+char buf326[200];
+char buf327[200];
+char buf328[200];
+char buf329[200];
+char buf330[200];
+char buf331[200];
+char buf332[200];
+char buf333[200];
+char buf334[200];
+char buf335[200];
+char buf336[200];
+char buf337[200];
+char buf338[200];
+char buf339[200];
+char buf340[200];
+char buf341[200];
+char buf342[200];
+char buf343[200];
+char buf344[200];
+char buf345[200];
+char buf346[200];
+char buf347[200];
+char buf348[200];
+char buf349[200];
+char buf350[200];
+char buf351[200];
+char buf352[200];
+char buf353[200];
+char buf354[200];
+char buf355[200];
+char buf356[200];
+char buf357[200];
+char buf358[200];
+char buf359[200];
+char buf360[200];
+char buf361[200];
+char buf362[200];
+char buf363[200];
+char buf364[200];
+char buf365[200];
+char buf366[200];
+char buf367[200];
+char buf368[200];
+char buf369[200];
+char buf370[200];
+char buf371[200];
+char buf372[200];
+char buf373[200];
+char buf374[200];
+char buf375[200];
+char buf376[200];
+char buf377[200];
+char buf378[200];
+char buf379[200];
+char buf380[200];
+char buf381[200];
+char buf382[200];
+char buf383[200];
+char buf384[200];
+char buf385[200];
+char buf386[200];
+char buf387[200];
+char buf388[200];
+char buf389[200];
+char buf390[200];
+char buf391[200];
+char buf392[200];
+char buf393[200];
+char buf394[200];
+char buf395[200];
+char buf396[200];
+char buf397[200];
+char buf398[200];
+char buf399[200];
+char buf400[200];
+char buf401[200];
+char buf402[200];
+char buf403[200];
+char buf404[200];
+char buf405[200];
+char buf406[200];
+char buf407[200];
+char buf408[200];
+char buf409[200];
+char buf410[200];
+char buf411[200];
+char buf412[200];
+char buf413[200];
+char buf414[200];
+char buf415[200];
+char buf416[200];
+char buf417[200];
+char buf418[200];
+char buf419[200];
+char buf420[200];
+char buf421[200];
+char buf422[200];
+char buf423[200];
+char buf424[200];
+char buf425[200];
+char buf426[200];
+char buf427[200];
+char buf428[200];
+char buf429[200];
+char buf430[200];
+char buf431[200];
+char buf432[200];
+char buf433[200];
+char buf434[200];
+char buf435[200];
+char buf436[200];
+char buf437[200];
+char buf438[200];
+char buf439[200];
+char buf440[200];
+char buf441[200];
+char buf442[200];
+char buf443[200];
+char buf444[200];
+char buf445[200];
+char buf446[200];
+char buf447[200];
+char buf448[200];
+char buf449[200];
+char buf450[200];
+char buf451[200];
+char buf452[200];
+char buf453[200];
+char buf454[200];
+char buf455[200];
+char buf456[200];
+char buf457[200];
+char buf458[200];
+char buf459[200];
+char buf460[200];
+char buf461[200];
+char buf462[200];
+char buf463[200];
+char buf464[200];
+char buf465[200];
+char buf466[200];
+char buf467[200];
+char buf468[200];
+char buf469[200];
+char buf470[200];
+char buf471[200];
+char buf472[200];
+char buf473[200];
+char buf474[200];
+char buf475[200];
+char buf476[200];
+char buf477[200];
+char buf478[200];
+char buf479[200];
+char buf480[200];
+char buf481[200];
+char buf482[200];
+char buf483[200];
+char buf484[200];
+char buf485[200];
+char buf486[200];
+char buf487[200];
+char buf488[200];
+char buf489[200];
+char buf490[200];
+char buf491[200];
+char buf492[200];
+char buf493[200];
+char buf494[200];
+char buf495[200];
+char buf496[200];
+char buf497[200];
+char buf498[200];
+char buf499[200];
+char buf500[200];
+char buf501[200];
+char buf502[200];
+char buf503[200];
+char buf504[200];
+char buf505[200];
+char buf506[200];
+char buf507[200];
+char buf508[200];
+char buf509[200];
+char buf510[200];
+char buf511[200];
+char buf512[200];
+char buf513[200];
+char buf514[200];
+char buf515[200];
+char buf516[200];
+char buf517[200];
+char buf518[200];
+char buf519[200];
+char buf520[200];
+char buf521[200];
+char buf522[200];
+char buf523[200];
+char buf524[200];
+char buf525[200];
+char buf526[200];
+char buf527[200];
+char buf528[200];
+char buf529[200];
+char buf530[200];
+char buf531[200];
+char buf532[200];
+char buf533[200];
+char buf534[200];
+char buf535[200];
+char buf536[200];
+char buf537[200];
+char buf538[200];
+char buf539[200];
+char buf540[200];
+char buf541[200];
+char buf542[200];
+char buf543[200];
+char buf544[200];
+char buf545[200];
+char buf546[200];
+char buf547[200];
+char buf548[200];
+char buf549[200];
+char buf550[200];
+char buf551[200];
+char buf552[200];
+char buf553[200];
+char buf554[200];
+char buf555[200];
+char buf556[200];
+char buf557[200];
+char buf558[200];
+char buf559[200];
+char buf560[200];
+char buf561[200];
+char buf562[200];
+char buf563[200];
+char buf564[200];
+char buf565[200];
+char buf566[200];
+char buf567[200];
+char buf568[200];
+char buf569[200];
+char buf570[200];
+char buf571[200];
+char buf572[200];
+char buf573[200];
+char buf574[200];
+char buf575[200];
+char buf576[200];
+char buf577[200];
+char buf578[200];
+char buf579[200];
+char buf580[200];
+char buf581[200];
+char buf582[200];
+char buf583[200];
+char buf584[200];
+char buf585[200];
+char buf586[200];
+char buf587[200];
+char buf588[200];
+char buf589[200];
+char buf590[200];
+char buf591[200];
+char buf592[200];
+char buf593[200];
+char buf594[200];
+char buf595[200];
+char buf596[200];
+char buf597[200];
+char buf598[200];
+char buf599[200];
+char buf600[200];
+char buf601[200];
+char buf602[200];
+char buf603[200];
+char buf604[200];
+char buf605[200];
+char buf606[200];
+char buf607[200];
+char buf608[200];
+char buf609[200];
+char buf610[200];
+char buf611[200];
+char buf612[200];
+char buf613[200];
+char buf614[200];
+char buf615[200];
+char buf616[200];
+char buf617[200];
+char buf618[200];
+char buf619[200];
+char buf620[200];
+char buf621[200];
+char buf622[200];
+char buf623[200];
+char buf624[200];
+char buf625[200];
+char buf626[200];
+char buf627[200];
+char buf628[200];
+char buf629[200];
+char buf630[200];
+char buf631[200];
+char buf632[200];
+char buf633[200];
+char buf634[200];
+char buf635[200];
+char buf636[200];
+char buf637[200];
+char buf638[200];
+char buf639[200];
+char buf640[200];
+char buf641[200];
+char buf642[200];
+char buf643[200];
+char buf644[200];
+char buf645[200];
+char buf646[200];
+char buf647[200];
+char buf648[200];
+char buf649[200];
+char buf650[200];
+char buf651[200];
+char buf652[200];
+char buf653[200];
+char buf654[200];
+char buf655[200];
+char buf656[200];
+char buf657[200];
+char buf658[200];
+char buf659[200];
+char buf660[200];
+char buf661[200];
+char buf662[200];
+char buf663[200];
+char buf664[200];
+char buf665[200];
+char buf666[200];
+char buf667[200];
+char buf668[200];
+char buf669[200];
+char buf670[200];
+char buf671[200];
+char buf672[200];
+char buf673[200];
+char buf674[200];
+char buf675[200];
+char buf676[200];
+char buf677[200];
+char buf678[200];
+char buf679[200];
+char buf680[200];
+char buf681[200];
+char buf682[200];
+char buf683[200];
+char buf684[200];
+char buf685[200];
+char buf686[200];
+char buf687[200];
+char buf688[200];
+char buf689[200];
+char buf690[200];
+char buf691[200];
+char buf692[200];
+char buf693[200];
+char buf694[200];
+char buf695[200];
+char buf696[200];
+char buf697[200];
+char buf698[200];
+char buf699[200];
+char buf700[200];
+char buf701[200];
+char buf702[200];
+char buf703[200];
+char buf704[200];
+char buf705[200];
+char buf706[200];
+char buf707[200];
+char buf708[200];
+char buf709[200];
+char buf710[200];
+char buf711[200];
+char buf712[200];
+char buf713[200];
+char buf714[200];
+char buf715[200];
+char buf716[200];
+char buf717[200];
+char buf718[200];
+char buf719[200];
+char buf720[200];
+char buf721[200];
+char buf722[200];
+char buf723[200];
+char buf724[200];
+char buf725[200];
+char buf726[200];
+char buf727[200];
+char buf728[200];
+char buf729[200];
+char buf730[200];
+char buf731[200];
+char buf732[200];
+char buf733[200];
+char buf734[200];
+char buf735[200];
+char buf736[200];
+char buf737[200];
+char buf738[200];
+char buf739[200];
+char buf740[200];
+char buf741[200];
+char buf742[200];
+char buf743[200];
+char buf744[200];
+char buf745[200];
+char buf746[200];
+char buf747[200];
+char buf748[200];
+char buf749[200];
+char buf750[200];
+char buf751[200];
+char buf752[200];
+char buf753[200];
+char buf754[200];
+char buf755[200];
+char buf756[200];
+char buf757[200];
+char buf758[200];
+char buf759[200];
+char buf760[200];
+char buf761[200];
+char buf762[200];
+char buf763[200];
+char buf764[200];
+char buf765[200];
+char buf766[200];
+char buf767[200];
+char buf768[200];
+char buf769[200];
+char buf770[200];
+char buf771[200];
+char buf772[200];
+char buf773[200];
+char buf774[200];
+char buf775[200];
+char buf776[200];
+char buf777[200];
+char buf778[200];
+char buf779[200];
+char buf780[200];
+char buf781[200];
+char buf782[200];
+char buf783[200];
+char buf784[200];
+char buf785[200];
+char buf786[200];
+char buf787[200];
+char buf788[200];
+char buf789[200];
+char buf790[200];
+char buf791[200];
+char buf792[200];
+char buf793[200];
+char buf794[200];
+char buf795[200];
+char buf796[200];
+char buf797[200];
+char buf798[200];
+char buf799[200];
+char buf800[200];
+char buf801[200];
+char buf802[200];
+char buf803[200];
+char buf804[200];
+char buf805[200];
+char buf806[200];
+char buf807[200];
+char buf808[200];
+char buf809[200];
+char buf810[200];
+char buf811[200];
+char buf812[200];
+char buf813[200];
+char buf814[200];
+char buf815[200];
+char buf816[200];
+char buf817[200];
+char buf818[200];
+char buf819[200];
+char buf820[200];
+char buf821[200];
+char buf822[200];
+char buf823[200];
+char buf824[200];
+char buf825[200];
+char buf826[200];
+char buf827[200];
+char buf828[200];
+char buf829[200];
+char buf830[200];
+char buf831[200];
+char buf832[200];
+char buf833[200];
+char buf834[200];
+char buf835[200];
+char buf836[200];
+char buf837[200];
+char buf838[200];
+char buf839[200];
+char buf840[200];
+char buf841[200];
+char buf842[200];
+char buf843[200];
+char buf844[200];
+char buf845[200];
+char buf846[200];
+char buf847[200];
+char buf848[200];
+char buf849[200];
+char buf850[200];
+char buf851[200];
+char buf852[200];
+char buf853[200];
+char buf854[200];
+char buf855[200];
+char buf856[200];
+char buf857[200];
+char buf858[200];
+char buf859[200];
+char buf860[200];
+char buf861[200];
+char buf862[200];
+char buf863[200];
+char buf864[200];
+char buf865[200];
+char buf866[200];
+char buf867[200];
+char buf868[200];
+char buf869[200];
+char buf870[200];
+char buf871[200];
+char buf872[200];
+char buf873[200];
+char buf874[200];
+char buf875[200];
+char buf876[200];
+char buf877[200];
+char buf878[200];
+char buf879[200];
+char buf880[200];
+char buf881[200];
+char buf882[200];
+char buf883[200];
+char buf884[200];
+char buf885[200];
+char buf886[200];
+char buf887[200];
+char buf888[200];
+char buf889[200];
+char buf890[200];
+char buf891[200];
+char buf892[200];
+char buf893[200];
+char buf894[200];
+char buf895[200];
+char buf896[200];
+char buf897[200];
+char buf898[200];
+char buf899[200];
+char buf900[200];
+char buf901[200];
+char buf902[200];
+char buf903[200];
+char buf904[200];
+char buf905[200];
+char buf906[200];
+char buf907[200];
+char buf908[200];
+char buf909[200];
+char buf910[200];
+char buf911[200];
+char buf912[200];
+char buf913[200];
+char buf914[200];
+char buf915[200];
+char buf916[200];
+char buf917[200];
+char buf918[200];
+char buf919[200];
+char buf920[200];
+char buf921[200];
+char buf922[200];
+char buf923[200];
+char buf924[200];
+char buf925[200];
+char buf926[200];
+char buf927[200];
+char buf928[200];
+char buf929[200];
+char buf930[200];
+char buf931[200];
+char buf932[200];
+char buf933[200];
+char buf934[200];
+char buf935[200];
+char buf936[200];
+char buf937[200];
+char buf938[200];
+char buf939[200];
+char buf940[200];
+char buf941[200];
+char buf942[200];
+char buf943[200];
+char buf944[200];
+char buf945[200];
+char buf946[200];
+char buf947[200];
+char buf948[200];
+char buf949[200];
+char buf950[200];
+char buf951[200];
+char buf952[200];
+char buf953[200];
+char buf954[200];
+char buf955[200];
+char buf956[200];
+char buf957[200];
+char buf958[200];
+char buf959[200];
+char buf960[200];
+char buf961[200];
+char buf962[200];
+char buf963[200];
+char buf964[200];
+char buf965[200];
+char buf966[200];
+char buf967[200];
+char buf968[200];
+char buf969[200];
+char buf970[200];
+char buf971[200];
+char buf972[200];
+char buf973[200];
+char buf974[200];
+char buf975[200];
+char buf976[200];
+char buf977[200];
+char buf978[200];
+char buf979[200];
+char buf980[200];
+char buf981[200];
+char buf982[200];
+char buf983[200];
+char buf984[200];
+char buf985[200];
+char buf986[200];
+char buf987[200];
+char buf988[200];
+char buf989[200];
+char buf990[200];
+char buf991[200];
+char buf992[200];
+char buf993[200];
+char buf994[200];
+char buf995[200];
+char buf996[200];
+char buf997[200];
+char buf998[200];
+char buf999[200];
+char buf1000[200];
+char buf1001[200];
+char buf1002[200];
+char buf1003[200];
+char buf1004[200];
+char buf1005[200];
+char buf1006[200];
+char buf1007[200];
+char buf1008[200];
+char buf1009[200];
+char buf1010[200];
+char buf1011[200];
+char buf1012[200];
+char buf1013[200];
+char buf1014[200];
+char buf1015[200];
+char buf1016[200];
+char buf1017[200];
+char buf1018[200];
+char buf1019[200];
+char buf1020[200];
+char buf1021[200];
+char buf1022[200];
+char buf1023[200];
+char buf1024[200];
+char buf1025[200];
+char buf1026[200];
+char buf1027[200];
+char buf1028[200];
+char buf1029[200];
+char buf1030[200];
+char buf1031[200];
+char buf1032[200];
+char buf1033[200];
+char buf1034[200];
+char buf1035[200];
+char buf1036[200];
+char buf1037[200];
+char buf1038[200];
+char buf1039[200];
+char buf1040[200];
+char buf1041[200];
+char buf1042[200];
+char buf1043[200];
+char buf1044[200];
+char buf1045[200];
+char buf1046[200];
+char buf1047[200];
+char buf1048[200];
+char buf1049[200];
+char buf1050[200];
+char buf1051[200];
+char buf1052[200];
+char buf1053[200];
+char buf1054[200];
+char buf1055[200];
+char buf1056[200];
+char buf1057[200];
+char buf1058[200];
+char buf1059[200];
+char buf1060[200];
+char buf1061[200];
+char buf1062[200];
+char buf1063[200];
+char buf1064[200];
+char buf1065[200];
+char buf1066[200];
+char buf1067[200];
+char buf1068[200];
+char buf1069[200];
+char buf1070[200];
+char buf1071[200];
+char buf1072[200];
+char buf1073[200];
+char buf1074[200];
+char buf1075[200];
+char buf1076[200];
+char buf1077[200];
+char buf1078[200];
+char buf1079[200];
+char buf1080[200];
+char buf1081[200];
+char buf1082[200];
+char buf1083[200];
+char buf1084[200];
+char buf1085[200];
+char buf1086[200];
+char buf1087[200];
+char buf1088[200];
+char buf1089[200];
+char buf1090[200];
+char buf1091[200];
+char buf1092[200];
+char buf1093[200];
+char buf1094[200];
+char buf1095[200];
+char buf1096[200];
+char buf1097[200];
+char buf1098[200];
+char buf1099[200];
+char buf1100[200];
+char buf1101[200];
+char buf1102[200];
+char buf1103[200];
+char buf1104[200];
+char buf1105[200];
+char buf1106[200];
+char buf1107[200];
+char buf1108[200];
+char buf1109[200];
+char buf1110[200];
+char buf1111[200];
+char buf1112[200];
+char buf1113[200];
+char buf1114[200];
+char buf1115[200];
+char buf1116[200];
+char buf1117[200];
+char buf1118[200];
+char buf1119[200];
+char buf1120[200];
+char buf1121[200];
+char buf1122[200];
+char buf1123[200];
+char buf1124[200];
+char buf1125[200];
+char buf1126[200];
+char buf1127[200];
+char buf1128[200];
+char buf1129[200];
+char buf1130[200];
+char buf1131[200];
+char buf1132[200];
+char buf1133[200];
+char buf1134[200];
+char buf1135[200];
+char buf1136[200];
+char buf1137[200];
+char buf1138[200];
+char buf1139[200];
+char buf1140[200];
+char buf1141[200];
+char buf1142[200];
+char buf1143[200];
+char buf1144[200];
+char buf1145[200];
+char buf1146[200];
+char buf1147[200];
+char buf1148[200];
+char buf1149[200];
+char buf1150[200];
+char buf1151[200];
+char buf1152[200];
+char buf1153[200];
+char buf1154[200];
+char buf1155[200];
+char buf1156[200];
+char buf1157[200];
+char buf1158[200];
+char buf1159[200];
+char buf1160[200];
+char buf1161[200];
+char buf1162[200];
+char buf1163[200];
+char buf1164[200];
+char buf1165[200];
+char buf1166[200];
+char buf1167[200];
+char buf1168[200];
+char buf1169[200];
+char buf1170[200];
+char buf1171[200];
+char buf1172[200];
+char buf1173[200];
+char buf1174[200];
+char buf1175[200];
+char buf1176[200];
+char buf1177[200];
+char buf1178[200];
+char buf1179[200];
+char buf1180[200];
+char buf1181[200];
+char buf1182[200];
+char buf1183[200];
+char buf1184[200];
+char buf1185[200];
+char buf1186[200];
+char buf1187[200];
+char buf1188[200];
+char buf1189[200];
+char buf1190[200];
+char buf1191[200];
+char buf1192[200];
+char buf1193[200];
+char buf1194[200];
+char buf1195[200];
+char buf1196[200];
+char buf1197[200];
+char buf1198[200];
+char buf1199[200];
+char buf1200[200];
+char buf1201[200];
+char buf1202[200];
+char buf1203[200];
+char buf1204[200];
+char buf1205[200];
+char buf1206[200];
+char buf1207[200];
+char buf1208[200];
+char buf1209[200];
+char buf1210[200];
+char buf1211[200];
+char buf1212[200];
+char buf1213[200];
+char buf1214[200];
+char buf1215[200];
+char buf1216[200];
+char buf1217[200];
+char buf1218[200];
+char buf1219[200];
+char buf1220[200];
+char buf1221[200];
+char buf1222[200];
+char buf1223[200];
+char buf1224[200];
+char buf1225[200];
+char buf1226[200];
+char buf1227[200];
+char buf1228[200];
+char buf1229[200];
+char buf1230[200];
+char buf1231[200];
+char buf1232[200];
+char buf1233[200];
+char buf1234[200];
+char buf1235[200];
+char buf1236[200];
+char buf1237[200];
+char buf1238[200];
+char buf1239[200];
+char buf1240[200];
+char buf1241[200];
+char buf1242[200];
+char buf1243[200];
+char buf1244[200];
+char buf1245[200];
+char buf1246[200];
+char buf1247[200];
+char buf1248[200];
+char buf1249[200];
+char buf1250[200];
+char buf1251[200];
+char buf1252[200];
+char buf1253[200];
+char buf1254[200];
+char buf1255[200];
+char buf1256[200];
+char buf1257[200];
+char buf1258[200];
+char buf1259[200];
+char buf1260[200];
+char buf1261[200];
+char buf1262[200];
+char buf1263[200];
+char buf1264[200];
+char buf1265[200];
+char buf1266[200];
+char buf1267[200];
+char buf1268[200];
+char buf1269[200];
+char buf1270[200];
+char buf1271[200];
+char buf1272[200];
+char buf1273[200];
+char buf1274[200];
+char buf1275[200];
+char buf1276[200];
+char buf1277[200];
+char buf1278[200];
+char buf1279[200];
+char buf1280[200];
+char buf1281[200];
+char buf1282[200];
+char buf1283[200];
+char buf1284[200];
+char buf1285[200];
+char buf1286[200];
+char buf1287[200];
+char buf1288[200];
+char buf1289[200];
+char buf1290[200];
+char buf1291[200];
+char buf1292[200];
+char buf1293[200];
+char buf1294[200];
+char buf1295[200];
+char buf1296[200];
+char buf1297[200];
+char buf1298[200];
+char buf1299[200];
+char buf1300[200];
+char buf1301[200];
+char buf1302[200];
+char buf1303[200];
+char buf1304[200];
+char buf1305[200];
+char buf1306[200];
+char buf1307[200];
+char buf1308[200];
+char buf1309[200];
+char buf1310[200];
+char buf1311[200];
+char buf1312[200];
+char buf1313[200];
+char buf1314[200];
+char buf1315[200];
+char buf1316[200];
+char buf1317[200];
+char buf1318[200];
+char buf1319[200];
+char buf1320[200];
+char buf1321[200];
+char buf1322[200];
+char buf1323[200];
+char buf1324[200];
+char buf1325[200];
+char buf1326[200];
+char buf1327[200];
+char buf1328[200];
+char buf1329[200];
+char buf1330[200];
+char buf1331[200];
+char buf1332[200];
+char buf1333[200];
+char buf1334[200];
+char buf1335[200];
+char buf1336[200];
+char buf1337[200];
+char buf1338[200];
+char buf1339[200];
+char buf1340[200];
+char buf1341[200];
+char buf1342[200];
+char buf1343[200];
+char buf1344[200];
+char buf1345[200];
+char buf1346[200];
+char buf1347[200];
+char buf1348[200];
+char buf1349[200];
+char buf1350[200];
+char buf1351[200];
+char buf1352[200];
+char buf1353[200];
+char buf1354[200];
+char buf1355[200];
+char buf1356[200];
+char buf1357[200];
+char buf1358[200];
+char buf1359[200];
+char buf1360[200];
+char buf1361[200];
+char buf1362[200];
+char buf1363[200];
+char buf1364[200];
+char buf1365[200];
+char buf1366[200];
+char buf1367[200];
+char buf1368[200];
+char buf1369[200];
+char buf1370[200];
+char buf1371[200];
+char buf1372[200];
+char buf1373[200];
+char buf1374[200];
+char buf1375[200];
+char buf1376[200];
+char buf1377[200];
+char buf1378[200];
+char buf1379[200];
+char buf1380[200];
+char buf1381[200];
+char buf1382[200];
+char buf1383[200];
+char buf1384[200];
+char buf1385[200];
+char buf1386[200];
+char buf1387[200];
+char buf1388[200];
+char buf1389[200];
+char buf1390[200];
+char buf1391[200];
+char buf1392[200];
+char buf1393[200];
+char buf1394[200];
+char buf1395[200];
+char buf1396[200];
+char buf1397[200];
+char buf1398[200];
+char buf1399[200];
+char buf1400[200];
+char buf1401[200];
+char buf1402[200];
+char buf1403[200];
+char buf1404[200];
+char buf1405[200];
+char buf1406[200];
+char buf1407[200];
+char buf1408[200];
+char buf1409[200];
+char buf1410[200];
+char buf1411[200];
+char buf1412[200];
+char buf1413[200];
+char buf1414[200];
+char buf1415[200];
+char buf1416[200];
+char buf1417[200];
+char buf1418[200];
+char buf1419[200];
+char buf1420[200];
+char buf1421[200];
+char buf1422[200];
+char buf1423[200];
+char buf1424[200];
+char buf1425[200];
+char buf1426[200];
+char buf1427[200];
+char buf1428[200];
+char buf1429[200];
+char buf1430[200];
+char buf1431[200];
+char buf1432[200];
+char buf1433[200];
+char buf1434[200];
+char buf1435[200];
+char buf1436[200];
+char buf1437[200];
+char buf1438[200];
+char buf1439[200];
+char buf1440[200];
+char buf1441[200];
+char buf1442[200];
+char buf1443[200];
+char buf1444[200];
+char buf1445[200];
+char buf1446[200];
+char buf1447[200];
+char buf1448[200];
+char buf1449[200];
+char buf1450[200];
+char buf1451[200];
+char buf1452[200];
+char buf1453[200];
+char buf1454[200];
+char buf1455[200];
+char buf1456[200];
+char buf1457[200];
+char buf1458[200];
+char buf1459[200];
+char buf1460[200];
+char buf1461[200];
+char buf1462[200];
+char buf1463[200];
+char buf1464[200];
+char buf1465[200];
+char buf1466[200];
+char buf1467[200];
+char buf1468[200];
+char buf1469[200];
+char buf1470[200];
+char buf1471[200];
+char buf1472[200];
+char buf1473[200];
+char buf1474[200];
+char buf1475[200];
+char buf1476[200];
+char buf1477[200];
+char buf1478[200];
+char buf1479[200];
+char buf1480[200];
+char buf1481[200];
+char buf1482[200];
+char buf1483[200];
+char buf1484[200];
+char buf1485[200];
+char buf1486[200];
+char buf1487[200];
+char buf1488[200];
+char buf1489[200];
+char buf1490[200];
+char buf1491[200];
+char buf1492[200];
+char buf1493[200];
+char buf1494[200];
+char buf1495[200];
+char buf1496[200];
+char buf1497[200];
+char buf1498[200];
+char buf1499[200];
+char buf1500[200];
+char buf1501[200];
+char buf1502[200];
+char buf1503[200];
+char buf1504[200];
+char buf1505[200];
+char buf1506[200];
+char buf1507[200];
+char buf1508[200];
+char buf1509[200];
+char buf1510[200];
+char buf1511[200];
+char buf1512[200];
+char buf1513[200];
+char buf1514[200];
+char buf1515[200];
+char buf1516[200];
+char buf1517[200];
+char buf1518[200];
+char buf1519[200];
+char buf1520[200];
+char buf1521[200];
+char buf1522[200];
+char buf1523[200];
+char buf1524[200];
+char buf1525[200];
+char buf1526[200];
+char buf1527[200];
+char buf1528[200];
+char buf1529[200];
+char buf1530[200];
+char buf1531[200];
+char buf1532[200];
+char buf1533[200];
+char buf1534[200];
+char buf1535[200];
+char buf1536[200];
+char buf1537[200];
+char buf1538[200];
+char buf1539[200];
+char buf1540[200];
+char buf1541[200];
+char buf1542[200];
+char buf1543[200];
+char buf1544[200];
+char buf1545[200];
+char buf1546[200];
+char buf1547[200];
+char buf1548[200];
+char buf1549[200];
+char buf1550[200];
+char buf1551[200];
+char buf1552[200];
+char buf1553[200];
+char buf1554[200];
+char buf1555[200];
+char buf1556[200];
+char buf1557[200];
+char buf1558[200];
+char buf1559[200];
+char buf1560[200];
+char buf1561[200];
+char buf1562[200];
+char buf1563[200];
+char buf1564[200];
+char buf1565[200];
+char buf1566[200];
+char buf1567[200];
+char buf1568[200];
+char buf1569[200];
+char buf1570[200];
+char buf1571[200];
+char buf1572[200];
+char buf1573[200];
+char buf1574[200];
+char buf1575[200];
+char buf1576[200];
+char buf1577[200];
+char buf1578[200];
+char buf1579[200];
+char buf1580[200];
+char buf1581[200];
+char buf1582[200];
+char buf1583[200];
+char buf1584[200];
+char buf1585[200];
+char buf1586[200];
+char buf1587[200];
+char buf1588[200];
+char buf1589[200];
+char buf1590[200];
+char buf1591[200];
+char buf1592[200];
+char buf1593[200];
+char buf1594[200];
+char buf1595[200];
+char buf1596[200];
+char buf1597[200];
+char buf1598[200];
+char buf1599[200];
+char buf1600[200];
+char buf1601[200];
+char buf1602[200];
+char buf1603[200];
+char buf1604[200];
+char buf1605[200];
+char buf1606[200];
+char buf1607[200];
+char buf1608[200];
+char buf1609[200];
+char buf1610[200];
+char buf1611[200];
+char buf1612[200];
+char buf1613[200];
+char buf1614[200];
+char buf1615[200];
+char buf1616[200];
+char buf1617[200];
+char buf1618[200];
+char buf1619[200];
+char buf1620[200];
+char buf1621[200];
+char buf1622[200];
+char buf1623[200];
+char buf1624[200];
+char buf1625[200];
+char buf1626[200];
+char buf1627[200];
+char buf1628[200];
+char buf1629[200];
+char buf1630[200];
+char buf1631[200];
+char buf1632[200];
+char buf1633[200];
+char buf1634[200];
+char buf1635[200];
+char buf1636[200];
+char buf1637[200];
+char buf1638[200];
+char buf1639[200];
+char buf1640[200];
+char buf1641[200];
+char buf1642[200];
+char buf1643[200];
+char buf1644[200];
+char buf1645[200];
+char buf1646[200];
+char buf1647[200];
+char buf1648[200];
+char buf1649[200];
+char buf1650[200];
+char buf1651[200];
+char buf1652[200];
+char buf1653[200];
+char buf1654[200];
+char buf1655[200];
+char buf1656[200];
+char buf1657[200];
+char buf1658[200];
+char buf1659[200];
+char buf1660[200];
+char buf1661[200];
+char buf1662[200];
+char buf1663[200];
+char buf1664[200];
+char buf1665[200];
+char buf1666[200];
+char buf1667[200];
+char buf1668[200];
+char buf1669[200];
+char buf1670[200];
+char buf1671[200];
+char buf1672[200];
+char buf1673[200];
+char buf1674[200];
+char buf1675[200];
+char buf1676[200];
+char buf1677[200];
+char buf1678[200];
+char buf1679[200];
+char buf1680[200];
+char buf1681[200];
+char buf1682[200];
+char buf1683[200];
+char buf1684[200];
+char buf1685[200];
+char buf1686[200];
+char buf1687[200];
+char buf1688[200];
+char buf1689[200];
+char buf1690[200];
+char buf1691[200];
+char buf1692[200];
+char buf1693[200];
+char buf1694[200];
+char buf1695[200];
+char buf1696[200];
+char buf1697[200];
+char buf1698[200];
+char buf1699[200];
+char buf1700[200];
+char buf1701[200];
+char buf1702[200];
+char buf1703[200];
+char buf1704[200];
+char buf1705[200];
+char buf1706[200];
+char buf1707[200];
+char buf1708[200];
+char buf1709[200];
+char buf1710[200];
+char buf1711[200];
+char buf1712[200];
+char buf1713[200];
+char buf1714[200];
+char buf1715[200];
+char buf1716[200];
+char buf1717[200];
+char buf1718[200];
+char buf1719[200];
+char buf1720[200];
+char buf1721[200];
+char buf1722[200];
+char buf1723[200];
+char buf1724[200];
+char buf1725[200];
+char buf1726[200];
+char buf1727[200];
+char buf1728[200];
+char buf1729[200];
+char buf1730[200];
+char buf1731[200];
+char buf1732[200];
+char buf1733[200];
+char buf1734[200];
+char buf1735[200];
+char buf1736[200];
+char buf1737[200];
+char buf1738[200];
+char buf1739[200];
+char buf1740[200];
+char buf1741[200];
+char buf1742[200];
+char buf1743[200];
+char buf1744[200];
+char buf1745[200];
+char buf1746[200];
+char buf1747[200];
+char buf1748[200];
+char buf1749[200];
+char buf1750[200];
+char buf1751[200];
+char buf1752[200];
+char buf1753[200];
+char buf1754[200];
+char buf1755[200];
+char buf1756[200];
+char buf1757[200];
+char buf1758[200];
+char buf1759[200];
+char buf1760[200];
+char buf1761[200];
+char buf1762[200];
+char buf1763[200];
+char buf1764[200];
+char buf1765[200];
+char buf1766[200];
+char buf1767[200];
+char buf1768[200];
+char buf1769[200];
+char buf1770[200];
+char buf1771[200];
+char buf1772[200];
+char buf1773[200];
+char buf1774[200];
+char buf1775[200];
+char buf1776[200];
+char buf1777[200];
+char buf1778[200];
+char buf1779[200];
+char buf1780[200];
+char buf1781[200];
+char buf1782[200];
+char buf1783[200];
+char buf1784[200];
+char buf1785[200];
+char buf1786[200];
+char buf1787[200];
+char buf1788[200];
+char buf1789[200];
+char buf1790[200];
+char buf1791[200];
+char buf1792[200];
+char buf1793[200];
+char buf1794[200];
+char buf1795[200];
+char buf1796[200];
+char buf1797[200];
+char buf1798[200];
+char buf1799[200];
+char buf1800[200];
+char buf1801[200];
+char buf1802[200];
+char buf1803[200];
+char buf1804[200];
+char buf1805[200];
+char buf1806[200];
+char buf1807[200];
+char buf1808[200];
+char buf1809[200];
+char buf1810[200];
+char buf1811[200];
+char buf1812[200];
+char buf1813[200];
+char buf1814[200];
+char buf1815[200];
+char buf1816[200];
+char buf1817[200];
+char buf1818[200];
+char buf1819[200];
+char buf1820[200];
+char buf1821[200];
+char buf1822[200];
+char buf1823[200];
+char buf1824[200];
+char buf1825[200];
+char buf1826[200];
+char buf1827[200];
+char buf1828[200];
+char buf1829[200];
+char buf1830[200];
+char buf1831[200];
+char buf1832[200];
+char buf1833[200];
+char buf1834[200];
+char buf1835[200];
+char buf1836[200];
+char buf1837[200];
+char buf1838[200];
+char buf1839[200];
+char buf1840[200];
+char buf1841[200];
+char buf1842[200];
+char buf1843[200];
+char buf1844[200];
+char buf1845[200];
+char buf1846[200];
+char buf1847[200];
+char buf1848[200];
+char buf1849[200];
+char buf1850[200];
+char buf1851[200];
+char buf1852[200];
+char buf1853[200];
+char buf1854[200];
+char buf1855[200];
+char buf1856[200];
+char buf1857[200];
+char buf1858[200];
+char buf1859[200];
+char buf1860[200];
+char buf1861[200];
+char buf1862[200];
+char buf1863[200];
+char buf1864[200];
+char buf1865[200];
+char buf1866[200];
+char buf1867[200];
+char buf1868[200];
+char buf1869[200];
+char buf1870[200];
+char buf1871[200];
+char buf1872[200];
+char buf1873[200];
+char buf1874[200];
+char buf1875[200];
+char buf1876[200];
+char buf1877[200];
+char buf1878[200];
+char buf1879[200];
+char buf1880[200];
+char buf1881[200];
+char buf1882[200];
+char buf1883[200];
+char buf1884[200];
+char buf1885[200];
+char buf1886[200];
+char buf1887[200];
+char buf1888[200];
+char buf1889[200];
+char buf1890[200];
+char buf1891[200];
+char buf1892[200];
+char buf1893[200];
+char buf1894[200];
+char buf1895[200];
+char buf1896[200];
+char buf1897[200];
+char buf1898[200];
+char buf1899[200];
+char buf1900[200];
+char buf1901[200];
+char buf1902[200];
+char buf1903[200];
+char buf1904[200];
+char buf1905[200];
+char buf1906[200];
+char buf1907[200];
+char buf1908[200];
+char buf1909[200];
+char buf1910[200];
+char buf1911[200];
+char buf1912[200];
+char buf1913[200];
+char buf1914[200];
+char buf1915[200];
+char buf1916[200];
+char buf1917[200];
+char buf1918[200];
+char buf1919[200];
+char buf1920[200];
+char buf1921[200];
+char buf1922[200];
+char buf1923[200];
+char buf1924[200];
+char buf1925[200];
+char buf1926[200];
+char buf1927[200];
+char buf1928[200];
+char buf1929[200];
+char buf1930[200];
+char buf1931[200];
+char buf1932[200];
+char buf1933[200];
+char buf1934[200];
+char buf1935[200];
+char buf1936[200];
+char buf1937[200];
+char buf1938[200];
+char buf1939[200];
+char buf1940[200];
+char buf1941[200];
+char buf1942[200];
+char buf1943[200];
+char buf1944[200];
+char buf1945[200];
+char buf1946[200];
+char buf1947[200];
+char buf1948[200];
+char buf1949[200];
+char buf1950[200];
+char buf1951[200];
+char buf1952[200];
+char buf1953[200];
+char buf1954[200];
+char buf1955[200];
+char buf1956[200];
+char buf1957[200];
+char buf1958[200];
+char buf1959[200];
+char buf1960[200];
+char buf1961[200];
+char buf1962[200];
+char buf1963[200];
+char buf1964[200];
+char buf1965[200];
+char buf1966[200];
+char buf1967[200];
+char buf1968[200];
+char buf1969[200];
+char buf1970[200];
+char buf1971[200];
+char buf1972[200];
+char buf1973[200];
+char buf1974[200];
+char buf1975[200];
+char buf1976[200];
+char buf1977[200];
+char buf1978[200];
+char buf1979[200];
+char buf1980[200];
+char buf1981[200];
+char buf1982[200];
+char buf1983[200];
+char buf1984[200];
+char buf1985[200];
+char buf1986[200];
+char buf1987[200];
+char buf1988[200];
+char buf1989[200];
+char buf1990[200];
+char buf1991[200];
+char buf1992[200];
+char buf1993[200];
+char buf1994[200];
+char buf1995[200];
+char buf1996[200];
+char buf1997[200];
+char buf1998[200];
+char buf1999[200];
+char buf2000[200];
+char buf2001[200];
+char buf2002[200];
+char buf2003[200];
+char buf2004[200];
+char buf2005[200];
+char buf2006[200];
+char buf2007[200];
+char buf2008[200];
+char buf2009[200];
+char buf2010[200];
+char buf2011[200];
+char buf2012[200];
+char buf2013[200];
+char buf2014[200];
+char buf2015[200];
+char buf2016[200];
+char buf2017[200];
+char buf2018[200];
+char buf2019[200];
+char buf2020[200];
+char buf2021[200];
+char buf2022[200];
+char buf2023[200];
+char buf2024[200];
+char buf2025[200];
+char buf2026[200];
+char buf2027[200];
+char buf2028[200];
+char buf2029[200];
+char buf2030[200];
+char buf2031[200];
+char buf2032[200];
+char buf2033[200];
+char buf2034[200];
+char buf2035[200];
+char buf2036[200];
+char buf2037[200];
+char buf2038[200];
+char buf2039[200];
+char buf2040[200];
+char buf2041[200];
+char buf2042[200];
+char buf2043[200];
+char buf2044[200];
+char buf2045[200];
+char buf2046[200];
+char buf2047[200];
+char buf2048[200];
+char buf2049[200];
+char buf2050[200];
+char buf2051[200];
+char buf2052[200];
+char buf2053[200];
+char buf2054[200];
+char buf2055[200];
+char buf2056[200];
+char buf2057[200];
+char buf2058[200];
+char buf2059[200];
+char buf2060[200];
+char buf2061[200];
+char buf2062[200];
+char buf2063[200];
+char buf2064[200];
+char buf2065[200];
+char buf2066[200];
+char buf2067[200];
+char buf2068[200];
+char buf2069[200];
+char buf2070[200];
+char buf2071[200];
+char buf2072[200];
+char buf2073[200];
+char buf2074[200];
+char buf2075[200];
+char buf2076[200];
+char buf2077[200];
+char buf2078[200];
+char buf2079[200];
+char buf2080[200];
+char buf2081[200];
+char buf2082[200];
+char buf2083[200];
+char buf2084[200];
+char buf2085[200];
+char buf2086[200];
+char buf2087[200];
+char buf2088[200];
+char buf2089[200];
+char buf2090[200];
+char buf2091[200];
+char buf2092[200];
+char buf2093[200];
+char buf2094[200];
+char buf2095[200];
+char buf2096[200];
+char buf2097[200];
+char buf2098[200];
+char buf2099[200];
+char buf2100[200];
+char buf2101[200];
+char buf2102[200];
+char buf2103[200];
+char buf2104[200];
+char buf2105[200];
+char buf2106[200];
+char buf2107[200];
+char buf2108[200];
+char buf2109[200];
+char buf2110[200];
+char buf2111[200];
+char buf2112[200];
+char buf2113[200];
+char buf2114[200];
+char buf2115[200];
+char buf2116[200];
+char buf2117[200];
+char buf2118[200];
+char buf2119[200];
+char buf2120[200];
+char buf2121[200];
+char buf2122[200];
+char buf2123[200];
+char buf2124[200];
+char buf2125[200];
+char buf2126[200];
+char buf2127[200];
+char buf2128[200];
+char buf2129[200];
+char buf2130[200];
+char buf2131[200];
+char buf2132[200];
+char buf2133[200];
+char buf2134[200];
+char buf2135[200];
+char buf2136[200];
+char buf2137[200];
+char buf2138[200];
+char buf2139[200];
+char buf2140[200];
+char buf2141[200];
+char buf2142[200];
+char buf2143[200];
+char buf2144[200];
+char buf2145[200];
+char buf2146[200];
+char buf2147[200];
+char buf2148[200];
+char buf2149[200];
+char buf2150[200];
+char buf2151[200];
+char buf2152[200];
+char buf2153[200];
+char buf2154[200];
+char buf2155[200];
+char buf2156[200];
+char buf2157[200];
+char buf2158[200];
+char buf2159[200];
+char buf2160[200];
+char buf2161[200];
+char buf2162[200];
+char buf2163[200];
+char buf2164[200];
+char buf2165[200];
+char buf2166[200];
+char buf2167[200];
+char buf2168[200];
+char buf2169[200];
+char buf2170[200];
+char buf2171[200];
+char buf2172[200];
+char buf2173[200];
+char buf2174[200];
+char buf2175[200];
+char buf2176[200];
+char buf2177[200];
+char buf2178[200];
+char buf2179[200];
+char buf2180[200];
+char buf2181[200];
+char buf2182[200];
+char buf2183[200];
+char buf2184[200];
+char buf2185[200];
+char buf2186[200];
+char buf2187[200];
+char buf2188[200];
+char buf2189[200];
+char buf2190[200];
+char buf2191[200];
+char buf2192[200];
+char buf2193[200];
+char buf2194[200];
+char buf2195[200];
+char buf2196[200];
+char buf2197[200];
+char buf2198[200];
+char buf2199[200];
+char buf2200[200];
+char buf2201[200];
+char buf2202[200];
+char buf2203[200];
+char buf2204[200];
+char buf2205[200];
+char buf2206[200];
+char buf2207[200];
+char buf2208[200];
+char buf2209[200];
+char buf2210[200];
+char buf2211[200];
+char buf2212[200];
+char buf2213[200];
+char buf2214[200];
+char buf2215[200];
+char buf2216[200];
+char buf2217[200];
+char buf2218[200];
+char buf2219[200];
+char buf2220[200];
+char buf2221[200];
+char buf2222[200];
+char buf2223[200];
+char buf2224[200];
+char buf2225[200];
+char buf2226[200];
+char buf2227[200];
+char buf2228[200];
+char buf2229[200];
+char buf2230[200];
+char buf2231[200];
+char buf2232[200];
+char buf2233[200];
+char buf2234[200];
+char buf2235[200];
+char buf2236[200];
+char buf2237[200];
+char buf2238[200];
+char buf2239[200];
+char buf2240[200];
+char buf2241[200];
+char buf2242[200];
+char buf2243[200];
+char buf2244[200];
+char buf2245[200];
+char buf2246[200];
+char buf2247[200];
+char buf2248[200];
+char buf2249[200];
+char buf2250[200];
+char buf2251[200];
+char buf2252[200];
+char buf2253[200];
+char buf2254[200];
+char buf2255[200];
+char buf2256[200];
+char buf2257[200];
+char buf2258[200];
+char buf2259[200];
+char buf2260[200];
+char buf2261[200];
+char buf2262[200];
+char buf2263[200];
+char buf2264[200];
+char buf2265[200];
+char buf2266[200];
+char buf2267[200];
+char buf2268[200];
+char buf2269[200];
+char buf2270[200];
+char buf2271[200];
+char buf2272[200];
+char buf2273[200];
+char buf2274[200];
+char buf2275[200];
+char buf2276[200];
+char buf2277[200];
+char buf2278[200];
+char buf2279[200];
+char buf2280[200];
+char buf2281[200];
+char buf2282[200];
+char buf2283[200];
+char buf2284[200];
+char buf2285[200];
+char buf2286[200];
+char buf2287[200];
+char buf2288[200];
+char buf2289[200];
+char buf2290[200];
+char buf2291[200];
+char buf2292[200];
+char buf2293[200];
+char buf2294[200];
+char buf2295[200];
+char buf2296[200];
+char buf2297[200];
+char buf2298[200];
+char buf2299[200];
+char buf2300[200];
+char buf2301[200];
+char buf2302[200];
+char buf2303[200];
+char buf2304[200];
+char buf2305[200];
+char buf2306[200];
+char buf2307[200];
+char buf2308[200];
+char buf2309[200];
+char buf2310[200];
+char buf2311[200];
+char buf2312[200];
+char buf2313[200];
+char buf2314[200];
+char buf2315[200];
+char buf2316[200];
+char buf2317[200];
+char buf2318[200];
+char buf2319[200];
+char buf2320[200];
+char buf2321[200];
+char buf2322[200];
+char buf2323[200];
+char buf2324[200];
+char buf2325[200];
+char buf2326[200];
+char buf2327[200];
+char buf2328[200];
+char buf2329[200];
+char buf2330[200];
+char buf2331[200];
+char buf2332[200];
+char buf2333[200];
+char buf2334[200];
+char buf2335[200];
+char buf2336[200];
+char buf2337[200];
+char buf2338[200];
+char buf2339[200];
+char buf2340[200];
+char buf2341[200];
+char buf2342[200];
+char buf2343[200];
+char buf2344[200];
+char buf2345[200];
+char buf2346[200];
+char buf2347[200];
+char buf2348[200];
+char buf2349[200];
+char buf2350[200];
+char buf2351[200];
+char buf2352[200];
+char buf2353[200];
+char buf2354[200];
+char buf2355[200];
+char buf2356[200];
+char buf2357[200];
+char buf2358[200];
+char buf2359[200];
+char buf2360[200];
+char buf2361[200];
+char buf2362[200];
+char buf2363[200];
+char buf2364[200];
+char buf2365[200];
+char buf2366[200];
+char buf2367[200];
+char buf2368[200];
+char buf2369[200];
+char buf2370[200];
+char buf2371[200];
+char buf2372[200];
+char buf2373[200];
+char buf2374[200];
+char buf2375[200];
+char buf2376[200];
+char buf2377[200];
+char buf2378[200];
+char buf2379[200];
+char buf2380[200];
+char buf2381[200];
+char buf2382[200];
+char buf2383[200];
+char buf2384[200];
+char buf2385[200];
+char buf2386[200];
+char buf2387[200];
+char buf2388[200];
+char buf2389[200];
+char buf2390[200];
+char buf2391[200];
+char buf2392[200];
+char buf2393[200];
+char buf2394[200];
+char buf2395[200];
+char buf2396[200];
+char buf2397[200];
+char buf2398[200];
+char buf2399[200];
+char buf2400[200];
+
+void root(const int* in) {
+    *(uchar*)buf0 = abs(*(char*)buf1);
+    *(uchar2*)buf2 = abs(*(char2*)buf3);
+    *(uchar3*)buf4 = abs(*(char3*)buf5);
+    *(uchar4*)buf6 = abs(*(char4*)buf7);
+    *(ushort*)buf8 = abs(*(short*)buf9);
+    *(ushort2*)buf10 = abs(*(short2*)buf11);
+    *(ushort3*)buf12 = abs(*(short3*)buf13);
+    *(ushort4*)buf14 = abs(*(short4*)buf15);
+    *(uint*)buf16 = abs(*(int*)buf17);
+    *(uint2*)buf18 = abs(*(int2*)buf19);
+    *(uint3*)buf20 = abs(*(int3*)buf21);
+    *(uint4*)buf22 = abs(*(int4*)buf23);
+    *(float*)buf24 = acos(*(float*)buf25);
+    *(float2*)buf26 = acos(*(float2*)buf27);
+    *(float3*)buf28 = acos(*(float3*)buf29);
+    *(float4*)buf30 = acos(*(float4*)buf31);
+    *(float*)buf32 = acosh(*(float*)buf33);
+    *(float2*)buf34 = acosh(*(float2*)buf35);
+    *(float3*)buf36 = acosh(*(float3*)buf37);
+    *(float4*)buf38 = acosh(*(float4*)buf39);
+    *(float*)buf40 = acospi(*(float*)buf41);
+    *(float2*)buf42 = acospi(*(float2*)buf43);
+    *(float3*)buf44 = acospi(*(float3*)buf45);
+    *(float4*)buf46 = acospi(*(float4*)buf47);
+    *(float*)buf48 = asin(*(float*)buf49);
+    *(float2*)buf50 = asin(*(float2*)buf51);
+    *(float3*)buf52 = asin(*(float3*)buf53);
+    *(float4*)buf54 = asin(*(float4*)buf55);
+    *(float*)buf56 = asinh(*(float*)buf57);
+    *(float2*)buf58 = asinh(*(float2*)buf59);
+    *(float3*)buf60 = asinh(*(float3*)buf61);
+    *(float4*)buf62 = asinh(*(float4*)buf63);
+    *(float*)buf64 = asinpi(*(float*)buf65);
+    *(float2*)buf66 = asinpi(*(float2*)buf67);
+    *(float3*)buf68 = asinpi(*(float3*)buf69);
+    *(float4*)buf70 = asinpi(*(float4*)buf71);
+    *(float*)buf72 = atan(*(float*)buf73);
+    *(float2*)buf74 = atan(*(float2*)buf75);
+    *(float3*)buf76 = atan(*(float3*)buf77);
+    *(float4*)buf78 = atan(*(float4*)buf79);
+    *(float*)buf80 = atan2(*(float*)buf81, *(float*)buf82);
+    *(float2*)buf83 = atan2(*(float2*)buf84, *(float2*)buf85);
+    *(float3*)buf86 = atan2(*(float3*)buf87, *(float3*)buf88);
+    *(float4*)buf89 = atan2(*(float4*)buf90, *(float4*)buf91);
+    *(float*)buf92 = atan2pi(*(float*)buf93, *(float*)buf94);
+    *(float2*)buf95 = atan2pi(*(float2*)buf96, *(float2*)buf97);
+    *(float3*)buf98 = atan2pi(*(float3*)buf99, *(float3*)buf100);
+    *(float4*)buf101 = atan2pi(*(float4*)buf102, *(float4*)buf103);
+    *(float*)buf104 = atanh(*(float*)buf105);
+    *(float2*)buf106 = atanh(*(float2*)buf107);
+    *(float3*)buf108 = atanh(*(float3*)buf109);
+    *(float4*)buf110 = atanh(*(float4*)buf111);
+    *(float*)buf112 = atanpi(*(float*)buf113);
+    *(float2*)buf114 = atanpi(*(float2*)buf115);
+    *(float3*)buf116 = atanpi(*(float3*)buf117);
+    *(float4*)buf118 = atanpi(*(float4*)buf119);
+    *(float*)buf120 = cbrt(*(float*)buf121);
+    *(float2*)buf122 = cbrt(*(float2*)buf123);
+    *(float3*)buf124 = cbrt(*(float3*)buf125);
+    *(float4*)buf126 = cbrt(*(float4*)buf127);
+    *(float*)buf128 = ceil(*(float*)buf129);
+    *(float2*)buf130 = ceil(*(float2*)buf131);
+    *(float3*)buf132 = ceil(*(float3*)buf133);
+    *(float4*)buf134 = ceil(*(float4*)buf135);
+    *(float*)buf136 = clamp(*(float*)buf137, *(float*)buf138, *(float*)buf139);
+    *(float2*)buf140 = clamp(*(float2*)buf141, *(float2*)buf142, *(float2*)buf143);
+    *(float3*)buf144 = clamp(*(float3*)buf145, *(float3*)buf146, *(float3*)buf147);
+    *(float4*)buf148 = clamp(*(float4*)buf149, *(float4*)buf150, *(float4*)buf151);
+    *(float2*)buf152 = clamp(*(float2*)buf153, *(float*)buf154, *(float*)buf155);
+    *(float3*)buf156 = clamp(*(float3*)buf157, *(float*)buf158, *(float*)buf159);
+    *(float4*)buf160 = clamp(*(float4*)buf161, *(float*)buf162, *(float*)buf163);
+    *(char*)buf164 = clz(*(char*)buf165);
+    *(char2*)buf166 = clz(*(char2*)buf167);
+    *(char3*)buf168 = clz(*(char3*)buf169);
+    *(char4*)buf170 = clz(*(char4*)buf171);
+    *(uchar*)buf172 = clz(*(uchar*)buf173);
+    *(uchar2*)buf174 = clz(*(uchar2*)buf175);
+    *(uchar3*)buf176 = clz(*(uchar3*)buf177);
+    *(uchar4*)buf178 = clz(*(uchar4*)buf179);
+    *(short*)buf180 = clz(*(short*)buf181);
+    *(short2*)buf182 = clz(*(short2*)buf183);
+    *(short3*)buf184 = clz(*(short3*)buf185);
+    *(short4*)buf186 = clz(*(short4*)buf187);
+    *(ushort*)buf188 = clz(*(ushort*)buf189);
+    *(ushort2*)buf190 = clz(*(ushort2*)buf191);
+    *(ushort3*)buf192 = clz(*(ushort3*)buf193);
+    *(ushort4*)buf194 = clz(*(ushort4*)buf195);
+    *(int*)buf196 = clz(*(int*)buf197);
+    *(int2*)buf198 = clz(*(int2*)buf199);
+    *(int3*)buf200 = clz(*(int3*)buf201);
+    *(int4*)buf202 = clz(*(int4*)buf203);
+    *(uint*)buf204 = clz(*(uint*)buf205);
+    *(uint2*)buf206 = clz(*(uint2*)buf207);
+    *(uint3*)buf208 = clz(*(uint3*)buf209);
+    *(uint4*)buf210 = clz(*(uint4*)buf211);
+    *(float2*)buf212 = convert_float2(*(float2*)buf213);
+    *(float3*)buf214 = convert_float3(*(float3*)buf215);
+    *(float4*)buf216 = convert_float4(*(float4*)buf217);
+    *(float2*)buf218 = convert_float2(*(char2*)buf219);
+    *(float3*)buf220 = convert_float3(*(char3*)buf221);
+    *(float4*)buf222 = convert_float4(*(char4*)buf223);
+    *(float2*)buf224 = convert_float2(*(uchar2*)buf225);
+    *(float3*)buf226 = convert_float3(*(uchar3*)buf227);
+    *(float4*)buf228 = convert_float4(*(uchar4*)buf229);
+    *(float2*)buf230 = convert_float2(*(short2*)buf231);
+    *(float3*)buf232 = convert_float3(*(short3*)buf233);
+    *(float4*)buf234 = convert_float4(*(short4*)buf235);
+    *(float2*)buf236 = convert_float2(*(ushort2*)buf237);
+    *(float3*)buf238 = convert_float3(*(ushort3*)buf239);
+    *(float4*)buf240 = convert_float4(*(ushort4*)buf241);
+    *(float2*)buf242 = convert_float2(*(int2*)buf243);
+    *(float3*)buf244 = convert_float3(*(int3*)buf245);
+    *(float4*)buf246 = convert_float4(*(int4*)buf247);
+    *(float2*)buf248 = convert_float2(*(uint2*)buf249);
+    *(float3*)buf250 = convert_float3(*(uint3*)buf251);
+    *(float4*)buf252 = convert_float4(*(uint4*)buf253);
+    *(char2*)buf254 = convert_char2(*(float2*)buf255);
+    *(char3*)buf256 = convert_char3(*(float3*)buf257);
+    *(char4*)buf258 = convert_char4(*(float4*)buf259);
+    *(char2*)buf260 = convert_char2(*(char2*)buf261);
+    *(char3*)buf262 = convert_char3(*(char3*)buf263);
+    *(char4*)buf264 = convert_char4(*(char4*)buf265);
+    *(char2*)buf266 = convert_char2(*(uchar2*)buf267);
+    *(char3*)buf268 = convert_char3(*(uchar3*)buf269);
+    *(char4*)buf270 = convert_char4(*(uchar4*)buf271);
+    *(char2*)buf272 = convert_char2(*(short2*)buf273);
+    *(char3*)buf274 = convert_char3(*(short3*)buf275);
+    *(char4*)buf276 = convert_char4(*(short4*)buf277);
+    *(char2*)buf278 = convert_char2(*(ushort2*)buf279);
+    *(char3*)buf280 = convert_char3(*(ushort3*)buf281);
+    *(char4*)buf282 = convert_char4(*(ushort4*)buf283);
+    *(char2*)buf284 = convert_char2(*(int2*)buf285);
+    *(char3*)buf286 = convert_char3(*(int3*)buf287);
+    *(char4*)buf288 = convert_char4(*(int4*)buf289);
+    *(char2*)buf290 = convert_char2(*(uint2*)buf291);
+    *(char3*)buf292 = convert_char3(*(uint3*)buf293);
+    *(char4*)buf294 = convert_char4(*(uint4*)buf295);
+    *(uchar2*)buf296 = convert_uchar2(*(float2*)buf297);
+    *(uchar3*)buf298 = convert_uchar3(*(float3*)buf299);
+    *(uchar4*)buf300 = convert_uchar4(*(float4*)buf301);
+    *(uchar2*)buf302 = convert_uchar2(*(char2*)buf303);
+    *(uchar3*)buf304 = convert_uchar3(*(char3*)buf305);
+    *(uchar4*)buf306 = convert_uchar4(*(char4*)buf307);
+    *(uchar2*)buf308 = convert_uchar2(*(uchar2*)buf309);
+    *(uchar3*)buf310 = convert_uchar3(*(uchar3*)buf311);
+    *(uchar4*)buf312 = convert_uchar4(*(uchar4*)buf313);
+    *(uchar2*)buf314 = convert_uchar2(*(short2*)buf315);
+    *(uchar3*)buf316 = convert_uchar3(*(short3*)buf317);
+    *(uchar4*)buf318 = convert_uchar4(*(short4*)buf319);
+    *(uchar2*)buf320 = convert_uchar2(*(ushort2*)buf321);
+    *(uchar3*)buf322 = convert_uchar3(*(ushort3*)buf323);
+    *(uchar4*)buf324 = convert_uchar4(*(ushort4*)buf325);
+    *(uchar2*)buf326 = convert_uchar2(*(int2*)buf327);
+    *(uchar3*)buf328 = convert_uchar3(*(int3*)buf329);
+    *(uchar4*)buf330 = convert_uchar4(*(int4*)buf331);
+    *(uchar2*)buf332 = convert_uchar2(*(uint2*)buf333);
+    *(uchar3*)buf334 = convert_uchar3(*(uint3*)buf335);
+    *(uchar4*)buf336 = convert_uchar4(*(uint4*)buf337);
+    *(short2*)buf338 = convert_short2(*(float2*)buf339);
+    *(short3*)buf340 = convert_short3(*(float3*)buf341);
+    *(short4*)buf342 = convert_short4(*(float4*)buf343);
+    *(short2*)buf344 = convert_short2(*(char2*)buf345);
+    *(short3*)buf346 = convert_short3(*(char3*)buf347);
+    *(short4*)buf348 = convert_short4(*(char4*)buf349);
+    *(short2*)buf350 = convert_short2(*(uchar2*)buf351);
+    *(short3*)buf352 = convert_short3(*(uchar3*)buf353);
+    *(short4*)buf354 = convert_short4(*(uchar4*)buf355);
+    *(short2*)buf356 = convert_short2(*(short2*)buf357);
+    *(short3*)buf358 = convert_short3(*(short3*)buf359);
+    *(short4*)buf360 = convert_short4(*(short4*)buf361);
+    *(short2*)buf362 = convert_short2(*(ushort2*)buf363);
+    *(short3*)buf364 = convert_short3(*(ushort3*)buf365);
+    *(short4*)buf366 = convert_short4(*(ushort4*)buf367);
+    *(short2*)buf368 = convert_short2(*(int2*)buf369);
+    *(short3*)buf370 = convert_short3(*(int3*)buf371);
+    *(short4*)buf372 = convert_short4(*(int4*)buf373);
+    *(short2*)buf374 = convert_short2(*(uint2*)buf375);
+    *(short3*)buf376 = convert_short3(*(uint3*)buf377);
+    *(short4*)buf378 = convert_short4(*(uint4*)buf379);
+    *(ushort2*)buf380 = convert_ushort2(*(float2*)buf381);
+    *(ushort3*)buf382 = convert_ushort3(*(float3*)buf383);
+    *(ushort4*)buf384 = convert_ushort4(*(float4*)buf385);
+    *(ushort2*)buf386 = convert_ushort2(*(char2*)buf387);
+    *(ushort3*)buf388 = convert_ushort3(*(char3*)buf389);
+    *(ushort4*)buf390 = convert_ushort4(*(char4*)buf391);
+    *(ushort2*)buf392 = convert_ushort2(*(uchar2*)buf393);
+    *(ushort3*)buf394 = convert_ushort3(*(uchar3*)buf395);
+    *(ushort4*)buf396 = convert_ushort4(*(uchar4*)buf397);
+    *(ushort2*)buf398 = convert_ushort2(*(short2*)buf399);
+    *(ushort3*)buf400 = convert_ushort3(*(short3*)buf401);
+    *(ushort4*)buf402 = convert_ushort4(*(short4*)buf403);
+    *(ushort2*)buf404 = convert_ushort2(*(ushort2*)buf405);
+    *(ushort3*)buf406 = convert_ushort3(*(ushort3*)buf407);
+    *(ushort4*)buf408 = convert_ushort4(*(ushort4*)buf409);
+    *(ushort2*)buf410 = convert_ushort2(*(int2*)buf411);
+    *(ushort3*)buf412 = convert_ushort3(*(int3*)buf413);
+    *(ushort4*)buf414 = convert_ushort4(*(int4*)buf415);
+    *(ushort2*)buf416 = convert_ushort2(*(uint2*)buf417);
+    *(ushort3*)buf418 = convert_ushort3(*(uint3*)buf419);
+    *(ushort4*)buf420 = convert_ushort4(*(uint4*)buf421);
+    *(int2*)buf422 = convert_int2(*(float2*)buf423);
+    *(int3*)buf424 = convert_int3(*(float3*)buf425);
+    *(int4*)buf426 = convert_int4(*(float4*)buf427);
+    *(int2*)buf428 = convert_int2(*(char2*)buf429);
+    *(int3*)buf430 = convert_int3(*(char3*)buf431);
+    *(int4*)buf432 = convert_int4(*(char4*)buf433);
+    *(int2*)buf434 = convert_int2(*(uchar2*)buf435);
+    *(int3*)buf436 = convert_int3(*(uchar3*)buf437);
+    *(int4*)buf438 = convert_int4(*(uchar4*)buf439);
+    *(int2*)buf440 = convert_int2(*(short2*)buf441);
+    *(int3*)buf442 = convert_int3(*(short3*)buf443);
+    *(int4*)buf444 = convert_int4(*(short4*)buf445);
+    *(int2*)buf446 = convert_int2(*(ushort2*)buf447);
+    *(int3*)buf448 = convert_int3(*(ushort3*)buf449);
+    *(int4*)buf450 = convert_int4(*(ushort4*)buf451);
+    *(int2*)buf452 = convert_int2(*(int2*)buf453);
+    *(int3*)buf454 = convert_int3(*(int3*)buf455);
+    *(int4*)buf456 = convert_int4(*(int4*)buf457);
+    *(int2*)buf458 = convert_int2(*(uint2*)buf459);
+    *(int3*)buf460 = convert_int3(*(uint3*)buf461);
+    *(int4*)buf462 = convert_int4(*(uint4*)buf463);
+    *(uint2*)buf464 = convert_uint2(*(float2*)buf465);
+    *(uint3*)buf466 = convert_uint3(*(float3*)buf467);
+    *(uint4*)buf468 = convert_uint4(*(float4*)buf469);
+    *(uint2*)buf470 = convert_uint2(*(char2*)buf471);
+    *(uint3*)buf472 = convert_uint3(*(char3*)buf473);
+    *(uint4*)buf474 = convert_uint4(*(char4*)buf475);
+    *(uint2*)buf476 = convert_uint2(*(uchar2*)buf477);
+    *(uint3*)buf478 = convert_uint3(*(uchar3*)buf479);
+    *(uint4*)buf480 = convert_uint4(*(uchar4*)buf481);
+    *(uint2*)buf482 = convert_uint2(*(short2*)buf483);
+    *(uint3*)buf484 = convert_uint3(*(short3*)buf485);
+    *(uint4*)buf486 = convert_uint4(*(short4*)buf487);
+    *(uint2*)buf488 = convert_uint2(*(ushort2*)buf489);
+    *(uint3*)buf490 = convert_uint3(*(ushort3*)buf491);
+    *(uint4*)buf492 = convert_uint4(*(ushort4*)buf493);
+    *(uint2*)buf494 = convert_uint2(*(int2*)buf495);
+    *(uint3*)buf496 = convert_uint3(*(int3*)buf497);
+    *(uint4*)buf498 = convert_uint4(*(int4*)buf499);
+    *(uint2*)buf500 = convert_uint2(*(uint2*)buf501);
+    *(uint3*)buf502 = convert_uint3(*(uint3*)buf503);
+    *(uint4*)buf504 = convert_uint4(*(uint4*)buf505);
+    *(float*)buf506 = copysign(*(float*)buf507, *(float*)buf508);
+    *(float2*)buf509 = copysign(*(float2*)buf510, *(float2*)buf511);
+    *(float3*)buf512 = copysign(*(float3*)buf513, *(float3*)buf514);
+    *(float4*)buf515 = copysign(*(float4*)buf516, *(float4*)buf517);
+    *(float*)buf518 = cos(*(float*)buf519);
+    *(float2*)buf520 = cos(*(float2*)buf521);
+    *(float3*)buf522 = cos(*(float3*)buf523);
+    *(float4*)buf524 = cos(*(float4*)buf525);
+    *(float*)buf526 = cosh(*(float*)buf527);
+    *(float2*)buf528 = cosh(*(float2*)buf529);
+    *(float3*)buf530 = cosh(*(float3*)buf531);
+    *(float4*)buf532 = cosh(*(float4*)buf533);
+    *(float*)buf534 = cospi(*(float*)buf535);
+    *(float2*)buf536 = cospi(*(float2*)buf537);
+    *(float3*)buf538 = cospi(*(float3*)buf539);
+    *(float4*)buf540 = cospi(*(float4*)buf541);
+    *(float3*)buf542 = cross(*(float3*)buf543, *(float3*)buf544);
+    *(float4*)buf545 = cross(*(float4*)buf546, *(float4*)buf547);
+    *(float*)buf548 = degrees(*(float*)buf549);
+    *(float2*)buf550 = degrees(*(float2*)buf551);
+    *(float3*)buf552 = degrees(*(float3*)buf553);
+    *(float4*)buf554 = degrees(*(float4*)buf555);
+    *(float*)buf556 = distance(*(float*)buf557, *(float*)buf558);
+    *(float*)buf559 = distance(*(float2*)buf560, *(float2*)buf561);
+    *(float*)buf562 = distance(*(float3*)buf563, *(float3*)buf564);
+    *(float*)buf565 = distance(*(float4*)buf566, *(float4*)buf567);
+    *(float*)buf568 = dot(*(float*)buf569, *(float*)buf570);
+    *(float*)buf571 = dot(*(float2*)buf572, *(float2*)buf573);
+    *(float*)buf574 = dot(*(float3*)buf575, *(float3*)buf576);
+    *(float*)buf577 = dot(*(float4*)buf578, *(float4*)buf579);
+    *(float*)buf580 = erf(*(float*)buf581);
+    *(float2*)buf582 = erf(*(float2*)buf583);
+    *(float3*)buf584 = erf(*(float3*)buf585);
+    *(float4*)buf586 = erf(*(float4*)buf587);
+    *(float*)buf588 = erfc(*(float*)buf589);
+    *(float2*)buf590 = erfc(*(float2*)buf591);
+    *(float3*)buf592 = erfc(*(float3*)buf593);
+    *(float4*)buf594 = erfc(*(float4*)buf595);
+    *(float*)buf596 = exp(*(float*)buf597);
+    *(float2*)buf598 = exp(*(float2*)buf599);
+    *(float3*)buf600 = exp(*(float3*)buf601);
+    *(float4*)buf602 = exp(*(float4*)buf603);
+    *(float*)buf604 = exp10(*(float*)buf605);
+    *(float2*)buf606 = exp10(*(float2*)buf607);
+    *(float3*)buf608 = exp10(*(float3*)buf609);
+    *(float4*)buf610 = exp10(*(float4*)buf611);
+    *(float*)buf612 = exp2(*(float*)buf613);
+    *(float2*)buf614 = exp2(*(float2*)buf615);
+    *(float3*)buf616 = exp2(*(float3*)buf617);
+    *(float4*)buf618 = exp2(*(float4*)buf619);
+    *(float*)buf620 = expm1(*(float*)buf621);
+    *(float2*)buf622 = expm1(*(float2*)buf623);
+    *(float3*)buf624 = expm1(*(float3*)buf625);
+    *(float4*)buf626 = expm1(*(float4*)buf627);
+    *(float*)buf628 = fabs(*(float*)buf629);
+    *(float2*)buf630 = fabs(*(float2*)buf631);
+    *(float3*)buf632 = fabs(*(float3*)buf633);
+    *(float4*)buf634 = fabs(*(float4*)buf635);
+    *(float*)buf636 = fdim(*(float*)buf637, *(float*)buf638);
+    *(float2*)buf639 = fdim(*(float2*)buf640, *(float2*)buf641);
+    *(float3*)buf642 = fdim(*(float3*)buf643, *(float3*)buf644);
+    *(float4*)buf645 = fdim(*(float4*)buf646, *(float4*)buf647);
+    *(float*)buf648 = floor(*(float*)buf649);
+    *(float2*)buf650 = floor(*(float2*)buf651);
+    *(float3*)buf652 = floor(*(float3*)buf653);
+    *(float4*)buf654 = floor(*(float4*)buf655);
+    *(float*)buf656 = fma(*(float*)buf657, *(float*)buf658, *(float*)buf659);
+    *(float2*)buf660 = fma(*(float2*)buf661, *(float2*)buf662, *(float2*)buf663);
+    *(float3*)buf664 = fma(*(float3*)buf665, *(float3*)buf666, *(float3*)buf667);
+    *(float4*)buf668 = fma(*(float4*)buf669, *(float4*)buf670, *(float4*)buf671);
+    *(float*)buf672 = fmax(*(float*)buf673, *(float*)buf674);
+    *(float2*)buf675 = fmax(*(float2*)buf676, *(float2*)buf677);
+    *(float3*)buf678 = fmax(*(float3*)buf679, *(float3*)buf680);
+    *(float4*)buf681 = fmax(*(float4*)buf682, *(float4*)buf683);
+    *(float2*)buf684 = fmax(*(float2*)buf685, *(float*)buf686);
+    *(float3*)buf687 = fmax(*(float3*)buf688, *(float*)buf689);
+    *(float4*)buf690 = fmax(*(float4*)buf691, *(float*)buf692);
+    *(float*)buf693 = fmin(*(float*)buf694, *(float*)buf695);
+    *(float2*)buf696 = fmin(*(float2*)buf697, *(float2*)buf698);
+    *(float3*)buf699 = fmin(*(float3*)buf700, *(float3*)buf701);
+    *(float4*)buf702 = fmin(*(float4*)buf703, *(float4*)buf704);
+    *(float2*)buf705 = fmin(*(float2*)buf706, *(float*)buf707);
+    *(float3*)buf708 = fmin(*(float3*)buf709, *(float*)buf710);
+    *(float4*)buf711 = fmin(*(float4*)buf712, *(float*)buf713);
+    *(float*)buf714 = fmod(*(float*)buf715, *(float*)buf716);
+    *(float2*)buf717 = fmod(*(float2*)buf718, *(float2*)buf719);
+    *(float3*)buf720 = fmod(*(float3*)buf721, *(float3*)buf722);
+    *(float4*)buf723 = fmod(*(float4*)buf724, *(float4*)buf725);
+    *(float*)buf726 = fract(*(float*)buf727, (float*) buf728);
+    *(float2*)buf729 = fract(*(float2*)buf730, (float2*) buf731);
+    *(float3*)buf732 = fract(*(float3*)buf733, (float3*) buf734);
+    *(float4*)buf735 = fract(*(float4*)buf736, (float4*) buf737);
+    *(float*)buf738 = fract(*(float*)buf739);
+    *(float2*)buf740 = fract(*(float2*)buf741);
+    *(float3*)buf742 = fract(*(float3*)buf743);
+    *(float4*)buf744 = fract(*(float4*)buf745);
+    *(float*)buf746 = frexp(*(float*)buf747, (int*) buf748);
+    *(float2*)buf749 = frexp(*(float2*)buf750, (int2*) buf751);
+    *(float3*)buf752 = frexp(*(float3*)buf753, (int3*) buf754);
+    *(float4*)buf755 = frexp(*(float4*)buf756, (int4*) buf757);
+    *(float*)buf758 = hypot(*(float*)buf759, *(float*)buf760);
+    *(float2*)buf761 = hypot(*(float2*)buf762, *(float2*)buf763);
+    *(float3*)buf764 = hypot(*(float3*)buf765, *(float3*)buf766);
+    *(float4*)buf767 = hypot(*(float4*)buf768, *(float4*)buf769);
+    *(int*)buf770 = ilogb(*(float*)buf771);
+    *(int2*)buf772 = ilogb(*(float2*)buf773);
+    *(int3*)buf774 = ilogb(*(float3*)buf775);
+    *(int4*)buf776 = ilogb(*(float4*)buf777);
+    *(float*)buf778 = ldexp(*(float*)buf779, *(int*)buf780);
+    *(float2*)buf781 = ldexp(*(float2*)buf782, *(int2*)buf783);
+    *(float3*)buf784 = ldexp(*(float3*)buf785, *(int3*)buf786);
+    *(float4*)buf787 = ldexp(*(float4*)buf788, *(int4*)buf789);
+    *(float2*)buf790 = ldexp(*(float2*)buf791, *(int*)buf792);
+    *(float3*)buf793 = ldexp(*(float3*)buf794, *(int*)buf795);
+    *(float4*)buf796 = ldexp(*(float4*)buf797, *(int*)buf798);
+    *(float*)buf799 = length(*(float*)buf800);
+    *(float*)buf801 = length(*(float2*)buf802);
+    *(float*)buf803 = length(*(float3*)buf804);
+    *(float*)buf805 = length(*(float4*)buf806);
+    *(float*)buf807 = lgamma(*(float*)buf808);
+    *(float2*)buf809 = lgamma(*(float2*)buf810);
+    *(float3*)buf811 = lgamma(*(float3*)buf812);
+    *(float4*)buf813 = lgamma(*(float4*)buf814);
+    *(float*)buf815 = lgamma(*(float*)buf816, (int*) buf817);
+    *(float2*)buf818 = lgamma(*(float2*)buf819, (int2*) buf820);
+    *(float3*)buf821 = lgamma(*(float3*)buf822, (int3*) buf823);
+    *(float4*)buf824 = lgamma(*(float4*)buf825, (int4*) buf826);
+    *(float*)buf827 = log(*(float*)buf828);
+    *(float2*)buf829 = log(*(float2*)buf830);
+    *(float3*)buf831 = log(*(float3*)buf832);
+    *(float4*)buf833 = log(*(float4*)buf834);
+    *(float*)buf835 = log10(*(float*)buf836);
+    *(float2*)buf837 = log10(*(float2*)buf838);
+    *(float3*)buf839 = log10(*(float3*)buf840);
+    *(float4*)buf841 = log10(*(float4*)buf842);
+    *(float*)buf843 = log1p(*(float*)buf844);
+    *(float2*)buf845 = log1p(*(float2*)buf846);
+    *(float3*)buf847 = log1p(*(float3*)buf848);
+    *(float4*)buf849 = log1p(*(float4*)buf850);
+    *(float*)buf851 = log2(*(float*)buf852);
+    *(float2*)buf853 = log2(*(float2*)buf854);
+    *(float3*)buf855 = log2(*(float3*)buf856);
+    *(float4*)buf857 = log2(*(float4*)buf858);
+    *(float*)buf859 = logb(*(float*)buf860);
+    *(float2*)buf861 = logb(*(float2*)buf862);
+    *(float3*)buf863 = logb(*(float3*)buf864);
+    *(float4*)buf865 = logb(*(float4*)buf866);
+    *(float*)buf867 = mad(*(float*)buf868, *(float*)buf869, *(float*)buf870);
+    *(float2*)buf871 = mad(*(float2*)buf872, *(float2*)buf873, *(float2*)buf874);
+    *(float3*)buf875 = mad(*(float3*)buf876, *(float3*)buf877, *(float3*)buf878);
+    *(float4*)buf879 = mad(*(float4*)buf880, *(float4*)buf881, *(float4*)buf882);
+    *(float*)buf883 = max(*(float*)buf884, *(float*)buf885);
+    *(float2*)buf886 = max(*(float2*)buf887, *(float2*)buf888);
+    *(float3*)buf889 = max(*(float3*)buf890, *(float3*)buf891);
+    *(float4*)buf892 = max(*(float4*)buf893, *(float4*)buf894);
+    *(float2*)buf895 = max(*(float2*)buf896, *(float*)buf897);
+    *(float3*)buf898 = max(*(float3*)buf899, *(float*)buf900);
+    *(float4*)buf901 = max(*(float4*)buf902, *(float*)buf903);
+    *(char*)buf904 = max(*(char*)buf905, *(char*)buf906);
+    *(uchar*)buf907 = max(*(uchar*)buf908, *(uchar*)buf909);
+    *(short*)buf910 = max(*(short*)buf911, *(short*)buf912);
+    *(ushort*)buf913 = max(*(ushort*)buf914, *(ushort*)buf915);
+    *(int*)buf916 = max(*(int*)buf917, *(int*)buf918);
+    *(uint*)buf919 = max(*(uint*)buf920, *(uint*)buf921);
+    *(char2*)buf922 = max(*(char2*)buf923, *(char2*)buf924);
+    *(uchar2*)buf925 = max(*(uchar2*)buf926, *(uchar2*)buf927);
+    *(short2*)buf928 = max(*(short2*)buf929, *(short2*)buf930);
+    *(ushort2*)buf931 = max(*(ushort2*)buf932, *(ushort2*)buf933);
+    *(int2*)buf934 = max(*(int2*)buf935, *(int2*)buf936);
+    *(uint2*)buf937 = max(*(uint2*)buf938, *(uint2*)buf939);
+    *(char3*)buf940 = max(*(char3*)buf941, *(char3*)buf942);
+    *(uchar3*)buf943 = max(*(uchar3*)buf944, *(uchar3*)buf945);
+    *(short3*)buf946 = max(*(short3*)buf947, *(short3*)buf948);
+    *(ushort3*)buf949 = max(*(ushort3*)buf950, *(ushort3*)buf951);
+    *(int3*)buf952 = max(*(int3*)buf953, *(int3*)buf954);
+    *(uint3*)buf955 = max(*(uint3*)buf956, *(uint3*)buf957);
+    *(char4*)buf958 = max(*(char4*)buf959, *(char4*)buf960);
+    *(uchar4*)buf961 = max(*(uchar4*)buf962, *(uchar4*)buf963);
+    *(short4*)buf964 = max(*(short4*)buf965, *(short4*)buf966);
+    *(ushort4*)buf967 = max(*(ushort4*)buf968, *(ushort4*)buf969);
+    *(int4*)buf970 = max(*(int4*)buf971, *(int4*)buf972);
+    *(uint4*)buf973 = max(*(uint4*)buf974, *(uint4*)buf975);
+    *(float*)buf976 = min(*(float*)buf977, *(float*)buf978);
+    *(float2*)buf979 = min(*(float2*)buf980, *(float2*)buf981);
+    *(float3*)buf982 = min(*(float3*)buf983, *(float3*)buf984);
+    *(float4*)buf985 = min(*(float4*)buf986, *(float4*)buf987);
+    *(float2*)buf988 = min(*(float2*)buf989, *(float*)buf990);
+    *(float3*)buf991 = min(*(float3*)buf992, *(float*)buf993);
+    *(float4*)buf994 = min(*(float4*)buf995, *(float*)buf996);
+    *(char*)buf997 = min(*(char*)buf998, *(char*)buf999);
+    *(uchar*)buf1000 = min(*(uchar*)buf1001, *(uchar*)buf1002);
+    *(short*)buf1003 = min(*(short*)buf1004, *(short*)buf1005);
+    *(ushort*)buf1006 = min(*(ushort*)buf1007, *(ushort*)buf1008);
+    *(int*)buf1009 = min(*(int*)buf1010, *(int*)buf1011);
+    *(uint*)buf1012 = min(*(uint*)buf1013, *(uint*)buf1014);
+    *(char2*)buf1015 = min(*(char2*)buf1016, *(char2*)buf1017);
+    *(uchar2*)buf1018 = min(*(uchar2*)buf1019, *(uchar2*)buf1020);
+    *(short2*)buf1021 = min(*(short2*)buf1022, *(short2*)buf1023);
+    *(ushort2*)buf1024 = min(*(ushort2*)buf1025, *(ushort2*)buf1026);
+    *(int2*)buf1027 = min(*(int2*)buf1028, *(int2*)buf1029);
+    *(uint2*)buf1030 = min(*(uint2*)buf1031, *(uint2*)buf1032);
+    *(char3*)buf1033 = min(*(char3*)buf1034, *(char3*)buf1035);
+    *(uchar3*)buf1036 = min(*(uchar3*)buf1037, *(uchar3*)buf1038);
+    *(short3*)buf1039 = min(*(short3*)buf1040, *(short3*)buf1041);
+    *(ushort3*)buf1042 = min(*(ushort3*)buf1043, *(ushort3*)buf1044);
+    *(int3*)buf1045 = min(*(int3*)buf1046, *(int3*)buf1047);
+    *(uint3*)buf1048 = min(*(uint3*)buf1049, *(uint3*)buf1050);
+    *(char4*)buf1051 = min(*(char4*)buf1052, *(char4*)buf1053);
+    *(uchar4*)buf1054 = min(*(uchar4*)buf1055, *(uchar4*)buf1056);
+    *(short4*)buf1057 = min(*(short4*)buf1058, *(short4*)buf1059);
+    *(ushort4*)buf1060 = min(*(ushort4*)buf1061, *(ushort4*)buf1062);
+    *(int4*)buf1063 = min(*(int4*)buf1064, *(int4*)buf1065);
+    *(uint4*)buf1066 = min(*(uint4*)buf1067, *(uint4*)buf1068);
+    *(float*)buf1069 = mix(*(float*)buf1070, *(float*)buf1071, *(float*)buf1072);
+    *(float2*)buf1073 = mix(*(float2*)buf1074, *(float2*)buf1075, *(float2*)buf1076);
+    *(float3*)buf1077 = mix(*(float3*)buf1078, *(float3*)buf1079, *(float3*)buf1080);
+    *(float4*)buf1081 = mix(*(float4*)buf1082, *(float4*)buf1083, *(float4*)buf1084);
+    *(float2*)buf1085 = mix(*(float2*)buf1086, *(float2*)buf1087, *(float*)buf1088);
+    *(float3*)buf1089 = mix(*(float3*)buf1090, *(float3*)buf1091, *(float*)buf1092);
+    *(float4*)buf1093 = mix(*(float4*)buf1094, *(float4*)buf1095, *(float*)buf1096);
+    *(float*)buf1097 = modf(*(float*)buf1098, (float*) buf1099);
+    *(float2*)buf1100 = modf(*(float2*)buf1101, (float2*) buf1102);
+    *(float3*)buf1103 = modf(*(float3*)buf1104, (float3*) buf1105);
+    *(float4*)buf1106 = modf(*(float4*)buf1107, (float4*) buf1108);
+    *(float*)buf1109 = nan(*(uint*)buf1110);
+    *(float*)buf1111 = nextafter(*(float*)buf1112, *(float*)buf1113);
+    *(float2*)buf1114 = nextafter(*(float2*)buf1115, *(float2*)buf1116);
+    *(float3*)buf1117 = nextafter(*(float3*)buf1118, *(float3*)buf1119);
+    *(float4*)buf1120 = nextafter(*(float4*)buf1121, *(float4*)buf1122);
+    *(float*)buf1123 = normalize(*(float*)buf1124);
+    *(float2*)buf1125 = normalize(*(float2*)buf1126);
+    *(float3*)buf1127 = normalize(*(float3*)buf1128);
+    *(float4*)buf1129 = normalize(*(float4*)buf1130);
+    *(float*)buf1131 = pow(*(float*)buf1132, *(float*)buf1133);
+    *(float2*)buf1134 = pow(*(float2*)buf1135, *(float2*)buf1136);
+    *(float3*)buf1137 = pow(*(float3*)buf1138, *(float3*)buf1139);
+    *(float4*)buf1140 = pow(*(float4*)buf1141, *(float4*)buf1142);
+    *(float*)buf1143 = pown(*(float*)buf1144, *(int*)buf1145);
+    *(float2*)buf1146 = pown(*(float2*)buf1147, *(int2*)buf1148);
+    *(float3*)buf1149 = pown(*(float3*)buf1150, *(int3*)buf1151);
+    *(float4*)buf1152 = pown(*(float4*)buf1153, *(int4*)buf1154);
+    *(float*)buf1155 = powr(*(float*)buf1156, *(float*)buf1157);
+    *(float2*)buf1158 = powr(*(float2*)buf1159, *(float2*)buf1160);
+    *(float3*)buf1161 = powr(*(float3*)buf1162, *(float3*)buf1163);
+    *(float4*)buf1164 = powr(*(float4*)buf1165, *(float4*)buf1166);
+    *(float*)buf1167 = radians(*(float*)buf1168);
+    *(float2*)buf1169 = radians(*(float2*)buf1170);
+    *(float3*)buf1171 = radians(*(float3*)buf1172);
+    *(float4*)buf1173 = radians(*(float4*)buf1174);
+    *(float*)buf1175 = remainder(*(float*)buf1176, *(float*)buf1177);
+    *(float2*)buf1178 = remainder(*(float2*)buf1179, *(float2*)buf1180);
+    *(float3*)buf1181 = remainder(*(float3*)buf1182, *(float3*)buf1183);
+    *(float4*)buf1184 = remainder(*(float4*)buf1185, *(float4*)buf1186);
+    *(float*)buf1187 = remquo(*(float*)buf1188, *(float*)buf1189, (int*) buf1190);
+    *(float2*)buf1191 = remquo(*(float2*)buf1192, *(float2*)buf1193, (int2*) buf1194);
+    *(float3*)buf1195 = remquo(*(float3*)buf1196, *(float3*)buf1197, (int3*) buf1198);
+    *(float4*)buf1199 = remquo(*(float4*)buf1200, *(float4*)buf1201, (int4*) buf1202);
+    *(float*)buf1203 = rint(*(float*)buf1204);
+    *(float2*)buf1205 = rint(*(float2*)buf1206);
+    *(float3*)buf1207 = rint(*(float3*)buf1208);
+    *(float4*)buf1209 = rint(*(float4*)buf1210);
+    *(float*)buf1211 = rootn(*(float*)buf1212, *(int*)buf1213);
+    *(float2*)buf1214 = rootn(*(float2*)buf1215, *(int2*)buf1216);
+    *(float3*)buf1217 = rootn(*(float3*)buf1218, *(int3*)buf1219);
+    *(float4*)buf1220 = rootn(*(float4*)buf1221, *(int4*)buf1222);
+    *(float*)buf1223 = round(*(float*)buf1224);
+    *(float2*)buf1225 = round(*(float2*)buf1226);
+    *(float3*)buf1227 = round(*(float3*)buf1228);
+    *(float4*)buf1229 = round(*(float4*)buf1230);
+    rsAllocationCopy1DRange(*(rs_allocation*)buf1231, *(uint32_t*)buf1232, *(uint32_t*)buf1233, *(uint32_t*)buf1234, *(rs_allocation*)buf1235, *(uint32_t*)buf1236, *(uint32_t*)buf1237);
+    rsAllocationCopy2DRange(*(rs_allocation*)buf1238, *(uint32_t*)buf1239, *(uint32_t*)buf1240, *(uint32_t*)buf1241, *(rs_allocation_cubemap_face*)buf1242, *(uint32_t*)buf1243, *(uint32_t*)buf1244, *(rs_allocation*)buf1245, *(uint32_t*)buf1246, *(uint32_t*)buf1247, *(uint32_t*)buf1248, *(rs_allocation_cubemap_face*)buf1249);
+    *(uint32_t*)buf1250 = rsAllocationGetDimFaces(*(rs_allocation*)buf1251);
+    *(uint32_t*)buf1252 = rsAllocationGetDimLOD(*(rs_allocation*)buf1253);
+    *(uint32_t*)buf1254 = rsAllocationGetDimX(*(rs_allocation*)buf1255);
+    *(uint32_t*)buf1256 = rsAllocationGetDimY(*(rs_allocation*)buf1257);
+    *(uint32_t*)buf1258 = rsAllocationGetDimZ(*(rs_allocation*)buf1259);
+    *(rs_element*)buf1260 = rsAllocationGetElement(*(rs_allocation*)buf1261);
+    *(int32_t*)buf1262 = rsAtomicAdd((volatile int32_t*) buf1263, *(int32_t*)buf1264);
+    *(int32_t*)buf1265 = rsAtomicAnd((volatile int32_t*) buf1266, *(int32_t*)buf1267);
+    *(int32_t*)buf1268 = rsAtomicCas((volatile int32_t*) buf1269, *(int32_t*)buf1270, *(int32_t*)buf1271);
+    *(uint32_t*)buf1272 = rsAtomicCas((volatile uint32_t*) buf1273, *(uint32_t*)buf1274, *(uint32_t*)buf1275);
+    *(int32_t*)buf1276 = rsAtomicDec((volatile int32_t*) buf1277);
+    *(int32_t*)buf1278 = rsAtomicInc((volatile int32_t*) buf1279);
+    *(uint32_t*)buf1280 = rsAtomicMax((volatile uint32_t*) buf1281, *(uint32_t*)buf1282);
+    *(int32_t*)buf1283 = rsAtomicMax((volatile int32_t*) buf1284, *(int32_t*)buf1285);
+    *(uint32_t*)buf1286 = rsAtomicMin((volatile uint32_t*) buf1287, *(uint32_t*)buf1288);
+    *(int32_t*)buf1289 = rsAtomicMin((volatile int32_t*) buf1290, *(int32_t*)buf1291);
+    *(int32_t*)buf1292 = rsAtomicOr((volatile int32_t*) buf1293, *(int32_t*)buf1294);
+    *(int32_t*)buf1295 = rsAtomicSub((volatile int32_t*) buf1296, *(int32_t*)buf1297);
+    *(int32_t*)buf1298 = rsAtomicXor((volatile int32_t*) buf1299, *(int32_t*)buf1300);
+    *(char*)buf1301 = rsClamp(*(char*)buf1302, *(char*)buf1303, *(char*)buf1304);
+    *(uchar*)buf1305 = rsClamp(*(uchar*)buf1306, *(uchar*)buf1307, *(uchar*)buf1308);
+    *(short*)buf1309 = rsClamp(*(short*)buf1310, *(short*)buf1311, *(short*)buf1312);
+    *(ushort*)buf1313 = rsClamp(*(ushort*)buf1314, *(ushort*)buf1315, *(ushort*)buf1316);
+    *(int*)buf1317 = rsClamp(*(int*)buf1318, *(int*)buf1319, *(int*)buf1320);
+    *(uint*)buf1321 = rsClamp(*(uint*)buf1322, *(uint*)buf1323, *(uint*)buf1324);
+    rsClearObject((rs_element*) buf1325);
+    rsClearObject((rs_type*) buf1326);
+    rsClearObject((rs_allocation*) buf1327);
+    rsClearObject((rs_sampler*) buf1328);
+    rsClearObject((rs_script*) buf1329);
+#ifndef __LP64__
+    rsClearObject((rs_mesh*) buf1330);
+    rsClearObject((rs_program_fragment*) buf1331);
+    rsClearObject((rs_program_vertex*) buf1332);
+    rsClearObject((rs_program_raster*) buf1333);
+    rsClearObject((rs_program_store*) buf1334);
+    rsClearObject((rs_font*) buf1335);
+#endif
+    rsDebug((const char*) buf1336, *(double*)buf1337);
+    rsDebug((const char*) buf1338, *(int*)buf1339);
+    rsDebug((const char*) buf1340, *(uint*)buf1341);
+    rsDebug((const char*) buf1342, *(long*)buf1343);
+    rsDebug((const char*) buf1344, *(ulong*)buf1345);
+    rsDebug((const char*) buf1346, *(float*)buf1347);
+    rsDebug((const char*) buf1348, *(float2*)buf1349);
+    rsDebug((const char*) buf1350, *(float3*)buf1351);
+    rsDebug((const char*) buf1352, *(float4*)buf1353);
+    rsDebug((const char*) buf1354, *(float*)buf1355, *(float*)buf1356);
+    rsDebug((const char*) buf1357, *(float*)buf1358, *(float*)buf1359, *(float*)buf1360);
+    rsDebug((const char*) buf1361, *(float*)buf1362, *(float*)buf1363, *(float*)buf1364, *(float*)buf1365);
+    rsDebug((const char*) buf1366, *(long long*)buf1367);
+    rsDebug((const char*) buf1368, *(unsigned long long*)buf1369);
+    rsDebug((const char*) buf1370, (const void*) buf1371);
+    rsDebug((const char*) buf1372, (const rs_matrix4x4*) buf1373);
+    rsDebug((const char*) buf1374, (const rs_matrix3x3*) buf1375);
+    rsDebug((const char*) buf1376, (const rs_matrix2x2*) buf1377);
+    rsExtractFrustumPlanes((const rs_matrix4x4*) buf1378, (float4*) buf1379, (float4*) buf1380, (float4*) buf1381, (float4*) buf1382, (float4*) buf1383, (float4*) buf1384);
+    rsForEach(*(rs_script*)buf1385, *(rs_allocation*)buf1386, *(rs_allocation*)buf1387, (const void*) buf1388, *(size_t*)buf1389, (const rs_script_call_t*) buf1390);
+    rsForEach(*(rs_script*)buf1391, *(rs_allocation*)buf1392, *(rs_allocation*)buf1393, (const void*) buf1394, *(size_t*)buf1395);
+    rsForEach(*(rs_script*)buf1396, *(rs_allocation*)buf1397, *(rs_allocation*)buf1398);
+    *(float*)buf1399 = rsFrac(*(float*)buf1400);
+    *(rs_allocation*)buf1401 = rsGetAllocation((const void*) buf1402);
+    *(float*)buf1403 = rsGetDt();
+    *(const void**)buf1404 = rsGetElementAt(*(rs_allocation*)buf1405, *(uint32_t*)buf1406);
+    *(const void**)buf1407 = rsGetElementAt(*(rs_allocation*)buf1408, *(uint32_t*)buf1409, *(uint32_t*)buf1410);
+    *(const void**)buf1411 = rsGetElementAt(*(rs_allocation*)buf1412, *(uint32_t*)buf1413, *(uint32_t*)buf1414, *(uint32_t*)buf1415);
+    *(float*)buf1416 = rsGetElementAt_float(*(rs_allocation*)buf1417, *(uint32_t*)buf1418);
+    *(float2*)buf1419 = rsGetElementAt_float2(*(rs_allocation*)buf1420, *(uint32_t*)buf1421);
+    *(float3*)buf1422 = rsGetElementAt_float3(*(rs_allocation*)buf1423, *(uint32_t*)buf1424);
+    *(float4*)buf1425 = rsGetElementAt_float4(*(rs_allocation*)buf1426, *(uint32_t*)buf1427);
+    *(double*)buf1428 = rsGetElementAt_double(*(rs_allocation*)buf1429, *(uint32_t*)buf1430);
+    *(double2*)buf1431 = rsGetElementAt_double2(*(rs_allocation*)buf1432, *(uint32_t*)buf1433);
+    *(double3*)buf1434 = rsGetElementAt_double3(*(rs_allocation*)buf1435, *(uint32_t*)buf1436);
+    *(double4*)buf1437 = rsGetElementAt_double4(*(rs_allocation*)buf1438, *(uint32_t*)buf1439);
+    *(char*)buf1440 = rsGetElementAt_char(*(rs_allocation*)buf1441, *(uint32_t*)buf1442);
+    *(char2*)buf1443 = rsGetElementAt_char2(*(rs_allocation*)buf1444, *(uint32_t*)buf1445);
+    *(char3*)buf1446 = rsGetElementAt_char3(*(rs_allocation*)buf1447, *(uint32_t*)buf1448);
+    *(char4*)buf1449 = rsGetElementAt_char4(*(rs_allocation*)buf1450, *(uint32_t*)buf1451);
+    *(uchar*)buf1452 = rsGetElementAt_uchar(*(rs_allocation*)buf1453, *(uint32_t*)buf1454);
+    *(uchar2*)buf1455 = rsGetElementAt_uchar2(*(rs_allocation*)buf1456, *(uint32_t*)buf1457);
+    *(uchar3*)buf1458 = rsGetElementAt_uchar3(*(rs_allocation*)buf1459, *(uint32_t*)buf1460);
+    *(uchar4*)buf1461 = rsGetElementAt_uchar4(*(rs_allocation*)buf1462, *(uint32_t*)buf1463);
+    *(short*)buf1464 = rsGetElementAt_short(*(rs_allocation*)buf1465, *(uint32_t*)buf1466);
+    *(short2*)buf1467 = rsGetElementAt_short2(*(rs_allocation*)buf1468, *(uint32_t*)buf1469);
+    *(short3*)buf1470 = rsGetElementAt_short3(*(rs_allocation*)buf1471, *(uint32_t*)buf1472);
+    *(short4*)buf1473 = rsGetElementAt_short4(*(rs_allocation*)buf1474, *(uint32_t*)buf1475);
+    *(ushort*)buf1476 = rsGetElementAt_ushort(*(rs_allocation*)buf1477, *(uint32_t*)buf1478);
+    *(ushort2*)buf1479 = rsGetElementAt_ushort2(*(rs_allocation*)buf1480, *(uint32_t*)buf1481);
+    *(ushort3*)buf1482 = rsGetElementAt_ushort3(*(rs_allocation*)buf1483, *(uint32_t*)buf1484);
+    *(ushort4*)buf1485 = rsGetElementAt_ushort4(*(rs_allocation*)buf1486, *(uint32_t*)buf1487);
+    *(int*)buf1488 = rsGetElementAt_int(*(rs_allocation*)buf1489, *(uint32_t*)buf1490);
+    *(int2*)buf1491 = rsGetElementAt_int2(*(rs_allocation*)buf1492, *(uint32_t*)buf1493);
+    *(int3*)buf1494 = rsGetElementAt_int3(*(rs_allocation*)buf1495, *(uint32_t*)buf1496);
+    *(int4*)buf1497 = rsGetElementAt_int4(*(rs_allocation*)buf1498, *(uint32_t*)buf1499);
+    *(uint*)buf1500 = rsGetElementAt_uint(*(rs_allocation*)buf1501, *(uint32_t*)buf1502);
+    *(uint2*)buf1503 = rsGetElementAt_uint2(*(rs_allocation*)buf1504, *(uint32_t*)buf1505);
+    *(uint3*)buf1506 = rsGetElementAt_uint3(*(rs_allocation*)buf1507, *(uint32_t*)buf1508);
+    *(uint4*)buf1509 = rsGetElementAt_uint4(*(rs_allocation*)buf1510, *(uint32_t*)buf1511);
+    *(long*)buf1512 = rsGetElementAt_long(*(rs_allocation*)buf1513, *(uint32_t*)buf1514);
+    *(long2*)buf1515 = rsGetElementAt_long2(*(rs_allocation*)buf1516, *(uint32_t*)buf1517);
+    *(long3*)buf1518 = rsGetElementAt_long3(*(rs_allocation*)buf1519, *(uint32_t*)buf1520);
+    *(long4*)buf1521 = rsGetElementAt_long4(*(rs_allocation*)buf1522, *(uint32_t*)buf1523);
+    *(ulong*)buf1524 = rsGetElementAt_ulong(*(rs_allocation*)buf1525, *(uint32_t*)buf1526);
+    *(ulong2*)buf1527 = rsGetElementAt_ulong2(*(rs_allocation*)buf1528, *(uint32_t*)buf1529);
+    *(ulong3*)buf1530 = rsGetElementAt_ulong3(*(rs_allocation*)buf1531, *(uint32_t*)buf1532);
+    *(ulong4*)buf1533 = rsGetElementAt_ulong4(*(rs_allocation*)buf1534, *(uint32_t*)buf1535);
+    *(float*)buf1536 = rsGetElementAt_float(*(rs_allocation*)buf1537, *(uint32_t*)buf1538, *(uint32_t*)buf1539);
+    *(float2*)buf1540 = rsGetElementAt_float2(*(rs_allocation*)buf1541, *(uint32_t*)buf1542, *(uint32_t*)buf1543);
+    *(float3*)buf1544 = rsGetElementAt_float3(*(rs_allocation*)buf1545, *(uint32_t*)buf1546, *(uint32_t*)buf1547);
+    *(float4*)buf1548 = rsGetElementAt_float4(*(rs_allocation*)buf1549, *(uint32_t*)buf1550, *(uint32_t*)buf1551);
+    *(double*)buf1552 = rsGetElementAt_double(*(rs_allocation*)buf1553, *(uint32_t*)buf1554, *(uint32_t*)buf1555);
+    *(double2*)buf1556 = rsGetElementAt_double2(*(rs_allocation*)buf1557, *(uint32_t*)buf1558, *(uint32_t*)buf1559);
+    *(double3*)buf1560 = rsGetElementAt_double3(*(rs_allocation*)buf1561, *(uint32_t*)buf1562, *(uint32_t*)buf1563);
+    *(double4*)buf1564 = rsGetElementAt_double4(*(rs_allocation*)buf1565, *(uint32_t*)buf1566, *(uint32_t*)buf1567);
+    *(char*)buf1568 = rsGetElementAt_char(*(rs_allocation*)buf1569, *(uint32_t*)buf1570, *(uint32_t*)buf1571);
+    *(char2*)buf1572 = rsGetElementAt_char2(*(rs_allocation*)buf1573, *(uint32_t*)buf1574, *(uint32_t*)buf1575);
+    *(char3*)buf1576 = rsGetElementAt_char3(*(rs_allocation*)buf1577, *(uint32_t*)buf1578, *(uint32_t*)buf1579);
+    *(char4*)buf1580 = rsGetElementAt_char4(*(rs_allocation*)buf1581, *(uint32_t*)buf1582, *(uint32_t*)buf1583);
+    *(uchar*)buf1584 = rsGetElementAt_uchar(*(rs_allocation*)buf1585, *(uint32_t*)buf1586, *(uint32_t*)buf1587);
+    *(uchar2*)buf1588 = rsGetElementAt_uchar2(*(rs_allocation*)buf1589, *(uint32_t*)buf1590, *(uint32_t*)buf1591);
+    *(uchar3*)buf1592 = rsGetElementAt_uchar3(*(rs_allocation*)buf1593, *(uint32_t*)buf1594, *(uint32_t*)buf1595);
+    *(uchar4*)buf1596 = rsGetElementAt_uchar4(*(rs_allocation*)buf1597, *(uint32_t*)buf1598, *(uint32_t*)buf1599);
+    *(short*)buf1600 = rsGetElementAt_short(*(rs_allocation*)buf1601, *(uint32_t*)buf1602, *(uint32_t*)buf1603);
+    *(short2*)buf1604 = rsGetElementAt_short2(*(rs_allocation*)buf1605, *(uint32_t*)buf1606, *(uint32_t*)buf1607);
+    *(short3*)buf1608 = rsGetElementAt_short3(*(rs_allocation*)buf1609, *(uint32_t*)buf1610, *(uint32_t*)buf1611);
+    *(short4*)buf1612 = rsGetElementAt_short4(*(rs_allocation*)buf1613, *(uint32_t*)buf1614, *(uint32_t*)buf1615);
+    *(ushort*)buf1616 = rsGetElementAt_ushort(*(rs_allocation*)buf1617, *(uint32_t*)buf1618, *(uint32_t*)buf1619);
+    *(ushort2*)buf1620 = rsGetElementAt_ushort2(*(rs_allocation*)buf1621, *(uint32_t*)buf1622, *(uint32_t*)buf1623);
+    *(ushort3*)buf1624 = rsGetElementAt_ushort3(*(rs_allocation*)buf1625, *(uint32_t*)buf1626, *(uint32_t*)buf1627);
+    *(ushort4*)buf1628 = rsGetElementAt_ushort4(*(rs_allocation*)buf1629, *(uint32_t*)buf1630, *(uint32_t*)buf1631);
+    *(int*)buf1632 = rsGetElementAt_int(*(rs_allocation*)buf1633, *(uint32_t*)buf1634, *(uint32_t*)buf1635);
+    *(int2*)buf1636 = rsGetElementAt_int2(*(rs_allocation*)buf1637, *(uint32_t*)buf1638, *(uint32_t*)buf1639);
+    *(int3*)buf1640 = rsGetElementAt_int3(*(rs_allocation*)buf1641, *(uint32_t*)buf1642, *(uint32_t*)buf1643);
+    *(int4*)buf1644 = rsGetElementAt_int4(*(rs_allocation*)buf1645, *(uint32_t*)buf1646, *(uint32_t*)buf1647);
+    *(uint*)buf1648 = rsGetElementAt_uint(*(rs_allocation*)buf1649, *(uint32_t*)buf1650, *(uint32_t*)buf1651);
+    *(uint2*)buf1652 = rsGetElementAt_uint2(*(rs_allocation*)buf1653, *(uint32_t*)buf1654, *(uint32_t*)buf1655);
+    *(uint3*)buf1656 = rsGetElementAt_uint3(*(rs_allocation*)buf1657, *(uint32_t*)buf1658, *(uint32_t*)buf1659);
+    *(uint4*)buf1660 = rsGetElementAt_uint4(*(rs_allocation*)buf1661, *(uint32_t*)buf1662, *(uint32_t*)buf1663);
+    *(long*)buf1664 = rsGetElementAt_long(*(rs_allocation*)buf1665, *(uint32_t*)buf1666, *(uint32_t*)buf1667);
+    *(long2*)buf1668 = rsGetElementAt_long2(*(rs_allocation*)buf1669, *(uint32_t*)buf1670, *(uint32_t*)buf1671);
+    *(long3*)buf1672 = rsGetElementAt_long3(*(rs_allocation*)buf1673, *(uint32_t*)buf1674, *(uint32_t*)buf1675);
+    *(long4*)buf1676 = rsGetElementAt_long4(*(rs_allocation*)buf1677, *(uint32_t*)buf1678, *(uint32_t*)buf1679);
+    *(ulong*)buf1680 = rsGetElementAt_ulong(*(rs_allocation*)buf1681, *(uint32_t*)buf1682, *(uint32_t*)buf1683);
+    *(ulong2*)buf1684 = rsGetElementAt_ulong2(*(rs_allocation*)buf1685, *(uint32_t*)buf1686, *(uint32_t*)buf1687);
+    *(ulong3*)buf1688 = rsGetElementAt_ulong3(*(rs_allocation*)buf1689, *(uint32_t*)buf1690, *(uint32_t*)buf1691);
+    *(ulong4*)buf1692 = rsGetElementAt_ulong4(*(rs_allocation*)buf1693, *(uint32_t*)buf1694, *(uint32_t*)buf1695);
+    *(float*)buf1696 = rsGetElementAt_float(*(rs_allocation*)buf1697, *(uint32_t*)buf1698, *(uint32_t*)buf1699, *(uint32_t*)buf1700);
+    *(float2*)buf1701 = rsGetElementAt_float2(*(rs_allocation*)buf1702, *(uint32_t*)buf1703, *(uint32_t*)buf1704, *(uint32_t*)buf1705);
+    *(float3*)buf1706 = rsGetElementAt_float3(*(rs_allocation*)buf1707, *(uint32_t*)buf1708, *(uint32_t*)buf1709, *(uint32_t*)buf1710);
+    *(float4*)buf1711 = rsGetElementAt_float4(*(rs_allocation*)buf1712, *(uint32_t*)buf1713, *(uint32_t*)buf1714, *(uint32_t*)buf1715);
+    *(double*)buf1716 = rsGetElementAt_double(*(rs_allocation*)buf1717, *(uint32_t*)buf1718, *(uint32_t*)buf1719, *(uint32_t*)buf1720);
+    *(double2*)buf1721 = rsGetElementAt_double2(*(rs_allocation*)buf1722, *(uint32_t*)buf1723, *(uint32_t*)buf1724, *(uint32_t*)buf1725);
+    *(double3*)buf1726 = rsGetElementAt_double3(*(rs_allocation*)buf1727, *(uint32_t*)buf1728, *(uint32_t*)buf1729, *(uint32_t*)buf1730);
+    *(double4*)buf1731 = rsGetElementAt_double4(*(rs_allocation*)buf1732, *(uint32_t*)buf1733, *(uint32_t*)buf1734, *(uint32_t*)buf1735);
+    *(char*)buf1736 = rsGetElementAt_char(*(rs_allocation*)buf1737, *(uint32_t*)buf1738, *(uint32_t*)buf1739, *(uint32_t*)buf1740);
+    *(char2*)buf1741 = rsGetElementAt_char2(*(rs_allocation*)buf1742, *(uint32_t*)buf1743, *(uint32_t*)buf1744, *(uint32_t*)buf1745);
+    *(char3*)buf1746 = rsGetElementAt_char3(*(rs_allocation*)buf1747, *(uint32_t*)buf1748, *(uint32_t*)buf1749, *(uint32_t*)buf1750);
+    *(char4*)buf1751 = rsGetElementAt_char4(*(rs_allocation*)buf1752, *(uint32_t*)buf1753, *(uint32_t*)buf1754, *(uint32_t*)buf1755);
+    *(uchar*)buf1756 = rsGetElementAt_uchar(*(rs_allocation*)buf1757, *(uint32_t*)buf1758, *(uint32_t*)buf1759, *(uint32_t*)buf1760);
+    *(uchar2*)buf1761 = rsGetElementAt_uchar2(*(rs_allocation*)buf1762, *(uint32_t*)buf1763, *(uint32_t*)buf1764, *(uint32_t*)buf1765);
+    *(uchar3*)buf1766 = rsGetElementAt_uchar3(*(rs_allocation*)buf1767, *(uint32_t*)buf1768, *(uint32_t*)buf1769, *(uint32_t*)buf1770);
+    *(uchar4*)buf1771 = rsGetElementAt_uchar4(*(rs_allocation*)buf1772, *(uint32_t*)buf1773, *(uint32_t*)buf1774, *(uint32_t*)buf1775);
+    *(short*)buf1776 = rsGetElementAt_short(*(rs_allocation*)buf1777, *(uint32_t*)buf1778, *(uint32_t*)buf1779, *(uint32_t*)buf1780);
+    *(short2*)buf1781 = rsGetElementAt_short2(*(rs_allocation*)buf1782, *(uint32_t*)buf1783, *(uint32_t*)buf1784, *(uint32_t*)buf1785);
+    *(short3*)buf1786 = rsGetElementAt_short3(*(rs_allocation*)buf1787, *(uint32_t*)buf1788, *(uint32_t*)buf1789, *(uint32_t*)buf1790);
+    *(short4*)buf1791 = rsGetElementAt_short4(*(rs_allocation*)buf1792, *(uint32_t*)buf1793, *(uint32_t*)buf1794, *(uint32_t*)buf1795);
+    *(ushort*)buf1796 = rsGetElementAt_ushort(*(rs_allocation*)buf1797, *(uint32_t*)buf1798, *(uint32_t*)buf1799, *(uint32_t*)buf1800);
+    *(ushort2*)buf1801 = rsGetElementAt_ushort2(*(rs_allocation*)buf1802, *(uint32_t*)buf1803, *(uint32_t*)buf1804, *(uint32_t*)buf1805);
+    *(ushort3*)buf1806 = rsGetElementAt_ushort3(*(rs_allocation*)buf1807, *(uint32_t*)buf1808, *(uint32_t*)buf1809, *(uint32_t*)buf1810);
+    *(ushort4*)buf1811 = rsGetElementAt_ushort4(*(rs_allocation*)buf1812, *(uint32_t*)buf1813, *(uint32_t*)buf1814, *(uint32_t*)buf1815);
+    *(int*)buf1816 = rsGetElementAt_int(*(rs_allocation*)buf1817, *(uint32_t*)buf1818, *(uint32_t*)buf1819, *(uint32_t*)buf1820);
+    *(int2*)buf1821 = rsGetElementAt_int2(*(rs_allocation*)buf1822, *(uint32_t*)buf1823, *(uint32_t*)buf1824, *(uint32_t*)buf1825);
+    *(int3*)buf1826 = rsGetElementAt_int3(*(rs_allocation*)buf1827, *(uint32_t*)buf1828, *(uint32_t*)buf1829, *(uint32_t*)buf1830);
+    *(int4*)buf1831 = rsGetElementAt_int4(*(rs_allocation*)buf1832, *(uint32_t*)buf1833, *(uint32_t*)buf1834, *(uint32_t*)buf1835);
+    *(uint*)buf1836 = rsGetElementAt_uint(*(rs_allocation*)buf1837, *(uint32_t*)buf1838, *(uint32_t*)buf1839, *(uint32_t*)buf1840);
+    *(uint2*)buf1841 = rsGetElementAt_uint2(*(rs_allocation*)buf1842, *(uint32_t*)buf1843, *(uint32_t*)buf1844, *(uint32_t*)buf1845);
+    *(uint3*)buf1846 = rsGetElementAt_uint3(*(rs_allocation*)buf1847, *(uint32_t*)buf1848, *(uint32_t*)buf1849, *(uint32_t*)buf1850);
+    *(uint4*)buf1851 = rsGetElementAt_uint4(*(rs_allocation*)buf1852, *(uint32_t*)buf1853, *(uint32_t*)buf1854, *(uint32_t*)buf1855);
+    *(long*)buf1856 = rsGetElementAt_long(*(rs_allocation*)buf1857, *(uint32_t*)buf1858, *(uint32_t*)buf1859, *(uint32_t*)buf1860);
+    *(long2*)buf1861 = rsGetElementAt_long2(*(rs_allocation*)buf1862, *(uint32_t*)buf1863, *(uint32_t*)buf1864, *(uint32_t*)buf1865);
+    *(long3*)buf1866 = rsGetElementAt_long3(*(rs_allocation*)buf1867, *(uint32_t*)buf1868, *(uint32_t*)buf1869, *(uint32_t*)buf1870);
+    *(long4*)buf1871 = rsGetElementAt_long4(*(rs_allocation*)buf1872, *(uint32_t*)buf1873, *(uint32_t*)buf1874, *(uint32_t*)buf1875);
+    *(ulong*)buf1876 = rsGetElementAt_ulong(*(rs_allocation*)buf1877, *(uint32_t*)buf1878, *(uint32_t*)buf1879, *(uint32_t*)buf1880);
+    *(ulong2*)buf1881 = rsGetElementAt_ulong2(*(rs_allocation*)buf1882, *(uint32_t*)buf1883, *(uint32_t*)buf1884, *(uint32_t*)buf1885);
+    *(ulong3*)buf1886 = rsGetElementAt_ulong3(*(rs_allocation*)buf1887, *(uint32_t*)buf1888, *(uint32_t*)buf1889, *(uint32_t*)buf1890);
+    *(ulong4*)buf1891 = rsGetElementAt_ulong4(*(rs_allocation*)buf1892, *(uint32_t*)buf1893, *(uint32_t*)buf1894, *(uint32_t*)buf1895);
+    *(bool*)buf1896 = rsIsObject(*(rs_element*)buf1897);
+    *(bool*)buf1898 = rsIsObject(*(rs_type*)buf1899);
+    *(bool*)buf1900 = rsIsObject(*(rs_allocation*)buf1901);
+    *(bool*)buf1902 = rsIsObject(*(rs_sampler*)buf1903);
+    *(bool*)buf1904 = rsIsObject(*(rs_script*)buf1905);
+#ifndef __LP64__
+    *(bool*)buf1906 = rsIsObject(*(rs_mesh*)buf1907);
+    *(bool*)buf1908 = rsIsObject(*(rs_program_fragment*)buf1909);
+    *(bool*)buf1910 = rsIsObject(*(rs_program_vertex*)buf1911);
+    *(bool*)buf1912 = rsIsObject(*(rs_program_raster*)buf1913);
+    *(bool*)buf1914 = rsIsObject(*(rs_program_store*)buf1915);
+    *(bool*)buf1916 = rsIsObject(*(rs_font*)buf1917);
+#endif
+    *(bool*)buf1918 = rsIsSphereInFrustum((float4*) buf1919, (float4*) buf1920, (float4*) buf1921, (float4*) buf1922, (float4*) buf1923, (float4*) buf1924, (float4*) buf1925);
+    *(rs_tm**)buf1926 = rsLocaltime((rs_tm*) buf1927, (const rs_time_t*) buf1928);
+    *(float*)buf1929 = rsMatrixGet((const rs_matrix4x4*) buf1930, *(uint32_t*)buf1931, *(uint32_t*)buf1932);
+    *(float*)buf1933 = rsMatrixGet((const rs_matrix3x3*) buf1934, *(uint32_t*)buf1935, *(uint32_t*)buf1936);
+    *(float*)buf1937 = rsMatrixGet((const rs_matrix2x2*) buf1938, *(uint32_t*)buf1939, *(uint32_t*)buf1940);
+    *(bool*)buf1941 = rsMatrixInverse((rs_matrix4x4*) buf1942);
+    *(bool*)buf1943 = rsMatrixInverseTranspose((rs_matrix4x4*) buf1944);
+    rsMatrixLoad((rs_matrix4x4*) buf1945, (const float*) buf1946);
+    rsMatrixLoad((rs_matrix3x3*) buf1947, (const float*) buf1948);
+    rsMatrixLoad((rs_matrix2x2*) buf1949, (const float*) buf1950);
+    rsMatrixLoad((rs_matrix4x4*) buf1951, (const rs_matrix4x4*) buf1952);
+    rsMatrixLoad((rs_matrix3x3*) buf1953, (const rs_matrix3x3*) buf1954);
+    rsMatrixLoad((rs_matrix2x2*) buf1955, (const rs_matrix2x2*) buf1956);
+    rsMatrixLoad((rs_matrix4x4*) buf1957, (const rs_matrix3x3*) buf1958);
+    rsMatrixLoad((rs_matrix4x4*) buf1959, (const rs_matrix2x2*) buf1960);
+    rsMatrixLoadFrustum((rs_matrix4x4*) buf1961, *(float*)buf1962, *(float*)buf1963, *(float*)buf1964, *(float*)buf1965, *(float*)buf1966, *(float*)buf1967);
+    rsMatrixLoadIdentity((rs_matrix4x4*) buf1968);
+    rsMatrixLoadIdentity((rs_matrix3x3*) buf1969);
+    rsMatrixLoadIdentity((rs_matrix2x2*) buf1970);
+    rsMatrixLoadMultiply((rs_matrix4x4*) buf1971, (const rs_matrix4x4*) buf1972, (const rs_matrix4x4*) buf1973);
+    rsMatrixLoadMultiply((rs_matrix3x3*) buf1974, (const rs_matrix3x3*) buf1975, (const rs_matrix3x3*) buf1976);
+    rsMatrixLoadMultiply((rs_matrix2x2*) buf1977, (const rs_matrix2x2*) buf1978, (const rs_matrix2x2*) buf1979);
+    rsMatrixLoadOrtho((rs_matrix4x4*) buf1980, *(float*)buf1981, *(float*)buf1982, *(float*)buf1983, *(float*)buf1984, *(float*)buf1985, *(float*)buf1986);
+    rsMatrixLoadPerspective((rs_matrix4x4*) buf1987, *(float*)buf1988, *(float*)buf1989, *(float*)buf1990, *(float*)buf1991);
+    rsMatrixLoadRotate((rs_matrix4x4*) buf1992, *(float*)buf1993, *(float*)buf1994, *(float*)buf1995, *(float*)buf1996);
+    rsMatrixLoadScale((rs_matrix4x4*) buf1997, *(float*)buf1998, *(float*)buf1999, *(float*)buf2000);
+    rsMatrixLoadTranslate((rs_matrix4x4*) buf2001, *(float*)buf2002, *(float*)buf2003, *(float*)buf2004);
+    rsMatrixMultiply((rs_matrix4x4*) buf2005, (const rs_matrix4x4*) buf2006);
+    rsMatrixMultiply((rs_matrix3x3*) buf2007, (const rs_matrix3x3*) buf2008);
+    rsMatrixMultiply((rs_matrix2x2*) buf2009, (const rs_matrix2x2*) buf2010);
+    *(float4*)buf2011 = rsMatrixMultiply((const rs_matrix4x4*) buf2012, *(float4*)buf2013);
+    *(float4*)buf2014 = rsMatrixMultiply((const rs_matrix4x4*) buf2015, *(float3*)buf2016);
+    *(float4*)buf2017 = rsMatrixMultiply((const rs_matrix4x4*) buf2018, *(float2*)buf2019);
+    *(float3*)buf2020 = rsMatrixMultiply((const rs_matrix3x3*) buf2021, *(float3*)buf2022);
+    *(float3*)buf2023 = rsMatrixMultiply((const rs_matrix3x3*) buf2024, *(float2*)buf2025);
+    *(float2*)buf2026 = rsMatrixMultiply((const rs_matrix2x2*) buf2027, *(float2*)buf2028);
+    rsMatrixRotate((rs_matrix4x4*) buf2029, *(float*)buf2030, *(float*)buf2031, *(float*)buf2032, *(float*)buf2033);
+    rsMatrixScale((rs_matrix4x4*) buf2034, *(float*)buf2035, *(float*)buf2036, *(float*)buf2037);
+    rsMatrixSet((rs_matrix4x4*) buf2038, *(uint32_t*)buf2039, *(uint32_t*)buf2040, *(float*)buf2041);
+    rsMatrixSet((rs_matrix3x3*) buf2042, *(uint32_t*)buf2043, *(uint32_t*)buf2044, *(float*)buf2045);
+    rsMatrixSet((rs_matrix2x2*) buf2046, *(uint32_t*)buf2047, *(uint32_t*)buf2048, *(float*)buf2049);
+    rsMatrixTranslate((rs_matrix4x4*) buf2050, *(float*)buf2051, *(float*)buf2052, *(float*)buf2053);
+    rsMatrixTranspose((rs_matrix4x4*) buf2054);
+    rsMatrixTranspose((rs_matrix3x3*) buf2055);
+    rsMatrixTranspose((rs_matrix2x2*) buf2056);
+    *(uchar4*)buf2057 = rsPackColorTo8888(*(float*)buf2058, *(float*)buf2059, *(float*)buf2060);
+    *(uchar4*)buf2061 = rsPackColorTo8888(*(float*)buf2062, *(float*)buf2063, *(float*)buf2064, *(float*)buf2065);
+    *(uchar4*)buf2066 = rsPackColorTo8888(*(float3*)buf2067);
+    *(uchar4*)buf2068 = rsPackColorTo8888(*(float4*)buf2069);
+    rsQuaternionAdd((rs_quaternion*) buf2070, (const rs_quaternion*) buf2071);
+    rsQuaternionConjugate((rs_quaternion*) buf2072);
+    *(float*)buf2073 = rsQuaternionDot((const rs_quaternion*) buf2074, (const rs_quaternion*) buf2075);
+    rsQuaternionGetMatrixUnit((rs_matrix4x4*) buf2076, (const rs_quaternion*) buf2077);
+    rsQuaternionLoadRotate((rs_quaternion*) buf2078, *(float*)buf2079, *(float*)buf2080, *(float*)buf2081, *(float*)buf2082);
+    rsQuaternionLoadRotateUnit((rs_quaternion*) buf2083, *(float*)buf2084, *(float*)buf2085, *(float*)buf2086, *(float*)buf2087);
+    rsQuaternionMultiply((rs_quaternion*) buf2088, *(float*)buf2089);
+    rsQuaternionMultiply((rs_quaternion*) buf2090, (const rs_quaternion*) buf2091);
+    rsQuaternionNormalize((rs_quaternion*) buf2092);
+    rsQuaternionSet((rs_quaternion*) buf2093, *(float*)buf2094, *(float*)buf2095, *(float*)buf2096, *(float*)buf2097);
+    rsQuaternionSet((rs_quaternion*) buf2098, (const rs_quaternion*) buf2099);
+    rsQuaternionSlerp((rs_quaternion*) buf2100, (const rs_quaternion*) buf2101, (const rs_quaternion*) buf2102, *(float*)buf2103);
+    *(int*)buf2104 = rsRand(*(int*)buf2105);
+    *(int*)buf2106 = rsRand(*(int*)buf2107, *(int*)buf2108);
+    *(float*)buf2109 = rsRand(*(float*)buf2110);
+    *(float*)buf2111 = rsRand(*(float*)buf2112, *(float*)buf2113);
+    *(bool*)buf2114 = rsSendToClient(*(int*)buf2115);
+    *(bool*)buf2116 = rsSendToClient(*(int*)buf2117, (const void*) buf2118, *(uint*)buf2119);
+    rsSendToClientBlocking(*(int*)buf2120);
+    rsSendToClientBlocking(*(int*)buf2121, (const void*) buf2122, *(uint*)buf2123);
+    rsSetObject((rs_element*) buf2124, *(rs_element*)buf2125);
+    rsSetObject((rs_type*) buf2126, *(rs_type*)buf2127);
+    rsSetObject((rs_allocation*) buf2128, *(rs_allocation*)buf2129);
+    rsSetObject((rs_sampler*) buf2130, *(rs_sampler*)buf2131);
+    rsSetObject((rs_script*) buf2132, *(rs_script*)buf2133);
+#ifndef __LP64__
+    rsSetObject((rs_mesh*) buf2134, *(rs_mesh*)buf2135);
+    rsSetObject((rs_program_fragment*) buf2136, *(rs_program_fragment*)buf2137);
+    rsSetObject((rs_program_vertex*) buf2138, *(rs_program_vertex*)buf2139);
+    rsSetObject((rs_program_raster*) buf2140, *(rs_program_raster*)buf2141);
+    rsSetObject((rs_program_store*) buf2142, *(rs_program_store*)buf2143);
+    rsSetObject((rs_font*) buf2144, *(rs_font*)buf2145);
+#endif
+    *(rs_time_t*)buf2146 = rsTime((rs_time_t*) buf2147);
+    *(float4*)buf2148 = rsUnpackColor8888(*(uchar4*)buf2149);
+    *(int64_t*)buf2150 = rsUptimeMillis();
+    *(int64_t*)buf2151 = rsUptimeNanos();
+    *(float4*)buf2152 = rsYuvToRGBA_float4(*(uchar*)buf2153, *(uchar*)buf2154, *(uchar*)buf2155);
+    *(uchar4*)buf2156 = rsYuvToRGBA_uchar4(*(uchar*)buf2157, *(uchar*)buf2158, *(uchar*)buf2159);
+#ifndef __LP64__
+    rsgAllocationSyncAll(*(rs_allocation*)buf2160);
+#endif
+#ifndef __LP64__
+    rsgAllocationSyncAll(*(rs_allocation*)buf2161, *(rs_allocation_usage_type*)buf2162);
+#endif
+#ifndef __LP64__
+    rsgBindColorTarget(*(rs_allocation*)buf2163, *(uint*)buf2164);
+#endif
+#ifndef __LP64__
+    rsgBindConstant(*(rs_program_fragment*)buf2165, *(uint*)buf2166, *(rs_allocation*)buf2167);
+#endif
+#ifndef __LP64__
+    rsgBindConstant(*(rs_program_vertex*)buf2168, *(uint*)buf2169, *(rs_allocation*)buf2170);
+#endif
+#ifndef __LP64__
+    rsgBindDepthTarget(*(rs_allocation*)buf2171);
+#endif
+#ifndef __LP64__
+    rsgBindFont(*(rs_font*)buf2172);
+#endif
+#ifndef __LP64__
+    rsgBindProgramFragment(*(rs_program_fragment*)buf2173);
+#endif
+#ifndef __LP64__
+    rsgBindProgramRaster(*(rs_program_raster*)buf2174);
+#endif
+#ifndef __LP64__
+    rsgBindProgramStore(*(rs_program_store*)buf2175);
+#endif
+#ifndef __LP64__
+    rsgBindProgramVertex(*(rs_program_vertex*)buf2176);
+#endif
+#ifndef __LP64__
+    rsgBindSampler(*(rs_program_fragment*)buf2177, *(uint*)buf2178, *(rs_sampler*)buf2179);
+#endif
+#ifndef __LP64__
+    rsgBindTexture(*(rs_program_fragment*)buf2180, *(uint*)buf2181, *(rs_allocation*)buf2182);
+#endif
+#ifndef __LP64__
+    rsgClearAllRenderTargets();
+#endif
+#ifndef __LP64__
+    rsgClearColor(*(float*)buf2183, *(float*)buf2184, *(float*)buf2185, *(float*)buf2186);
+#endif
+#ifndef __LP64__
+    rsgClearColorTarget(*(uint*)buf2187);
+#endif
+#ifndef __LP64__
+    rsgClearDepth(*(float*)buf2188);
+#endif
+#ifndef __LP64__
+    rsgClearDepthTarget();
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf2189);
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf2190, *(uint*)buf2191);
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf2192, *(uint*)buf2193, *(uint*)buf2194, *(uint*)buf2195);
+#endif
+#ifndef __LP64__
+    rsgDrawQuad(*(float*)buf2196, *(float*)buf2197, *(float*)buf2198, *(float*)buf2199, *(float*)buf2200, *(float*)buf2201, *(float*)buf2202, *(float*)buf2203, *(float*)buf2204, *(float*)buf2205, *(float*)buf2206, *(float*)buf2207);
+#endif
+#ifndef __LP64__
+    rsgDrawQuadTexCoords(*(float*)buf2208, *(float*)buf2209, *(float*)buf2210, *(float*)buf2211, *(float*)buf2212, *(float*)buf2213, *(float*)buf2214, *(float*)buf2215, *(float*)buf2216, *(float*)buf2217, *(float*)buf2218, *(float*)buf2219, *(float*)buf2220, *(float*)buf2221, *(float*)buf2222, *(float*)buf2223, *(float*)buf2224, *(float*)buf2225, *(float*)buf2226, *(float*)buf2227);
+#endif
+#ifndef __LP64__
+    rsgDrawRect(*(float*)buf2228, *(float*)buf2229, *(float*)buf2230, *(float*)buf2231, *(float*)buf2232);
+#endif
+#ifndef __LP64__
+    rsgDrawSpriteScreenspace(*(float*)buf2233, *(float*)buf2234, *(float*)buf2235, *(float*)buf2236, *(float*)buf2237);
+#endif
+#ifndef __LP64__
+    rsgDrawText((const char*) buf2238, *(int*)buf2239, *(int*)buf2240);
+#endif
+#ifndef __LP64__
+    rsgDrawText(*(rs_allocation*)buf2241, *(int*)buf2242, *(int*)buf2243);
+#endif
+#ifndef __LP64__
+    *(uint*)buf2244 = rsgFinish();
+#endif
+#ifndef __LP64__
+    rsgFontColor(*(float*)buf2245, *(float*)buf2246, *(float*)buf2247, *(float*)buf2248);
+#endif
+#ifndef __LP64__
+    *(uint*)buf2249 = rsgGetHeight();
+#endif
+#ifndef __LP64__
+    *(uint*)buf2250 = rsgGetWidth();
+#endif
+#ifndef __LP64__
+    rsgMeasureText((const char*) buf2251, (int*) buf2252, (int*) buf2253, (int*) buf2254, (int*) buf2255);
+#endif
+#ifndef __LP64__
+    rsgMeasureText(*(rs_allocation*)buf2256, (int*) buf2257, (int*) buf2258, (int*) buf2259, (int*) buf2260);
+#endif
+#ifndef __LP64__
+    rsgMeshComputeBoundingBox(*(rs_mesh*)buf2261, (float*) buf2262, (float*) buf2263, (float*) buf2264, (float*) buf2265, (float*) buf2266, (float*) buf2267);
+#endif
+#ifndef __LP64__
+    rsgMeshComputeBoundingBox(*(rs_mesh*)buf2268, (float3*) buf2269, (float3*) buf2270);
+#endif
+#ifndef __LP64__
+    rsgProgramFragmentConstantColor(*(rs_program_fragment*)buf2271, *(float*)buf2272, *(float*)buf2273, *(float*)buf2274, *(float*)buf2275);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexGetProjectionMatrix((rs_matrix4x4*) buf2276);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadModelMatrix((const rs_matrix4x4*) buf2277);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadProjectionMatrix((const rs_matrix4x4*) buf2278);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadTextureMatrix((const rs_matrix4x4*) buf2279);
+#endif
+    *(float*)buf2280 = rsqrt(*(float*)buf2281);
+    *(float2*)buf2282 = rsqrt(*(float2*)buf2283);
+    *(float3*)buf2284 = rsqrt(*(float3*)buf2285);
+    *(float4*)buf2286 = rsqrt(*(float4*)buf2287);
+    *(float*)buf2288 = sign(*(float*)buf2289);
+    *(float2*)buf2290 = sign(*(float2*)buf2291);
+    *(float3*)buf2292 = sign(*(float3*)buf2293);
+    *(float4*)buf2294 = sign(*(float4*)buf2295);
+    *(float*)buf2296 = sin(*(float*)buf2297);
+    *(float2*)buf2298 = sin(*(float2*)buf2299);
+    *(float3*)buf2300 = sin(*(float3*)buf2301);
+    *(float4*)buf2302 = sin(*(float4*)buf2303);
+    *(float*)buf2304 = sincos(*(float*)buf2305, (float*) buf2306);
+    *(float2*)buf2307 = sincos(*(float2*)buf2308, (float2*) buf2309);
+    *(float3*)buf2310 = sincos(*(float3*)buf2311, (float3*) buf2312);
+    *(float4*)buf2313 = sincos(*(float4*)buf2314, (float4*) buf2315);
+    *(float*)buf2316 = sinh(*(float*)buf2317);
+    *(float2*)buf2318 = sinh(*(float2*)buf2319);
+    *(float3*)buf2320 = sinh(*(float3*)buf2321);
+    *(float4*)buf2322 = sinh(*(float4*)buf2323);
+    *(float*)buf2324 = sinpi(*(float*)buf2325);
+    *(float2*)buf2326 = sinpi(*(float2*)buf2327);
+    *(float3*)buf2328 = sinpi(*(float3*)buf2329);
+    *(float4*)buf2330 = sinpi(*(float4*)buf2331);
+    *(float*)buf2332 = sqrt(*(float*)buf2333);
+    *(float2*)buf2334 = sqrt(*(float2*)buf2335);
+    *(float3*)buf2336 = sqrt(*(float3*)buf2337);
+    *(float4*)buf2338 = sqrt(*(float4*)buf2339);
+    *(float*)buf2340 = step(*(float*)buf2341, *(float*)buf2342);
+    *(float2*)buf2343 = step(*(float2*)buf2344, *(float2*)buf2345);
+    *(float3*)buf2346 = step(*(float3*)buf2347, *(float3*)buf2348);
+    *(float4*)buf2349 = step(*(float4*)buf2350, *(float4*)buf2351);
+    *(float2*)buf2352 = step(*(float2*)buf2353, *(float*)buf2354);
+    *(float3*)buf2355 = step(*(float3*)buf2356, *(float*)buf2357);
+    *(float4*)buf2358 = step(*(float4*)buf2359, *(float*)buf2360);
+    *(float*)buf2361 = tan(*(float*)buf2362);
+    *(float2*)buf2363 = tan(*(float2*)buf2364);
+    *(float3*)buf2365 = tan(*(float3*)buf2366);
+    *(float4*)buf2367 = tan(*(float4*)buf2368);
+    *(float*)buf2369 = tanh(*(float*)buf2370);
+    *(float2*)buf2371 = tanh(*(float2*)buf2372);
+    *(float3*)buf2373 = tanh(*(float3*)buf2374);
+    *(float4*)buf2375 = tanh(*(float4*)buf2376);
+    *(float*)buf2377 = tanpi(*(float*)buf2378);
+    *(float2*)buf2379 = tanpi(*(float2*)buf2380);
+    *(float3*)buf2381 = tanpi(*(float3*)buf2382);
+    *(float4*)buf2383 = tanpi(*(float4*)buf2384);
+    *(float*)buf2385 = tgamma(*(float*)buf2386);
+    *(float2*)buf2387 = tgamma(*(float2*)buf2388);
+    *(float3*)buf2389 = tgamma(*(float3*)buf2390);
+    *(float4*)buf2391 = tgamma(*(float4*)buf2392);
+    *(float*)buf2393 = trunc(*(float*)buf2394);
+    *(float2*)buf2395 = trunc(*(float2*)buf2396);
+    *(float3*)buf2397 = trunc(*(float3*)buf2398);
+    *(float4*)buf2399 = trunc(*(float4*)buf2400);
+}
diff --git a/slang/tests/P_all_api_15/stderr.txt.expect b/slang/tests/P_all_api_15/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_all_api_15/stderr.txt.expect
diff --git a/slang/tests/P_all_api_15/stdout.txt.expect b/slang/tests/P_all_api_15/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_all_api_15/stdout.txt.expect
diff --git a/slang/tests/P_all_api_16/all16.rs b/slang/tests/P_all_api_16/all16.rs
new file mode 100644
index 0000000..b6b7954
--- /dev/null
+++ b/slang/tests/P_all_api_16/all16.rs
@@ -0,0 +1,3564 @@
+// -target-api 16 -Wno-deprecated-declarations
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Don't edit this file!  It is auto-generated by frameworks/rs/api/generate.sh.
+
+#pragma version(1)
+#pragma rs java_package_name(com.example.renderscript.testallapi)
+
+#include "rs_graphics.rsh"
+
+char buf0[200];
+char buf1[200];
+char buf2[200];
+char buf3[200];
+char buf4[200];
+char buf5[200];
+char buf6[200];
+char buf7[200];
+char buf8[200];
+char buf9[200];
+char buf10[200];
+char buf11[200];
+char buf12[200];
+char buf13[200];
+char buf14[200];
+char buf15[200];
+char buf16[200];
+char buf17[200];
+char buf18[200];
+char buf19[200];
+char buf20[200];
+char buf21[200];
+char buf22[200];
+char buf23[200];
+char buf24[200];
+char buf25[200];
+char buf26[200];
+char buf27[200];
+char buf28[200];
+char buf29[200];
+char buf30[200];
+char buf31[200];
+char buf32[200];
+char buf33[200];
+char buf34[200];
+char buf35[200];
+char buf36[200];
+char buf37[200];
+char buf38[200];
+char buf39[200];
+char buf40[200];
+char buf41[200];
+char buf42[200];
+char buf43[200];
+char buf44[200];
+char buf45[200];
+char buf46[200];
+char buf47[200];
+char buf48[200];
+char buf49[200];
+char buf50[200];
+char buf51[200];
+char buf52[200];
+char buf53[200];
+char buf54[200];
+char buf55[200];
+char buf56[200];
+char buf57[200];
+char buf58[200];
+char buf59[200];
+char buf60[200];
+char buf61[200];
+char buf62[200];
+char buf63[200];
+char buf64[200];
+char buf65[200];
+char buf66[200];
+char buf67[200];
+char buf68[200];
+char buf69[200];
+char buf70[200];
+char buf71[200];
+char buf72[200];
+char buf73[200];
+char buf74[200];
+char buf75[200];
+char buf76[200];
+char buf77[200];
+char buf78[200];
+char buf79[200];
+char buf80[200];
+char buf81[200];
+char buf82[200];
+char buf83[200];
+char buf84[200];
+char buf85[200];
+char buf86[200];
+char buf87[200];
+char buf88[200];
+char buf89[200];
+char buf90[200];
+char buf91[200];
+char buf92[200];
+char buf93[200];
+char buf94[200];
+char buf95[200];
+char buf96[200];
+char buf97[200];
+char buf98[200];
+char buf99[200];
+char buf100[200];
+char buf101[200];
+char buf102[200];
+char buf103[200];
+char buf104[200];
+char buf105[200];
+char buf106[200];
+char buf107[200];
+char buf108[200];
+char buf109[200];
+char buf110[200];
+char buf111[200];
+char buf112[200];
+char buf113[200];
+char buf114[200];
+char buf115[200];
+char buf116[200];
+char buf117[200];
+char buf118[200];
+char buf119[200];
+char buf120[200];
+char buf121[200];
+char buf122[200];
+char buf123[200];
+char buf124[200];
+char buf125[200];
+char buf126[200];
+char buf127[200];
+char buf128[200];
+char buf129[200];
+char buf130[200];
+char buf131[200];
+char buf132[200];
+char buf133[200];
+char buf134[200];
+char buf135[200];
+char buf136[200];
+char buf137[200];
+char buf138[200];
+char buf139[200];
+char buf140[200];
+char buf141[200];
+char buf142[200];
+char buf143[200];
+char buf144[200];
+char buf145[200];
+char buf146[200];
+char buf147[200];
+char buf148[200];
+char buf149[200];
+char buf150[200];
+char buf151[200];
+char buf152[200];
+char buf153[200];
+char buf154[200];
+char buf155[200];
+char buf156[200];
+char buf157[200];
+char buf158[200];
+char buf159[200];
+char buf160[200];
+char buf161[200];
+char buf162[200];
+char buf163[200];
+char buf164[200];
+char buf165[200];
+char buf166[200];
+char buf167[200];
+char buf168[200];
+char buf169[200];
+char buf170[200];
+char buf171[200];
+char buf172[200];
+char buf173[200];
+char buf174[200];
+char buf175[200];
+char buf176[200];
+char buf177[200];
+char buf178[200];
+char buf179[200];
+char buf180[200];
+char buf181[200];
+char buf182[200];
+char buf183[200];
+char buf184[200];
+char buf185[200];
+char buf186[200];
+char buf187[200];
+char buf188[200];
+char buf189[200];
+char buf190[200];
+char buf191[200];
+char buf192[200];
+char buf193[200];
+char buf194[200];
+char buf195[200];
+char buf196[200];
+char buf197[200];
+char buf198[200];
+char buf199[200];
+char buf200[200];
+char buf201[200];
+char buf202[200];
+char buf203[200];
+char buf204[200];
+char buf205[200];
+char buf206[200];
+char buf207[200];
+char buf208[200];
+char buf209[200];
+char buf210[200];
+char buf211[200];
+char buf212[200];
+char buf213[200];
+char buf214[200];
+char buf215[200];
+char buf216[200];
+char buf217[200];
+char buf218[200];
+char buf219[200];
+char buf220[200];
+char buf221[200];
+char buf222[200];
+char buf223[200];
+char buf224[200];
+char buf225[200];
+char buf226[200];
+char buf227[200];
+char buf228[200];
+char buf229[200];
+char buf230[200];
+char buf231[200];
+char buf232[200];
+char buf233[200];
+char buf234[200];
+char buf235[200];
+char buf236[200];
+char buf237[200];
+char buf238[200];
+char buf239[200];
+char buf240[200];
+char buf241[200];
+char buf242[200];
+char buf243[200];
+char buf244[200];
+char buf245[200];
+char buf246[200];
+char buf247[200];
+char buf248[200];
+char buf249[200];
+char buf250[200];
+char buf251[200];
+char buf252[200];
+char buf253[200];
+char buf254[200];
+char buf255[200];
+char buf256[200];
+char buf257[200];
+char buf258[200];
+char buf259[200];
+char buf260[200];
+char buf261[200];
+char buf262[200];
+char buf263[200];
+char buf264[200];
+char buf265[200];
+char buf266[200];
+char buf267[200];
+char buf268[200];
+char buf269[200];
+char buf270[200];
+char buf271[200];
+char buf272[200];
+char buf273[200];
+char buf274[200];
+char buf275[200];
+char buf276[200];
+char buf277[200];
+char buf278[200];
+char buf279[200];
+char buf280[200];
+char buf281[200];
+char buf282[200];
+char buf283[200];
+char buf284[200];
+char buf285[200];
+char buf286[200];
+char buf287[200];
+char buf288[200];
+char buf289[200];
+char buf290[200];
+char buf291[200];
+char buf292[200];
+char buf293[200];
+char buf294[200];
+char buf295[200];
+char buf296[200];
+char buf297[200];
+char buf298[200];
+char buf299[200];
+char buf300[200];
+char buf301[200];
+char buf302[200];
+char buf303[200];
+char buf304[200];
+char buf305[200];
+char buf306[200];
+char buf307[200];
+char buf308[200];
+char buf309[200];
+char buf310[200];
+char buf311[200];
+char buf312[200];
+char buf313[200];
+char buf314[200];
+char buf315[200];
+char buf316[200];
+char buf317[200];
+char buf318[200];
+char buf319[200];
+char buf320[200];
+char buf321[200];
+char buf322[200];
+char buf323[200];
+char buf324[200];
+char buf325[200];
+char buf326[200];
+char buf327[200];
+char buf328[200];
+char buf329[200];
+char buf330[200];
+char buf331[200];
+char buf332[200];
+char buf333[200];
+char buf334[200];
+char buf335[200];
+char buf336[200];
+char buf337[200];
+char buf338[200];
+char buf339[200];
+char buf340[200];
+char buf341[200];
+char buf342[200];
+char buf343[200];
+char buf344[200];
+char buf345[200];
+char buf346[200];
+char buf347[200];
+char buf348[200];
+char buf349[200];
+char buf350[200];
+char buf351[200];
+char buf352[200];
+char buf353[200];
+char buf354[200];
+char buf355[200];
+char buf356[200];
+char buf357[200];
+char buf358[200];
+char buf359[200];
+char buf360[200];
+char buf361[200];
+char buf362[200];
+char buf363[200];
+char buf364[200];
+char buf365[200];
+char buf366[200];
+char buf367[200];
+char buf368[200];
+char buf369[200];
+char buf370[200];
+char buf371[200];
+char buf372[200];
+char buf373[200];
+char buf374[200];
+char buf375[200];
+char buf376[200];
+char buf377[200];
+char buf378[200];
+char buf379[200];
+char buf380[200];
+char buf381[200];
+char buf382[200];
+char buf383[200];
+char buf384[200];
+char buf385[200];
+char buf386[200];
+char buf387[200];
+char buf388[200];
+char buf389[200];
+char buf390[200];
+char buf391[200];
+char buf392[200];
+char buf393[200];
+char buf394[200];
+char buf395[200];
+char buf396[200];
+char buf397[200];
+char buf398[200];
+char buf399[200];
+char buf400[200];
+char buf401[200];
+char buf402[200];
+char buf403[200];
+char buf404[200];
+char buf405[200];
+char buf406[200];
+char buf407[200];
+char buf408[200];
+char buf409[200];
+char buf410[200];
+char buf411[200];
+char buf412[200];
+char buf413[200];
+char buf414[200];
+char buf415[200];
+char buf416[200];
+char buf417[200];
+char buf418[200];
+char buf419[200];
+char buf420[200];
+char buf421[200];
+char buf422[200];
+char buf423[200];
+char buf424[200];
+char buf425[200];
+char buf426[200];
+char buf427[200];
+char buf428[200];
+char buf429[200];
+char buf430[200];
+char buf431[200];
+char buf432[200];
+char buf433[200];
+char buf434[200];
+char buf435[200];
+char buf436[200];
+char buf437[200];
+char buf438[200];
+char buf439[200];
+char buf440[200];
+char buf441[200];
+char buf442[200];
+char buf443[200];
+char buf444[200];
+char buf445[200];
+char buf446[200];
+char buf447[200];
+char buf448[200];
+char buf449[200];
+char buf450[200];
+char buf451[200];
+char buf452[200];
+char buf453[200];
+char buf454[200];
+char buf455[200];
+char buf456[200];
+char buf457[200];
+char buf458[200];
+char buf459[200];
+char buf460[200];
+char buf461[200];
+char buf462[200];
+char buf463[200];
+char buf464[200];
+char buf465[200];
+char buf466[200];
+char buf467[200];
+char buf468[200];
+char buf469[200];
+char buf470[200];
+char buf471[200];
+char buf472[200];
+char buf473[200];
+char buf474[200];
+char buf475[200];
+char buf476[200];
+char buf477[200];
+char buf478[200];
+char buf479[200];
+char buf480[200];
+char buf481[200];
+char buf482[200];
+char buf483[200];
+char buf484[200];
+char buf485[200];
+char buf486[200];
+char buf487[200];
+char buf488[200];
+char buf489[200];
+char buf490[200];
+char buf491[200];
+char buf492[200];
+char buf493[200];
+char buf494[200];
+char buf495[200];
+char buf496[200];
+char buf497[200];
+char buf498[200];
+char buf499[200];
+char buf500[200];
+char buf501[200];
+char buf502[200];
+char buf503[200];
+char buf504[200];
+char buf505[200];
+char buf506[200];
+char buf507[200];
+char buf508[200];
+char buf509[200];
+char buf510[200];
+char buf511[200];
+char buf512[200];
+char buf513[200];
+char buf514[200];
+char buf515[200];
+char buf516[200];
+char buf517[200];
+char buf518[200];
+char buf519[200];
+char buf520[200];
+char buf521[200];
+char buf522[200];
+char buf523[200];
+char buf524[200];
+char buf525[200];
+char buf526[200];
+char buf527[200];
+char buf528[200];
+char buf529[200];
+char buf530[200];
+char buf531[200];
+char buf532[200];
+char buf533[200];
+char buf534[200];
+char buf535[200];
+char buf536[200];
+char buf537[200];
+char buf538[200];
+char buf539[200];
+char buf540[200];
+char buf541[200];
+char buf542[200];
+char buf543[200];
+char buf544[200];
+char buf545[200];
+char buf546[200];
+char buf547[200];
+char buf548[200];
+char buf549[200];
+char buf550[200];
+char buf551[200];
+char buf552[200];
+char buf553[200];
+char buf554[200];
+char buf555[200];
+char buf556[200];
+char buf557[200];
+char buf558[200];
+char buf559[200];
+char buf560[200];
+char buf561[200];
+char buf562[200];
+char buf563[200];
+char buf564[200];
+char buf565[200];
+char buf566[200];
+char buf567[200];
+char buf568[200];
+char buf569[200];
+char buf570[200];
+char buf571[200];
+char buf572[200];
+char buf573[200];
+char buf574[200];
+char buf575[200];
+char buf576[200];
+char buf577[200];
+char buf578[200];
+char buf579[200];
+char buf580[200];
+char buf581[200];
+char buf582[200];
+char buf583[200];
+char buf584[200];
+char buf585[200];
+char buf586[200];
+char buf587[200];
+char buf588[200];
+char buf589[200];
+char buf590[200];
+char buf591[200];
+char buf592[200];
+char buf593[200];
+char buf594[200];
+char buf595[200];
+char buf596[200];
+char buf597[200];
+char buf598[200];
+char buf599[200];
+char buf600[200];
+char buf601[200];
+char buf602[200];
+char buf603[200];
+char buf604[200];
+char buf605[200];
+char buf606[200];
+char buf607[200];
+char buf608[200];
+char buf609[200];
+char buf610[200];
+char buf611[200];
+char buf612[200];
+char buf613[200];
+char buf614[200];
+char buf615[200];
+char buf616[200];
+char buf617[200];
+char buf618[200];
+char buf619[200];
+char buf620[200];
+char buf621[200];
+char buf622[200];
+char buf623[200];
+char buf624[200];
+char buf625[200];
+char buf626[200];
+char buf627[200];
+char buf628[200];
+char buf629[200];
+char buf630[200];
+char buf631[200];
+char buf632[200];
+char buf633[200];
+char buf634[200];
+char buf635[200];
+char buf636[200];
+char buf637[200];
+char buf638[200];
+char buf639[200];
+char buf640[200];
+char buf641[200];
+char buf642[200];
+char buf643[200];
+char buf644[200];
+char buf645[200];
+char buf646[200];
+char buf647[200];
+char buf648[200];
+char buf649[200];
+char buf650[200];
+char buf651[200];
+char buf652[200];
+char buf653[200];
+char buf654[200];
+char buf655[200];
+char buf656[200];
+char buf657[200];
+char buf658[200];
+char buf659[200];
+char buf660[200];
+char buf661[200];
+char buf662[200];
+char buf663[200];
+char buf664[200];
+char buf665[200];
+char buf666[200];
+char buf667[200];
+char buf668[200];
+char buf669[200];
+char buf670[200];
+char buf671[200];
+char buf672[200];
+char buf673[200];
+char buf674[200];
+char buf675[200];
+char buf676[200];
+char buf677[200];
+char buf678[200];
+char buf679[200];
+char buf680[200];
+char buf681[200];
+char buf682[200];
+char buf683[200];
+char buf684[200];
+char buf685[200];
+char buf686[200];
+char buf687[200];
+char buf688[200];
+char buf689[200];
+char buf690[200];
+char buf691[200];
+char buf692[200];
+char buf693[200];
+char buf694[200];
+char buf695[200];
+char buf696[200];
+char buf697[200];
+char buf698[200];
+char buf699[200];
+char buf700[200];
+char buf701[200];
+char buf702[200];
+char buf703[200];
+char buf704[200];
+char buf705[200];
+char buf706[200];
+char buf707[200];
+char buf708[200];
+char buf709[200];
+char buf710[200];
+char buf711[200];
+char buf712[200];
+char buf713[200];
+char buf714[200];
+char buf715[200];
+char buf716[200];
+char buf717[200];
+char buf718[200];
+char buf719[200];
+char buf720[200];
+char buf721[200];
+char buf722[200];
+char buf723[200];
+char buf724[200];
+char buf725[200];
+char buf726[200];
+char buf727[200];
+char buf728[200];
+char buf729[200];
+char buf730[200];
+char buf731[200];
+char buf732[200];
+char buf733[200];
+char buf734[200];
+char buf735[200];
+char buf736[200];
+char buf737[200];
+char buf738[200];
+char buf739[200];
+char buf740[200];
+char buf741[200];
+char buf742[200];
+char buf743[200];
+char buf744[200];
+char buf745[200];
+char buf746[200];
+char buf747[200];
+char buf748[200];
+char buf749[200];
+char buf750[200];
+char buf751[200];
+char buf752[200];
+char buf753[200];
+char buf754[200];
+char buf755[200];
+char buf756[200];
+char buf757[200];
+char buf758[200];
+char buf759[200];
+char buf760[200];
+char buf761[200];
+char buf762[200];
+char buf763[200];
+char buf764[200];
+char buf765[200];
+char buf766[200];
+char buf767[200];
+char buf768[200];
+char buf769[200];
+char buf770[200];
+char buf771[200];
+char buf772[200];
+char buf773[200];
+char buf774[200];
+char buf775[200];
+char buf776[200];
+char buf777[200];
+char buf778[200];
+char buf779[200];
+char buf780[200];
+char buf781[200];
+char buf782[200];
+char buf783[200];
+char buf784[200];
+char buf785[200];
+char buf786[200];
+char buf787[200];
+char buf788[200];
+char buf789[200];
+char buf790[200];
+char buf791[200];
+char buf792[200];
+char buf793[200];
+char buf794[200];
+char buf795[200];
+char buf796[200];
+char buf797[200];
+char buf798[200];
+char buf799[200];
+char buf800[200];
+char buf801[200];
+char buf802[200];
+char buf803[200];
+char buf804[200];
+char buf805[200];
+char buf806[200];
+char buf807[200];
+char buf808[200];
+char buf809[200];
+char buf810[200];
+char buf811[200];
+char buf812[200];
+char buf813[200];
+char buf814[200];
+char buf815[200];
+char buf816[200];
+char buf817[200];
+char buf818[200];
+char buf819[200];
+char buf820[200];
+char buf821[200];
+char buf822[200];
+char buf823[200];
+char buf824[200];
+char buf825[200];
+char buf826[200];
+char buf827[200];
+char buf828[200];
+char buf829[200];
+char buf830[200];
+char buf831[200];
+char buf832[200];
+char buf833[200];
+char buf834[200];
+char buf835[200];
+char buf836[200];
+char buf837[200];
+char buf838[200];
+char buf839[200];
+char buf840[200];
+char buf841[200];
+char buf842[200];
+char buf843[200];
+char buf844[200];
+char buf845[200];
+char buf846[200];
+char buf847[200];
+char buf848[200];
+char buf849[200];
+char buf850[200];
+char buf851[200];
+char buf852[200];
+char buf853[200];
+char buf854[200];
+char buf855[200];
+char buf856[200];
+char buf857[200];
+char buf858[200];
+char buf859[200];
+char buf860[200];
+char buf861[200];
+char buf862[200];
+char buf863[200];
+char buf864[200];
+char buf865[200];
+char buf866[200];
+char buf867[200];
+char buf868[200];
+char buf869[200];
+char buf870[200];
+char buf871[200];
+char buf872[200];
+char buf873[200];
+char buf874[200];
+char buf875[200];
+char buf876[200];
+char buf877[200];
+char buf878[200];
+char buf879[200];
+char buf880[200];
+char buf881[200];
+char buf882[200];
+char buf883[200];
+char buf884[200];
+char buf885[200];
+char buf886[200];
+char buf887[200];
+char buf888[200];
+char buf889[200];
+char buf890[200];
+char buf891[200];
+char buf892[200];
+char buf893[200];
+char buf894[200];
+char buf895[200];
+char buf896[200];
+char buf897[200];
+char buf898[200];
+char buf899[200];
+char buf900[200];
+char buf901[200];
+char buf902[200];
+char buf903[200];
+char buf904[200];
+char buf905[200];
+char buf906[200];
+char buf907[200];
+char buf908[200];
+char buf909[200];
+char buf910[200];
+char buf911[200];
+char buf912[200];
+char buf913[200];
+char buf914[200];
+char buf915[200];
+char buf916[200];
+char buf917[200];
+char buf918[200];
+char buf919[200];
+char buf920[200];
+char buf921[200];
+char buf922[200];
+char buf923[200];
+char buf924[200];
+char buf925[200];
+char buf926[200];
+char buf927[200];
+char buf928[200];
+char buf929[200];
+char buf930[200];
+char buf931[200];
+char buf932[200];
+char buf933[200];
+char buf934[200];
+char buf935[200];
+char buf936[200];
+char buf937[200];
+char buf938[200];
+char buf939[200];
+char buf940[200];
+char buf941[200];
+char buf942[200];
+char buf943[200];
+char buf944[200];
+char buf945[200];
+char buf946[200];
+char buf947[200];
+char buf948[200];
+char buf949[200];
+char buf950[200];
+char buf951[200];
+char buf952[200];
+char buf953[200];
+char buf954[200];
+char buf955[200];
+char buf956[200];
+char buf957[200];
+char buf958[200];
+char buf959[200];
+char buf960[200];
+char buf961[200];
+char buf962[200];
+char buf963[200];
+char buf964[200];
+char buf965[200];
+char buf966[200];
+char buf967[200];
+char buf968[200];
+char buf969[200];
+char buf970[200];
+char buf971[200];
+char buf972[200];
+char buf973[200];
+char buf974[200];
+char buf975[200];
+char buf976[200];
+char buf977[200];
+char buf978[200];
+char buf979[200];
+char buf980[200];
+char buf981[200];
+char buf982[200];
+char buf983[200];
+char buf984[200];
+char buf985[200];
+char buf986[200];
+char buf987[200];
+char buf988[200];
+char buf989[200];
+char buf990[200];
+char buf991[200];
+char buf992[200];
+char buf993[200];
+char buf994[200];
+char buf995[200];
+char buf996[200];
+char buf997[200];
+char buf998[200];
+char buf999[200];
+char buf1000[200];
+char buf1001[200];
+char buf1002[200];
+char buf1003[200];
+char buf1004[200];
+char buf1005[200];
+char buf1006[200];
+char buf1007[200];
+char buf1008[200];
+char buf1009[200];
+char buf1010[200];
+char buf1011[200];
+char buf1012[200];
+char buf1013[200];
+char buf1014[200];
+char buf1015[200];
+char buf1016[200];
+char buf1017[200];
+char buf1018[200];
+char buf1019[200];
+char buf1020[200];
+char buf1021[200];
+char buf1022[200];
+char buf1023[200];
+char buf1024[200];
+char buf1025[200];
+char buf1026[200];
+char buf1027[200];
+char buf1028[200];
+char buf1029[200];
+char buf1030[200];
+char buf1031[200];
+char buf1032[200];
+char buf1033[200];
+char buf1034[200];
+char buf1035[200];
+char buf1036[200];
+char buf1037[200];
+char buf1038[200];
+char buf1039[200];
+char buf1040[200];
+char buf1041[200];
+char buf1042[200];
+char buf1043[200];
+char buf1044[200];
+char buf1045[200];
+char buf1046[200];
+char buf1047[200];
+char buf1048[200];
+char buf1049[200];
+char buf1050[200];
+char buf1051[200];
+char buf1052[200];
+char buf1053[200];
+char buf1054[200];
+char buf1055[200];
+char buf1056[200];
+char buf1057[200];
+char buf1058[200];
+char buf1059[200];
+char buf1060[200];
+char buf1061[200];
+char buf1062[200];
+char buf1063[200];
+char buf1064[200];
+char buf1065[200];
+char buf1066[200];
+char buf1067[200];
+char buf1068[200];
+char buf1069[200];
+char buf1070[200];
+char buf1071[200];
+char buf1072[200];
+char buf1073[200];
+char buf1074[200];
+char buf1075[200];
+char buf1076[200];
+char buf1077[200];
+char buf1078[200];
+char buf1079[200];
+char buf1080[200];
+char buf1081[200];
+char buf1082[200];
+char buf1083[200];
+char buf1084[200];
+char buf1085[200];
+char buf1086[200];
+char buf1087[200];
+char buf1088[200];
+char buf1089[200];
+char buf1090[200];
+char buf1091[200];
+char buf1092[200];
+char buf1093[200];
+char buf1094[200];
+char buf1095[200];
+char buf1096[200];
+char buf1097[200];
+char buf1098[200];
+char buf1099[200];
+char buf1100[200];
+char buf1101[200];
+char buf1102[200];
+char buf1103[200];
+char buf1104[200];
+char buf1105[200];
+char buf1106[200];
+char buf1107[200];
+char buf1108[200];
+char buf1109[200];
+char buf1110[200];
+char buf1111[200];
+char buf1112[200];
+char buf1113[200];
+char buf1114[200];
+char buf1115[200];
+char buf1116[200];
+char buf1117[200];
+char buf1118[200];
+char buf1119[200];
+char buf1120[200];
+char buf1121[200];
+char buf1122[200];
+char buf1123[200];
+char buf1124[200];
+char buf1125[200];
+char buf1126[200];
+char buf1127[200];
+char buf1128[200];
+char buf1129[200];
+char buf1130[200];
+char buf1131[200];
+char buf1132[200];
+char buf1133[200];
+char buf1134[200];
+char buf1135[200];
+char buf1136[200];
+char buf1137[200];
+char buf1138[200];
+char buf1139[200];
+char buf1140[200];
+char buf1141[200];
+char buf1142[200];
+char buf1143[200];
+char buf1144[200];
+char buf1145[200];
+char buf1146[200];
+char buf1147[200];
+char buf1148[200];
+char buf1149[200];
+char buf1150[200];
+char buf1151[200];
+char buf1152[200];
+char buf1153[200];
+char buf1154[200];
+char buf1155[200];
+char buf1156[200];
+char buf1157[200];
+char buf1158[200];
+char buf1159[200];
+char buf1160[200];
+char buf1161[200];
+char buf1162[200];
+char buf1163[200];
+char buf1164[200];
+char buf1165[200];
+char buf1166[200];
+char buf1167[200];
+char buf1168[200];
+char buf1169[200];
+char buf1170[200];
+char buf1171[200];
+char buf1172[200];
+char buf1173[200];
+char buf1174[200];
+char buf1175[200];
+char buf1176[200];
+char buf1177[200];
+char buf1178[200];
+char buf1179[200];
+char buf1180[200];
+char buf1181[200];
+char buf1182[200];
+char buf1183[200];
+char buf1184[200];
+char buf1185[200];
+char buf1186[200];
+char buf1187[200];
+char buf1188[200];
+char buf1189[200];
+char buf1190[200];
+char buf1191[200];
+char buf1192[200];
+char buf1193[200];
+char buf1194[200];
+char buf1195[200];
+char buf1196[200];
+char buf1197[200];
+char buf1198[200];
+char buf1199[200];
+char buf1200[200];
+char buf1201[200];
+char buf1202[200];
+char buf1203[200];
+char buf1204[200];
+char buf1205[200];
+char buf1206[200];
+char buf1207[200];
+char buf1208[200];
+char buf1209[200];
+char buf1210[200];
+char buf1211[200];
+char buf1212[200];
+char buf1213[200];
+char buf1214[200];
+char buf1215[200];
+char buf1216[200];
+char buf1217[200];
+char buf1218[200];
+char buf1219[200];
+char buf1220[200];
+char buf1221[200];
+char buf1222[200];
+char buf1223[200];
+char buf1224[200];
+char buf1225[200];
+char buf1226[200];
+char buf1227[200];
+char buf1228[200];
+char buf1229[200];
+char buf1230[200];
+char buf1231[200];
+char buf1232[200];
+char buf1233[200];
+char buf1234[200];
+char buf1235[200];
+char buf1236[200];
+char buf1237[200];
+char buf1238[200];
+char buf1239[200];
+char buf1240[200];
+char buf1241[200];
+char buf1242[200];
+char buf1243[200];
+char buf1244[200];
+char buf1245[200];
+char buf1246[200];
+char buf1247[200];
+char buf1248[200];
+char buf1249[200];
+char buf1250[200];
+char buf1251[200];
+char buf1252[200];
+char buf1253[200];
+char buf1254[200];
+char buf1255[200];
+char buf1256[200];
+char buf1257[200];
+char buf1258[200];
+char buf1259[200];
+char buf1260[200];
+char buf1261[200];
+char buf1262[200];
+char buf1263[200];
+char buf1264[200];
+char buf1265[200];
+char buf1266[200];
+char buf1267[200];
+char buf1268[200];
+char buf1269[200];
+char buf1270[200];
+char buf1271[200];
+char buf1272[200];
+char buf1273[200];
+char buf1274[200];
+char buf1275[200];
+char buf1276[200];
+char buf1277[200];
+char buf1278[200];
+char buf1279[200];
+char buf1280[200];
+char buf1281[200];
+char buf1282[200];
+char buf1283[200];
+char buf1284[200];
+char buf1285[200];
+char buf1286[200];
+char buf1287[200];
+char buf1288[200];
+char buf1289[200];
+char buf1290[200];
+char buf1291[200];
+char buf1292[200];
+char buf1293[200];
+char buf1294[200];
+char buf1295[200];
+char buf1296[200];
+char buf1297[200];
+char buf1298[200];
+char buf1299[200];
+char buf1300[200];
+char buf1301[200];
+char buf1302[200];
+char buf1303[200];
+char buf1304[200];
+char buf1305[200];
+char buf1306[200];
+char buf1307[200];
+char buf1308[200];
+char buf1309[200];
+char buf1310[200];
+char buf1311[200];
+char buf1312[200];
+char buf1313[200];
+char buf1314[200];
+char buf1315[200];
+char buf1316[200];
+char buf1317[200];
+char buf1318[200];
+char buf1319[200];
+char buf1320[200];
+char buf1321[200];
+char buf1322[200];
+char buf1323[200];
+char buf1324[200];
+char buf1325[200];
+char buf1326[200];
+char buf1327[200];
+char buf1328[200];
+char buf1329[200];
+char buf1330[200];
+char buf1331[200];
+char buf1332[200];
+char buf1333[200];
+char buf1334[200];
+char buf1335[200];
+char buf1336[200];
+char buf1337[200];
+char buf1338[200];
+char buf1339[200];
+char buf1340[200];
+char buf1341[200];
+char buf1342[200];
+char buf1343[200];
+char buf1344[200];
+char buf1345[200];
+char buf1346[200];
+char buf1347[200];
+char buf1348[200];
+char buf1349[200];
+char buf1350[200];
+char buf1351[200];
+char buf1352[200];
+char buf1353[200];
+char buf1354[200];
+char buf1355[200];
+char buf1356[200];
+char buf1357[200];
+char buf1358[200];
+char buf1359[200];
+char buf1360[200];
+char buf1361[200];
+char buf1362[200];
+char buf1363[200];
+char buf1364[200];
+char buf1365[200];
+char buf1366[200];
+char buf1367[200];
+char buf1368[200];
+char buf1369[200];
+char buf1370[200];
+char buf1371[200];
+char buf1372[200];
+char buf1373[200];
+char buf1374[200];
+char buf1375[200];
+char buf1376[200];
+char buf1377[200];
+char buf1378[200];
+char buf1379[200];
+char buf1380[200];
+char buf1381[200];
+char buf1382[200];
+char buf1383[200];
+char buf1384[200];
+char buf1385[200];
+char buf1386[200];
+char buf1387[200];
+char buf1388[200];
+char buf1389[200];
+char buf1390[200];
+char buf1391[200];
+char buf1392[200];
+char buf1393[200];
+char buf1394[200];
+char buf1395[200];
+char buf1396[200];
+char buf1397[200];
+char buf1398[200];
+char buf1399[200];
+char buf1400[200];
+char buf1401[200];
+char buf1402[200];
+char buf1403[200];
+char buf1404[200];
+char buf1405[200];
+char buf1406[200];
+char buf1407[200];
+char buf1408[200];
+char buf1409[200];
+char buf1410[200];
+char buf1411[200];
+char buf1412[200];
+char buf1413[200];
+char buf1414[200];
+char buf1415[200];
+char buf1416[200];
+char buf1417[200];
+char buf1418[200];
+char buf1419[200];
+char buf1420[200];
+char buf1421[200];
+char buf1422[200];
+char buf1423[200];
+char buf1424[200];
+char buf1425[200];
+char buf1426[200];
+char buf1427[200];
+char buf1428[200];
+char buf1429[200];
+char buf1430[200];
+char buf1431[200];
+char buf1432[200];
+char buf1433[200];
+char buf1434[200];
+char buf1435[200];
+char buf1436[200];
+char buf1437[200];
+char buf1438[200];
+char buf1439[200];
+char buf1440[200];
+char buf1441[200];
+char buf1442[200];
+char buf1443[200];
+char buf1444[200];
+char buf1445[200];
+char buf1446[200];
+char buf1447[200];
+char buf1448[200];
+char buf1449[200];
+char buf1450[200];
+char buf1451[200];
+char buf1452[200];
+char buf1453[200];
+char buf1454[200];
+char buf1455[200];
+char buf1456[200];
+char buf1457[200];
+char buf1458[200];
+char buf1459[200];
+char buf1460[200];
+char buf1461[200];
+char buf1462[200];
+char buf1463[200];
+char buf1464[200];
+char buf1465[200];
+char buf1466[200];
+char buf1467[200];
+char buf1468[200];
+char buf1469[200];
+char buf1470[200];
+char buf1471[200];
+char buf1472[200];
+char buf1473[200];
+char buf1474[200];
+char buf1475[200];
+char buf1476[200];
+char buf1477[200];
+char buf1478[200];
+char buf1479[200];
+char buf1480[200];
+char buf1481[200];
+char buf1482[200];
+char buf1483[200];
+char buf1484[200];
+char buf1485[200];
+char buf1486[200];
+char buf1487[200];
+char buf1488[200];
+char buf1489[200];
+char buf1490[200];
+char buf1491[200];
+char buf1492[200];
+char buf1493[200];
+char buf1494[200];
+char buf1495[200];
+char buf1496[200];
+char buf1497[200];
+char buf1498[200];
+char buf1499[200];
+char buf1500[200];
+char buf1501[200];
+char buf1502[200];
+char buf1503[200];
+char buf1504[200];
+char buf1505[200];
+char buf1506[200];
+char buf1507[200];
+char buf1508[200];
+char buf1509[200];
+char buf1510[200];
+char buf1511[200];
+char buf1512[200];
+char buf1513[200];
+char buf1514[200];
+char buf1515[200];
+char buf1516[200];
+char buf1517[200];
+char buf1518[200];
+char buf1519[200];
+char buf1520[200];
+char buf1521[200];
+char buf1522[200];
+char buf1523[200];
+char buf1524[200];
+char buf1525[200];
+char buf1526[200];
+char buf1527[200];
+char buf1528[200];
+char buf1529[200];
+char buf1530[200];
+char buf1531[200];
+char buf1532[200];
+char buf1533[200];
+char buf1534[200];
+char buf1535[200];
+char buf1536[200];
+char buf1537[200];
+char buf1538[200];
+char buf1539[200];
+char buf1540[200];
+char buf1541[200];
+char buf1542[200];
+char buf1543[200];
+char buf1544[200];
+char buf1545[200];
+char buf1546[200];
+char buf1547[200];
+char buf1548[200];
+char buf1549[200];
+char buf1550[200];
+char buf1551[200];
+char buf1552[200];
+char buf1553[200];
+char buf1554[200];
+char buf1555[200];
+char buf1556[200];
+char buf1557[200];
+char buf1558[200];
+char buf1559[200];
+char buf1560[200];
+char buf1561[200];
+char buf1562[200];
+char buf1563[200];
+char buf1564[200];
+char buf1565[200];
+char buf1566[200];
+char buf1567[200];
+char buf1568[200];
+char buf1569[200];
+char buf1570[200];
+char buf1571[200];
+char buf1572[200];
+char buf1573[200];
+char buf1574[200];
+char buf1575[200];
+char buf1576[200];
+char buf1577[200];
+char buf1578[200];
+char buf1579[200];
+char buf1580[200];
+char buf1581[200];
+char buf1582[200];
+char buf1583[200];
+char buf1584[200];
+char buf1585[200];
+char buf1586[200];
+char buf1587[200];
+char buf1588[200];
+char buf1589[200];
+char buf1590[200];
+char buf1591[200];
+char buf1592[200];
+char buf1593[200];
+char buf1594[200];
+char buf1595[200];
+char buf1596[200];
+char buf1597[200];
+char buf1598[200];
+char buf1599[200];
+char buf1600[200];
+char buf1601[200];
+char buf1602[200];
+char buf1603[200];
+char buf1604[200];
+char buf1605[200];
+char buf1606[200];
+char buf1607[200];
+char buf1608[200];
+char buf1609[200];
+char buf1610[200];
+char buf1611[200];
+char buf1612[200];
+char buf1613[200];
+char buf1614[200];
+char buf1615[200];
+char buf1616[200];
+char buf1617[200];
+char buf1618[200];
+char buf1619[200];
+char buf1620[200];
+char buf1621[200];
+char buf1622[200];
+char buf1623[200];
+char buf1624[200];
+char buf1625[200];
+char buf1626[200];
+char buf1627[200];
+char buf1628[200];
+char buf1629[200];
+char buf1630[200];
+char buf1631[200];
+char buf1632[200];
+char buf1633[200];
+char buf1634[200];
+char buf1635[200];
+char buf1636[200];
+char buf1637[200];
+char buf1638[200];
+char buf1639[200];
+char buf1640[200];
+char buf1641[200];
+char buf1642[200];
+char buf1643[200];
+char buf1644[200];
+char buf1645[200];
+char buf1646[200];
+char buf1647[200];
+char buf1648[200];
+char buf1649[200];
+char buf1650[200];
+char buf1651[200];
+char buf1652[200];
+char buf1653[200];
+char buf1654[200];
+char buf1655[200];
+char buf1656[200];
+char buf1657[200];
+char buf1658[200];
+char buf1659[200];
+char buf1660[200];
+char buf1661[200];
+char buf1662[200];
+char buf1663[200];
+char buf1664[200];
+char buf1665[200];
+char buf1666[200];
+char buf1667[200];
+char buf1668[200];
+char buf1669[200];
+char buf1670[200];
+char buf1671[200];
+char buf1672[200];
+char buf1673[200];
+char buf1674[200];
+char buf1675[200];
+char buf1676[200];
+char buf1677[200];
+char buf1678[200];
+char buf1679[200];
+char buf1680[200];
+char buf1681[200];
+char buf1682[200];
+char buf1683[200];
+char buf1684[200];
+char buf1685[200];
+char buf1686[200];
+char buf1687[200];
+char buf1688[200];
+char buf1689[200];
+char buf1690[200];
+char buf1691[200];
+char buf1692[200];
+char buf1693[200];
+char buf1694[200];
+char buf1695[200];
+char buf1696[200];
+char buf1697[200];
+char buf1698[200];
+char buf1699[200];
+char buf1700[200];
+char buf1701[200];
+char buf1702[200];
+char buf1703[200];
+char buf1704[200];
+char buf1705[200];
+char buf1706[200];
+char buf1707[200];
+char buf1708[200];
+char buf1709[200];
+char buf1710[200];
+char buf1711[200];
+char buf1712[200];
+char buf1713[200];
+char buf1714[200];
+char buf1715[200];
+char buf1716[200];
+char buf1717[200];
+char buf1718[200];
+char buf1719[200];
+char buf1720[200];
+char buf1721[200];
+char buf1722[200];
+char buf1723[200];
+char buf1724[200];
+char buf1725[200];
+char buf1726[200];
+char buf1727[200];
+char buf1728[200];
+char buf1729[200];
+char buf1730[200];
+char buf1731[200];
+char buf1732[200];
+char buf1733[200];
+char buf1734[200];
+char buf1735[200];
+char buf1736[200];
+char buf1737[200];
+char buf1738[200];
+char buf1739[200];
+char buf1740[200];
+char buf1741[200];
+char buf1742[200];
+char buf1743[200];
+char buf1744[200];
+char buf1745[200];
+char buf1746[200];
+char buf1747[200];
+char buf1748[200];
+char buf1749[200];
+char buf1750[200];
+char buf1751[200];
+char buf1752[200];
+char buf1753[200];
+char buf1754[200];
+char buf1755[200];
+char buf1756[200];
+char buf1757[200];
+char buf1758[200];
+char buf1759[200];
+char buf1760[200];
+char buf1761[200];
+char buf1762[200];
+char buf1763[200];
+char buf1764[200];
+char buf1765[200];
+char buf1766[200];
+char buf1767[200];
+char buf1768[200];
+char buf1769[200];
+char buf1770[200];
+char buf1771[200];
+char buf1772[200];
+char buf1773[200];
+char buf1774[200];
+char buf1775[200];
+char buf1776[200];
+char buf1777[200];
+char buf1778[200];
+char buf1779[200];
+char buf1780[200];
+char buf1781[200];
+char buf1782[200];
+char buf1783[200];
+char buf1784[200];
+char buf1785[200];
+char buf1786[200];
+char buf1787[200];
+char buf1788[200];
+char buf1789[200];
+char buf1790[200];
+char buf1791[200];
+char buf1792[200];
+char buf1793[200];
+char buf1794[200];
+char buf1795[200];
+char buf1796[200];
+char buf1797[200];
+char buf1798[200];
+char buf1799[200];
+char buf1800[200];
+char buf1801[200];
+char buf1802[200];
+char buf1803[200];
+char buf1804[200];
+char buf1805[200];
+char buf1806[200];
+char buf1807[200];
+char buf1808[200];
+char buf1809[200];
+char buf1810[200];
+char buf1811[200];
+char buf1812[200];
+char buf1813[200];
+char buf1814[200];
+char buf1815[200];
+char buf1816[200];
+char buf1817[200];
+char buf1818[200];
+char buf1819[200];
+char buf1820[200];
+char buf1821[200];
+char buf1822[200];
+char buf1823[200];
+char buf1824[200];
+char buf1825[200];
+char buf1826[200];
+char buf1827[200];
+char buf1828[200];
+char buf1829[200];
+char buf1830[200];
+char buf1831[200];
+char buf1832[200];
+char buf1833[200];
+char buf1834[200];
+char buf1835[200];
+char buf1836[200];
+char buf1837[200];
+char buf1838[200];
+char buf1839[200];
+char buf1840[200];
+char buf1841[200];
+char buf1842[200];
+char buf1843[200];
+char buf1844[200];
+char buf1845[200];
+char buf1846[200];
+char buf1847[200];
+char buf1848[200];
+char buf1849[200];
+char buf1850[200];
+char buf1851[200];
+char buf1852[200];
+char buf1853[200];
+char buf1854[200];
+char buf1855[200];
+char buf1856[200];
+char buf1857[200];
+char buf1858[200];
+char buf1859[200];
+char buf1860[200];
+char buf1861[200];
+char buf1862[200];
+char buf1863[200];
+char buf1864[200];
+char buf1865[200];
+char buf1866[200];
+char buf1867[200];
+char buf1868[200];
+char buf1869[200];
+char buf1870[200];
+char buf1871[200];
+char buf1872[200];
+char buf1873[200];
+char buf1874[200];
+char buf1875[200];
+char buf1876[200];
+char buf1877[200];
+char buf1878[200];
+char buf1879[200];
+char buf1880[200];
+char buf1881[200];
+char buf1882[200];
+char buf1883[200];
+char buf1884[200];
+char buf1885[200];
+char buf1886[200];
+char buf1887[200];
+char buf1888[200];
+char buf1889[200];
+char buf1890[200];
+char buf1891[200];
+char buf1892[200];
+char buf1893[200];
+char buf1894[200];
+char buf1895[200];
+char buf1896[200];
+char buf1897[200];
+char buf1898[200];
+char buf1899[200];
+char buf1900[200];
+char buf1901[200];
+char buf1902[200];
+char buf1903[200];
+char buf1904[200];
+char buf1905[200];
+char buf1906[200];
+char buf1907[200];
+char buf1908[200];
+char buf1909[200];
+char buf1910[200];
+char buf1911[200];
+char buf1912[200];
+char buf1913[200];
+char buf1914[200];
+char buf1915[200];
+char buf1916[200];
+char buf1917[200];
+char buf1918[200];
+char buf1919[200];
+char buf1920[200];
+char buf1921[200];
+char buf1922[200];
+char buf1923[200];
+char buf1924[200];
+char buf1925[200];
+char buf1926[200];
+char buf1927[200];
+char buf1928[200];
+char buf1929[200];
+char buf1930[200];
+char buf1931[200];
+char buf1932[200];
+char buf1933[200];
+char buf1934[200];
+char buf1935[200];
+char buf1936[200];
+char buf1937[200];
+char buf1938[200];
+char buf1939[200];
+char buf1940[200];
+char buf1941[200];
+char buf1942[200];
+char buf1943[200];
+char buf1944[200];
+char buf1945[200];
+char buf1946[200];
+char buf1947[200];
+char buf1948[200];
+char buf1949[200];
+char buf1950[200];
+char buf1951[200];
+char buf1952[200];
+char buf1953[200];
+char buf1954[200];
+char buf1955[200];
+char buf1956[200];
+char buf1957[200];
+char buf1958[200];
+char buf1959[200];
+char buf1960[200];
+char buf1961[200];
+char buf1962[200];
+char buf1963[200];
+char buf1964[200];
+char buf1965[200];
+char buf1966[200];
+char buf1967[200];
+char buf1968[200];
+char buf1969[200];
+char buf1970[200];
+char buf1971[200];
+char buf1972[200];
+char buf1973[200];
+char buf1974[200];
+char buf1975[200];
+char buf1976[200];
+char buf1977[200];
+char buf1978[200];
+char buf1979[200];
+char buf1980[200];
+char buf1981[200];
+char buf1982[200];
+char buf1983[200];
+char buf1984[200];
+char buf1985[200];
+char buf1986[200];
+char buf1987[200];
+char buf1988[200];
+char buf1989[200];
+char buf1990[200];
+char buf1991[200];
+char buf1992[200];
+char buf1993[200];
+char buf1994[200];
+char buf1995[200];
+char buf1996[200];
+char buf1997[200];
+char buf1998[200];
+char buf1999[200];
+char buf2000[200];
+char buf2001[200];
+char buf2002[200];
+char buf2003[200];
+char buf2004[200];
+char buf2005[200];
+char buf2006[200];
+char buf2007[200];
+char buf2008[200];
+char buf2009[200];
+char buf2010[200];
+char buf2011[200];
+char buf2012[200];
+char buf2013[200];
+char buf2014[200];
+char buf2015[200];
+char buf2016[200];
+char buf2017[200];
+char buf2018[200];
+char buf2019[200];
+char buf2020[200];
+char buf2021[200];
+char buf2022[200];
+char buf2023[200];
+char buf2024[200];
+char buf2025[200];
+char buf2026[200];
+char buf2027[200];
+char buf2028[200];
+char buf2029[200];
+char buf2030[200];
+char buf2031[200];
+char buf2032[200];
+char buf2033[200];
+char buf2034[200];
+char buf2035[200];
+char buf2036[200];
+char buf2037[200];
+char buf2038[200];
+char buf2039[200];
+char buf2040[200];
+char buf2041[200];
+char buf2042[200];
+char buf2043[200];
+char buf2044[200];
+char buf2045[200];
+char buf2046[200];
+char buf2047[200];
+char buf2048[200];
+char buf2049[200];
+char buf2050[200];
+char buf2051[200];
+char buf2052[200];
+char buf2053[200];
+char buf2054[200];
+char buf2055[200];
+char buf2056[200];
+char buf2057[200];
+char buf2058[200];
+char buf2059[200];
+char buf2060[200];
+char buf2061[200];
+char buf2062[200];
+char buf2063[200];
+char buf2064[200];
+char buf2065[200];
+char buf2066[200];
+char buf2067[200];
+char buf2068[200];
+char buf2069[200];
+char buf2070[200];
+char buf2071[200];
+char buf2072[200];
+char buf2073[200];
+char buf2074[200];
+char buf2075[200];
+char buf2076[200];
+char buf2077[200];
+char buf2078[200];
+char buf2079[200];
+char buf2080[200];
+char buf2081[200];
+char buf2082[200];
+char buf2083[200];
+char buf2084[200];
+char buf2085[200];
+char buf2086[200];
+char buf2087[200];
+char buf2088[200];
+char buf2089[200];
+char buf2090[200];
+char buf2091[200];
+char buf2092[200];
+char buf2093[200];
+char buf2094[200];
+char buf2095[200];
+char buf2096[200];
+char buf2097[200];
+char buf2098[200];
+char buf2099[200];
+char buf2100[200];
+char buf2101[200];
+char buf2102[200];
+char buf2103[200];
+char buf2104[200];
+char buf2105[200];
+char buf2106[200];
+char buf2107[200];
+char buf2108[200];
+char buf2109[200];
+char buf2110[200];
+char buf2111[200];
+char buf2112[200];
+char buf2113[200];
+char buf2114[200];
+char buf2115[200];
+char buf2116[200];
+char buf2117[200];
+char buf2118[200];
+char buf2119[200];
+char buf2120[200];
+char buf2121[200];
+char buf2122[200];
+char buf2123[200];
+char buf2124[200];
+char buf2125[200];
+char buf2126[200];
+char buf2127[200];
+char buf2128[200];
+char buf2129[200];
+char buf2130[200];
+char buf2131[200];
+char buf2132[200];
+char buf2133[200];
+char buf2134[200];
+char buf2135[200];
+char buf2136[200];
+char buf2137[200];
+char buf2138[200];
+char buf2139[200];
+char buf2140[200];
+char buf2141[200];
+char buf2142[200];
+char buf2143[200];
+char buf2144[200];
+char buf2145[200];
+char buf2146[200];
+char buf2147[200];
+char buf2148[200];
+char buf2149[200];
+char buf2150[200];
+char buf2151[200];
+char buf2152[200];
+char buf2153[200];
+char buf2154[200];
+char buf2155[200];
+char buf2156[200];
+char buf2157[200];
+char buf2158[200];
+char buf2159[200];
+char buf2160[200];
+char buf2161[200];
+char buf2162[200];
+char buf2163[200];
+char buf2164[200];
+char buf2165[200];
+char buf2166[200];
+char buf2167[200];
+char buf2168[200];
+char buf2169[200];
+char buf2170[200];
+char buf2171[200];
+char buf2172[200];
+char buf2173[200];
+char buf2174[200];
+char buf2175[200];
+char buf2176[200];
+char buf2177[200];
+char buf2178[200];
+char buf2179[200];
+char buf2180[200];
+char buf2181[200];
+char buf2182[200];
+char buf2183[200];
+char buf2184[200];
+char buf2185[200];
+char buf2186[200];
+char buf2187[200];
+char buf2188[200];
+char buf2189[200];
+char buf2190[200];
+char buf2191[200];
+char buf2192[200];
+char buf2193[200];
+char buf2194[200];
+char buf2195[200];
+char buf2196[200];
+char buf2197[200];
+char buf2198[200];
+char buf2199[200];
+char buf2200[200];
+char buf2201[200];
+char buf2202[200];
+char buf2203[200];
+char buf2204[200];
+char buf2205[200];
+char buf2206[200];
+char buf2207[200];
+char buf2208[200];
+char buf2209[200];
+char buf2210[200];
+char buf2211[200];
+char buf2212[200];
+char buf2213[200];
+char buf2214[200];
+char buf2215[200];
+char buf2216[200];
+char buf2217[200];
+char buf2218[200];
+char buf2219[200];
+char buf2220[200];
+char buf2221[200];
+char buf2222[200];
+char buf2223[200];
+char buf2224[200];
+char buf2225[200];
+char buf2226[200];
+char buf2227[200];
+char buf2228[200];
+char buf2229[200];
+char buf2230[200];
+char buf2231[200];
+char buf2232[200];
+char buf2233[200];
+char buf2234[200];
+char buf2235[200];
+char buf2236[200];
+char buf2237[200];
+char buf2238[200];
+char buf2239[200];
+char buf2240[200];
+char buf2241[200];
+char buf2242[200];
+char buf2243[200];
+char buf2244[200];
+char buf2245[200];
+char buf2246[200];
+char buf2247[200];
+char buf2248[200];
+char buf2249[200];
+char buf2250[200];
+char buf2251[200];
+char buf2252[200];
+char buf2253[200];
+char buf2254[200];
+char buf2255[200];
+char buf2256[200];
+char buf2257[200];
+char buf2258[200];
+char buf2259[200];
+char buf2260[200];
+char buf2261[200];
+char buf2262[200];
+char buf2263[200];
+char buf2264[200];
+char buf2265[200];
+char buf2266[200];
+char buf2267[200];
+char buf2268[200];
+char buf2269[200];
+char buf2270[200];
+char buf2271[200];
+char buf2272[200];
+char buf2273[200];
+char buf2274[200];
+char buf2275[200];
+char buf2276[200];
+char buf2277[200];
+char buf2278[200];
+char buf2279[200];
+char buf2280[200];
+char buf2281[200];
+char buf2282[200];
+char buf2283[200];
+char buf2284[200];
+char buf2285[200];
+char buf2286[200];
+char buf2287[200];
+char buf2288[200];
+char buf2289[200];
+char buf2290[200];
+char buf2291[200];
+char buf2292[200];
+char buf2293[200];
+char buf2294[200];
+char buf2295[200];
+char buf2296[200];
+char buf2297[200];
+char buf2298[200];
+char buf2299[200];
+char buf2300[200];
+char buf2301[200];
+char buf2302[200];
+char buf2303[200];
+char buf2304[200];
+char buf2305[200];
+char buf2306[200];
+char buf2307[200];
+char buf2308[200];
+char buf2309[200];
+char buf2310[200];
+char buf2311[200];
+char buf2312[200];
+char buf2313[200];
+char buf2314[200];
+char buf2315[200];
+char buf2316[200];
+char buf2317[200];
+char buf2318[200];
+char buf2319[200];
+char buf2320[200];
+char buf2321[200];
+char buf2322[200];
+char buf2323[200];
+char buf2324[200];
+char buf2325[200];
+char buf2326[200];
+char buf2327[200];
+char buf2328[200];
+char buf2329[200];
+char buf2330[200];
+char buf2331[200];
+char buf2332[200];
+char buf2333[200];
+char buf2334[200];
+char buf2335[200];
+char buf2336[200];
+char buf2337[200];
+char buf2338[200];
+char buf2339[200];
+char buf2340[200];
+char buf2341[200];
+char buf2342[200];
+char buf2343[200];
+char buf2344[200];
+char buf2345[200];
+char buf2346[200];
+char buf2347[200];
+char buf2348[200];
+char buf2349[200];
+char buf2350[200];
+char buf2351[200];
+char buf2352[200];
+char buf2353[200];
+char buf2354[200];
+char buf2355[200];
+char buf2356[200];
+char buf2357[200];
+char buf2358[200];
+char buf2359[200];
+char buf2360[200];
+char buf2361[200];
+char buf2362[200];
+char buf2363[200];
+char buf2364[200];
+char buf2365[200];
+char buf2366[200];
+char buf2367[200];
+char buf2368[200];
+char buf2369[200];
+char buf2370[200];
+char buf2371[200];
+char buf2372[200];
+char buf2373[200];
+char buf2374[200];
+char buf2375[200];
+char buf2376[200];
+char buf2377[200];
+char buf2378[200];
+char buf2379[200];
+char buf2380[200];
+char buf2381[200];
+char buf2382[200];
+char buf2383[200];
+char buf2384[200];
+char buf2385[200];
+char buf2386[200];
+char buf2387[200];
+char buf2388[200];
+char buf2389[200];
+char buf2390[200];
+char buf2391[200];
+char buf2392[200];
+char buf2393[200];
+char buf2394[200];
+char buf2395[200];
+char buf2396[200];
+char buf2397[200];
+char buf2398[200];
+char buf2399[200];
+char buf2400[200];
+char buf2401[200];
+char buf2402[200];
+char buf2403[200];
+char buf2404[200];
+char buf2405[200];
+char buf2406[200];
+char buf2407[200];
+char buf2408[200];
+char buf2409[200];
+char buf2410[200];
+char buf2411[200];
+char buf2412[200];
+char buf2413[200];
+char buf2414[200];
+char buf2415[200];
+char buf2416[200];
+char buf2417[200];
+char buf2418[200];
+char buf2419[200];
+char buf2420[200];
+char buf2421[200];
+char buf2422[200];
+char buf2423[200];
+char buf2424[200];
+char buf2425[200];
+char buf2426[200];
+char buf2427[200];
+char buf2428[200];
+char buf2429[200];
+char buf2430[200];
+char buf2431[200];
+char buf2432[200];
+char buf2433[200];
+char buf2434[200];
+char buf2435[200];
+char buf2436[200];
+char buf2437[200];
+char buf2438[200];
+char buf2439[200];
+char buf2440[200];
+char buf2441[200];
+char buf2442[200];
+char buf2443[200];
+char buf2444[200];
+char buf2445[200];
+char buf2446[200];
+char buf2447[200];
+char buf2448[200];
+char buf2449[200];
+char buf2450[200];
+char buf2451[200];
+char buf2452[200];
+char buf2453[200];
+char buf2454[200];
+char buf2455[200];
+char buf2456[200];
+char buf2457[200];
+char buf2458[200];
+char buf2459[200];
+char buf2460[200];
+char buf2461[200];
+char buf2462[200];
+char buf2463[200];
+char buf2464[200];
+char buf2465[200];
+char buf2466[200];
+char buf2467[200];
+char buf2468[200];
+char buf2469[200];
+char buf2470[200];
+char buf2471[200];
+char buf2472[200];
+char buf2473[200];
+char buf2474[200];
+char buf2475[200];
+char buf2476[200];
+char buf2477[200];
+char buf2478[200];
+char buf2479[200];
+char buf2480[200];
+char buf2481[200];
+char buf2482[200];
+char buf2483[200];
+char buf2484[200];
+char buf2485[200];
+char buf2486[200];
+char buf2487[200];
+char buf2488[200];
+char buf2489[200];
+char buf2490[200];
+char buf2491[200];
+char buf2492[200];
+
+void root(const int* in) {
+    *(uchar*)buf0 = abs(*(char*)buf1);
+    *(uchar2*)buf2 = abs(*(char2*)buf3);
+    *(uchar3*)buf4 = abs(*(char3*)buf5);
+    *(uchar4*)buf6 = abs(*(char4*)buf7);
+    *(ushort*)buf8 = abs(*(short*)buf9);
+    *(ushort2*)buf10 = abs(*(short2*)buf11);
+    *(ushort3*)buf12 = abs(*(short3*)buf13);
+    *(ushort4*)buf14 = abs(*(short4*)buf15);
+    *(uint*)buf16 = abs(*(int*)buf17);
+    *(uint2*)buf18 = abs(*(int2*)buf19);
+    *(uint3*)buf20 = abs(*(int3*)buf21);
+    *(uint4*)buf22 = abs(*(int4*)buf23);
+    *(float*)buf24 = acos(*(float*)buf25);
+    *(float2*)buf26 = acos(*(float2*)buf27);
+    *(float3*)buf28 = acos(*(float3*)buf29);
+    *(float4*)buf30 = acos(*(float4*)buf31);
+    *(float*)buf32 = acosh(*(float*)buf33);
+    *(float2*)buf34 = acosh(*(float2*)buf35);
+    *(float3*)buf36 = acosh(*(float3*)buf37);
+    *(float4*)buf38 = acosh(*(float4*)buf39);
+    *(float*)buf40 = acospi(*(float*)buf41);
+    *(float2*)buf42 = acospi(*(float2*)buf43);
+    *(float3*)buf44 = acospi(*(float3*)buf45);
+    *(float4*)buf46 = acospi(*(float4*)buf47);
+    *(float*)buf48 = asin(*(float*)buf49);
+    *(float2*)buf50 = asin(*(float2*)buf51);
+    *(float3*)buf52 = asin(*(float3*)buf53);
+    *(float4*)buf54 = asin(*(float4*)buf55);
+    *(float*)buf56 = asinh(*(float*)buf57);
+    *(float2*)buf58 = asinh(*(float2*)buf59);
+    *(float3*)buf60 = asinh(*(float3*)buf61);
+    *(float4*)buf62 = asinh(*(float4*)buf63);
+    *(float*)buf64 = asinpi(*(float*)buf65);
+    *(float2*)buf66 = asinpi(*(float2*)buf67);
+    *(float3*)buf68 = asinpi(*(float3*)buf69);
+    *(float4*)buf70 = asinpi(*(float4*)buf71);
+    *(float*)buf72 = atan(*(float*)buf73);
+    *(float2*)buf74 = atan(*(float2*)buf75);
+    *(float3*)buf76 = atan(*(float3*)buf77);
+    *(float4*)buf78 = atan(*(float4*)buf79);
+    *(float*)buf80 = atan2(*(float*)buf81, *(float*)buf82);
+    *(float2*)buf83 = atan2(*(float2*)buf84, *(float2*)buf85);
+    *(float3*)buf86 = atan2(*(float3*)buf87, *(float3*)buf88);
+    *(float4*)buf89 = atan2(*(float4*)buf90, *(float4*)buf91);
+    *(float*)buf92 = atan2pi(*(float*)buf93, *(float*)buf94);
+    *(float2*)buf95 = atan2pi(*(float2*)buf96, *(float2*)buf97);
+    *(float3*)buf98 = atan2pi(*(float3*)buf99, *(float3*)buf100);
+    *(float4*)buf101 = atan2pi(*(float4*)buf102, *(float4*)buf103);
+    *(float*)buf104 = atanh(*(float*)buf105);
+    *(float2*)buf106 = atanh(*(float2*)buf107);
+    *(float3*)buf108 = atanh(*(float3*)buf109);
+    *(float4*)buf110 = atanh(*(float4*)buf111);
+    *(float*)buf112 = atanpi(*(float*)buf113);
+    *(float2*)buf114 = atanpi(*(float2*)buf115);
+    *(float3*)buf116 = atanpi(*(float3*)buf117);
+    *(float4*)buf118 = atanpi(*(float4*)buf119);
+    *(float*)buf120 = cbrt(*(float*)buf121);
+    *(float2*)buf122 = cbrt(*(float2*)buf123);
+    *(float3*)buf124 = cbrt(*(float3*)buf125);
+    *(float4*)buf126 = cbrt(*(float4*)buf127);
+    *(float*)buf128 = ceil(*(float*)buf129);
+    *(float2*)buf130 = ceil(*(float2*)buf131);
+    *(float3*)buf132 = ceil(*(float3*)buf133);
+    *(float4*)buf134 = ceil(*(float4*)buf135);
+    *(float*)buf136 = clamp(*(float*)buf137, *(float*)buf138, *(float*)buf139);
+    *(float2*)buf140 = clamp(*(float2*)buf141, *(float2*)buf142, *(float2*)buf143);
+    *(float3*)buf144 = clamp(*(float3*)buf145, *(float3*)buf146, *(float3*)buf147);
+    *(float4*)buf148 = clamp(*(float4*)buf149, *(float4*)buf150, *(float4*)buf151);
+    *(float2*)buf152 = clamp(*(float2*)buf153, *(float*)buf154, *(float*)buf155);
+    *(float3*)buf156 = clamp(*(float3*)buf157, *(float*)buf158, *(float*)buf159);
+    *(float4*)buf160 = clamp(*(float4*)buf161, *(float*)buf162, *(float*)buf163);
+    *(char*)buf164 = clz(*(char*)buf165);
+    *(char2*)buf166 = clz(*(char2*)buf167);
+    *(char3*)buf168 = clz(*(char3*)buf169);
+    *(char4*)buf170 = clz(*(char4*)buf171);
+    *(uchar*)buf172 = clz(*(uchar*)buf173);
+    *(uchar2*)buf174 = clz(*(uchar2*)buf175);
+    *(uchar3*)buf176 = clz(*(uchar3*)buf177);
+    *(uchar4*)buf178 = clz(*(uchar4*)buf179);
+    *(short*)buf180 = clz(*(short*)buf181);
+    *(short2*)buf182 = clz(*(short2*)buf183);
+    *(short3*)buf184 = clz(*(short3*)buf185);
+    *(short4*)buf186 = clz(*(short4*)buf187);
+    *(ushort*)buf188 = clz(*(ushort*)buf189);
+    *(ushort2*)buf190 = clz(*(ushort2*)buf191);
+    *(ushort3*)buf192 = clz(*(ushort3*)buf193);
+    *(ushort4*)buf194 = clz(*(ushort4*)buf195);
+    *(int*)buf196 = clz(*(int*)buf197);
+    *(int2*)buf198 = clz(*(int2*)buf199);
+    *(int3*)buf200 = clz(*(int3*)buf201);
+    *(int4*)buf202 = clz(*(int4*)buf203);
+    *(uint*)buf204 = clz(*(uint*)buf205);
+    *(uint2*)buf206 = clz(*(uint2*)buf207);
+    *(uint3*)buf208 = clz(*(uint3*)buf209);
+    *(uint4*)buf210 = clz(*(uint4*)buf211);
+    *(float2*)buf212 = convert_float2(*(float2*)buf213);
+    *(float3*)buf214 = convert_float3(*(float3*)buf215);
+    *(float4*)buf216 = convert_float4(*(float4*)buf217);
+    *(float2*)buf218 = convert_float2(*(char2*)buf219);
+    *(float3*)buf220 = convert_float3(*(char3*)buf221);
+    *(float4*)buf222 = convert_float4(*(char4*)buf223);
+    *(float2*)buf224 = convert_float2(*(uchar2*)buf225);
+    *(float3*)buf226 = convert_float3(*(uchar3*)buf227);
+    *(float4*)buf228 = convert_float4(*(uchar4*)buf229);
+    *(float2*)buf230 = convert_float2(*(short2*)buf231);
+    *(float3*)buf232 = convert_float3(*(short3*)buf233);
+    *(float4*)buf234 = convert_float4(*(short4*)buf235);
+    *(float2*)buf236 = convert_float2(*(ushort2*)buf237);
+    *(float3*)buf238 = convert_float3(*(ushort3*)buf239);
+    *(float4*)buf240 = convert_float4(*(ushort4*)buf241);
+    *(float2*)buf242 = convert_float2(*(int2*)buf243);
+    *(float3*)buf244 = convert_float3(*(int3*)buf245);
+    *(float4*)buf246 = convert_float4(*(int4*)buf247);
+    *(float2*)buf248 = convert_float2(*(uint2*)buf249);
+    *(float3*)buf250 = convert_float3(*(uint3*)buf251);
+    *(float4*)buf252 = convert_float4(*(uint4*)buf253);
+    *(char2*)buf254 = convert_char2(*(float2*)buf255);
+    *(char3*)buf256 = convert_char3(*(float3*)buf257);
+    *(char4*)buf258 = convert_char4(*(float4*)buf259);
+    *(char2*)buf260 = convert_char2(*(char2*)buf261);
+    *(char3*)buf262 = convert_char3(*(char3*)buf263);
+    *(char4*)buf264 = convert_char4(*(char4*)buf265);
+    *(char2*)buf266 = convert_char2(*(uchar2*)buf267);
+    *(char3*)buf268 = convert_char3(*(uchar3*)buf269);
+    *(char4*)buf270 = convert_char4(*(uchar4*)buf271);
+    *(char2*)buf272 = convert_char2(*(short2*)buf273);
+    *(char3*)buf274 = convert_char3(*(short3*)buf275);
+    *(char4*)buf276 = convert_char4(*(short4*)buf277);
+    *(char2*)buf278 = convert_char2(*(ushort2*)buf279);
+    *(char3*)buf280 = convert_char3(*(ushort3*)buf281);
+    *(char4*)buf282 = convert_char4(*(ushort4*)buf283);
+    *(char2*)buf284 = convert_char2(*(int2*)buf285);
+    *(char3*)buf286 = convert_char3(*(int3*)buf287);
+    *(char4*)buf288 = convert_char4(*(int4*)buf289);
+    *(char2*)buf290 = convert_char2(*(uint2*)buf291);
+    *(char3*)buf292 = convert_char3(*(uint3*)buf293);
+    *(char4*)buf294 = convert_char4(*(uint4*)buf295);
+    *(uchar2*)buf296 = convert_uchar2(*(float2*)buf297);
+    *(uchar3*)buf298 = convert_uchar3(*(float3*)buf299);
+    *(uchar4*)buf300 = convert_uchar4(*(float4*)buf301);
+    *(uchar2*)buf302 = convert_uchar2(*(char2*)buf303);
+    *(uchar3*)buf304 = convert_uchar3(*(char3*)buf305);
+    *(uchar4*)buf306 = convert_uchar4(*(char4*)buf307);
+    *(uchar2*)buf308 = convert_uchar2(*(uchar2*)buf309);
+    *(uchar3*)buf310 = convert_uchar3(*(uchar3*)buf311);
+    *(uchar4*)buf312 = convert_uchar4(*(uchar4*)buf313);
+    *(uchar2*)buf314 = convert_uchar2(*(short2*)buf315);
+    *(uchar3*)buf316 = convert_uchar3(*(short3*)buf317);
+    *(uchar4*)buf318 = convert_uchar4(*(short4*)buf319);
+    *(uchar2*)buf320 = convert_uchar2(*(ushort2*)buf321);
+    *(uchar3*)buf322 = convert_uchar3(*(ushort3*)buf323);
+    *(uchar4*)buf324 = convert_uchar4(*(ushort4*)buf325);
+    *(uchar2*)buf326 = convert_uchar2(*(int2*)buf327);
+    *(uchar3*)buf328 = convert_uchar3(*(int3*)buf329);
+    *(uchar4*)buf330 = convert_uchar4(*(int4*)buf331);
+    *(uchar2*)buf332 = convert_uchar2(*(uint2*)buf333);
+    *(uchar3*)buf334 = convert_uchar3(*(uint3*)buf335);
+    *(uchar4*)buf336 = convert_uchar4(*(uint4*)buf337);
+    *(short2*)buf338 = convert_short2(*(float2*)buf339);
+    *(short3*)buf340 = convert_short3(*(float3*)buf341);
+    *(short4*)buf342 = convert_short4(*(float4*)buf343);
+    *(short2*)buf344 = convert_short2(*(char2*)buf345);
+    *(short3*)buf346 = convert_short3(*(char3*)buf347);
+    *(short4*)buf348 = convert_short4(*(char4*)buf349);
+    *(short2*)buf350 = convert_short2(*(uchar2*)buf351);
+    *(short3*)buf352 = convert_short3(*(uchar3*)buf353);
+    *(short4*)buf354 = convert_short4(*(uchar4*)buf355);
+    *(short2*)buf356 = convert_short2(*(short2*)buf357);
+    *(short3*)buf358 = convert_short3(*(short3*)buf359);
+    *(short4*)buf360 = convert_short4(*(short4*)buf361);
+    *(short2*)buf362 = convert_short2(*(ushort2*)buf363);
+    *(short3*)buf364 = convert_short3(*(ushort3*)buf365);
+    *(short4*)buf366 = convert_short4(*(ushort4*)buf367);
+    *(short2*)buf368 = convert_short2(*(int2*)buf369);
+    *(short3*)buf370 = convert_short3(*(int3*)buf371);
+    *(short4*)buf372 = convert_short4(*(int4*)buf373);
+    *(short2*)buf374 = convert_short2(*(uint2*)buf375);
+    *(short3*)buf376 = convert_short3(*(uint3*)buf377);
+    *(short4*)buf378 = convert_short4(*(uint4*)buf379);
+    *(ushort2*)buf380 = convert_ushort2(*(float2*)buf381);
+    *(ushort3*)buf382 = convert_ushort3(*(float3*)buf383);
+    *(ushort4*)buf384 = convert_ushort4(*(float4*)buf385);
+    *(ushort2*)buf386 = convert_ushort2(*(char2*)buf387);
+    *(ushort3*)buf388 = convert_ushort3(*(char3*)buf389);
+    *(ushort4*)buf390 = convert_ushort4(*(char4*)buf391);
+    *(ushort2*)buf392 = convert_ushort2(*(uchar2*)buf393);
+    *(ushort3*)buf394 = convert_ushort3(*(uchar3*)buf395);
+    *(ushort4*)buf396 = convert_ushort4(*(uchar4*)buf397);
+    *(ushort2*)buf398 = convert_ushort2(*(short2*)buf399);
+    *(ushort3*)buf400 = convert_ushort3(*(short3*)buf401);
+    *(ushort4*)buf402 = convert_ushort4(*(short4*)buf403);
+    *(ushort2*)buf404 = convert_ushort2(*(ushort2*)buf405);
+    *(ushort3*)buf406 = convert_ushort3(*(ushort3*)buf407);
+    *(ushort4*)buf408 = convert_ushort4(*(ushort4*)buf409);
+    *(ushort2*)buf410 = convert_ushort2(*(int2*)buf411);
+    *(ushort3*)buf412 = convert_ushort3(*(int3*)buf413);
+    *(ushort4*)buf414 = convert_ushort4(*(int4*)buf415);
+    *(ushort2*)buf416 = convert_ushort2(*(uint2*)buf417);
+    *(ushort3*)buf418 = convert_ushort3(*(uint3*)buf419);
+    *(ushort4*)buf420 = convert_ushort4(*(uint4*)buf421);
+    *(int2*)buf422 = convert_int2(*(float2*)buf423);
+    *(int3*)buf424 = convert_int3(*(float3*)buf425);
+    *(int4*)buf426 = convert_int4(*(float4*)buf427);
+    *(int2*)buf428 = convert_int2(*(char2*)buf429);
+    *(int3*)buf430 = convert_int3(*(char3*)buf431);
+    *(int4*)buf432 = convert_int4(*(char4*)buf433);
+    *(int2*)buf434 = convert_int2(*(uchar2*)buf435);
+    *(int3*)buf436 = convert_int3(*(uchar3*)buf437);
+    *(int4*)buf438 = convert_int4(*(uchar4*)buf439);
+    *(int2*)buf440 = convert_int2(*(short2*)buf441);
+    *(int3*)buf442 = convert_int3(*(short3*)buf443);
+    *(int4*)buf444 = convert_int4(*(short4*)buf445);
+    *(int2*)buf446 = convert_int2(*(ushort2*)buf447);
+    *(int3*)buf448 = convert_int3(*(ushort3*)buf449);
+    *(int4*)buf450 = convert_int4(*(ushort4*)buf451);
+    *(int2*)buf452 = convert_int2(*(int2*)buf453);
+    *(int3*)buf454 = convert_int3(*(int3*)buf455);
+    *(int4*)buf456 = convert_int4(*(int4*)buf457);
+    *(int2*)buf458 = convert_int2(*(uint2*)buf459);
+    *(int3*)buf460 = convert_int3(*(uint3*)buf461);
+    *(int4*)buf462 = convert_int4(*(uint4*)buf463);
+    *(uint2*)buf464 = convert_uint2(*(float2*)buf465);
+    *(uint3*)buf466 = convert_uint3(*(float3*)buf467);
+    *(uint4*)buf468 = convert_uint4(*(float4*)buf469);
+    *(uint2*)buf470 = convert_uint2(*(char2*)buf471);
+    *(uint3*)buf472 = convert_uint3(*(char3*)buf473);
+    *(uint4*)buf474 = convert_uint4(*(char4*)buf475);
+    *(uint2*)buf476 = convert_uint2(*(uchar2*)buf477);
+    *(uint3*)buf478 = convert_uint3(*(uchar3*)buf479);
+    *(uint4*)buf480 = convert_uint4(*(uchar4*)buf481);
+    *(uint2*)buf482 = convert_uint2(*(short2*)buf483);
+    *(uint3*)buf484 = convert_uint3(*(short3*)buf485);
+    *(uint4*)buf486 = convert_uint4(*(short4*)buf487);
+    *(uint2*)buf488 = convert_uint2(*(ushort2*)buf489);
+    *(uint3*)buf490 = convert_uint3(*(ushort3*)buf491);
+    *(uint4*)buf492 = convert_uint4(*(ushort4*)buf493);
+    *(uint2*)buf494 = convert_uint2(*(int2*)buf495);
+    *(uint3*)buf496 = convert_uint3(*(int3*)buf497);
+    *(uint4*)buf498 = convert_uint4(*(int4*)buf499);
+    *(uint2*)buf500 = convert_uint2(*(uint2*)buf501);
+    *(uint3*)buf502 = convert_uint3(*(uint3*)buf503);
+    *(uint4*)buf504 = convert_uint4(*(uint4*)buf505);
+    *(float*)buf506 = copysign(*(float*)buf507, *(float*)buf508);
+    *(float2*)buf509 = copysign(*(float2*)buf510, *(float2*)buf511);
+    *(float3*)buf512 = copysign(*(float3*)buf513, *(float3*)buf514);
+    *(float4*)buf515 = copysign(*(float4*)buf516, *(float4*)buf517);
+    *(float*)buf518 = cos(*(float*)buf519);
+    *(float2*)buf520 = cos(*(float2*)buf521);
+    *(float3*)buf522 = cos(*(float3*)buf523);
+    *(float4*)buf524 = cos(*(float4*)buf525);
+    *(float*)buf526 = cosh(*(float*)buf527);
+    *(float2*)buf528 = cosh(*(float2*)buf529);
+    *(float3*)buf530 = cosh(*(float3*)buf531);
+    *(float4*)buf532 = cosh(*(float4*)buf533);
+    *(float*)buf534 = cospi(*(float*)buf535);
+    *(float2*)buf536 = cospi(*(float2*)buf537);
+    *(float3*)buf538 = cospi(*(float3*)buf539);
+    *(float4*)buf540 = cospi(*(float4*)buf541);
+    *(float3*)buf542 = cross(*(float3*)buf543, *(float3*)buf544);
+    *(float4*)buf545 = cross(*(float4*)buf546, *(float4*)buf547);
+    *(float*)buf548 = degrees(*(float*)buf549);
+    *(float2*)buf550 = degrees(*(float2*)buf551);
+    *(float3*)buf552 = degrees(*(float3*)buf553);
+    *(float4*)buf554 = degrees(*(float4*)buf555);
+    *(float*)buf556 = distance(*(float*)buf557, *(float*)buf558);
+    *(float*)buf559 = distance(*(float2*)buf560, *(float2*)buf561);
+    *(float*)buf562 = distance(*(float3*)buf563, *(float3*)buf564);
+    *(float*)buf565 = distance(*(float4*)buf566, *(float4*)buf567);
+    *(float*)buf568 = dot(*(float*)buf569, *(float*)buf570);
+    *(float*)buf571 = dot(*(float2*)buf572, *(float2*)buf573);
+    *(float*)buf574 = dot(*(float3*)buf575, *(float3*)buf576);
+    *(float*)buf577 = dot(*(float4*)buf578, *(float4*)buf579);
+    *(float*)buf580 = erf(*(float*)buf581);
+    *(float2*)buf582 = erf(*(float2*)buf583);
+    *(float3*)buf584 = erf(*(float3*)buf585);
+    *(float4*)buf586 = erf(*(float4*)buf587);
+    *(float*)buf588 = erfc(*(float*)buf589);
+    *(float2*)buf590 = erfc(*(float2*)buf591);
+    *(float3*)buf592 = erfc(*(float3*)buf593);
+    *(float4*)buf594 = erfc(*(float4*)buf595);
+    *(float*)buf596 = exp(*(float*)buf597);
+    *(float2*)buf598 = exp(*(float2*)buf599);
+    *(float3*)buf600 = exp(*(float3*)buf601);
+    *(float4*)buf602 = exp(*(float4*)buf603);
+    *(float*)buf604 = exp10(*(float*)buf605);
+    *(float2*)buf606 = exp10(*(float2*)buf607);
+    *(float3*)buf608 = exp10(*(float3*)buf609);
+    *(float4*)buf610 = exp10(*(float4*)buf611);
+    *(float*)buf612 = exp2(*(float*)buf613);
+    *(float2*)buf614 = exp2(*(float2*)buf615);
+    *(float3*)buf616 = exp2(*(float3*)buf617);
+    *(float4*)buf618 = exp2(*(float4*)buf619);
+    *(float*)buf620 = expm1(*(float*)buf621);
+    *(float2*)buf622 = expm1(*(float2*)buf623);
+    *(float3*)buf624 = expm1(*(float3*)buf625);
+    *(float4*)buf626 = expm1(*(float4*)buf627);
+    *(float*)buf628 = fabs(*(float*)buf629);
+    *(float2*)buf630 = fabs(*(float2*)buf631);
+    *(float3*)buf632 = fabs(*(float3*)buf633);
+    *(float4*)buf634 = fabs(*(float4*)buf635);
+    *(float*)buf636 = fdim(*(float*)buf637, *(float*)buf638);
+    *(float2*)buf639 = fdim(*(float2*)buf640, *(float2*)buf641);
+    *(float3*)buf642 = fdim(*(float3*)buf643, *(float3*)buf644);
+    *(float4*)buf645 = fdim(*(float4*)buf646, *(float4*)buf647);
+    *(float*)buf648 = floor(*(float*)buf649);
+    *(float2*)buf650 = floor(*(float2*)buf651);
+    *(float3*)buf652 = floor(*(float3*)buf653);
+    *(float4*)buf654 = floor(*(float4*)buf655);
+    *(float*)buf656 = fma(*(float*)buf657, *(float*)buf658, *(float*)buf659);
+    *(float2*)buf660 = fma(*(float2*)buf661, *(float2*)buf662, *(float2*)buf663);
+    *(float3*)buf664 = fma(*(float3*)buf665, *(float3*)buf666, *(float3*)buf667);
+    *(float4*)buf668 = fma(*(float4*)buf669, *(float4*)buf670, *(float4*)buf671);
+    *(float*)buf672 = fmax(*(float*)buf673, *(float*)buf674);
+    *(float2*)buf675 = fmax(*(float2*)buf676, *(float2*)buf677);
+    *(float3*)buf678 = fmax(*(float3*)buf679, *(float3*)buf680);
+    *(float4*)buf681 = fmax(*(float4*)buf682, *(float4*)buf683);
+    *(float2*)buf684 = fmax(*(float2*)buf685, *(float*)buf686);
+    *(float3*)buf687 = fmax(*(float3*)buf688, *(float*)buf689);
+    *(float4*)buf690 = fmax(*(float4*)buf691, *(float*)buf692);
+    *(float*)buf693 = fmin(*(float*)buf694, *(float*)buf695);
+    *(float2*)buf696 = fmin(*(float2*)buf697, *(float2*)buf698);
+    *(float3*)buf699 = fmin(*(float3*)buf700, *(float3*)buf701);
+    *(float4*)buf702 = fmin(*(float4*)buf703, *(float4*)buf704);
+    *(float2*)buf705 = fmin(*(float2*)buf706, *(float*)buf707);
+    *(float3*)buf708 = fmin(*(float3*)buf709, *(float*)buf710);
+    *(float4*)buf711 = fmin(*(float4*)buf712, *(float*)buf713);
+    *(float*)buf714 = fmod(*(float*)buf715, *(float*)buf716);
+    *(float2*)buf717 = fmod(*(float2*)buf718, *(float2*)buf719);
+    *(float3*)buf720 = fmod(*(float3*)buf721, *(float3*)buf722);
+    *(float4*)buf723 = fmod(*(float4*)buf724, *(float4*)buf725);
+    *(float*)buf726 = fract(*(float*)buf727, (float*) buf728);
+    *(float2*)buf729 = fract(*(float2*)buf730, (float2*) buf731);
+    *(float3*)buf732 = fract(*(float3*)buf733, (float3*) buf734);
+    *(float4*)buf735 = fract(*(float4*)buf736, (float4*) buf737);
+    *(float*)buf738 = fract(*(float*)buf739);
+    *(float2*)buf740 = fract(*(float2*)buf741);
+    *(float3*)buf742 = fract(*(float3*)buf743);
+    *(float4*)buf744 = fract(*(float4*)buf745);
+    *(float*)buf746 = frexp(*(float*)buf747, (int*) buf748);
+    *(float2*)buf749 = frexp(*(float2*)buf750, (int2*) buf751);
+    *(float3*)buf752 = frexp(*(float3*)buf753, (int3*) buf754);
+    *(float4*)buf755 = frexp(*(float4*)buf756, (int4*) buf757);
+    *(float*)buf758 = hypot(*(float*)buf759, *(float*)buf760);
+    *(float2*)buf761 = hypot(*(float2*)buf762, *(float2*)buf763);
+    *(float3*)buf764 = hypot(*(float3*)buf765, *(float3*)buf766);
+    *(float4*)buf767 = hypot(*(float4*)buf768, *(float4*)buf769);
+    *(int*)buf770 = ilogb(*(float*)buf771);
+    *(int2*)buf772 = ilogb(*(float2*)buf773);
+    *(int3*)buf774 = ilogb(*(float3*)buf775);
+    *(int4*)buf776 = ilogb(*(float4*)buf777);
+    *(float*)buf778 = ldexp(*(float*)buf779, *(int*)buf780);
+    *(float2*)buf781 = ldexp(*(float2*)buf782, *(int2*)buf783);
+    *(float3*)buf784 = ldexp(*(float3*)buf785, *(int3*)buf786);
+    *(float4*)buf787 = ldexp(*(float4*)buf788, *(int4*)buf789);
+    *(float2*)buf790 = ldexp(*(float2*)buf791, *(int*)buf792);
+    *(float3*)buf793 = ldexp(*(float3*)buf794, *(int*)buf795);
+    *(float4*)buf796 = ldexp(*(float4*)buf797, *(int*)buf798);
+    *(float*)buf799 = length(*(float*)buf800);
+    *(float*)buf801 = length(*(float2*)buf802);
+    *(float*)buf803 = length(*(float3*)buf804);
+    *(float*)buf805 = length(*(float4*)buf806);
+    *(float*)buf807 = lgamma(*(float*)buf808);
+    *(float2*)buf809 = lgamma(*(float2*)buf810);
+    *(float3*)buf811 = lgamma(*(float3*)buf812);
+    *(float4*)buf813 = lgamma(*(float4*)buf814);
+    *(float*)buf815 = lgamma(*(float*)buf816, (int*) buf817);
+    *(float2*)buf818 = lgamma(*(float2*)buf819, (int2*) buf820);
+    *(float3*)buf821 = lgamma(*(float3*)buf822, (int3*) buf823);
+    *(float4*)buf824 = lgamma(*(float4*)buf825, (int4*) buf826);
+    *(float*)buf827 = log(*(float*)buf828);
+    *(float2*)buf829 = log(*(float2*)buf830);
+    *(float3*)buf831 = log(*(float3*)buf832);
+    *(float4*)buf833 = log(*(float4*)buf834);
+    *(float*)buf835 = log10(*(float*)buf836);
+    *(float2*)buf837 = log10(*(float2*)buf838);
+    *(float3*)buf839 = log10(*(float3*)buf840);
+    *(float4*)buf841 = log10(*(float4*)buf842);
+    *(float*)buf843 = log1p(*(float*)buf844);
+    *(float2*)buf845 = log1p(*(float2*)buf846);
+    *(float3*)buf847 = log1p(*(float3*)buf848);
+    *(float4*)buf849 = log1p(*(float4*)buf850);
+    *(float*)buf851 = log2(*(float*)buf852);
+    *(float2*)buf853 = log2(*(float2*)buf854);
+    *(float3*)buf855 = log2(*(float3*)buf856);
+    *(float4*)buf857 = log2(*(float4*)buf858);
+    *(float*)buf859 = logb(*(float*)buf860);
+    *(float2*)buf861 = logb(*(float2*)buf862);
+    *(float3*)buf863 = logb(*(float3*)buf864);
+    *(float4*)buf865 = logb(*(float4*)buf866);
+    *(float*)buf867 = mad(*(float*)buf868, *(float*)buf869, *(float*)buf870);
+    *(float2*)buf871 = mad(*(float2*)buf872, *(float2*)buf873, *(float2*)buf874);
+    *(float3*)buf875 = mad(*(float3*)buf876, *(float3*)buf877, *(float3*)buf878);
+    *(float4*)buf879 = mad(*(float4*)buf880, *(float4*)buf881, *(float4*)buf882);
+    *(float*)buf883 = max(*(float*)buf884, *(float*)buf885);
+    *(float2*)buf886 = max(*(float2*)buf887, *(float2*)buf888);
+    *(float3*)buf889 = max(*(float3*)buf890, *(float3*)buf891);
+    *(float4*)buf892 = max(*(float4*)buf893, *(float4*)buf894);
+    *(float2*)buf895 = max(*(float2*)buf896, *(float*)buf897);
+    *(float3*)buf898 = max(*(float3*)buf899, *(float*)buf900);
+    *(float4*)buf901 = max(*(float4*)buf902, *(float*)buf903);
+    *(char*)buf904 = max(*(char*)buf905, *(char*)buf906);
+    *(uchar*)buf907 = max(*(uchar*)buf908, *(uchar*)buf909);
+    *(short*)buf910 = max(*(short*)buf911, *(short*)buf912);
+    *(ushort*)buf913 = max(*(ushort*)buf914, *(ushort*)buf915);
+    *(int*)buf916 = max(*(int*)buf917, *(int*)buf918);
+    *(uint*)buf919 = max(*(uint*)buf920, *(uint*)buf921);
+    *(char2*)buf922 = max(*(char2*)buf923, *(char2*)buf924);
+    *(uchar2*)buf925 = max(*(uchar2*)buf926, *(uchar2*)buf927);
+    *(short2*)buf928 = max(*(short2*)buf929, *(short2*)buf930);
+    *(ushort2*)buf931 = max(*(ushort2*)buf932, *(ushort2*)buf933);
+    *(int2*)buf934 = max(*(int2*)buf935, *(int2*)buf936);
+    *(uint2*)buf937 = max(*(uint2*)buf938, *(uint2*)buf939);
+    *(char3*)buf940 = max(*(char3*)buf941, *(char3*)buf942);
+    *(uchar3*)buf943 = max(*(uchar3*)buf944, *(uchar3*)buf945);
+    *(short3*)buf946 = max(*(short3*)buf947, *(short3*)buf948);
+    *(ushort3*)buf949 = max(*(ushort3*)buf950, *(ushort3*)buf951);
+    *(int3*)buf952 = max(*(int3*)buf953, *(int3*)buf954);
+    *(uint3*)buf955 = max(*(uint3*)buf956, *(uint3*)buf957);
+    *(char4*)buf958 = max(*(char4*)buf959, *(char4*)buf960);
+    *(uchar4*)buf961 = max(*(uchar4*)buf962, *(uchar4*)buf963);
+    *(short4*)buf964 = max(*(short4*)buf965, *(short4*)buf966);
+    *(ushort4*)buf967 = max(*(ushort4*)buf968, *(ushort4*)buf969);
+    *(int4*)buf970 = max(*(int4*)buf971, *(int4*)buf972);
+    *(uint4*)buf973 = max(*(uint4*)buf974, *(uint4*)buf975);
+    *(float*)buf976 = min(*(float*)buf977, *(float*)buf978);
+    *(float2*)buf979 = min(*(float2*)buf980, *(float2*)buf981);
+    *(float3*)buf982 = min(*(float3*)buf983, *(float3*)buf984);
+    *(float4*)buf985 = min(*(float4*)buf986, *(float4*)buf987);
+    *(float2*)buf988 = min(*(float2*)buf989, *(float*)buf990);
+    *(float3*)buf991 = min(*(float3*)buf992, *(float*)buf993);
+    *(float4*)buf994 = min(*(float4*)buf995, *(float*)buf996);
+    *(char*)buf997 = min(*(char*)buf998, *(char*)buf999);
+    *(uchar*)buf1000 = min(*(uchar*)buf1001, *(uchar*)buf1002);
+    *(short*)buf1003 = min(*(short*)buf1004, *(short*)buf1005);
+    *(ushort*)buf1006 = min(*(ushort*)buf1007, *(ushort*)buf1008);
+    *(int*)buf1009 = min(*(int*)buf1010, *(int*)buf1011);
+    *(uint*)buf1012 = min(*(uint*)buf1013, *(uint*)buf1014);
+    *(char2*)buf1015 = min(*(char2*)buf1016, *(char2*)buf1017);
+    *(uchar2*)buf1018 = min(*(uchar2*)buf1019, *(uchar2*)buf1020);
+    *(short2*)buf1021 = min(*(short2*)buf1022, *(short2*)buf1023);
+    *(ushort2*)buf1024 = min(*(ushort2*)buf1025, *(ushort2*)buf1026);
+    *(int2*)buf1027 = min(*(int2*)buf1028, *(int2*)buf1029);
+    *(uint2*)buf1030 = min(*(uint2*)buf1031, *(uint2*)buf1032);
+    *(char3*)buf1033 = min(*(char3*)buf1034, *(char3*)buf1035);
+    *(uchar3*)buf1036 = min(*(uchar3*)buf1037, *(uchar3*)buf1038);
+    *(short3*)buf1039 = min(*(short3*)buf1040, *(short3*)buf1041);
+    *(ushort3*)buf1042 = min(*(ushort3*)buf1043, *(ushort3*)buf1044);
+    *(int3*)buf1045 = min(*(int3*)buf1046, *(int3*)buf1047);
+    *(uint3*)buf1048 = min(*(uint3*)buf1049, *(uint3*)buf1050);
+    *(char4*)buf1051 = min(*(char4*)buf1052, *(char4*)buf1053);
+    *(uchar4*)buf1054 = min(*(uchar4*)buf1055, *(uchar4*)buf1056);
+    *(short4*)buf1057 = min(*(short4*)buf1058, *(short4*)buf1059);
+    *(ushort4*)buf1060 = min(*(ushort4*)buf1061, *(ushort4*)buf1062);
+    *(int4*)buf1063 = min(*(int4*)buf1064, *(int4*)buf1065);
+    *(uint4*)buf1066 = min(*(uint4*)buf1067, *(uint4*)buf1068);
+    *(float*)buf1069 = mix(*(float*)buf1070, *(float*)buf1071, *(float*)buf1072);
+    *(float2*)buf1073 = mix(*(float2*)buf1074, *(float2*)buf1075, *(float2*)buf1076);
+    *(float3*)buf1077 = mix(*(float3*)buf1078, *(float3*)buf1079, *(float3*)buf1080);
+    *(float4*)buf1081 = mix(*(float4*)buf1082, *(float4*)buf1083, *(float4*)buf1084);
+    *(float2*)buf1085 = mix(*(float2*)buf1086, *(float2*)buf1087, *(float*)buf1088);
+    *(float3*)buf1089 = mix(*(float3*)buf1090, *(float3*)buf1091, *(float*)buf1092);
+    *(float4*)buf1093 = mix(*(float4*)buf1094, *(float4*)buf1095, *(float*)buf1096);
+    *(float*)buf1097 = modf(*(float*)buf1098, (float*) buf1099);
+    *(float2*)buf1100 = modf(*(float2*)buf1101, (float2*) buf1102);
+    *(float3*)buf1103 = modf(*(float3*)buf1104, (float3*) buf1105);
+    *(float4*)buf1106 = modf(*(float4*)buf1107, (float4*) buf1108);
+    *(float*)buf1109 = nan(*(uint*)buf1110);
+    *(float*)buf1111 = nextafter(*(float*)buf1112, *(float*)buf1113);
+    *(float2*)buf1114 = nextafter(*(float2*)buf1115, *(float2*)buf1116);
+    *(float3*)buf1117 = nextafter(*(float3*)buf1118, *(float3*)buf1119);
+    *(float4*)buf1120 = nextafter(*(float4*)buf1121, *(float4*)buf1122);
+    *(float*)buf1123 = normalize(*(float*)buf1124);
+    *(float2*)buf1125 = normalize(*(float2*)buf1126);
+    *(float3*)buf1127 = normalize(*(float3*)buf1128);
+    *(float4*)buf1129 = normalize(*(float4*)buf1130);
+    *(float*)buf1131 = pow(*(float*)buf1132, *(float*)buf1133);
+    *(float2*)buf1134 = pow(*(float2*)buf1135, *(float2*)buf1136);
+    *(float3*)buf1137 = pow(*(float3*)buf1138, *(float3*)buf1139);
+    *(float4*)buf1140 = pow(*(float4*)buf1141, *(float4*)buf1142);
+    *(float*)buf1143 = pown(*(float*)buf1144, *(int*)buf1145);
+    *(float2*)buf1146 = pown(*(float2*)buf1147, *(int2*)buf1148);
+    *(float3*)buf1149 = pown(*(float3*)buf1150, *(int3*)buf1151);
+    *(float4*)buf1152 = pown(*(float4*)buf1153, *(int4*)buf1154);
+    *(float*)buf1155 = powr(*(float*)buf1156, *(float*)buf1157);
+    *(float2*)buf1158 = powr(*(float2*)buf1159, *(float2*)buf1160);
+    *(float3*)buf1161 = powr(*(float3*)buf1162, *(float3*)buf1163);
+    *(float4*)buf1164 = powr(*(float4*)buf1165, *(float4*)buf1166);
+    *(float*)buf1167 = radians(*(float*)buf1168);
+    *(float2*)buf1169 = radians(*(float2*)buf1170);
+    *(float3*)buf1171 = radians(*(float3*)buf1172);
+    *(float4*)buf1173 = radians(*(float4*)buf1174);
+    *(float*)buf1175 = remainder(*(float*)buf1176, *(float*)buf1177);
+    *(float2*)buf1178 = remainder(*(float2*)buf1179, *(float2*)buf1180);
+    *(float3*)buf1181 = remainder(*(float3*)buf1182, *(float3*)buf1183);
+    *(float4*)buf1184 = remainder(*(float4*)buf1185, *(float4*)buf1186);
+    *(float*)buf1187 = remquo(*(float*)buf1188, *(float*)buf1189, (int*) buf1190);
+    *(float2*)buf1191 = remquo(*(float2*)buf1192, *(float2*)buf1193, (int2*) buf1194);
+    *(float3*)buf1195 = remquo(*(float3*)buf1196, *(float3*)buf1197, (int3*) buf1198);
+    *(float4*)buf1199 = remquo(*(float4*)buf1200, *(float4*)buf1201, (int4*) buf1202);
+    *(float*)buf1203 = rint(*(float*)buf1204);
+    *(float2*)buf1205 = rint(*(float2*)buf1206);
+    *(float3*)buf1207 = rint(*(float3*)buf1208);
+    *(float4*)buf1209 = rint(*(float4*)buf1210);
+    *(float*)buf1211 = rootn(*(float*)buf1212, *(int*)buf1213);
+    *(float2*)buf1214 = rootn(*(float2*)buf1215, *(int2*)buf1216);
+    *(float3*)buf1217 = rootn(*(float3*)buf1218, *(int3*)buf1219);
+    *(float4*)buf1220 = rootn(*(float4*)buf1221, *(int4*)buf1222);
+    *(float*)buf1223 = round(*(float*)buf1224);
+    *(float2*)buf1225 = round(*(float2*)buf1226);
+    *(float3*)buf1227 = round(*(float3*)buf1228);
+    *(float4*)buf1229 = round(*(float4*)buf1230);
+    rsAllocationCopy1DRange(*(rs_allocation*)buf1231, *(uint32_t*)buf1232, *(uint32_t*)buf1233, *(uint32_t*)buf1234, *(rs_allocation*)buf1235, *(uint32_t*)buf1236, *(uint32_t*)buf1237);
+    rsAllocationCopy2DRange(*(rs_allocation*)buf1238, *(uint32_t*)buf1239, *(uint32_t*)buf1240, *(uint32_t*)buf1241, *(rs_allocation_cubemap_face*)buf1242, *(uint32_t*)buf1243, *(uint32_t*)buf1244, *(rs_allocation*)buf1245, *(uint32_t*)buf1246, *(uint32_t*)buf1247, *(uint32_t*)buf1248, *(rs_allocation_cubemap_face*)buf1249);
+    *(uint32_t*)buf1250 = rsAllocationGetDimFaces(*(rs_allocation*)buf1251);
+    *(uint32_t*)buf1252 = rsAllocationGetDimLOD(*(rs_allocation*)buf1253);
+    *(uint32_t*)buf1254 = rsAllocationGetDimX(*(rs_allocation*)buf1255);
+    *(uint32_t*)buf1256 = rsAllocationGetDimY(*(rs_allocation*)buf1257);
+    *(uint32_t*)buf1258 = rsAllocationGetDimZ(*(rs_allocation*)buf1259);
+    *(rs_element*)buf1260 = rsAllocationGetElement(*(rs_allocation*)buf1261);
+    rsAllocationIoReceive(*(rs_allocation*)buf1262);
+    rsAllocationIoSend(*(rs_allocation*)buf1263);
+    *(int32_t*)buf1264 = rsAtomicAdd((volatile int32_t*) buf1265, *(int32_t*)buf1266);
+    *(int32_t*)buf1267 = rsAtomicAnd((volatile int32_t*) buf1268, *(int32_t*)buf1269);
+    *(int32_t*)buf1270 = rsAtomicCas((volatile int32_t*) buf1271, *(int32_t*)buf1272, *(int32_t*)buf1273);
+    *(uint32_t*)buf1274 = rsAtomicCas((volatile uint32_t*) buf1275, *(uint32_t*)buf1276, *(uint32_t*)buf1277);
+    *(int32_t*)buf1278 = rsAtomicDec((volatile int32_t*) buf1279);
+    *(int32_t*)buf1280 = rsAtomicInc((volatile int32_t*) buf1281);
+    *(uint32_t*)buf1282 = rsAtomicMax((volatile uint32_t*) buf1283, *(uint32_t*)buf1284);
+    *(int32_t*)buf1285 = rsAtomicMax((volatile int32_t*) buf1286, *(int32_t*)buf1287);
+    *(uint32_t*)buf1288 = rsAtomicMin((volatile uint32_t*) buf1289, *(uint32_t*)buf1290);
+    *(int32_t*)buf1291 = rsAtomicMin((volatile int32_t*) buf1292, *(int32_t*)buf1293);
+    *(int32_t*)buf1294 = rsAtomicOr((volatile int32_t*) buf1295, *(int32_t*)buf1296);
+    *(int32_t*)buf1297 = rsAtomicSub((volatile int32_t*) buf1298, *(int32_t*)buf1299);
+    *(int32_t*)buf1300 = rsAtomicXor((volatile int32_t*) buf1301, *(int32_t*)buf1302);
+    *(char*)buf1303 = rsClamp(*(char*)buf1304, *(char*)buf1305, *(char*)buf1306);
+    *(uchar*)buf1307 = rsClamp(*(uchar*)buf1308, *(uchar*)buf1309, *(uchar*)buf1310);
+    *(short*)buf1311 = rsClamp(*(short*)buf1312, *(short*)buf1313, *(short*)buf1314);
+    *(ushort*)buf1315 = rsClamp(*(ushort*)buf1316, *(ushort*)buf1317, *(ushort*)buf1318);
+    *(int*)buf1319 = rsClamp(*(int*)buf1320, *(int*)buf1321, *(int*)buf1322);
+    *(uint*)buf1323 = rsClamp(*(uint*)buf1324, *(uint*)buf1325, *(uint*)buf1326);
+    rsClearObject((rs_element*) buf1327);
+    rsClearObject((rs_type*) buf1328);
+    rsClearObject((rs_allocation*) buf1329);
+    rsClearObject((rs_sampler*) buf1330);
+    rsClearObject((rs_script*) buf1331);
+#ifndef __LP64__
+    rsClearObject((rs_mesh*) buf1332);
+    rsClearObject((rs_program_fragment*) buf1333);
+    rsClearObject((rs_program_vertex*) buf1334);
+    rsClearObject((rs_program_raster*) buf1335);
+    rsClearObject((rs_program_store*) buf1336);
+    rsClearObject((rs_font*) buf1337);
+#endif
+    rsDebug((const char*) buf1338, *(double*)buf1339);
+    rsDebug((const char*) buf1340, *(int*)buf1341);
+    rsDebug((const char*) buf1342, *(uint*)buf1343);
+    rsDebug((const char*) buf1344, *(long*)buf1345);
+    rsDebug((const char*) buf1346, *(ulong*)buf1347);
+    rsDebug((const char*) buf1348, *(float*)buf1349);
+    rsDebug((const char*) buf1350, *(float2*)buf1351);
+    rsDebug((const char*) buf1352, *(float3*)buf1353);
+    rsDebug((const char*) buf1354, *(float4*)buf1355);
+    rsDebug((const char*) buf1356, *(float*)buf1357, *(float*)buf1358);
+    rsDebug((const char*) buf1359, *(float*)buf1360, *(float*)buf1361, *(float*)buf1362);
+    rsDebug((const char*) buf1363, *(float*)buf1364, *(float*)buf1365, *(float*)buf1366, *(float*)buf1367);
+    rsDebug((const char*) buf1368, *(long long*)buf1369);
+    rsDebug((const char*) buf1370, *(unsigned long long*)buf1371);
+    rsDebug((const char*) buf1372, (const void*) buf1373);
+    rsDebug((const char*) buf1374, (const rs_matrix4x4*) buf1375);
+    rsDebug((const char*) buf1376, (const rs_matrix3x3*) buf1377);
+    rsDebug((const char*) buf1378, (const rs_matrix2x2*) buf1379);
+    *(uint32_t*)buf1380 = rsElementGetBytesSize(*(rs_element*)buf1381);
+    *(rs_data_kind*)buf1382 = rsElementGetDataKind(*(rs_element*)buf1383);
+    *(rs_data_type*)buf1384 = rsElementGetDataType(*(rs_element*)buf1385);
+    *(rs_element*)buf1386 = rsElementGetSubElement(*(rs_element*)buf1387, *(uint32_t*)buf1388);
+    *(uint32_t*)buf1389 = rsElementGetSubElementArraySize(*(rs_element*)buf1390, *(uint32_t*)buf1391);
+    *(uint32_t*)buf1392 = rsElementGetSubElementCount(*(rs_element*)buf1393);
+    *(uint32_t*)buf1394 = rsElementGetSubElementName(*(rs_element*)buf1395, *(uint32_t*)buf1396, (char*) buf1397, *(uint32_t*)buf1398);
+    *(uint32_t*)buf1399 = rsElementGetSubElementNameLength(*(rs_element*)buf1400, *(uint32_t*)buf1401);
+    *(uint32_t*)buf1402 = rsElementGetSubElementOffsetBytes(*(rs_element*)buf1403, *(uint32_t*)buf1404);
+    *(uint32_t*)buf1405 = rsElementGetVectorSize(*(rs_element*)buf1406);
+    rsExtractFrustumPlanes((const rs_matrix4x4*) buf1407, (float4*) buf1408, (float4*) buf1409, (float4*) buf1410, (float4*) buf1411, (float4*) buf1412, (float4*) buf1413);
+    rsForEach(*(rs_script*)buf1414, *(rs_allocation*)buf1415, *(rs_allocation*)buf1416, (const void*) buf1417, *(size_t*)buf1418, (const rs_script_call_t*) buf1419);
+    rsForEach(*(rs_script*)buf1420, *(rs_allocation*)buf1421, *(rs_allocation*)buf1422, (const void*) buf1423, *(size_t*)buf1424);
+    rsForEach(*(rs_script*)buf1425, *(rs_allocation*)buf1426, *(rs_allocation*)buf1427);
+    *(float*)buf1428 = rsFrac(*(float*)buf1429);
+    *(rs_allocation*)buf1430 = rsGetAllocation((const void*) buf1431);
+    *(float*)buf1432 = rsGetDt();
+    *(const void**)buf1433 = rsGetElementAt(*(rs_allocation*)buf1434, *(uint32_t*)buf1435);
+    *(const void**)buf1436 = rsGetElementAt(*(rs_allocation*)buf1437, *(uint32_t*)buf1438, *(uint32_t*)buf1439);
+    *(const void**)buf1440 = rsGetElementAt(*(rs_allocation*)buf1441, *(uint32_t*)buf1442, *(uint32_t*)buf1443, *(uint32_t*)buf1444);
+    *(float*)buf1445 = rsGetElementAt_float(*(rs_allocation*)buf1446, *(uint32_t*)buf1447);
+    *(float2*)buf1448 = rsGetElementAt_float2(*(rs_allocation*)buf1449, *(uint32_t*)buf1450);
+    *(float3*)buf1451 = rsGetElementAt_float3(*(rs_allocation*)buf1452, *(uint32_t*)buf1453);
+    *(float4*)buf1454 = rsGetElementAt_float4(*(rs_allocation*)buf1455, *(uint32_t*)buf1456);
+    *(double*)buf1457 = rsGetElementAt_double(*(rs_allocation*)buf1458, *(uint32_t*)buf1459);
+    *(double2*)buf1460 = rsGetElementAt_double2(*(rs_allocation*)buf1461, *(uint32_t*)buf1462);
+    *(double3*)buf1463 = rsGetElementAt_double3(*(rs_allocation*)buf1464, *(uint32_t*)buf1465);
+    *(double4*)buf1466 = rsGetElementAt_double4(*(rs_allocation*)buf1467, *(uint32_t*)buf1468);
+    *(char*)buf1469 = rsGetElementAt_char(*(rs_allocation*)buf1470, *(uint32_t*)buf1471);
+    *(char2*)buf1472 = rsGetElementAt_char2(*(rs_allocation*)buf1473, *(uint32_t*)buf1474);
+    *(char3*)buf1475 = rsGetElementAt_char3(*(rs_allocation*)buf1476, *(uint32_t*)buf1477);
+    *(char4*)buf1478 = rsGetElementAt_char4(*(rs_allocation*)buf1479, *(uint32_t*)buf1480);
+    *(uchar*)buf1481 = rsGetElementAt_uchar(*(rs_allocation*)buf1482, *(uint32_t*)buf1483);
+    *(uchar2*)buf1484 = rsGetElementAt_uchar2(*(rs_allocation*)buf1485, *(uint32_t*)buf1486);
+    *(uchar3*)buf1487 = rsGetElementAt_uchar3(*(rs_allocation*)buf1488, *(uint32_t*)buf1489);
+    *(uchar4*)buf1490 = rsGetElementAt_uchar4(*(rs_allocation*)buf1491, *(uint32_t*)buf1492);
+    *(short*)buf1493 = rsGetElementAt_short(*(rs_allocation*)buf1494, *(uint32_t*)buf1495);
+    *(short2*)buf1496 = rsGetElementAt_short2(*(rs_allocation*)buf1497, *(uint32_t*)buf1498);
+    *(short3*)buf1499 = rsGetElementAt_short3(*(rs_allocation*)buf1500, *(uint32_t*)buf1501);
+    *(short4*)buf1502 = rsGetElementAt_short4(*(rs_allocation*)buf1503, *(uint32_t*)buf1504);
+    *(ushort*)buf1505 = rsGetElementAt_ushort(*(rs_allocation*)buf1506, *(uint32_t*)buf1507);
+    *(ushort2*)buf1508 = rsGetElementAt_ushort2(*(rs_allocation*)buf1509, *(uint32_t*)buf1510);
+    *(ushort3*)buf1511 = rsGetElementAt_ushort3(*(rs_allocation*)buf1512, *(uint32_t*)buf1513);
+    *(ushort4*)buf1514 = rsGetElementAt_ushort4(*(rs_allocation*)buf1515, *(uint32_t*)buf1516);
+    *(int*)buf1517 = rsGetElementAt_int(*(rs_allocation*)buf1518, *(uint32_t*)buf1519);
+    *(int2*)buf1520 = rsGetElementAt_int2(*(rs_allocation*)buf1521, *(uint32_t*)buf1522);
+    *(int3*)buf1523 = rsGetElementAt_int3(*(rs_allocation*)buf1524, *(uint32_t*)buf1525);
+    *(int4*)buf1526 = rsGetElementAt_int4(*(rs_allocation*)buf1527, *(uint32_t*)buf1528);
+    *(uint*)buf1529 = rsGetElementAt_uint(*(rs_allocation*)buf1530, *(uint32_t*)buf1531);
+    *(uint2*)buf1532 = rsGetElementAt_uint2(*(rs_allocation*)buf1533, *(uint32_t*)buf1534);
+    *(uint3*)buf1535 = rsGetElementAt_uint3(*(rs_allocation*)buf1536, *(uint32_t*)buf1537);
+    *(uint4*)buf1538 = rsGetElementAt_uint4(*(rs_allocation*)buf1539, *(uint32_t*)buf1540);
+    *(long*)buf1541 = rsGetElementAt_long(*(rs_allocation*)buf1542, *(uint32_t*)buf1543);
+    *(long2*)buf1544 = rsGetElementAt_long2(*(rs_allocation*)buf1545, *(uint32_t*)buf1546);
+    *(long3*)buf1547 = rsGetElementAt_long3(*(rs_allocation*)buf1548, *(uint32_t*)buf1549);
+    *(long4*)buf1550 = rsGetElementAt_long4(*(rs_allocation*)buf1551, *(uint32_t*)buf1552);
+    *(ulong*)buf1553 = rsGetElementAt_ulong(*(rs_allocation*)buf1554, *(uint32_t*)buf1555);
+    *(ulong2*)buf1556 = rsGetElementAt_ulong2(*(rs_allocation*)buf1557, *(uint32_t*)buf1558);
+    *(ulong3*)buf1559 = rsGetElementAt_ulong3(*(rs_allocation*)buf1560, *(uint32_t*)buf1561);
+    *(ulong4*)buf1562 = rsGetElementAt_ulong4(*(rs_allocation*)buf1563, *(uint32_t*)buf1564);
+    *(float*)buf1565 = rsGetElementAt_float(*(rs_allocation*)buf1566, *(uint32_t*)buf1567, *(uint32_t*)buf1568);
+    *(float2*)buf1569 = rsGetElementAt_float2(*(rs_allocation*)buf1570, *(uint32_t*)buf1571, *(uint32_t*)buf1572);
+    *(float3*)buf1573 = rsGetElementAt_float3(*(rs_allocation*)buf1574, *(uint32_t*)buf1575, *(uint32_t*)buf1576);
+    *(float4*)buf1577 = rsGetElementAt_float4(*(rs_allocation*)buf1578, *(uint32_t*)buf1579, *(uint32_t*)buf1580);
+    *(double*)buf1581 = rsGetElementAt_double(*(rs_allocation*)buf1582, *(uint32_t*)buf1583, *(uint32_t*)buf1584);
+    *(double2*)buf1585 = rsGetElementAt_double2(*(rs_allocation*)buf1586, *(uint32_t*)buf1587, *(uint32_t*)buf1588);
+    *(double3*)buf1589 = rsGetElementAt_double3(*(rs_allocation*)buf1590, *(uint32_t*)buf1591, *(uint32_t*)buf1592);
+    *(double4*)buf1593 = rsGetElementAt_double4(*(rs_allocation*)buf1594, *(uint32_t*)buf1595, *(uint32_t*)buf1596);
+    *(char*)buf1597 = rsGetElementAt_char(*(rs_allocation*)buf1598, *(uint32_t*)buf1599, *(uint32_t*)buf1600);
+    *(char2*)buf1601 = rsGetElementAt_char2(*(rs_allocation*)buf1602, *(uint32_t*)buf1603, *(uint32_t*)buf1604);
+    *(char3*)buf1605 = rsGetElementAt_char3(*(rs_allocation*)buf1606, *(uint32_t*)buf1607, *(uint32_t*)buf1608);
+    *(char4*)buf1609 = rsGetElementAt_char4(*(rs_allocation*)buf1610, *(uint32_t*)buf1611, *(uint32_t*)buf1612);
+    *(uchar*)buf1613 = rsGetElementAt_uchar(*(rs_allocation*)buf1614, *(uint32_t*)buf1615, *(uint32_t*)buf1616);
+    *(uchar2*)buf1617 = rsGetElementAt_uchar2(*(rs_allocation*)buf1618, *(uint32_t*)buf1619, *(uint32_t*)buf1620);
+    *(uchar3*)buf1621 = rsGetElementAt_uchar3(*(rs_allocation*)buf1622, *(uint32_t*)buf1623, *(uint32_t*)buf1624);
+    *(uchar4*)buf1625 = rsGetElementAt_uchar4(*(rs_allocation*)buf1626, *(uint32_t*)buf1627, *(uint32_t*)buf1628);
+    *(short*)buf1629 = rsGetElementAt_short(*(rs_allocation*)buf1630, *(uint32_t*)buf1631, *(uint32_t*)buf1632);
+    *(short2*)buf1633 = rsGetElementAt_short2(*(rs_allocation*)buf1634, *(uint32_t*)buf1635, *(uint32_t*)buf1636);
+    *(short3*)buf1637 = rsGetElementAt_short3(*(rs_allocation*)buf1638, *(uint32_t*)buf1639, *(uint32_t*)buf1640);
+    *(short4*)buf1641 = rsGetElementAt_short4(*(rs_allocation*)buf1642, *(uint32_t*)buf1643, *(uint32_t*)buf1644);
+    *(ushort*)buf1645 = rsGetElementAt_ushort(*(rs_allocation*)buf1646, *(uint32_t*)buf1647, *(uint32_t*)buf1648);
+    *(ushort2*)buf1649 = rsGetElementAt_ushort2(*(rs_allocation*)buf1650, *(uint32_t*)buf1651, *(uint32_t*)buf1652);
+    *(ushort3*)buf1653 = rsGetElementAt_ushort3(*(rs_allocation*)buf1654, *(uint32_t*)buf1655, *(uint32_t*)buf1656);
+    *(ushort4*)buf1657 = rsGetElementAt_ushort4(*(rs_allocation*)buf1658, *(uint32_t*)buf1659, *(uint32_t*)buf1660);
+    *(int*)buf1661 = rsGetElementAt_int(*(rs_allocation*)buf1662, *(uint32_t*)buf1663, *(uint32_t*)buf1664);
+    *(int2*)buf1665 = rsGetElementAt_int2(*(rs_allocation*)buf1666, *(uint32_t*)buf1667, *(uint32_t*)buf1668);
+    *(int3*)buf1669 = rsGetElementAt_int3(*(rs_allocation*)buf1670, *(uint32_t*)buf1671, *(uint32_t*)buf1672);
+    *(int4*)buf1673 = rsGetElementAt_int4(*(rs_allocation*)buf1674, *(uint32_t*)buf1675, *(uint32_t*)buf1676);
+    *(uint*)buf1677 = rsGetElementAt_uint(*(rs_allocation*)buf1678, *(uint32_t*)buf1679, *(uint32_t*)buf1680);
+    *(uint2*)buf1681 = rsGetElementAt_uint2(*(rs_allocation*)buf1682, *(uint32_t*)buf1683, *(uint32_t*)buf1684);
+    *(uint3*)buf1685 = rsGetElementAt_uint3(*(rs_allocation*)buf1686, *(uint32_t*)buf1687, *(uint32_t*)buf1688);
+    *(uint4*)buf1689 = rsGetElementAt_uint4(*(rs_allocation*)buf1690, *(uint32_t*)buf1691, *(uint32_t*)buf1692);
+    *(long*)buf1693 = rsGetElementAt_long(*(rs_allocation*)buf1694, *(uint32_t*)buf1695, *(uint32_t*)buf1696);
+    *(long2*)buf1697 = rsGetElementAt_long2(*(rs_allocation*)buf1698, *(uint32_t*)buf1699, *(uint32_t*)buf1700);
+    *(long3*)buf1701 = rsGetElementAt_long3(*(rs_allocation*)buf1702, *(uint32_t*)buf1703, *(uint32_t*)buf1704);
+    *(long4*)buf1705 = rsGetElementAt_long4(*(rs_allocation*)buf1706, *(uint32_t*)buf1707, *(uint32_t*)buf1708);
+    *(ulong*)buf1709 = rsGetElementAt_ulong(*(rs_allocation*)buf1710, *(uint32_t*)buf1711, *(uint32_t*)buf1712);
+    *(ulong2*)buf1713 = rsGetElementAt_ulong2(*(rs_allocation*)buf1714, *(uint32_t*)buf1715, *(uint32_t*)buf1716);
+    *(ulong3*)buf1717 = rsGetElementAt_ulong3(*(rs_allocation*)buf1718, *(uint32_t*)buf1719, *(uint32_t*)buf1720);
+    *(ulong4*)buf1721 = rsGetElementAt_ulong4(*(rs_allocation*)buf1722, *(uint32_t*)buf1723, *(uint32_t*)buf1724);
+    *(float*)buf1725 = rsGetElementAt_float(*(rs_allocation*)buf1726, *(uint32_t*)buf1727, *(uint32_t*)buf1728, *(uint32_t*)buf1729);
+    *(float2*)buf1730 = rsGetElementAt_float2(*(rs_allocation*)buf1731, *(uint32_t*)buf1732, *(uint32_t*)buf1733, *(uint32_t*)buf1734);
+    *(float3*)buf1735 = rsGetElementAt_float3(*(rs_allocation*)buf1736, *(uint32_t*)buf1737, *(uint32_t*)buf1738, *(uint32_t*)buf1739);
+    *(float4*)buf1740 = rsGetElementAt_float4(*(rs_allocation*)buf1741, *(uint32_t*)buf1742, *(uint32_t*)buf1743, *(uint32_t*)buf1744);
+    *(double*)buf1745 = rsGetElementAt_double(*(rs_allocation*)buf1746, *(uint32_t*)buf1747, *(uint32_t*)buf1748, *(uint32_t*)buf1749);
+    *(double2*)buf1750 = rsGetElementAt_double2(*(rs_allocation*)buf1751, *(uint32_t*)buf1752, *(uint32_t*)buf1753, *(uint32_t*)buf1754);
+    *(double3*)buf1755 = rsGetElementAt_double3(*(rs_allocation*)buf1756, *(uint32_t*)buf1757, *(uint32_t*)buf1758, *(uint32_t*)buf1759);
+    *(double4*)buf1760 = rsGetElementAt_double4(*(rs_allocation*)buf1761, *(uint32_t*)buf1762, *(uint32_t*)buf1763, *(uint32_t*)buf1764);
+    *(char*)buf1765 = rsGetElementAt_char(*(rs_allocation*)buf1766, *(uint32_t*)buf1767, *(uint32_t*)buf1768, *(uint32_t*)buf1769);
+    *(char2*)buf1770 = rsGetElementAt_char2(*(rs_allocation*)buf1771, *(uint32_t*)buf1772, *(uint32_t*)buf1773, *(uint32_t*)buf1774);
+    *(char3*)buf1775 = rsGetElementAt_char3(*(rs_allocation*)buf1776, *(uint32_t*)buf1777, *(uint32_t*)buf1778, *(uint32_t*)buf1779);
+    *(char4*)buf1780 = rsGetElementAt_char4(*(rs_allocation*)buf1781, *(uint32_t*)buf1782, *(uint32_t*)buf1783, *(uint32_t*)buf1784);
+    *(uchar*)buf1785 = rsGetElementAt_uchar(*(rs_allocation*)buf1786, *(uint32_t*)buf1787, *(uint32_t*)buf1788, *(uint32_t*)buf1789);
+    *(uchar2*)buf1790 = rsGetElementAt_uchar2(*(rs_allocation*)buf1791, *(uint32_t*)buf1792, *(uint32_t*)buf1793, *(uint32_t*)buf1794);
+    *(uchar3*)buf1795 = rsGetElementAt_uchar3(*(rs_allocation*)buf1796, *(uint32_t*)buf1797, *(uint32_t*)buf1798, *(uint32_t*)buf1799);
+    *(uchar4*)buf1800 = rsGetElementAt_uchar4(*(rs_allocation*)buf1801, *(uint32_t*)buf1802, *(uint32_t*)buf1803, *(uint32_t*)buf1804);
+    *(short*)buf1805 = rsGetElementAt_short(*(rs_allocation*)buf1806, *(uint32_t*)buf1807, *(uint32_t*)buf1808, *(uint32_t*)buf1809);
+    *(short2*)buf1810 = rsGetElementAt_short2(*(rs_allocation*)buf1811, *(uint32_t*)buf1812, *(uint32_t*)buf1813, *(uint32_t*)buf1814);
+    *(short3*)buf1815 = rsGetElementAt_short3(*(rs_allocation*)buf1816, *(uint32_t*)buf1817, *(uint32_t*)buf1818, *(uint32_t*)buf1819);
+    *(short4*)buf1820 = rsGetElementAt_short4(*(rs_allocation*)buf1821, *(uint32_t*)buf1822, *(uint32_t*)buf1823, *(uint32_t*)buf1824);
+    *(ushort*)buf1825 = rsGetElementAt_ushort(*(rs_allocation*)buf1826, *(uint32_t*)buf1827, *(uint32_t*)buf1828, *(uint32_t*)buf1829);
+    *(ushort2*)buf1830 = rsGetElementAt_ushort2(*(rs_allocation*)buf1831, *(uint32_t*)buf1832, *(uint32_t*)buf1833, *(uint32_t*)buf1834);
+    *(ushort3*)buf1835 = rsGetElementAt_ushort3(*(rs_allocation*)buf1836, *(uint32_t*)buf1837, *(uint32_t*)buf1838, *(uint32_t*)buf1839);
+    *(ushort4*)buf1840 = rsGetElementAt_ushort4(*(rs_allocation*)buf1841, *(uint32_t*)buf1842, *(uint32_t*)buf1843, *(uint32_t*)buf1844);
+    *(int*)buf1845 = rsGetElementAt_int(*(rs_allocation*)buf1846, *(uint32_t*)buf1847, *(uint32_t*)buf1848, *(uint32_t*)buf1849);
+    *(int2*)buf1850 = rsGetElementAt_int2(*(rs_allocation*)buf1851, *(uint32_t*)buf1852, *(uint32_t*)buf1853, *(uint32_t*)buf1854);
+    *(int3*)buf1855 = rsGetElementAt_int3(*(rs_allocation*)buf1856, *(uint32_t*)buf1857, *(uint32_t*)buf1858, *(uint32_t*)buf1859);
+    *(int4*)buf1860 = rsGetElementAt_int4(*(rs_allocation*)buf1861, *(uint32_t*)buf1862, *(uint32_t*)buf1863, *(uint32_t*)buf1864);
+    *(uint*)buf1865 = rsGetElementAt_uint(*(rs_allocation*)buf1866, *(uint32_t*)buf1867, *(uint32_t*)buf1868, *(uint32_t*)buf1869);
+    *(uint2*)buf1870 = rsGetElementAt_uint2(*(rs_allocation*)buf1871, *(uint32_t*)buf1872, *(uint32_t*)buf1873, *(uint32_t*)buf1874);
+    *(uint3*)buf1875 = rsGetElementAt_uint3(*(rs_allocation*)buf1876, *(uint32_t*)buf1877, *(uint32_t*)buf1878, *(uint32_t*)buf1879);
+    *(uint4*)buf1880 = rsGetElementAt_uint4(*(rs_allocation*)buf1881, *(uint32_t*)buf1882, *(uint32_t*)buf1883, *(uint32_t*)buf1884);
+    *(long*)buf1885 = rsGetElementAt_long(*(rs_allocation*)buf1886, *(uint32_t*)buf1887, *(uint32_t*)buf1888, *(uint32_t*)buf1889);
+    *(long2*)buf1890 = rsGetElementAt_long2(*(rs_allocation*)buf1891, *(uint32_t*)buf1892, *(uint32_t*)buf1893, *(uint32_t*)buf1894);
+    *(long3*)buf1895 = rsGetElementAt_long3(*(rs_allocation*)buf1896, *(uint32_t*)buf1897, *(uint32_t*)buf1898, *(uint32_t*)buf1899);
+    *(long4*)buf1900 = rsGetElementAt_long4(*(rs_allocation*)buf1901, *(uint32_t*)buf1902, *(uint32_t*)buf1903, *(uint32_t*)buf1904);
+    *(ulong*)buf1905 = rsGetElementAt_ulong(*(rs_allocation*)buf1906, *(uint32_t*)buf1907, *(uint32_t*)buf1908, *(uint32_t*)buf1909);
+    *(ulong2*)buf1910 = rsGetElementAt_ulong2(*(rs_allocation*)buf1911, *(uint32_t*)buf1912, *(uint32_t*)buf1913, *(uint32_t*)buf1914);
+    *(ulong3*)buf1915 = rsGetElementAt_ulong3(*(rs_allocation*)buf1916, *(uint32_t*)buf1917, *(uint32_t*)buf1918, *(uint32_t*)buf1919);
+    *(ulong4*)buf1920 = rsGetElementAt_ulong4(*(rs_allocation*)buf1921, *(uint32_t*)buf1922, *(uint32_t*)buf1923, *(uint32_t*)buf1924);
+    *(bool*)buf1925 = rsIsObject(*(rs_element*)buf1926);
+    *(bool*)buf1927 = rsIsObject(*(rs_type*)buf1928);
+    *(bool*)buf1929 = rsIsObject(*(rs_allocation*)buf1930);
+    *(bool*)buf1931 = rsIsObject(*(rs_sampler*)buf1932);
+    *(bool*)buf1933 = rsIsObject(*(rs_script*)buf1934);
+#ifndef __LP64__
+    *(bool*)buf1935 = rsIsObject(*(rs_mesh*)buf1936);
+    *(bool*)buf1937 = rsIsObject(*(rs_program_fragment*)buf1938);
+    *(bool*)buf1939 = rsIsObject(*(rs_program_vertex*)buf1940);
+    *(bool*)buf1941 = rsIsObject(*(rs_program_raster*)buf1942);
+    *(bool*)buf1943 = rsIsObject(*(rs_program_store*)buf1944);
+    *(bool*)buf1945 = rsIsObject(*(rs_font*)buf1946);
+#endif
+    *(bool*)buf1947 = rsIsSphereInFrustum((float4*) buf1948, (float4*) buf1949, (float4*) buf1950, (float4*) buf1951, (float4*) buf1952, (float4*) buf1953, (float4*) buf1954);
+    *(rs_tm**)buf1955 = rsLocaltime((rs_tm*) buf1956, (const rs_time_t*) buf1957);
+    *(float*)buf1958 = rsMatrixGet((const rs_matrix4x4*) buf1959, *(uint32_t*)buf1960, *(uint32_t*)buf1961);
+    *(float*)buf1962 = rsMatrixGet((const rs_matrix3x3*) buf1963, *(uint32_t*)buf1964, *(uint32_t*)buf1965);
+    *(float*)buf1966 = rsMatrixGet((const rs_matrix2x2*) buf1967, *(uint32_t*)buf1968, *(uint32_t*)buf1969);
+    *(bool*)buf1970 = rsMatrixInverse((rs_matrix4x4*) buf1971);
+    *(bool*)buf1972 = rsMatrixInverseTranspose((rs_matrix4x4*) buf1973);
+    rsMatrixLoad((rs_matrix4x4*) buf1974, (const float*) buf1975);
+    rsMatrixLoad((rs_matrix3x3*) buf1976, (const float*) buf1977);
+    rsMatrixLoad((rs_matrix2x2*) buf1978, (const float*) buf1979);
+    rsMatrixLoad((rs_matrix4x4*) buf1980, (const rs_matrix4x4*) buf1981);
+    rsMatrixLoad((rs_matrix3x3*) buf1982, (const rs_matrix3x3*) buf1983);
+    rsMatrixLoad((rs_matrix2x2*) buf1984, (const rs_matrix2x2*) buf1985);
+    rsMatrixLoad((rs_matrix4x4*) buf1986, (const rs_matrix3x3*) buf1987);
+    rsMatrixLoad((rs_matrix4x4*) buf1988, (const rs_matrix2x2*) buf1989);
+    rsMatrixLoadFrustum((rs_matrix4x4*) buf1990, *(float*)buf1991, *(float*)buf1992, *(float*)buf1993, *(float*)buf1994, *(float*)buf1995, *(float*)buf1996);
+    rsMatrixLoadIdentity((rs_matrix4x4*) buf1997);
+    rsMatrixLoadIdentity((rs_matrix3x3*) buf1998);
+    rsMatrixLoadIdentity((rs_matrix2x2*) buf1999);
+    rsMatrixLoadMultiply((rs_matrix4x4*) buf2000, (const rs_matrix4x4*) buf2001, (const rs_matrix4x4*) buf2002);
+    rsMatrixLoadMultiply((rs_matrix3x3*) buf2003, (const rs_matrix3x3*) buf2004, (const rs_matrix3x3*) buf2005);
+    rsMatrixLoadMultiply((rs_matrix2x2*) buf2006, (const rs_matrix2x2*) buf2007, (const rs_matrix2x2*) buf2008);
+    rsMatrixLoadOrtho((rs_matrix4x4*) buf2009, *(float*)buf2010, *(float*)buf2011, *(float*)buf2012, *(float*)buf2013, *(float*)buf2014, *(float*)buf2015);
+    rsMatrixLoadPerspective((rs_matrix4x4*) buf2016, *(float*)buf2017, *(float*)buf2018, *(float*)buf2019, *(float*)buf2020);
+    rsMatrixLoadRotate((rs_matrix4x4*) buf2021, *(float*)buf2022, *(float*)buf2023, *(float*)buf2024, *(float*)buf2025);
+    rsMatrixLoadScale((rs_matrix4x4*) buf2026, *(float*)buf2027, *(float*)buf2028, *(float*)buf2029);
+    rsMatrixLoadTranslate((rs_matrix4x4*) buf2030, *(float*)buf2031, *(float*)buf2032, *(float*)buf2033);
+    rsMatrixMultiply((rs_matrix4x4*) buf2034, (const rs_matrix4x4*) buf2035);
+    rsMatrixMultiply((rs_matrix3x3*) buf2036, (const rs_matrix3x3*) buf2037);
+    rsMatrixMultiply((rs_matrix2x2*) buf2038, (const rs_matrix2x2*) buf2039);
+    *(float4*)buf2040 = rsMatrixMultiply((const rs_matrix4x4*) buf2041, *(float4*)buf2042);
+    *(float4*)buf2043 = rsMatrixMultiply((const rs_matrix4x4*) buf2044, *(float3*)buf2045);
+    *(float4*)buf2046 = rsMatrixMultiply((const rs_matrix4x4*) buf2047, *(float2*)buf2048);
+    *(float3*)buf2049 = rsMatrixMultiply((const rs_matrix3x3*) buf2050, *(float3*)buf2051);
+    *(float3*)buf2052 = rsMatrixMultiply((const rs_matrix3x3*) buf2053, *(float2*)buf2054);
+    *(float2*)buf2055 = rsMatrixMultiply((const rs_matrix2x2*) buf2056, *(float2*)buf2057);
+    rsMatrixRotate((rs_matrix4x4*) buf2058, *(float*)buf2059, *(float*)buf2060, *(float*)buf2061, *(float*)buf2062);
+    rsMatrixScale((rs_matrix4x4*) buf2063, *(float*)buf2064, *(float*)buf2065, *(float*)buf2066);
+    rsMatrixSet((rs_matrix4x4*) buf2067, *(uint32_t*)buf2068, *(uint32_t*)buf2069, *(float*)buf2070);
+    rsMatrixSet((rs_matrix3x3*) buf2071, *(uint32_t*)buf2072, *(uint32_t*)buf2073, *(float*)buf2074);
+    rsMatrixSet((rs_matrix2x2*) buf2075, *(uint32_t*)buf2076, *(uint32_t*)buf2077, *(float*)buf2078);
+    rsMatrixTranslate((rs_matrix4x4*) buf2079, *(float*)buf2080, *(float*)buf2081, *(float*)buf2082);
+    rsMatrixTranspose((rs_matrix4x4*) buf2083);
+    rsMatrixTranspose((rs_matrix3x3*) buf2084);
+    rsMatrixTranspose((rs_matrix2x2*) buf2085);
+    *(uchar4*)buf2086 = rsPackColorTo8888(*(float*)buf2087, *(float*)buf2088, *(float*)buf2089);
+    *(uchar4*)buf2090 = rsPackColorTo8888(*(float*)buf2091, *(float*)buf2092, *(float*)buf2093, *(float*)buf2094);
+    *(uchar4*)buf2095 = rsPackColorTo8888(*(float3*)buf2096);
+    *(uchar4*)buf2097 = rsPackColorTo8888(*(float4*)buf2098);
+    rsQuaternionAdd((rs_quaternion*) buf2099, (const rs_quaternion*) buf2100);
+    rsQuaternionConjugate((rs_quaternion*) buf2101);
+    *(float*)buf2102 = rsQuaternionDot((const rs_quaternion*) buf2103, (const rs_quaternion*) buf2104);
+    rsQuaternionGetMatrixUnit((rs_matrix4x4*) buf2105, (const rs_quaternion*) buf2106);
+    rsQuaternionLoadRotate((rs_quaternion*) buf2107, *(float*)buf2108, *(float*)buf2109, *(float*)buf2110, *(float*)buf2111);
+    rsQuaternionLoadRotateUnit((rs_quaternion*) buf2112, *(float*)buf2113, *(float*)buf2114, *(float*)buf2115, *(float*)buf2116);
+    rsQuaternionMultiply((rs_quaternion*) buf2117, *(float*)buf2118);
+    rsQuaternionMultiply((rs_quaternion*) buf2119, (const rs_quaternion*) buf2120);
+    rsQuaternionNormalize((rs_quaternion*) buf2121);
+    rsQuaternionSet((rs_quaternion*) buf2122, *(float*)buf2123, *(float*)buf2124, *(float*)buf2125, *(float*)buf2126);
+    rsQuaternionSet((rs_quaternion*) buf2127, (const rs_quaternion*) buf2128);
+    rsQuaternionSlerp((rs_quaternion*) buf2129, (const rs_quaternion*) buf2130, (const rs_quaternion*) buf2131, *(float*)buf2132);
+    *(int*)buf2133 = rsRand(*(int*)buf2134);
+    *(int*)buf2135 = rsRand(*(int*)buf2136, *(int*)buf2137);
+    *(float*)buf2138 = rsRand(*(float*)buf2139);
+    *(float*)buf2140 = rsRand(*(float*)buf2141, *(float*)buf2142);
+    *(float4*)buf2143 = rsSample(*(rs_allocation*)buf2144, *(rs_sampler*)buf2145, *(float*)buf2146);
+    *(float4*)buf2147 = rsSample(*(rs_allocation*)buf2148, *(rs_sampler*)buf2149, *(float*)buf2150, *(float*)buf2151);
+    *(float4*)buf2152 = rsSample(*(rs_allocation*)buf2153, *(rs_sampler*)buf2154, *(float2*)buf2155);
+    *(float4*)buf2156 = rsSample(*(rs_allocation*)buf2157, *(rs_sampler*)buf2158, *(float2*)buf2159, *(float*)buf2160);
+    *(float*)buf2161 = rsSamplerGetAnisotropy(*(rs_sampler*)buf2162);
+    *(rs_sampler_value*)buf2163 = rsSamplerGetMagnification(*(rs_sampler*)buf2164);
+    *(rs_sampler_value*)buf2165 = rsSamplerGetMinification(*(rs_sampler*)buf2166);
+    *(rs_sampler_value*)buf2167 = rsSamplerGetWrapS(*(rs_sampler*)buf2168);
+    *(rs_sampler_value*)buf2169 = rsSamplerGetWrapT(*(rs_sampler*)buf2170);
+    *(bool*)buf2171 = rsSendToClient(*(int*)buf2172);
+    *(bool*)buf2173 = rsSendToClient(*(int*)buf2174, (const void*) buf2175, *(uint*)buf2176);
+    rsSendToClientBlocking(*(int*)buf2177);
+    rsSendToClientBlocking(*(int*)buf2178, (const void*) buf2179, *(uint*)buf2180);
+    rsSetObject((rs_element*) buf2181, *(rs_element*)buf2182);
+    rsSetObject((rs_type*) buf2183, *(rs_type*)buf2184);
+    rsSetObject((rs_allocation*) buf2185, *(rs_allocation*)buf2186);
+    rsSetObject((rs_sampler*) buf2187, *(rs_sampler*)buf2188);
+    rsSetObject((rs_script*) buf2189, *(rs_script*)buf2190);
+#ifndef __LP64__
+    rsSetObject((rs_mesh*) buf2191, *(rs_mesh*)buf2192);
+    rsSetObject((rs_program_fragment*) buf2193, *(rs_program_fragment*)buf2194);
+    rsSetObject((rs_program_vertex*) buf2195, *(rs_program_vertex*)buf2196);
+    rsSetObject((rs_program_raster*) buf2197, *(rs_program_raster*)buf2198);
+    rsSetObject((rs_program_store*) buf2199, *(rs_program_store*)buf2200);
+    rsSetObject((rs_font*) buf2201, *(rs_font*)buf2202);
+#endif
+    *(rs_time_t*)buf2203 = rsTime((rs_time_t*) buf2204);
+    *(float4*)buf2205 = rsUnpackColor8888(*(uchar4*)buf2206);
+    *(int64_t*)buf2207 = rsUptimeMillis();
+    *(int64_t*)buf2208 = rsUptimeNanos();
+    *(float4*)buf2209 = rsYuvToRGBA_float4(*(uchar*)buf2210, *(uchar*)buf2211, *(uchar*)buf2212);
+    *(uchar4*)buf2213 = rsYuvToRGBA_uchar4(*(uchar*)buf2214, *(uchar*)buf2215, *(uchar*)buf2216);
+#ifndef __LP64__
+    rsgAllocationSyncAll(*(rs_allocation*)buf2217);
+#endif
+#ifndef __LP64__
+    rsgAllocationSyncAll(*(rs_allocation*)buf2218, *(rs_allocation_usage_type*)buf2219);
+#endif
+#ifndef __LP64__
+    rsgBindColorTarget(*(rs_allocation*)buf2220, *(uint*)buf2221);
+#endif
+#ifndef __LP64__
+    rsgBindConstant(*(rs_program_fragment*)buf2222, *(uint*)buf2223, *(rs_allocation*)buf2224);
+#endif
+#ifndef __LP64__
+    rsgBindConstant(*(rs_program_vertex*)buf2225, *(uint*)buf2226, *(rs_allocation*)buf2227);
+#endif
+#ifndef __LP64__
+    rsgBindDepthTarget(*(rs_allocation*)buf2228);
+#endif
+#ifndef __LP64__
+    rsgBindFont(*(rs_font*)buf2229);
+#endif
+#ifndef __LP64__
+    rsgBindProgramFragment(*(rs_program_fragment*)buf2230);
+#endif
+#ifndef __LP64__
+    rsgBindProgramRaster(*(rs_program_raster*)buf2231);
+#endif
+#ifndef __LP64__
+    rsgBindProgramStore(*(rs_program_store*)buf2232);
+#endif
+#ifndef __LP64__
+    rsgBindProgramVertex(*(rs_program_vertex*)buf2233);
+#endif
+#ifndef __LP64__
+    rsgBindSampler(*(rs_program_fragment*)buf2234, *(uint*)buf2235, *(rs_sampler*)buf2236);
+#endif
+#ifndef __LP64__
+    rsgBindTexture(*(rs_program_fragment*)buf2237, *(uint*)buf2238, *(rs_allocation*)buf2239);
+#endif
+#ifndef __LP64__
+    rsgClearAllRenderTargets();
+#endif
+#ifndef __LP64__
+    rsgClearColor(*(float*)buf2240, *(float*)buf2241, *(float*)buf2242, *(float*)buf2243);
+#endif
+#ifndef __LP64__
+    rsgClearColorTarget(*(uint*)buf2244);
+#endif
+#ifndef __LP64__
+    rsgClearDepth(*(float*)buf2245);
+#endif
+#ifndef __LP64__
+    rsgClearDepthTarget();
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf2246);
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf2247, *(uint*)buf2248);
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf2249, *(uint*)buf2250, *(uint*)buf2251, *(uint*)buf2252);
+#endif
+#ifndef __LP64__
+    rsgDrawQuad(*(float*)buf2253, *(float*)buf2254, *(float*)buf2255, *(float*)buf2256, *(float*)buf2257, *(float*)buf2258, *(float*)buf2259, *(float*)buf2260, *(float*)buf2261, *(float*)buf2262, *(float*)buf2263, *(float*)buf2264);
+#endif
+#ifndef __LP64__
+    rsgDrawQuadTexCoords(*(float*)buf2265, *(float*)buf2266, *(float*)buf2267, *(float*)buf2268, *(float*)buf2269, *(float*)buf2270, *(float*)buf2271, *(float*)buf2272, *(float*)buf2273, *(float*)buf2274, *(float*)buf2275, *(float*)buf2276, *(float*)buf2277, *(float*)buf2278, *(float*)buf2279, *(float*)buf2280, *(float*)buf2281, *(float*)buf2282, *(float*)buf2283, *(float*)buf2284);
+#endif
+#ifndef __LP64__
+    rsgDrawRect(*(float*)buf2285, *(float*)buf2286, *(float*)buf2287, *(float*)buf2288, *(float*)buf2289);
+#endif
+#ifndef __LP64__
+    rsgDrawSpriteScreenspace(*(float*)buf2290, *(float*)buf2291, *(float*)buf2292, *(float*)buf2293, *(float*)buf2294);
+#endif
+#ifndef __LP64__
+    rsgDrawText((const char*) buf2295, *(int*)buf2296, *(int*)buf2297);
+#endif
+#ifndef __LP64__
+    rsgDrawText(*(rs_allocation*)buf2298, *(int*)buf2299, *(int*)buf2300);
+#endif
+#ifndef __LP64__
+    *(uint*)buf2301 = rsgFinish();
+#endif
+#ifndef __LP64__
+    rsgFontColor(*(float*)buf2302, *(float*)buf2303, *(float*)buf2304, *(float*)buf2305);
+#endif
+#ifndef __LP64__
+    *(uint*)buf2306 = rsgGetHeight();
+#endif
+#ifndef __LP64__
+    *(uint*)buf2307 = rsgGetWidth();
+#endif
+#ifndef __LP64__
+    rsgMeasureText((const char*) buf2308, (int*) buf2309, (int*) buf2310, (int*) buf2311, (int*) buf2312);
+#endif
+#ifndef __LP64__
+    rsgMeasureText(*(rs_allocation*)buf2313, (int*) buf2314, (int*) buf2315, (int*) buf2316, (int*) buf2317);
+#endif
+#ifndef __LP64__
+    rsgMeshComputeBoundingBox(*(rs_mesh*)buf2318, (float*) buf2319, (float*) buf2320, (float*) buf2321, (float*) buf2322, (float*) buf2323, (float*) buf2324);
+#endif
+#ifndef __LP64__
+    rsgMeshComputeBoundingBox(*(rs_mesh*)buf2325, (float3*) buf2326, (float3*) buf2327);
+#endif
+#ifndef __LP64__
+    *(rs_allocation*)buf2328 = rsgMeshGetIndexAllocation(*(rs_mesh*)buf2329, *(uint32_t*)buf2330);
+#endif
+#ifndef __LP64__
+    *(rs_primitive*)buf2331 = rsgMeshGetPrimitive(*(rs_mesh*)buf2332, *(uint32_t*)buf2333);
+#endif
+#ifndef __LP64__
+    *(uint32_t*)buf2334 = rsgMeshGetPrimitiveCount(*(rs_mesh*)buf2335);
+#endif
+#ifndef __LP64__
+    *(rs_allocation*)buf2336 = rsgMeshGetVertexAllocation(*(rs_mesh*)buf2337, *(uint32_t*)buf2338);
+#endif
+#ifndef __LP64__
+    *(uint32_t*)buf2339 = rsgMeshGetVertexAllocationCount(*(rs_mesh*)buf2340);
+#endif
+#ifndef __LP64__
+    rsgProgramFragmentConstantColor(*(rs_program_fragment*)buf2341, *(float*)buf2342, *(float*)buf2343, *(float*)buf2344, *(float*)buf2345);
+#endif
+#ifndef __LP64__
+    *(rs_cull_mode*)buf2346 = rsgProgramRasterGetCullMode(*(rs_program_raster*)buf2347);
+#endif
+#ifndef __LP64__
+    *(bool*)buf2348 = rsgProgramRasterIsPointSpriteEnabled(*(rs_program_raster*)buf2349);
+#endif
+#ifndef __LP64__
+    *(rs_blend_dst_func*)buf2350 = rsgProgramStoreGetBlendDstFunc(*(rs_program_store*)buf2351);
+#endif
+#ifndef __LP64__
+    *(rs_blend_src_func*)buf2352 = rsgProgramStoreGetBlendSrcFunc(*(rs_program_store*)buf2353);
+#endif
+#ifndef __LP64__
+    *(rs_depth_func*)buf2354 = rsgProgramStoreGetDepthFunc(*(rs_program_store*)buf2355);
+#endif
+#ifndef __LP64__
+    *(bool*)buf2356 = rsgProgramStoreIsColorMaskAlphaEnabled(*(rs_program_store*)buf2357);
+#endif
+#ifndef __LP64__
+    *(bool*)buf2358 = rsgProgramStoreIsColorMaskBlueEnabled(*(rs_program_store*)buf2359);
+#endif
+#ifndef __LP64__
+    *(bool*)buf2360 = rsgProgramStoreIsColorMaskGreenEnabled(*(rs_program_store*)buf2361);
+#endif
+#ifndef __LP64__
+    *(bool*)buf2362 = rsgProgramStoreIsColorMaskRedEnabled(*(rs_program_store*)buf2363);
+#endif
+#ifndef __LP64__
+    *(bool*)buf2364 = rsgProgramStoreIsDepthMaskEnabled(*(rs_program_store*)buf2365);
+#endif
+#ifndef __LP64__
+    *(bool*)buf2366 = rsgProgramStoreIsDitherEnabled(*(rs_program_store*)buf2367);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexGetProjectionMatrix((rs_matrix4x4*) buf2368);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadModelMatrix((const rs_matrix4x4*) buf2369);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadProjectionMatrix((const rs_matrix4x4*) buf2370);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadTextureMatrix((const rs_matrix4x4*) buf2371);
+#endif
+    *(float*)buf2372 = rsqrt(*(float*)buf2373);
+    *(float2*)buf2374 = rsqrt(*(float2*)buf2375);
+    *(float3*)buf2376 = rsqrt(*(float3*)buf2377);
+    *(float4*)buf2378 = rsqrt(*(float4*)buf2379);
+    *(float*)buf2380 = sign(*(float*)buf2381);
+    *(float2*)buf2382 = sign(*(float2*)buf2383);
+    *(float3*)buf2384 = sign(*(float3*)buf2385);
+    *(float4*)buf2386 = sign(*(float4*)buf2387);
+    *(float*)buf2388 = sin(*(float*)buf2389);
+    *(float2*)buf2390 = sin(*(float2*)buf2391);
+    *(float3*)buf2392 = sin(*(float3*)buf2393);
+    *(float4*)buf2394 = sin(*(float4*)buf2395);
+    *(float*)buf2396 = sincos(*(float*)buf2397, (float*) buf2398);
+    *(float2*)buf2399 = sincos(*(float2*)buf2400, (float2*) buf2401);
+    *(float3*)buf2402 = sincos(*(float3*)buf2403, (float3*) buf2404);
+    *(float4*)buf2405 = sincos(*(float4*)buf2406, (float4*) buf2407);
+    *(float*)buf2408 = sinh(*(float*)buf2409);
+    *(float2*)buf2410 = sinh(*(float2*)buf2411);
+    *(float3*)buf2412 = sinh(*(float3*)buf2413);
+    *(float4*)buf2414 = sinh(*(float4*)buf2415);
+    *(float*)buf2416 = sinpi(*(float*)buf2417);
+    *(float2*)buf2418 = sinpi(*(float2*)buf2419);
+    *(float3*)buf2420 = sinpi(*(float3*)buf2421);
+    *(float4*)buf2422 = sinpi(*(float4*)buf2423);
+    *(float*)buf2424 = sqrt(*(float*)buf2425);
+    *(float2*)buf2426 = sqrt(*(float2*)buf2427);
+    *(float3*)buf2428 = sqrt(*(float3*)buf2429);
+    *(float4*)buf2430 = sqrt(*(float4*)buf2431);
+    *(float*)buf2432 = step(*(float*)buf2433, *(float*)buf2434);
+    *(float2*)buf2435 = step(*(float2*)buf2436, *(float2*)buf2437);
+    *(float3*)buf2438 = step(*(float3*)buf2439, *(float3*)buf2440);
+    *(float4*)buf2441 = step(*(float4*)buf2442, *(float4*)buf2443);
+    *(float2*)buf2444 = step(*(float2*)buf2445, *(float*)buf2446);
+    *(float3*)buf2447 = step(*(float3*)buf2448, *(float*)buf2449);
+    *(float4*)buf2450 = step(*(float4*)buf2451, *(float*)buf2452);
+    *(float*)buf2453 = tan(*(float*)buf2454);
+    *(float2*)buf2455 = tan(*(float2*)buf2456);
+    *(float3*)buf2457 = tan(*(float3*)buf2458);
+    *(float4*)buf2459 = tan(*(float4*)buf2460);
+    *(float*)buf2461 = tanh(*(float*)buf2462);
+    *(float2*)buf2463 = tanh(*(float2*)buf2464);
+    *(float3*)buf2465 = tanh(*(float3*)buf2466);
+    *(float4*)buf2467 = tanh(*(float4*)buf2468);
+    *(float*)buf2469 = tanpi(*(float*)buf2470);
+    *(float2*)buf2471 = tanpi(*(float2*)buf2472);
+    *(float3*)buf2473 = tanpi(*(float3*)buf2474);
+    *(float4*)buf2475 = tanpi(*(float4*)buf2476);
+    *(float*)buf2477 = tgamma(*(float*)buf2478);
+    *(float2*)buf2479 = tgamma(*(float2*)buf2480);
+    *(float3*)buf2481 = tgamma(*(float3*)buf2482);
+    *(float4*)buf2483 = tgamma(*(float4*)buf2484);
+    *(float*)buf2485 = trunc(*(float*)buf2486);
+    *(float2*)buf2487 = trunc(*(float2*)buf2488);
+    *(float3*)buf2489 = trunc(*(float3*)buf2490);
+    *(float4*)buf2491 = trunc(*(float4*)buf2492);
+}
diff --git a/slang/tests/P_all_api_16/stderr.txt.expect b/slang/tests/P_all_api_16/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_all_api_16/stderr.txt.expect
diff --git a/slang/tests/P_all_api_16/stdout.txt.expect b/slang/tests/P_all_api_16/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_all_api_16/stdout.txt.expect
diff --git a/slang/tests/P_all_api_17/all17.rs b/slang/tests/P_all_api_17/all17.rs
new file mode 100644
index 0000000..be84dd1
--- /dev/null
+++ b/slang/tests/P_all_api_17/all17.rs
@@ -0,0 +1,3724 @@
+// -target-api 17 -Wno-deprecated-declarations
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Don't edit this file!  It is auto-generated by frameworks/rs/api/generate.sh.
+
+#pragma version(1)
+#pragma rs java_package_name(com.example.renderscript.testallapi)
+
+#include "rs_graphics.rsh"
+
+char buf0[200];
+char buf1[200];
+char buf2[200];
+char buf3[200];
+char buf4[200];
+char buf5[200];
+char buf6[200];
+char buf7[200];
+char buf8[200];
+char buf9[200];
+char buf10[200];
+char buf11[200];
+char buf12[200];
+char buf13[200];
+char buf14[200];
+char buf15[200];
+char buf16[200];
+char buf17[200];
+char buf18[200];
+char buf19[200];
+char buf20[200];
+char buf21[200];
+char buf22[200];
+char buf23[200];
+char buf24[200];
+char buf25[200];
+char buf26[200];
+char buf27[200];
+char buf28[200];
+char buf29[200];
+char buf30[200];
+char buf31[200];
+char buf32[200];
+char buf33[200];
+char buf34[200];
+char buf35[200];
+char buf36[200];
+char buf37[200];
+char buf38[200];
+char buf39[200];
+char buf40[200];
+char buf41[200];
+char buf42[200];
+char buf43[200];
+char buf44[200];
+char buf45[200];
+char buf46[200];
+char buf47[200];
+char buf48[200];
+char buf49[200];
+char buf50[200];
+char buf51[200];
+char buf52[200];
+char buf53[200];
+char buf54[200];
+char buf55[200];
+char buf56[200];
+char buf57[200];
+char buf58[200];
+char buf59[200];
+char buf60[200];
+char buf61[200];
+char buf62[200];
+char buf63[200];
+char buf64[200];
+char buf65[200];
+char buf66[200];
+char buf67[200];
+char buf68[200];
+char buf69[200];
+char buf70[200];
+char buf71[200];
+char buf72[200];
+char buf73[200];
+char buf74[200];
+char buf75[200];
+char buf76[200];
+char buf77[200];
+char buf78[200];
+char buf79[200];
+char buf80[200];
+char buf81[200];
+char buf82[200];
+char buf83[200];
+char buf84[200];
+char buf85[200];
+char buf86[200];
+char buf87[200];
+char buf88[200];
+char buf89[200];
+char buf90[200];
+char buf91[200];
+char buf92[200];
+char buf93[200];
+char buf94[200];
+char buf95[200];
+char buf96[200];
+char buf97[200];
+char buf98[200];
+char buf99[200];
+char buf100[200];
+char buf101[200];
+char buf102[200];
+char buf103[200];
+char buf104[200];
+char buf105[200];
+char buf106[200];
+char buf107[200];
+char buf108[200];
+char buf109[200];
+char buf110[200];
+char buf111[200];
+char buf112[200];
+char buf113[200];
+char buf114[200];
+char buf115[200];
+char buf116[200];
+char buf117[200];
+char buf118[200];
+char buf119[200];
+char buf120[200];
+char buf121[200];
+char buf122[200];
+char buf123[200];
+char buf124[200];
+char buf125[200];
+char buf126[200];
+char buf127[200];
+char buf128[200];
+char buf129[200];
+char buf130[200];
+char buf131[200];
+char buf132[200];
+char buf133[200];
+char buf134[200];
+char buf135[200];
+char buf136[200];
+char buf137[200];
+char buf138[200];
+char buf139[200];
+char buf140[200];
+char buf141[200];
+char buf142[200];
+char buf143[200];
+char buf144[200];
+char buf145[200];
+char buf146[200];
+char buf147[200];
+char buf148[200];
+char buf149[200];
+char buf150[200];
+char buf151[200];
+char buf152[200];
+char buf153[200];
+char buf154[200];
+char buf155[200];
+char buf156[200];
+char buf157[200];
+char buf158[200];
+char buf159[200];
+char buf160[200];
+char buf161[200];
+char buf162[200];
+char buf163[200];
+char buf164[200];
+char buf165[200];
+char buf166[200];
+char buf167[200];
+char buf168[200];
+char buf169[200];
+char buf170[200];
+char buf171[200];
+char buf172[200];
+char buf173[200];
+char buf174[200];
+char buf175[200];
+char buf176[200];
+char buf177[200];
+char buf178[200];
+char buf179[200];
+char buf180[200];
+char buf181[200];
+char buf182[200];
+char buf183[200];
+char buf184[200];
+char buf185[200];
+char buf186[200];
+char buf187[200];
+char buf188[200];
+char buf189[200];
+char buf190[200];
+char buf191[200];
+char buf192[200];
+char buf193[200];
+char buf194[200];
+char buf195[200];
+char buf196[200];
+char buf197[200];
+char buf198[200];
+char buf199[200];
+char buf200[200];
+char buf201[200];
+char buf202[200];
+char buf203[200];
+char buf204[200];
+char buf205[200];
+char buf206[200];
+char buf207[200];
+char buf208[200];
+char buf209[200];
+char buf210[200];
+char buf211[200];
+char buf212[200];
+char buf213[200];
+char buf214[200];
+char buf215[200];
+char buf216[200];
+char buf217[200];
+char buf218[200];
+char buf219[200];
+char buf220[200];
+char buf221[200];
+char buf222[200];
+char buf223[200];
+char buf224[200];
+char buf225[200];
+char buf226[200];
+char buf227[200];
+char buf228[200];
+char buf229[200];
+char buf230[200];
+char buf231[200];
+char buf232[200];
+char buf233[200];
+char buf234[200];
+char buf235[200];
+char buf236[200];
+char buf237[200];
+char buf238[200];
+char buf239[200];
+char buf240[200];
+char buf241[200];
+char buf242[200];
+char buf243[200];
+char buf244[200];
+char buf245[200];
+char buf246[200];
+char buf247[200];
+char buf248[200];
+char buf249[200];
+char buf250[200];
+char buf251[200];
+char buf252[200];
+char buf253[200];
+char buf254[200];
+char buf255[200];
+char buf256[200];
+char buf257[200];
+char buf258[200];
+char buf259[200];
+char buf260[200];
+char buf261[200];
+char buf262[200];
+char buf263[200];
+char buf264[200];
+char buf265[200];
+char buf266[200];
+char buf267[200];
+char buf268[200];
+char buf269[200];
+char buf270[200];
+char buf271[200];
+char buf272[200];
+char buf273[200];
+char buf274[200];
+char buf275[200];
+char buf276[200];
+char buf277[200];
+char buf278[200];
+char buf279[200];
+char buf280[200];
+char buf281[200];
+char buf282[200];
+char buf283[200];
+char buf284[200];
+char buf285[200];
+char buf286[200];
+char buf287[200];
+char buf288[200];
+char buf289[200];
+char buf290[200];
+char buf291[200];
+char buf292[200];
+char buf293[200];
+char buf294[200];
+char buf295[200];
+char buf296[200];
+char buf297[200];
+char buf298[200];
+char buf299[200];
+char buf300[200];
+char buf301[200];
+char buf302[200];
+char buf303[200];
+char buf304[200];
+char buf305[200];
+char buf306[200];
+char buf307[200];
+char buf308[200];
+char buf309[200];
+char buf310[200];
+char buf311[200];
+char buf312[200];
+char buf313[200];
+char buf314[200];
+char buf315[200];
+char buf316[200];
+char buf317[200];
+char buf318[200];
+char buf319[200];
+char buf320[200];
+char buf321[200];
+char buf322[200];
+char buf323[200];
+char buf324[200];
+char buf325[200];
+char buf326[200];
+char buf327[200];
+char buf328[200];
+char buf329[200];
+char buf330[200];
+char buf331[200];
+char buf332[200];
+char buf333[200];
+char buf334[200];
+char buf335[200];
+char buf336[200];
+char buf337[200];
+char buf338[200];
+char buf339[200];
+char buf340[200];
+char buf341[200];
+char buf342[200];
+char buf343[200];
+char buf344[200];
+char buf345[200];
+char buf346[200];
+char buf347[200];
+char buf348[200];
+char buf349[200];
+char buf350[200];
+char buf351[200];
+char buf352[200];
+char buf353[200];
+char buf354[200];
+char buf355[200];
+char buf356[200];
+char buf357[200];
+char buf358[200];
+char buf359[200];
+char buf360[200];
+char buf361[200];
+char buf362[200];
+char buf363[200];
+char buf364[200];
+char buf365[200];
+char buf366[200];
+char buf367[200];
+char buf368[200];
+char buf369[200];
+char buf370[200];
+char buf371[200];
+char buf372[200];
+char buf373[200];
+char buf374[200];
+char buf375[200];
+char buf376[200];
+char buf377[200];
+char buf378[200];
+char buf379[200];
+char buf380[200];
+char buf381[200];
+char buf382[200];
+char buf383[200];
+char buf384[200];
+char buf385[200];
+char buf386[200];
+char buf387[200];
+char buf388[200];
+char buf389[200];
+char buf390[200];
+char buf391[200];
+char buf392[200];
+char buf393[200];
+char buf394[200];
+char buf395[200];
+char buf396[200];
+char buf397[200];
+char buf398[200];
+char buf399[200];
+char buf400[200];
+char buf401[200];
+char buf402[200];
+char buf403[200];
+char buf404[200];
+char buf405[200];
+char buf406[200];
+char buf407[200];
+char buf408[200];
+char buf409[200];
+char buf410[200];
+char buf411[200];
+char buf412[200];
+char buf413[200];
+char buf414[200];
+char buf415[200];
+char buf416[200];
+char buf417[200];
+char buf418[200];
+char buf419[200];
+char buf420[200];
+char buf421[200];
+char buf422[200];
+char buf423[200];
+char buf424[200];
+char buf425[200];
+char buf426[200];
+char buf427[200];
+char buf428[200];
+char buf429[200];
+char buf430[200];
+char buf431[200];
+char buf432[200];
+char buf433[200];
+char buf434[200];
+char buf435[200];
+char buf436[200];
+char buf437[200];
+char buf438[200];
+char buf439[200];
+char buf440[200];
+char buf441[200];
+char buf442[200];
+char buf443[200];
+char buf444[200];
+char buf445[200];
+char buf446[200];
+char buf447[200];
+char buf448[200];
+char buf449[200];
+char buf450[200];
+char buf451[200];
+char buf452[200];
+char buf453[200];
+char buf454[200];
+char buf455[200];
+char buf456[200];
+char buf457[200];
+char buf458[200];
+char buf459[200];
+char buf460[200];
+char buf461[200];
+char buf462[200];
+char buf463[200];
+char buf464[200];
+char buf465[200];
+char buf466[200];
+char buf467[200];
+char buf468[200];
+char buf469[200];
+char buf470[200];
+char buf471[200];
+char buf472[200];
+char buf473[200];
+char buf474[200];
+char buf475[200];
+char buf476[200];
+char buf477[200];
+char buf478[200];
+char buf479[200];
+char buf480[200];
+char buf481[200];
+char buf482[200];
+char buf483[200];
+char buf484[200];
+char buf485[200];
+char buf486[200];
+char buf487[200];
+char buf488[200];
+char buf489[200];
+char buf490[200];
+char buf491[200];
+char buf492[200];
+char buf493[200];
+char buf494[200];
+char buf495[200];
+char buf496[200];
+char buf497[200];
+char buf498[200];
+char buf499[200];
+char buf500[200];
+char buf501[200];
+char buf502[200];
+char buf503[200];
+char buf504[200];
+char buf505[200];
+char buf506[200];
+char buf507[200];
+char buf508[200];
+char buf509[200];
+char buf510[200];
+char buf511[200];
+char buf512[200];
+char buf513[200];
+char buf514[200];
+char buf515[200];
+char buf516[200];
+char buf517[200];
+char buf518[200];
+char buf519[200];
+char buf520[200];
+char buf521[200];
+char buf522[200];
+char buf523[200];
+char buf524[200];
+char buf525[200];
+char buf526[200];
+char buf527[200];
+char buf528[200];
+char buf529[200];
+char buf530[200];
+char buf531[200];
+char buf532[200];
+char buf533[200];
+char buf534[200];
+char buf535[200];
+char buf536[200];
+char buf537[200];
+char buf538[200];
+char buf539[200];
+char buf540[200];
+char buf541[200];
+char buf542[200];
+char buf543[200];
+char buf544[200];
+char buf545[200];
+char buf546[200];
+char buf547[200];
+char buf548[200];
+char buf549[200];
+char buf550[200];
+char buf551[200];
+char buf552[200];
+char buf553[200];
+char buf554[200];
+char buf555[200];
+char buf556[200];
+char buf557[200];
+char buf558[200];
+char buf559[200];
+char buf560[200];
+char buf561[200];
+char buf562[200];
+char buf563[200];
+char buf564[200];
+char buf565[200];
+char buf566[200];
+char buf567[200];
+char buf568[200];
+char buf569[200];
+char buf570[200];
+char buf571[200];
+char buf572[200];
+char buf573[200];
+char buf574[200];
+char buf575[200];
+char buf576[200];
+char buf577[200];
+char buf578[200];
+char buf579[200];
+char buf580[200];
+char buf581[200];
+char buf582[200];
+char buf583[200];
+char buf584[200];
+char buf585[200];
+char buf586[200];
+char buf587[200];
+char buf588[200];
+char buf589[200];
+char buf590[200];
+char buf591[200];
+char buf592[200];
+char buf593[200];
+char buf594[200];
+char buf595[200];
+char buf596[200];
+char buf597[200];
+char buf598[200];
+char buf599[200];
+char buf600[200];
+char buf601[200];
+char buf602[200];
+char buf603[200];
+char buf604[200];
+char buf605[200];
+char buf606[200];
+char buf607[200];
+char buf608[200];
+char buf609[200];
+char buf610[200];
+char buf611[200];
+char buf612[200];
+char buf613[200];
+char buf614[200];
+char buf615[200];
+char buf616[200];
+char buf617[200];
+char buf618[200];
+char buf619[200];
+char buf620[200];
+char buf621[200];
+char buf622[200];
+char buf623[200];
+char buf624[200];
+char buf625[200];
+char buf626[200];
+char buf627[200];
+char buf628[200];
+char buf629[200];
+char buf630[200];
+char buf631[200];
+char buf632[200];
+char buf633[200];
+char buf634[200];
+char buf635[200];
+char buf636[200];
+char buf637[200];
+char buf638[200];
+char buf639[200];
+char buf640[200];
+char buf641[200];
+char buf642[200];
+char buf643[200];
+char buf644[200];
+char buf645[200];
+char buf646[200];
+char buf647[200];
+char buf648[200];
+char buf649[200];
+char buf650[200];
+char buf651[200];
+char buf652[200];
+char buf653[200];
+char buf654[200];
+char buf655[200];
+char buf656[200];
+char buf657[200];
+char buf658[200];
+char buf659[200];
+char buf660[200];
+char buf661[200];
+char buf662[200];
+char buf663[200];
+char buf664[200];
+char buf665[200];
+char buf666[200];
+char buf667[200];
+char buf668[200];
+char buf669[200];
+char buf670[200];
+char buf671[200];
+char buf672[200];
+char buf673[200];
+char buf674[200];
+char buf675[200];
+char buf676[200];
+char buf677[200];
+char buf678[200];
+char buf679[200];
+char buf680[200];
+char buf681[200];
+char buf682[200];
+char buf683[200];
+char buf684[200];
+char buf685[200];
+char buf686[200];
+char buf687[200];
+char buf688[200];
+char buf689[200];
+char buf690[200];
+char buf691[200];
+char buf692[200];
+char buf693[200];
+char buf694[200];
+char buf695[200];
+char buf696[200];
+char buf697[200];
+char buf698[200];
+char buf699[200];
+char buf700[200];
+char buf701[200];
+char buf702[200];
+char buf703[200];
+char buf704[200];
+char buf705[200];
+char buf706[200];
+char buf707[200];
+char buf708[200];
+char buf709[200];
+char buf710[200];
+char buf711[200];
+char buf712[200];
+char buf713[200];
+char buf714[200];
+char buf715[200];
+char buf716[200];
+char buf717[200];
+char buf718[200];
+char buf719[200];
+char buf720[200];
+char buf721[200];
+char buf722[200];
+char buf723[200];
+char buf724[200];
+char buf725[200];
+char buf726[200];
+char buf727[200];
+char buf728[200];
+char buf729[200];
+char buf730[200];
+char buf731[200];
+char buf732[200];
+char buf733[200];
+char buf734[200];
+char buf735[200];
+char buf736[200];
+char buf737[200];
+char buf738[200];
+char buf739[200];
+char buf740[200];
+char buf741[200];
+char buf742[200];
+char buf743[200];
+char buf744[200];
+char buf745[200];
+char buf746[200];
+char buf747[200];
+char buf748[200];
+char buf749[200];
+char buf750[200];
+char buf751[200];
+char buf752[200];
+char buf753[200];
+char buf754[200];
+char buf755[200];
+char buf756[200];
+char buf757[200];
+char buf758[200];
+char buf759[200];
+char buf760[200];
+char buf761[200];
+char buf762[200];
+char buf763[200];
+char buf764[200];
+char buf765[200];
+char buf766[200];
+char buf767[200];
+char buf768[200];
+char buf769[200];
+char buf770[200];
+char buf771[200];
+char buf772[200];
+char buf773[200];
+char buf774[200];
+char buf775[200];
+char buf776[200];
+char buf777[200];
+char buf778[200];
+char buf779[200];
+char buf780[200];
+char buf781[200];
+char buf782[200];
+char buf783[200];
+char buf784[200];
+char buf785[200];
+char buf786[200];
+char buf787[200];
+char buf788[200];
+char buf789[200];
+char buf790[200];
+char buf791[200];
+char buf792[200];
+char buf793[200];
+char buf794[200];
+char buf795[200];
+char buf796[200];
+char buf797[200];
+char buf798[200];
+char buf799[200];
+char buf800[200];
+char buf801[200];
+char buf802[200];
+char buf803[200];
+char buf804[200];
+char buf805[200];
+char buf806[200];
+char buf807[200];
+char buf808[200];
+char buf809[200];
+char buf810[200];
+char buf811[200];
+char buf812[200];
+char buf813[200];
+char buf814[200];
+char buf815[200];
+char buf816[200];
+char buf817[200];
+char buf818[200];
+char buf819[200];
+char buf820[200];
+char buf821[200];
+char buf822[200];
+char buf823[200];
+char buf824[200];
+char buf825[200];
+char buf826[200];
+char buf827[200];
+char buf828[200];
+char buf829[200];
+char buf830[200];
+char buf831[200];
+char buf832[200];
+char buf833[200];
+char buf834[200];
+char buf835[200];
+char buf836[200];
+char buf837[200];
+char buf838[200];
+char buf839[200];
+char buf840[200];
+char buf841[200];
+char buf842[200];
+char buf843[200];
+char buf844[200];
+char buf845[200];
+char buf846[200];
+char buf847[200];
+char buf848[200];
+char buf849[200];
+char buf850[200];
+char buf851[200];
+char buf852[200];
+char buf853[200];
+char buf854[200];
+char buf855[200];
+char buf856[200];
+char buf857[200];
+char buf858[200];
+char buf859[200];
+char buf860[200];
+char buf861[200];
+char buf862[200];
+char buf863[200];
+char buf864[200];
+char buf865[200];
+char buf866[200];
+char buf867[200];
+char buf868[200];
+char buf869[200];
+char buf870[200];
+char buf871[200];
+char buf872[200];
+char buf873[200];
+char buf874[200];
+char buf875[200];
+char buf876[200];
+char buf877[200];
+char buf878[200];
+char buf879[200];
+char buf880[200];
+char buf881[200];
+char buf882[200];
+char buf883[200];
+char buf884[200];
+char buf885[200];
+char buf886[200];
+char buf887[200];
+char buf888[200];
+char buf889[200];
+char buf890[200];
+char buf891[200];
+char buf892[200];
+char buf893[200];
+char buf894[200];
+char buf895[200];
+char buf896[200];
+char buf897[200];
+char buf898[200];
+char buf899[200];
+char buf900[200];
+char buf901[200];
+char buf902[200];
+char buf903[200];
+char buf904[200];
+char buf905[200];
+char buf906[200];
+char buf907[200];
+char buf908[200];
+char buf909[200];
+char buf910[200];
+char buf911[200];
+char buf912[200];
+char buf913[200];
+char buf914[200];
+char buf915[200];
+char buf916[200];
+char buf917[200];
+char buf918[200];
+char buf919[200];
+char buf920[200];
+char buf921[200];
+char buf922[200];
+char buf923[200];
+char buf924[200];
+char buf925[200];
+char buf926[200];
+char buf927[200];
+char buf928[200];
+char buf929[200];
+char buf930[200];
+char buf931[200];
+char buf932[200];
+char buf933[200];
+char buf934[200];
+char buf935[200];
+char buf936[200];
+char buf937[200];
+char buf938[200];
+char buf939[200];
+char buf940[200];
+char buf941[200];
+char buf942[200];
+char buf943[200];
+char buf944[200];
+char buf945[200];
+char buf946[200];
+char buf947[200];
+char buf948[200];
+char buf949[200];
+char buf950[200];
+char buf951[200];
+char buf952[200];
+char buf953[200];
+char buf954[200];
+char buf955[200];
+char buf956[200];
+char buf957[200];
+char buf958[200];
+char buf959[200];
+char buf960[200];
+char buf961[200];
+char buf962[200];
+char buf963[200];
+char buf964[200];
+char buf965[200];
+char buf966[200];
+char buf967[200];
+char buf968[200];
+char buf969[200];
+char buf970[200];
+char buf971[200];
+char buf972[200];
+char buf973[200];
+char buf974[200];
+char buf975[200];
+char buf976[200];
+char buf977[200];
+char buf978[200];
+char buf979[200];
+char buf980[200];
+char buf981[200];
+char buf982[200];
+char buf983[200];
+char buf984[200];
+char buf985[200];
+char buf986[200];
+char buf987[200];
+char buf988[200];
+char buf989[200];
+char buf990[200];
+char buf991[200];
+char buf992[200];
+char buf993[200];
+char buf994[200];
+char buf995[200];
+char buf996[200];
+char buf997[200];
+char buf998[200];
+char buf999[200];
+char buf1000[200];
+char buf1001[200];
+char buf1002[200];
+char buf1003[200];
+char buf1004[200];
+char buf1005[200];
+char buf1006[200];
+char buf1007[200];
+char buf1008[200];
+char buf1009[200];
+char buf1010[200];
+char buf1011[200];
+char buf1012[200];
+char buf1013[200];
+char buf1014[200];
+char buf1015[200];
+char buf1016[200];
+char buf1017[200];
+char buf1018[200];
+char buf1019[200];
+char buf1020[200];
+char buf1021[200];
+char buf1022[200];
+char buf1023[200];
+char buf1024[200];
+char buf1025[200];
+char buf1026[200];
+char buf1027[200];
+char buf1028[200];
+char buf1029[200];
+char buf1030[200];
+char buf1031[200];
+char buf1032[200];
+char buf1033[200];
+char buf1034[200];
+char buf1035[200];
+char buf1036[200];
+char buf1037[200];
+char buf1038[200];
+char buf1039[200];
+char buf1040[200];
+char buf1041[200];
+char buf1042[200];
+char buf1043[200];
+char buf1044[200];
+char buf1045[200];
+char buf1046[200];
+char buf1047[200];
+char buf1048[200];
+char buf1049[200];
+char buf1050[200];
+char buf1051[200];
+char buf1052[200];
+char buf1053[200];
+char buf1054[200];
+char buf1055[200];
+char buf1056[200];
+char buf1057[200];
+char buf1058[200];
+char buf1059[200];
+char buf1060[200];
+char buf1061[200];
+char buf1062[200];
+char buf1063[200];
+char buf1064[200];
+char buf1065[200];
+char buf1066[200];
+char buf1067[200];
+char buf1068[200];
+char buf1069[200];
+char buf1070[200];
+char buf1071[200];
+char buf1072[200];
+char buf1073[200];
+char buf1074[200];
+char buf1075[200];
+char buf1076[200];
+char buf1077[200];
+char buf1078[200];
+char buf1079[200];
+char buf1080[200];
+char buf1081[200];
+char buf1082[200];
+char buf1083[200];
+char buf1084[200];
+char buf1085[200];
+char buf1086[200];
+char buf1087[200];
+char buf1088[200];
+char buf1089[200];
+char buf1090[200];
+char buf1091[200];
+char buf1092[200];
+char buf1093[200];
+char buf1094[200];
+char buf1095[200];
+char buf1096[200];
+char buf1097[200];
+char buf1098[200];
+char buf1099[200];
+char buf1100[200];
+char buf1101[200];
+char buf1102[200];
+char buf1103[200];
+char buf1104[200];
+char buf1105[200];
+char buf1106[200];
+char buf1107[200];
+char buf1108[200];
+char buf1109[200];
+char buf1110[200];
+char buf1111[200];
+char buf1112[200];
+char buf1113[200];
+char buf1114[200];
+char buf1115[200];
+char buf1116[200];
+char buf1117[200];
+char buf1118[200];
+char buf1119[200];
+char buf1120[200];
+char buf1121[200];
+char buf1122[200];
+char buf1123[200];
+char buf1124[200];
+char buf1125[200];
+char buf1126[200];
+char buf1127[200];
+char buf1128[200];
+char buf1129[200];
+char buf1130[200];
+char buf1131[200];
+char buf1132[200];
+char buf1133[200];
+char buf1134[200];
+char buf1135[200];
+char buf1136[200];
+char buf1137[200];
+char buf1138[200];
+char buf1139[200];
+char buf1140[200];
+char buf1141[200];
+char buf1142[200];
+char buf1143[200];
+char buf1144[200];
+char buf1145[200];
+char buf1146[200];
+char buf1147[200];
+char buf1148[200];
+char buf1149[200];
+char buf1150[200];
+char buf1151[200];
+char buf1152[200];
+char buf1153[200];
+char buf1154[200];
+char buf1155[200];
+char buf1156[200];
+char buf1157[200];
+char buf1158[200];
+char buf1159[200];
+char buf1160[200];
+char buf1161[200];
+char buf1162[200];
+char buf1163[200];
+char buf1164[200];
+char buf1165[200];
+char buf1166[200];
+char buf1167[200];
+char buf1168[200];
+char buf1169[200];
+char buf1170[200];
+char buf1171[200];
+char buf1172[200];
+char buf1173[200];
+char buf1174[200];
+char buf1175[200];
+char buf1176[200];
+char buf1177[200];
+char buf1178[200];
+char buf1179[200];
+char buf1180[200];
+char buf1181[200];
+char buf1182[200];
+char buf1183[200];
+char buf1184[200];
+char buf1185[200];
+char buf1186[200];
+char buf1187[200];
+char buf1188[200];
+char buf1189[200];
+char buf1190[200];
+char buf1191[200];
+char buf1192[200];
+char buf1193[200];
+char buf1194[200];
+char buf1195[200];
+char buf1196[200];
+char buf1197[200];
+char buf1198[200];
+char buf1199[200];
+char buf1200[200];
+char buf1201[200];
+char buf1202[200];
+char buf1203[200];
+char buf1204[200];
+char buf1205[200];
+char buf1206[200];
+char buf1207[200];
+char buf1208[200];
+char buf1209[200];
+char buf1210[200];
+char buf1211[200];
+char buf1212[200];
+char buf1213[200];
+char buf1214[200];
+char buf1215[200];
+char buf1216[200];
+char buf1217[200];
+char buf1218[200];
+char buf1219[200];
+char buf1220[200];
+char buf1221[200];
+char buf1222[200];
+char buf1223[200];
+char buf1224[200];
+char buf1225[200];
+char buf1226[200];
+char buf1227[200];
+char buf1228[200];
+char buf1229[200];
+char buf1230[200];
+char buf1231[200];
+char buf1232[200];
+char buf1233[200];
+char buf1234[200];
+char buf1235[200];
+char buf1236[200];
+char buf1237[200];
+char buf1238[200];
+char buf1239[200];
+char buf1240[200];
+char buf1241[200];
+char buf1242[200];
+char buf1243[200];
+char buf1244[200];
+char buf1245[200];
+char buf1246[200];
+char buf1247[200];
+char buf1248[200];
+char buf1249[200];
+char buf1250[200];
+char buf1251[200];
+char buf1252[200];
+char buf1253[200];
+char buf1254[200];
+char buf1255[200];
+char buf1256[200];
+char buf1257[200];
+char buf1258[200];
+char buf1259[200];
+char buf1260[200];
+char buf1261[200];
+char buf1262[200];
+char buf1263[200];
+char buf1264[200];
+char buf1265[200];
+char buf1266[200];
+char buf1267[200];
+char buf1268[200];
+char buf1269[200];
+char buf1270[200];
+char buf1271[200];
+char buf1272[200];
+char buf1273[200];
+char buf1274[200];
+char buf1275[200];
+char buf1276[200];
+char buf1277[200];
+char buf1278[200];
+char buf1279[200];
+char buf1280[200];
+char buf1281[200];
+char buf1282[200];
+char buf1283[200];
+char buf1284[200];
+char buf1285[200];
+char buf1286[200];
+char buf1287[200];
+char buf1288[200];
+char buf1289[200];
+char buf1290[200];
+char buf1291[200];
+char buf1292[200];
+char buf1293[200];
+char buf1294[200];
+char buf1295[200];
+char buf1296[200];
+char buf1297[200];
+char buf1298[200];
+char buf1299[200];
+char buf1300[200];
+char buf1301[200];
+char buf1302[200];
+char buf1303[200];
+char buf1304[200];
+char buf1305[200];
+char buf1306[200];
+char buf1307[200];
+char buf1308[200];
+char buf1309[200];
+char buf1310[200];
+char buf1311[200];
+char buf1312[200];
+char buf1313[200];
+char buf1314[200];
+char buf1315[200];
+char buf1316[200];
+char buf1317[200];
+char buf1318[200];
+char buf1319[200];
+char buf1320[200];
+char buf1321[200];
+char buf1322[200];
+char buf1323[200];
+char buf1324[200];
+char buf1325[200];
+char buf1326[200];
+char buf1327[200];
+char buf1328[200];
+char buf1329[200];
+char buf1330[200];
+char buf1331[200];
+char buf1332[200];
+char buf1333[200];
+char buf1334[200];
+char buf1335[200];
+char buf1336[200];
+char buf1337[200];
+char buf1338[200];
+char buf1339[200];
+char buf1340[200];
+char buf1341[200];
+char buf1342[200];
+char buf1343[200];
+char buf1344[200];
+char buf1345[200];
+char buf1346[200];
+char buf1347[200];
+char buf1348[200];
+char buf1349[200];
+char buf1350[200];
+char buf1351[200];
+char buf1352[200];
+char buf1353[200];
+char buf1354[200];
+char buf1355[200];
+char buf1356[200];
+char buf1357[200];
+char buf1358[200];
+char buf1359[200];
+char buf1360[200];
+char buf1361[200];
+char buf1362[200];
+char buf1363[200];
+char buf1364[200];
+char buf1365[200];
+char buf1366[200];
+char buf1367[200];
+char buf1368[200];
+char buf1369[200];
+char buf1370[200];
+char buf1371[200];
+char buf1372[200];
+char buf1373[200];
+char buf1374[200];
+char buf1375[200];
+char buf1376[200];
+char buf1377[200];
+char buf1378[200];
+char buf1379[200];
+char buf1380[200];
+char buf1381[200];
+char buf1382[200];
+char buf1383[200];
+char buf1384[200];
+char buf1385[200];
+char buf1386[200];
+char buf1387[200];
+char buf1388[200];
+char buf1389[200];
+char buf1390[200];
+char buf1391[200];
+char buf1392[200];
+char buf1393[200];
+char buf1394[200];
+char buf1395[200];
+char buf1396[200];
+char buf1397[200];
+char buf1398[200];
+char buf1399[200];
+char buf1400[200];
+char buf1401[200];
+char buf1402[200];
+char buf1403[200];
+char buf1404[200];
+char buf1405[200];
+char buf1406[200];
+char buf1407[200];
+char buf1408[200];
+char buf1409[200];
+char buf1410[200];
+char buf1411[200];
+char buf1412[200];
+char buf1413[200];
+char buf1414[200];
+char buf1415[200];
+char buf1416[200];
+char buf1417[200];
+char buf1418[200];
+char buf1419[200];
+char buf1420[200];
+char buf1421[200];
+char buf1422[200];
+char buf1423[200];
+char buf1424[200];
+char buf1425[200];
+char buf1426[200];
+char buf1427[200];
+char buf1428[200];
+char buf1429[200];
+char buf1430[200];
+char buf1431[200];
+char buf1432[200];
+char buf1433[200];
+char buf1434[200];
+char buf1435[200];
+char buf1436[200];
+char buf1437[200];
+char buf1438[200];
+char buf1439[200];
+char buf1440[200];
+char buf1441[200];
+char buf1442[200];
+char buf1443[200];
+char buf1444[200];
+char buf1445[200];
+char buf1446[200];
+char buf1447[200];
+char buf1448[200];
+char buf1449[200];
+char buf1450[200];
+char buf1451[200];
+char buf1452[200];
+char buf1453[200];
+char buf1454[200];
+char buf1455[200];
+char buf1456[200];
+char buf1457[200];
+char buf1458[200];
+char buf1459[200];
+char buf1460[200];
+char buf1461[200];
+char buf1462[200];
+char buf1463[200];
+char buf1464[200];
+char buf1465[200];
+char buf1466[200];
+char buf1467[200];
+char buf1468[200];
+char buf1469[200];
+char buf1470[200];
+char buf1471[200];
+char buf1472[200];
+char buf1473[200];
+char buf1474[200];
+char buf1475[200];
+char buf1476[200];
+char buf1477[200];
+char buf1478[200];
+char buf1479[200];
+char buf1480[200];
+char buf1481[200];
+char buf1482[200];
+char buf1483[200];
+char buf1484[200];
+char buf1485[200];
+char buf1486[200];
+char buf1487[200];
+char buf1488[200];
+char buf1489[200];
+char buf1490[200];
+char buf1491[200];
+char buf1492[200];
+char buf1493[200];
+char buf1494[200];
+char buf1495[200];
+char buf1496[200];
+char buf1497[200];
+char buf1498[200];
+char buf1499[200];
+char buf1500[200];
+char buf1501[200];
+char buf1502[200];
+char buf1503[200];
+char buf1504[200];
+char buf1505[200];
+char buf1506[200];
+char buf1507[200];
+char buf1508[200];
+char buf1509[200];
+char buf1510[200];
+char buf1511[200];
+char buf1512[200];
+char buf1513[200];
+char buf1514[200];
+char buf1515[200];
+char buf1516[200];
+char buf1517[200];
+char buf1518[200];
+char buf1519[200];
+char buf1520[200];
+char buf1521[200];
+char buf1522[200];
+char buf1523[200];
+char buf1524[200];
+char buf1525[200];
+char buf1526[200];
+char buf1527[200];
+char buf1528[200];
+char buf1529[200];
+char buf1530[200];
+char buf1531[200];
+char buf1532[200];
+char buf1533[200];
+char buf1534[200];
+char buf1535[200];
+char buf1536[200];
+char buf1537[200];
+char buf1538[200];
+char buf1539[200];
+char buf1540[200];
+char buf1541[200];
+char buf1542[200];
+char buf1543[200];
+char buf1544[200];
+char buf1545[200];
+char buf1546[200];
+char buf1547[200];
+char buf1548[200];
+char buf1549[200];
+char buf1550[200];
+char buf1551[200];
+char buf1552[200];
+char buf1553[200];
+char buf1554[200];
+char buf1555[200];
+char buf1556[200];
+char buf1557[200];
+char buf1558[200];
+char buf1559[200];
+char buf1560[200];
+char buf1561[200];
+char buf1562[200];
+char buf1563[200];
+char buf1564[200];
+char buf1565[200];
+char buf1566[200];
+char buf1567[200];
+char buf1568[200];
+char buf1569[200];
+char buf1570[200];
+char buf1571[200];
+char buf1572[200];
+char buf1573[200];
+char buf1574[200];
+char buf1575[200];
+char buf1576[200];
+char buf1577[200];
+char buf1578[200];
+char buf1579[200];
+char buf1580[200];
+char buf1581[200];
+char buf1582[200];
+char buf1583[200];
+char buf1584[200];
+char buf1585[200];
+char buf1586[200];
+char buf1587[200];
+char buf1588[200];
+char buf1589[200];
+char buf1590[200];
+char buf1591[200];
+char buf1592[200];
+char buf1593[200];
+char buf1594[200];
+char buf1595[200];
+char buf1596[200];
+char buf1597[200];
+char buf1598[200];
+char buf1599[200];
+char buf1600[200];
+char buf1601[200];
+char buf1602[200];
+char buf1603[200];
+char buf1604[200];
+char buf1605[200];
+char buf1606[200];
+char buf1607[200];
+char buf1608[200];
+char buf1609[200];
+char buf1610[200];
+char buf1611[200];
+char buf1612[200];
+char buf1613[200];
+char buf1614[200];
+char buf1615[200];
+char buf1616[200];
+char buf1617[200];
+char buf1618[200];
+char buf1619[200];
+char buf1620[200];
+char buf1621[200];
+char buf1622[200];
+char buf1623[200];
+char buf1624[200];
+char buf1625[200];
+char buf1626[200];
+char buf1627[200];
+char buf1628[200];
+char buf1629[200];
+char buf1630[200];
+char buf1631[200];
+char buf1632[200];
+char buf1633[200];
+char buf1634[200];
+char buf1635[200];
+char buf1636[200];
+char buf1637[200];
+char buf1638[200];
+char buf1639[200];
+char buf1640[200];
+char buf1641[200];
+char buf1642[200];
+char buf1643[200];
+char buf1644[200];
+char buf1645[200];
+char buf1646[200];
+char buf1647[200];
+char buf1648[200];
+char buf1649[200];
+char buf1650[200];
+char buf1651[200];
+char buf1652[200];
+char buf1653[200];
+char buf1654[200];
+char buf1655[200];
+char buf1656[200];
+char buf1657[200];
+char buf1658[200];
+char buf1659[200];
+char buf1660[200];
+char buf1661[200];
+char buf1662[200];
+char buf1663[200];
+char buf1664[200];
+char buf1665[200];
+char buf1666[200];
+char buf1667[200];
+char buf1668[200];
+char buf1669[200];
+char buf1670[200];
+char buf1671[200];
+char buf1672[200];
+char buf1673[200];
+char buf1674[200];
+char buf1675[200];
+char buf1676[200];
+char buf1677[200];
+char buf1678[200];
+char buf1679[200];
+char buf1680[200];
+char buf1681[200];
+char buf1682[200];
+char buf1683[200];
+char buf1684[200];
+char buf1685[200];
+char buf1686[200];
+char buf1687[200];
+char buf1688[200];
+char buf1689[200];
+char buf1690[200];
+char buf1691[200];
+char buf1692[200];
+char buf1693[200];
+char buf1694[200];
+char buf1695[200];
+char buf1696[200];
+char buf1697[200];
+char buf1698[200];
+char buf1699[200];
+char buf1700[200];
+char buf1701[200];
+char buf1702[200];
+char buf1703[200];
+char buf1704[200];
+char buf1705[200];
+char buf1706[200];
+char buf1707[200];
+char buf1708[200];
+char buf1709[200];
+char buf1710[200];
+char buf1711[200];
+char buf1712[200];
+char buf1713[200];
+char buf1714[200];
+char buf1715[200];
+char buf1716[200];
+char buf1717[200];
+char buf1718[200];
+char buf1719[200];
+char buf1720[200];
+char buf1721[200];
+char buf1722[200];
+char buf1723[200];
+char buf1724[200];
+char buf1725[200];
+char buf1726[200];
+char buf1727[200];
+char buf1728[200];
+char buf1729[200];
+char buf1730[200];
+char buf1731[200];
+char buf1732[200];
+char buf1733[200];
+char buf1734[200];
+char buf1735[200];
+char buf1736[200];
+char buf1737[200];
+char buf1738[200];
+char buf1739[200];
+char buf1740[200];
+char buf1741[200];
+char buf1742[200];
+char buf1743[200];
+char buf1744[200];
+char buf1745[200];
+char buf1746[200];
+char buf1747[200];
+char buf1748[200];
+char buf1749[200];
+char buf1750[200];
+char buf1751[200];
+char buf1752[200];
+char buf1753[200];
+char buf1754[200];
+char buf1755[200];
+char buf1756[200];
+char buf1757[200];
+char buf1758[200];
+char buf1759[200];
+char buf1760[200];
+char buf1761[200];
+char buf1762[200];
+char buf1763[200];
+char buf1764[200];
+char buf1765[200];
+char buf1766[200];
+char buf1767[200];
+char buf1768[200];
+char buf1769[200];
+char buf1770[200];
+char buf1771[200];
+char buf1772[200];
+char buf1773[200];
+char buf1774[200];
+char buf1775[200];
+char buf1776[200];
+char buf1777[200];
+char buf1778[200];
+char buf1779[200];
+char buf1780[200];
+char buf1781[200];
+char buf1782[200];
+char buf1783[200];
+char buf1784[200];
+char buf1785[200];
+char buf1786[200];
+char buf1787[200];
+char buf1788[200];
+char buf1789[200];
+char buf1790[200];
+char buf1791[200];
+char buf1792[200];
+char buf1793[200];
+char buf1794[200];
+char buf1795[200];
+char buf1796[200];
+char buf1797[200];
+char buf1798[200];
+char buf1799[200];
+char buf1800[200];
+char buf1801[200];
+char buf1802[200];
+char buf1803[200];
+char buf1804[200];
+char buf1805[200];
+char buf1806[200];
+char buf1807[200];
+char buf1808[200];
+char buf1809[200];
+char buf1810[200];
+char buf1811[200];
+char buf1812[200];
+char buf1813[200];
+char buf1814[200];
+char buf1815[200];
+char buf1816[200];
+char buf1817[200];
+char buf1818[200];
+char buf1819[200];
+char buf1820[200];
+char buf1821[200];
+char buf1822[200];
+char buf1823[200];
+char buf1824[200];
+char buf1825[200];
+char buf1826[200];
+char buf1827[200];
+char buf1828[200];
+char buf1829[200];
+char buf1830[200];
+char buf1831[200];
+char buf1832[200];
+char buf1833[200];
+char buf1834[200];
+char buf1835[200];
+char buf1836[200];
+char buf1837[200];
+char buf1838[200];
+char buf1839[200];
+char buf1840[200];
+char buf1841[200];
+char buf1842[200];
+char buf1843[200];
+char buf1844[200];
+char buf1845[200];
+char buf1846[200];
+char buf1847[200];
+char buf1848[200];
+char buf1849[200];
+char buf1850[200];
+char buf1851[200];
+char buf1852[200];
+char buf1853[200];
+char buf1854[200];
+char buf1855[200];
+char buf1856[200];
+char buf1857[200];
+char buf1858[200];
+char buf1859[200];
+char buf1860[200];
+char buf1861[200];
+char buf1862[200];
+char buf1863[200];
+char buf1864[200];
+char buf1865[200];
+char buf1866[200];
+char buf1867[200];
+char buf1868[200];
+char buf1869[200];
+char buf1870[200];
+char buf1871[200];
+char buf1872[200];
+char buf1873[200];
+char buf1874[200];
+char buf1875[200];
+char buf1876[200];
+char buf1877[200];
+char buf1878[200];
+char buf1879[200];
+char buf1880[200];
+char buf1881[200];
+char buf1882[200];
+char buf1883[200];
+char buf1884[200];
+char buf1885[200];
+char buf1886[200];
+char buf1887[200];
+char buf1888[200];
+char buf1889[200];
+char buf1890[200];
+char buf1891[200];
+char buf1892[200];
+char buf1893[200];
+char buf1894[200];
+char buf1895[200];
+char buf1896[200];
+char buf1897[200];
+char buf1898[200];
+char buf1899[200];
+char buf1900[200];
+char buf1901[200];
+char buf1902[200];
+char buf1903[200];
+char buf1904[200];
+char buf1905[200];
+char buf1906[200];
+char buf1907[200];
+char buf1908[200];
+char buf1909[200];
+char buf1910[200];
+char buf1911[200];
+char buf1912[200];
+char buf1913[200];
+char buf1914[200];
+char buf1915[200];
+char buf1916[200];
+char buf1917[200];
+char buf1918[200];
+char buf1919[200];
+char buf1920[200];
+char buf1921[200];
+char buf1922[200];
+char buf1923[200];
+char buf1924[200];
+char buf1925[200];
+char buf1926[200];
+char buf1927[200];
+char buf1928[200];
+char buf1929[200];
+char buf1930[200];
+char buf1931[200];
+char buf1932[200];
+char buf1933[200];
+char buf1934[200];
+char buf1935[200];
+char buf1936[200];
+char buf1937[200];
+char buf1938[200];
+char buf1939[200];
+char buf1940[200];
+char buf1941[200];
+char buf1942[200];
+char buf1943[200];
+char buf1944[200];
+char buf1945[200];
+char buf1946[200];
+char buf1947[200];
+char buf1948[200];
+char buf1949[200];
+char buf1950[200];
+char buf1951[200];
+char buf1952[200];
+char buf1953[200];
+char buf1954[200];
+char buf1955[200];
+char buf1956[200];
+char buf1957[200];
+char buf1958[200];
+char buf1959[200];
+char buf1960[200];
+char buf1961[200];
+char buf1962[200];
+char buf1963[200];
+char buf1964[200];
+char buf1965[200];
+char buf1966[200];
+char buf1967[200];
+char buf1968[200];
+char buf1969[200];
+char buf1970[200];
+char buf1971[200];
+char buf1972[200];
+char buf1973[200];
+char buf1974[200];
+char buf1975[200];
+char buf1976[200];
+char buf1977[200];
+char buf1978[200];
+char buf1979[200];
+char buf1980[200];
+char buf1981[200];
+char buf1982[200];
+char buf1983[200];
+char buf1984[200];
+char buf1985[200];
+char buf1986[200];
+char buf1987[200];
+char buf1988[200];
+char buf1989[200];
+char buf1990[200];
+char buf1991[200];
+char buf1992[200];
+char buf1993[200];
+char buf1994[200];
+char buf1995[200];
+char buf1996[200];
+char buf1997[200];
+char buf1998[200];
+char buf1999[200];
+char buf2000[200];
+char buf2001[200];
+char buf2002[200];
+char buf2003[200];
+char buf2004[200];
+char buf2005[200];
+char buf2006[200];
+char buf2007[200];
+char buf2008[200];
+char buf2009[200];
+char buf2010[200];
+char buf2011[200];
+char buf2012[200];
+char buf2013[200];
+char buf2014[200];
+char buf2015[200];
+char buf2016[200];
+char buf2017[200];
+char buf2018[200];
+char buf2019[200];
+char buf2020[200];
+char buf2021[200];
+char buf2022[200];
+char buf2023[200];
+char buf2024[200];
+char buf2025[200];
+char buf2026[200];
+char buf2027[200];
+char buf2028[200];
+char buf2029[200];
+char buf2030[200];
+char buf2031[200];
+char buf2032[200];
+char buf2033[200];
+char buf2034[200];
+char buf2035[200];
+char buf2036[200];
+char buf2037[200];
+char buf2038[200];
+char buf2039[200];
+char buf2040[200];
+char buf2041[200];
+char buf2042[200];
+char buf2043[200];
+char buf2044[200];
+char buf2045[200];
+char buf2046[200];
+char buf2047[200];
+char buf2048[200];
+char buf2049[200];
+char buf2050[200];
+char buf2051[200];
+char buf2052[200];
+char buf2053[200];
+char buf2054[200];
+char buf2055[200];
+char buf2056[200];
+char buf2057[200];
+char buf2058[200];
+char buf2059[200];
+char buf2060[200];
+char buf2061[200];
+char buf2062[200];
+char buf2063[200];
+char buf2064[200];
+char buf2065[200];
+char buf2066[200];
+char buf2067[200];
+char buf2068[200];
+char buf2069[200];
+char buf2070[200];
+char buf2071[200];
+char buf2072[200];
+char buf2073[200];
+char buf2074[200];
+char buf2075[200];
+char buf2076[200];
+char buf2077[200];
+char buf2078[200];
+char buf2079[200];
+char buf2080[200];
+char buf2081[200];
+char buf2082[200];
+char buf2083[200];
+char buf2084[200];
+char buf2085[200];
+char buf2086[200];
+char buf2087[200];
+char buf2088[200];
+char buf2089[200];
+char buf2090[200];
+char buf2091[200];
+char buf2092[200];
+char buf2093[200];
+char buf2094[200];
+char buf2095[200];
+char buf2096[200];
+char buf2097[200];
+char buf2098[200];
+char buf2099[200];
+char buf2100[200];
+char buf2101[200];
+char buf2102[200];
+char buf2103[200];
+char buf2104[200];
+char buf2105[200];
+char buf2106[200];
+char buf2107[200];
+char buf2108[200];
+char buf2109[200];
+char buf2110[200];
+char buf2111[200];
+char buf2112[200];
+char buf2113[200];
+char buf2114[200];
+char buf2115[200];
+char buf2116[200];
+char buf2117[200];
+char buf2118[200];
+char buf2119[200];
+char buf2120[200];
+char buf2121[200];
+char buf2122[200];
+char buf2123[200];
+char buf2124[200];
+char buf2125[200];
+char buf2126[200];
+char buf2127[200];
+char buf2128[200];
+char buf2129[200];
+char buf2130[200];
+char buf2131[200];
+char buf2132[200];
+char buf2133[200];
+char buf2134[200];
+char buf2135[200];
+char buf2136[200];
+char buf2137[200];
+char buf2138[200];
+char buf2139[200];
+char buf2140[200];
+char buf2141[200];
+char buf2142[200];
+char buf2143[200];
+char buf2144[200];
+char buf2145[200];
+char buf2146[200];
+char buf2147[200];
+char buf2148[200];
+char buf2149[200];
+char buf2150[200];
+char buf2151[200];
+char buf2152[200];
+char buf2153[200];
+char buf2154[200];
+char buf2155[200];
+char buf2156[200];
+char buf2157[200];
+char buf2158[200];
+char buf2159[200];
+char buf2160[200];
+char buf2161[200];
+char buf2162[200];
+char buf2163[200];
+char buf2164[200];
+char buf2165[200];
+char buf2166[200];
+char buf2167[200];
+char buf2168[200];
+char buf2169[200];
+char buf2170[200];
+char buf2171[200];
+char buf2172[200];
+char buf2173[200];
+char buf2174[200];
+char buf2175[200];
+char buf2176[200];
+char buf2177[200];
+char buf2178[200];
+char buf2179[200];
+char buf2180[200];
+char buf2181[200];
+char buf2182[200];
+char buf2183[200];
+char buf2184[200];
+char buf2185[200];
+char buf2186[200];
+char buf2187[200];
+char buf2188[200];
+char buf2189[200];
+char buf2190[200];
+char buf2191[200];
+char buf2192[200];
+char buf2193[200];
+char buf2194[200];
+char buf2195[200];
+char buf2196[200];
+char buf2197[200];
+char buf2198[200];
+char buf2199[200];
+char buf2200[200];
+char buf2201[200];
+char buf2202[200];
+char buf2203[200];
+char buf2204[200];
+char buf2205[200];
+char buf2206[200];
+char buf2207[200];
+char buf2208[200];
+char buf2209[200];
+char buf2210[200];
+char buf2211[200];
+char buf2212[200];
+char buf2213[200];
+char buf2214[200];
+char buf2215[200];
+char buf2216[200];
+char buf2217[200];
+char buf2218[200];
+char buf2219[200];
+char buf2220[200];
+char buf2221[200];
+char buf2222[200];
+char buf2223[200];
+char buf2224[200];
+char buf2225[200];
+char buf2226[200];
+char buf2227[200];
+char buf2228[200];
+char buf2229[200];
+char buf2230[200];
+char buf2231[200];
+char buf2232[200];
+char buf2233[200];
+char buf2234[200];
+char buf2235[200];
+char buf2236[200];
+char buf2237[200];
+char buf2238[200];
+char buf2239[200];
+char buf2240[200];
+char buf2241[200];
+char buf2242[200];
+char buf2243[200];
+char buf2244[200];
+char buf2245[200];
+char buf2246[200];
+char buf2247[200];
+char buf2248[200];
+char buf2249[200];
+char buf2250[200];
+char buf2251[200];
+char buf2252[200];
+char buf2253[200];
+char buf2254[200];
+char buf2255[200];
+char buf2256[200];
+char buf2257[200];
+char buf2258[200];
+char buf2259[200];
+char buf2260[200];
+char buf2261[200];
+char buf2262[200];
+char buf2263[200];
+char buf2264[200];
+char buf2265[200];
+char buf2266[200];
+char buf2267[200];
+char buf2268[200];
+char buf2269[200];
+char buf2270[200];
+char buf2271[200];
+char buf2272[200];
+char buf2273[200];
+char buf2274[200];
+char buf2275[200];
+char buf2276[200];
+char buf2277[200];
+char buf2278[200];
+char buf2279[200];
+char buf2280[200];
+char buf2281[200];
+char buf2282[200];
+char buf2283[200];
+char buf2284[200];
+char buf2285[200];
+char buf2286[200];
+char buf2287[200];
+char buf2288[200];
+char buf2289[200];
+char buf2290[200];
+char buf2291[200];
+char buf2292[200];
+char buf2293[200];
+char buf2294[200];
+char buf2295[200];
+char buf2296[200];
+char buf2297[200];
+char buf2298[200];
+char buf2299[200];
+char buf2300[200];
+char buf2301[200];
+char buf2302[200];
+char buf2303[200];
+char buf2304[200];
+char buf2305[200];
+char buf2306[200];
+char buf2307[200];
+char buf2308[200];
+char buf2309[200];
+char buf2310[200];
+char buf2311[200];
+char buf2312[200];
+char buf2313[200];
+char buf2314[200];
+char buf2315[200];
+char buf2316[200];
+char buf2317[200];
+char buf2318[200];
+char buf2319[200];
+char buf2320[200];
+char buf2321[200];
+char buf2322[200];
+char buf2323[200];
+char buf2324[200];
+char buf2325[200];
+char buf2326[200];
+char buf2327[200];
+char buf2328[200];
+char buf2329[200];
+char buf2330[200];
+char buf2331[200];
+char buf2332[200];
+char buf2333[200];
+char buf2334[200];
+char buf2335[200];
+char buf2336[200];
+char buf2337[200];
+char buf2338[200];
+char buf2339[200];
+char buf2340[200];
+char buf2341[200];
+char buf2342[200];
+char buf2343[200];
+char buf2344[200];
+char buf2345[200];
+char buf2346[200];
+char buf2347[200];
+char buf2348[200];
+char buf2349[200];
+char buf2350[200];
+char buf2351[200];
+char buf2352[200];
+char buf2353[200];
+char buf2354[200];
+char buf2355[200];
+char buf2356[200];
+char buf2357[200];
+char buf2358[200];
+char buf2359[200];
+char buf2360[200];
+char buf2361[200];
+char buf2362[200];
+char buf2363[200];
+char buf2364[200];
+char buf2365[200];
+char buf2366[200];
+char buf2367[200];
+char buf2368[200];
+char buf2369[200];
+char buf2370[200];
+char buf2371[200];
+char buf2372[200];
+char buf2373[200];
+char buf2374[200];
+char buf2375[200];
+char buf2376[200];
+char buf2377[200];
+char buf2378[200];
+char buf2379[200];
+char buf2380[200];
+char buf2381[200];
+char buf2382[200];
+char buf2383[200];
+char buf2384[200];
+char buf2385[200];
+char buf2386[200];
+char buf2387[200];
+char buf2388[200];
+char buf2389[200];
+char buf2390[200];
+char buf2391[200];
+char buf2392[200];
+char buf2393[200];
+char buf2394[200];
+char buf2395[200];
+char buf2396[200];
+char buf2397[200];
+char buf2398[200];
+char buf2399[200];
+char buf2400[200];
+char buf2401[200];
+char buf2402[200];
+char buf2403[200];
+char buf2404[200];
+char buf2405[200];
+char buf2406[200];
+char buf2407[200];
+char buf2408[200];
+char buf2409[200];
+char buf2410[200];
+char buf2411[200];
+char buf2412[200];
+char buf2413[200];
+char buf2414[200];
+char buf2415[200];
+char buf2416[200];
+char buf2417[200];
+char buf2418[200];
+char buf2419[200];
+char buf2420[200];
+char buf2421[200];
+char buf2422[200];
+char buf2423[200];
+char buf2424[200];
+char buf2425[200];
+char buf2426[200];
+char buf2427[200];
+char buf2428[200];
+char buf2429[200];
+char buf2430[200];
+char buf2431[200];
+char buf2432[200];
+char buf2433[200];
+char buf2434[200];
+char buf2435[200];
+char buf2436[200];
+char buf2437[200];
+char buf2438[200];
+char buf2439[200];
+char buf2440[200];
+char buf2441[200];
+char buf2442[200];
+char buf2443[200];
+char buf2444[200];
+char buf2445[200];
+char buf2446[200];
+char buf2447[200];
+char buf2448[200];
+char buf2449[200];
+char buf2450[200];
+char buf2451[200];
+char buf2452[200];
+char buf2453[200];
+char buf2454[200];
+char buf2455[200];
+char buf2456[200];
+char buf2457[200];
+char buf2458[200];
+char buf2459[200];
+char buf2460[200];
+char buf2461[200];
+char buf2462[200];
+char buf2463[200];
+char buf2464[200];
+char buf2465[200];
+char buf2466[200];
+char buf2467[200];
+char buf2468[200];
+char buf2469[200];
+char buf2470[200];
+char buf2471[200];
+char buf2472[200];
+char buf2473[200];
+char buf2474[200];
+char buf2475[200];
+char buf2476[200];
+char buf2477[200];
+char buf2478[200];
+char buf2479[200];
+char buf2480[200];
+char buf2481[200];
+char buf2482[200];
+char buf2483[200];
+char buf2484[200];
+char buf2485[200];
+char buf2486[200];
+char buf2487[200];
+char buf2488[200];
+char buf2489[200];
+char buf2490[200];
+char buf2491[200];
+char buf2492[200];
+char buf2493[200];
+char buf2494[200];
+char buf2495[200];
+char buf2496[200];
+char buf2497[200];
+char buf2498[200];
+char buf2499[200];
+char buf2500[200];
+char buf2501[200];
+char buf2502[200];
+char buf2503[200];
+char buf2504[200];
+char buf2505[200];
+char buf2506[200];
+char buf2507[200];
+char buf2508[200];
+char buf2509[200];
+char buf2510[200];
+char buf2511[200];
+char buf2512[200];
+char buf2513[200];
+char buf2514[200];
+char buf2515[200];
+char buf2516[200];
+char buf2517[200];
+char buf2518[200];
+char buf2519[200];
+char buf2520[200];
+char buf2521[200];
+char buf2522[200];
+char buf2523[200];
+char buf2524[200];
+char buf2525[200];
+char buf2526[200];
+char buf2527[200];
+char buf2528[200];
+char buf2529[200];
+char buf2530[200];
+char buf2531[200];
+char buf2532[200];
+char buf2533[200];
+char buf2534[200];
+char buf2535[200];
+char buf2536[200];
+char buf2537[200];
+char buf2538[200];
+char buf2539[200];
+char buf2540[200];
+char buf2541[200];
+char buf2542[200];
+char buf2543[200];
+char buf2544[200];
+char buf2545[200];
+char buf2546[200];
+char buf2547[200];
+char buf2548[200];
+char buf2549[200];
+char buf2550[200];
+char buf2551[200];
+char buf2552[200];
+char buf2553[200];
+char buf2554[200];
+char buf2555[200];
+char buf2556[200];
+char buf2557[200];
+char buf2558[200];
+char buf2559[200];
+char buf2560[200];
+char buf2561[200];
+char buf2562[200];
+char buf2563[200];
+char buf2564[200];
+char buf2565[200];
+char buf2566[200];
+char buf2567[200];
+char buf2568[200];
+char buf2569[200];
+char buf2570[200];
+char buf2571[200];
+char buf2572[200];
+char buf2573[200];
+char buf2574[200];
+char buf2575[200];
+char buf2576[200];
+char buf2577[200];
+char buf2578[200];
+char buf2579[200];
+char buf2580[200];
+char buf2581[200];
+char buf2582[200];
+char buf2583[200];
+char buf2584[200];
+char buf2585[200];
+char buf2586[200];
+char buf2587[200];
+char buf2588[200];
+char buf2589[200];
+char buf2590[200];
+char buf2591[200];
+char buf2592[200];
+char buf2593[200];
+char buf2594[200];
+char buf2595[200];
+char buf2596[200];
+char buf2597[200];
+char buf2598[200];
+char buf2599[200];
+char buf2600[200];
+
+void RS_KERNEL test(int in) {
+    *(uchar*)buf0 = abs(*(char*)buf1);
+    *(uchar2*)buf2 = abs(*(char2*)buf3);
+    *(uchar3*)buf4 = abs(*(char3*)buf5);
+    *(uchar4*)buf6 = abs(*(char4*)buf7);
+    *(ushort*)buf8 = abs(*(short*)buf9);
+    *(ushort2*)buf10 = abs(*(short2*)buf11);
+    *(ushort3*)buf12 = abs(*(short3*)buf13);
+    *(ushort4*)buf14 = abs(*(short4*)buf15);
+    *(uint*)buf16 = abs(*(int*)buf17);
+    *(uint2*)buf18 = abs(*(int2*)buf19);
+    *(uint3*)buf20 = abs(*(int3*)buf21);
+    *(uint4*)buf22 = abs(*(int4*)buf23);
+    *(float*)buf24 = acos(*(float*)buf25);
+    *(float2*)buf26 = acos(*(float2*)buf27);
+    *(float3*)buf28 = acos(*(float3*)buf29);
+    *(float4*)buf30 = acos(*(float4*)buf31);
+    *(float*)buf32 = acosh(*(float*)buf33);
+    *(float2*)buf34 = acosh(*(float2*)buf35);
+    *(float3*)buf36 = acosh(*(float3*)buf37);
+    *(float4*)buf38 = acosh(*(float4*)buf39);
+    *(float*)buf40 = acospi(*(float*)buf41);
+    *(float2*)buf42 = acospi(*(float2*)buf43);
+    *(float3*)buf44 = acospi(*(float3*)buf45);
+    *(float4*)buf46 = acospi(*(float4*)buf47);
+    *(float*)buf48 = asin(*(float*)buf49);
+    *(float2*)buf50 = asin(*(float2*)buf51);
+    *(float3*)buf52 = asin(*(float3*)buf53);
+    *(float4*)buf54 = asin(*(float4*)buf55);
+    *(float*)buf56 = asinh(*(float*)buf57);
+    *(float2*)buf58 = asinh(*(float2*)buf59);
+    *(float3*)buf60 = asinh(*(float3*)buf61);
+    *(float4*)buf62 = asinh(*(float4*)buf63);
+    *(float*)buf64 = asinpi(*(float*)buf65);
+    *(float2*)buf66 = asinpi(*(float2*)buf67);
+    *(float3*)buf68 = asinpi(*(float3*)buf69);
+    *(float4*)buf70 = asinpi(*(float4*)buf71);
+    *(float*)buf72 = atan(*(float*)buf73);
+    *(float2*)buf74 = atan(*(float2*)buf75);
+    *(float3*)buf76 = atan(*(float3*)buf77);
+    *(float4*)buf78 = atan(*(float4*)buf79);
+    *(float*)buf80 = atan2(*(float*)buf81, *(float*)buf82);
+    *(float2*)buf83 = atan2(*(float2*)buf84, *(float2*)buf85);
+    *(float3*)buf86 = atan2(*(float3*)buf87, *(float3*)buf88);
+    *(float4*)buf89 = atan2(*(float4*)buf90, *(float4*)buf91);
+    *(float*)buf92 = atan2pi(*(float*)buf93, *(float*)buf94);
+    *(float2*)buf95 = atan2pi(*(float2*)buf96, *(float2*)buf97);
+    *(float3*)buf98 = atan2pi(*(float3*)buf99, *(float3*)buf100);
+    *(float4*)buf101 = atan2pi(*(float4*)buf102, *(float4*)buf103);
+    *(float*)buf104 = atanh(*(float*)buf105);
+    *(float2*)buf106 = atanh(*(float2*)buf107);
+    *(float3*)buf108 = atanh(*(float3*)buf109);
+    *(float4*)buf110 = atanh(*(float4*)buf111);
+    *(float*)buf112 = atanpi(*(float*)buf113);
+    *(float2*)buf114 = atanpi(*(float2*)buf115);
+    *(float3*)buf116 = atanpi(*(float3*)buf117);
+    *(float4*)buf118 = atanpi(*(float4*)buf119);
+    *(float*)buf120 = cbrt(*(float*)buf121);
+    *(float2*)buf122 = cbrt(*(float2*)buf123);
+    *(float3*)buf124 = cbrt(*(float3*)buf125);
+    *(float4*)buf126 = cbrt(*(float4*)buf127);
+    *(float*)buf128 = ceil(*(float*)buf129);
+    *(float2*)buf130 = ceil(*(float2*)buf131);
+    *(float3*)buf132 = ceil(*(float3*)buf133);
+    *(float4*)buf134 = ceil(*(float4*)buf135);
+    *(float*)buf136 = clamp(*(float*)buf137, *(float*)buf138, *(float*)buf139);
+    *(float2*)buf140 = clamp(*(float2*)buf141, *(float2*)buf142, *(float2*)buf143);
+    *(float3*)buf144 = clamp(*(float3*)buf145, *(float3*)buf146, *(float3*)buf147);
+    *(float4*)buf148 = clamp(*(float4*)buf149, *(float4*)buf150, *(float4*)buf151);
+    *(float2*)buf152 = clamp(*(float2*)buf153, *(float*)buf154, *(float*)buf155);
+    *(float3*)buf156 = clamp(*(float3*)buf157, *(float*)buf158, *(float*)buf159);
+    *(float4*)buf160 = clamp(*(float4*)buf161, *(float*)buf162, *(float*)buf163);
+    *(char*)buf164 = clz(*(char*)buf165);
+    *(char2*)buf166 = clz(*(char2*)buf167);
+    *(char3*)buf168 = clz(*(char3*)buf169);
+    *(char4*)buf170 = clz(*(char4*)buf171);
+    *(uchar*)buf172 = clz(*(uchar*)buf173);
+    *(uchar2*)buf174 = clz(*(uchar2*)buf175);
+    *(uchar3*)buf176 = clz(*(uchar3*)buf177);
+    *(uchar4*)buf178 = clz(*(uchar4*)buf179);
+    *(short*)buf180 = clz(*(short*)buf181);
+    *(short2*)buf182 = clz(*(short2*)buf183);
+    *(short3*)buf184 = clz(*(short3*)buf185);
+    *(short4*)buf186 = clz(*(short4*)buf187);
+    *(ushort*)buf188 = clz(*(ushort*)buf189);
+    *(ushort2*)buf190 = clz(*(ushort2*)buf191);
+    *(ushort3*)buf192 = clz(*(ushort3*)buf193);
+    *(ushort4*)buf194 = clz(*(ushort4*)buf195);
+    *(int*)buf196 = clz(*(int*)buf197);
+    *(int2*)buf198 = clz(*(int2*)buf199);
+    *(int3*)buf200 = clz(*(int3*)buf201);
+    *(int4*)buf202 = clz(*(int4*)buf203);
+    *(uint*)buf204 = clz(*(uint*)buf205);
+    *(uint2*)buf206 = clz(*(uint2*)buf207);
+    *(uint3*)buf208 = clz(*(uint3*)buf209);
+    *(uint4*)buf210 = clz(*(uint4*)buf211);
+    *(float2*)buf212 = convert_float2(*(float2*)buf213);
+    *(float3*)buf214 = convert_float3(*(float3*)buf215);
+    *(float4*)buf216 = convert_float4(*(float4*)buf217);
+    *(float2*)buf218 = convert_float2(*(char2*)buf219);
+    *(float3*)buf220 = convert_float3(*(char3*)buf221);
+    *(float4*)buf222 = convert_float4(*(char4*)buf223);
+    *(float2*)buf224 = convert_float2(*(uchar2*)buf225);
+    *(float3*)buf226 = convert_float3(*(uchar3*)buf227);
+    *(float4*)buf228 = convert_float4(*(uchar4*)buf229);
+    *(float2*)buf230 = convert_float2(*(short2*)buf231);
+    *(float3*)buf232 = convert_float3(*(short3*)buf233);
+    *(float4*)buf234 = convert_float4(*(short4*)buf235);
+    *(float2*)buf236 = convert_float2(*(ushort2*)buf237);
+    *(float3*)buf238 = convert_float3(*(ushort3*)buf239);
+    *(float4*)buf240 = convert_float4(*(ushort4*)buf241);
+    *(float2*)buf242 = convert_float2(*(int2*)buf243);
+    *(float3*)buf244 = convert_float3(*(int3*)buf245);
+    *(float4*)buf246 = convert_float4(*(int4*)buf247);
+    *(float2*)buf248 = convert_float2(*(uint2*)buf249);
+    *(float3*)buf250 = convert_float3(*(uint3*)buf251);
+    *(float4*)buf252 = convert_float4(*(uint4*)buf253);
+    *(char2*)buf254 = convert_char2(*(float2*)buf255);
+    *(char3*)buf256 = convert_char3(*(float3*)buf257);
+    *(char4*)buf258 = convert_char4(*(float4*)buf259);
+    *(char2*)buf260 = convert_char2(*(char2*)buf261);
+    *(char3*)buf262 = convert_char3(*(char3*)buf263);
+    *(char4*)buf264 = convert_char4(*(char4*)buf265);
+    *(char2*)buf266 = convert_char2(*(uchar2*)buf267);
+    *(char3*)buf268 = convert_char3(*(uchar3*)buf269);
+    *(char4*)buf270 = convert_char4(*(uchar4*)buf271);
+    *(char2*)buf272 = convert_char2(*(short2*)buf273);
+    *(char3*)buf274 = convert_char3(*(short3*)buf275);
+    *(char4*)buf276 = convert_char4(*(short4*)buf277);
+    *(char2*)buf278 = convert_char2(*(ushort2*)buf279);
+    *(char3*)buf280 = convert_char3(*(ushort3*)buf281);
+    *(char4*)buf282 = convert_char4(*(ushort4*)buf283);
+    *(char2*)buf284 = convert_char2(*(int2*)buf285);
+    *(char3*)buf286 = convert_char3(*(int3*)buf287);
+    *(char4*)buf288 = convert_char4(*(int4*)buf289);
+    *(char2*)buf290 = convert_char2(*(uint2*)buf291);
+    *(char3*)buf292 = convert_char3(*(uint3*)buf293);
+    *(char4*)buf294 = convert_char4(*(uint4*)buf295);
+    *(uchar2*)buf296 = convert_uchar2(*(float2*)buf297);
+    *(uchar3*)buf298 = convert_uchar3(*(float3*)buf299);
+    *(uchar4*)buf300 = convert_uchar4(*(float4*)buf301);
+    *(uchar2*)buf302 = convert_uchar2(*(char2*)buf303);
+    *(uchar3*)buf304 = convert_uchar3(*(char3*)buf305);
+    *(uchar4*)buf306 = convert_uchar4(*(char4*)buf307);
+    *(uchar2*)buf308 = convert_uchar2(*(uchar2*)buf309);
+    *(uchar3*)buf310 = convert_uchar3(*(uchar3*)buf311);
+    *(uchar4*)buf312 = convert_uchar4(*(uchar4*)buf313);
+    *(uchar2*)buf314 = convert_uchar2(*(short2*)buf315);
+    *(uchar3*)buf316 = convert_uchar3(*(short3*)buf317);
+    *(uchar4*)buf318 = convert_uchar4(*(short4*)buf319);
+    *(uchar2*)buf320 = convert_uchar2(*(ushort2*)buf321);
+    *(uchar3*)buf322 = convert_uchar3(*(ushort3*)buf323);
+    *(uchar4*)buf324 = convert_uchar4(*(ushort4*)buf325);
+    *(uchar2*)buf326 = convert_uchar2(*(int2*)buf327);
+    *(uchar3*)buf328 = convert_uchar3(*(int3*)buf329);
+    *(uchar4*)buf330 = convert_uchar4(*(int4*)buf331);
+    *(uchar2*)buf332 = convert_uchar2(*(uint2*)buf333);
+    *(uchar3*)buf334 = convert_uchar3(*(uint3*)buf335);
+    *(uchar4*)buf336 = convert_uchar4(*(uint4*)buf337);
+    *(short2*)buf338 = convert_short2(*(float2*)buf339);
+    *(short3*)buf340 = convert_short3(*(float3*)buf341);
+    *(short4*)buf342 = convert_short4(*(float4*)buf343);
+    *(short2*)buf344 = convert_short2(*(char2*)buf345);
+    *(short3*)buf346 = convert_short3(*(char3*)buf347);
+    *(short4*)buf348 = convert_short4(*(char4*)buf349);
+    *(short2*)buf350 = convert_short2(*(uchar2*)buf351);
+    *(short3*)buf352 = convert_short3(*(uchar3*)buf353);
+    *(short4*)buf354 = convert_short4(*(uchar4*)buf355);
+    *(short2*)buf356 = convert_short2(*(short2*)buf357);
+    *(short3*)buf358 = convert_short3(*(short3*)buf359);
+    *(short4*)buf360 = convert_short4(*(short4*)buf361);
+    *(short2*)buf362 = convert_short2(*(ushort2*)buf363);
+    *(short3*)buf364 = convert_short3(*(ushort3*)buf365);
+    *(short4*)buf366 = convert_short4(*(ushort4*)buf367);
+    *(short2*)buf368 = convert_short2(*(int2*)buf369);
+    *(short3*)buf370 = convert_short3(*(int3*)buf371);
+    *(short4*)buf372 = convert_short4(*(int4*)buf373);
+    *(short2*)buf374 = convert_short2(*(uint2*)buf375);
+    *(short3*)buf376 = convert_short3(*(uint3*)buf377);
+    *(short4*)buf378 = convert_short4(*(uint4*)buf379);
+    *(ushort2*)buf380 = convert_ushort2(*(float2*)buf381);
+    *(ushort3*)buf382 = convert_ushort3(*(float3*)buf383);
+    *(ushort4*)buf384 = convert_ushort4(*(float4*)buf385);
+    *(ushort2*)buf386 = convert_ushort2(*(char2*)buf387);
+    *(ushort3*)buf388 = convert_ushort3(*(char3*)buf389);
+    *(ushort4*)buf390 = convert_ushort4(*(char4*)buf391);
+    *(ushort2*)buf392 = convert_ushort2(*(uchar2*)buf393);
+    *(ushort3*)buf394 = convert_ushort3(*(uchar3*)buf395);
+    *(ushort4*)buf396 = convert_ushort4(*(uchar4*)buf397);
+    *(ushort2*)buf398 = convert_ushort2(*(short2*)buf399);
+    *(ushort3*)buf400 = convert_ushort3(*(short3*)buf401);
+    *(ushort4*)buf402 = convert_ushort4(*(short4*)buf403);
+    *(ushort2*)buf404 = convert_ushort2(*(ushort2*)buf405);
+    *(ushort3*)buf406 = convert_ushort3(*(ushort3*)buf407);
+    *(ushort4*)buf408 = convert_ushort4(*(ushort4*)buf409);
+    *(ushort2*)buf410 = convert_ushort2(*(int2*)buf411);
+    *(ushort3*)buf412 = convert_ushort3(*(int3*)buf413);
+    *(ushort4*)buf414 = convert_ushort4(*(int4*)buf415);
+    *(ushort2*)buf416 = convert_ushort2(*(uint2*)buf417);
+    *(ushort3*)buf418 = convert_ushort3(*(uint3*)buf419);
+    *(ushort4*)buf420 = convert_ushort4(*(uint4*)buf421);
+    *(int2*)buf422 = convert_int2(*(float2*)buf423);
+    *(int3*)buf424 = convert_int3(*(float3*)buf425);
+    *(int4*)buf426 = convert_int4(*(float4*)buf427);
+    *(int2*)buf428 = convert_int2(*(char2*)buf429);
+    *(int3*)buf430 = convert_int3(*(char3*)buf431);
+    *(int4*)buf432 = convert_int4(*(char4*)buf433);
+    *(int2*)buf434 = convert_int2(*(uchar2*)buf435);
+    *(int3*)buf436 = convert_int3(*(uchar3*)buf437);
+    *(int4*)buf438 = convert_int4(*(uchar4*)buf439);
+    *(int2*)buf440 = convert_int2(*(short2*)buf441);
+    *(int3*)buf442 = convert_int3(*(short3*)buf443);
+    *(int4*)buf444 = convert_int4(*(short4*)buf445);
+    *(int2*)buf446 = convert_int2(*(ushort2*)buf447);
+    *(int3*)buf448 = convert_int3(*(ushort3*)buf449);
+    *(int4*)buf450 = convert_int4(*(ushort4*)buf451);
+    *(int2*)buf452 = convert_int2(*(int2*)buf453);
+    *(int3*)buf454 = convert_int3(*(int3*)buf455);
+    *(int4*)buf456 = convert_int4(*(int4*)buf457);
+    *(int2*)buf458 = convert_int2(*(uint2*)buf459);
+    *(int3*)buf460 = convert_int3(*(uint3*)buf461);
+    *(int4*)buf462 = convert_int4(*(uint4*)buf463);
+    *(uint2*)buf464 = convert_uint2(*(float2*)buf465);
+    *(uint3*)buf466 = convert_uint3(*(float3*)buf467);
+    *(uint4*)buf468 = convert_uint4(*(float4*)buf469);
+    *(uint2*)buf470 = convert_uint2(*(char2*)buf471);
+    *(uint3*)buf472 = convert_uint3(*(char3*)buf473);
+    *(uint4*)buf474 = convert_uint4(*(char4*)buf475);
+    *(uint2*)buf476 = convert_uint2(*(uchar2*)buf477);
+    *(uint3*)buf478 = convert_uint3(*(uchar3*)buf479);
+    *(uint4*)buf480 = convert_uint4(*(uchar4*)buf481);
+    *(uint2*)buf482 = convert_uint2(*(short2*)buf483);
+    *(uint3*)buf484 = convert_uint3(*(short3*)buf485);
+    *(uint4*)buf486 = convert_uint4(*(short4*)buf487);
+    *(uint2*)buf488 = convert_uint2(*(ushort2*)buf489);
+    *(uint3*)buf490 = convert_uint3(*(ushort3*)buf491);
+    *(uint4*)buf492 = convert_uint4(*(ushort4*)buf493);
+    *(uint2*)buf494 = convert_uint2(*(int2*)buf495);
+    *(uint3*)buf496 = convert_uint3(*(int3*)buf497);
+    *(uint4*)buf498 = convert_uint4(*(int4*)buf499);
+    *(uint2*)buf500 = convert_uint2(*(uint2*)buf501);
+    *(uint3*)buf502 = convert_uint3(*(uint3*)buf503);
+    *(uint4*)buf504 = convert_uint4(*(uint4*)buf505);
+    *(float*)buf506 = copysign(*(float*)buf507, *(float*)buf508);
+    *(float2*)buf509 = copysign(*(float2*)buf510, *(float2*)buf511);
+    *(float3*)buf512 = copysign(*(float3*)buf513, *(float3*)buf514);
+    *(float4*)buf515 = copysign(*(float4*)buf516, *(float4*)buf517);
+    *(float*)buf518 = cos(*(float*)buf519);
+    *(float2*)buf520 = cos(*(float2*)buf521);
+    *(float3*)buf522 = cos(*(float3*)buf523);
+    *(float4*)buf524 = cos(*(float4*)buf525);
+    *(float*)buf526 = cosh(*(float*)buf527);
+    *(float2*)buf528 = cosh(*(float2*)buf529);
+    *(float3*)buf530 = cosh(*(float3*)buf531);
+    *(float4*)buf532 = cosh(*(float4*)buf533);
+    *(float*)buf534 = cospi(*(float*)buf535);
+    *(float2*)buf536 = cospi(*(float2*)buf537);
+    *(float3*)buf538 = cospi(*(float3*)buf539);
+    *(float4*)buf540 = cospi(*(float4*)buf541);
+    *(float3*)buf542 = cross(*(float3*)buf543, *(float3*)buf544);
+    *(float4*)buf545 = cross(*(float4*)buf546, *(float4*)buf547);
+    *(float*)buf548 = degrees(*(float*)buf549);
+    *(float2*)buf550 = degrees(*(float2*)buf551);
+    *(float3*)buf552 = degrees(*(float3*)buf553);
+    *(float4*)buf554 = degrees(*(float4*)buf555);
+    *(float*)buf556 = distance(*(float*)buf557, *(float*)buf558);
+    *(float*)buf559 = distance(*(float2*)buf560, *(float2*)buf561);
+    *(float*)buf562 = distance(*(float3*)buf563, *(float3*)buf564);
+    *(float*)buf565 = distance(*(float4*)buf566, *(float4*)buf567);
+    *(float*)buf568 = dot(*(float*)buf569, *(float*)buf570);
+    *(float*)buf571 = dot(*(float2*)buf572, *(float2*)buf573);
+    *(float*)buf574 = dot(*(float3*)buf575, *(float3*)buf576);
+    *(float*)buf577 = dot(*(float4*)buf578, *(float4*)buf579);
+    *(float*)buf580 = erf(*(float*)buf581);
+    *(float2*)buf582 = erf(*(float2*)buf583);
+    *(float3*)buf584 = erf(*(float3*)buf585);
+    *(float4*)buf586 = erf(*(float4*)buf587);
+    *(float*)buf588 = erfc(*(float*)buf589);
+    *(float2*)buf590 = erfc(*(float2*)buf591);
+    *(float3*)buf592 = erfc(*(float3*)buf593);
+    *(float4*)buf594 = erfc(*(float4*)buf595);
+    *(float*)buf596 = exp(*(float*)buf597);
+    *(float2*)buf598 = exp(*(float2*)buf599);
+    *(float3*)buf600 = exp(*(float3*)buf601);
+    *(float4*)buf602 = exp(*(float4*)buf603);
+    *(float*)buf604 = exp10(*(float*)buf605);
+    *(float2*)buf606 = exp10(*(float2*)buf607);
+    *(float3*)buf608 = exp10(*(float3*)buf609);
+    *(float4*)buf610 = exp10(*(float4*)buf611);
+    *(float*)buf612 = exp2(*(float*)buf613);
+    *(float2*)buf614 = exp2(*(float2*)buf615);
+    *(float3*)buf616 = exp2(*(float3*)buf617);
+    *(float4*)buf618 = exp2(*(float4*)buf619);
+    *(float*)buf620 = expm1(*(float*)buf621);
+    *(float2*)buf622 = expm1(*(float2*)buf623);
+    *(float3*)buf624 = expm1(*(float3*)buf625);
+    *(float4*)buf626 = expm1(*(float4*)buf627);
+    *(float*)buf628 = fabs(*(float*)buf629);
+    *(float2*)buf630 = fabs(*(float2*)buf631);
+    *(float3*)buf632 = fabs(*(float3*)buf633);
+    *(float4*)buf634 = fabs(*(float4*)buf635);
+    *(float*)buf636 = fast_distance(*(float*)buf637, *(float*)buf638);
+    *(float*)buf639 = fast_distance(*(float2*)buf640, *(float2*)buf641);
+    *(float*)buf642 = fast_distance(*(float3*)buf643, *(float3*)buf644);
+    *(float*)buf645 = fast_distance(*(float4*)buf646, *(float4*)buf647);
+    *(float*)buf648 = fast_length(*(float*)buf649);
+    *(float*)buf650 = fast_length(*(float2*)buf651);
+    *(float*)buf652 = fast_length(*(float3*)buf653);
+    *(float*)buf654 = fast_length(*(float4*)buf655);
+    *(float*)buf656 = fast_normalize(*(float*)buf657);
+    *(float2*)buf658 = fast_normalize(*(float2*)buf659);
+    *(float3*)buf660 = fast_normalize(*(float3*)buf661);
+    *(float4*)buf662 = fast_normalize(*(float4*)buf663);
+    *(float*)buf664 = fdim(*(float*)buf665, *(float*)buf666);
+    *(float2*)buf667 = fdim(*(float2*)buf668, *(float2*)buf669);
+    *(float3*)buf670 = fdim(*(float3*)buf671, *(float3*)buf672);
+    *(float4*)buf673 = fdim(*(float4*)buf674, *(float4*)buf675);
+    *(float*)buf676 = floor(*(float*)buf677);
+    *(float2*)buf678 = floor(*(float2*)buf679);
+    *(float3*)buf680 = floor(*(float3*)buf681);
+    *(float4*)buf682 = floor(*(float4*)buf683);
+    *(float*)buf684 = fma(*(float*)buf685, *(float*)buf686, *(float*)buf687);
+    *(float2*)buf688 = fma(*(float2*)buf689, *(float2*)buf690, *(float2*)buf691);
+    *(float3*)buf692 = fma(*(float3*)buf693, *(float3*)buf694, *(float3*)buf695);
+    *(float4*)buf696 = fma(*(float4*)buf697, *(float4*)buf698, *(float4*)buf699);
+    *(float*)buf700 = fmax(*(float*)buf701, *(float*)buf702);
+    *(float2*)buf703 = fmax(*(float2*)buf704, *(float2*)buf705);
+    *(float3*)buf706 = fmax(*(float3*)buf707, *(float3*)buf708);
+    *(float4*)buf709 = fmax(*(float4*)buf710, *(float4*)buf711);
+    *(float2*)buf712 = fmax(*(float2*)buf713, *(float*)buf714);
+    *(float3*)buf715 = fmax(*(float3*)buf716, *(float*)buf717);
+    *(float4*)buf718 = fmax(*(float4*)buf719, *(float*)buf720);
+    *(float*)buf721 = fmin(*(float*)buf722, *(float*)buf723);
+    *(float2*)buf724 = fmin(*(float2*)buf725, *(float2*)buf726);
+    *(float3*)buf727 = fmin(*(float3*)buf728, *(float3*)buf729);
+    *(float4*)buf730 = fmin(*(float4*)buf731, *(float4*)buf732);
+    *(float2*)buf733 = fmin(*(float2*)buf734, *(float*)buf735);
+    *(float3*)buf736 = fmin(*(float3*)buf737, *(float*)buf738);
+    *(float4*)buf739 = fmin(*(float4*)buf740, *(float*)buf741);
+    *(float*)buf742 = fmod(*(float*)buf743, *(float*)buf744);
+    *(float2*)buf745 = fmod(*(float2*)buf746, *(float2*)buf747);
+    *(float3*)buf748 = fmod(*(float3*)buf749, *(float3*)buf750);
+    *(float4*)buf751 = fmod(*(float4*)buf752, *(float4*)buf753);
+    *(float*)buf754 = fract(*(float*)buf755, (float*) buf756);
+    *(float2*)buf757 = fract(*(float2*)buf758, (float2*) buf759);
+    *(float3*)buf760 = fract(*(float3*)buf761, (float3*) buf762);
+    *(float4*)buf763 = fract(*(float4*)buf764, (float4*) buf765);
+    *(float*)buf766 = fract(*(float*)buf767);
+    *(float2*)buf768 = fract(*(float2*)buf769);
+    *(float3*)buf770 = fract(*(float3*)buf771);
+    *(float4*)buf772 = fract(*(float4*)buf773);
+    *(float*)buf774 = frexp(*(float*)buf775, (int*) buf776);
+    *(float2*)buf777 = frexp(*(float2*)buf778, (int2*) buf779);
+    *(float3*)buf780 = frexp(*(float3*)buf781, (int3*) buf782);
+    *(float4*)buf783 = frexp(*(float4*)buf784, (int4*) buf785);
+    *(float*)buf786 = half_recip(*(float*)buf787);
+    *(float2*)buf788 = half_recip(*(float2*)buf789);
+    *(float3*)buf790 = half_recip(*(float3*)buf791);
+    *(float4*)buf792 = half_recip(*(float4*)buf793);
+    *(float*)buf794 = half_rsqrt(*(float*)buf795);
+    *(float2*)buf796 = half_rsqrt(*(float2*)buf797);
+    *(float3*)buf798 = half_rsqrt(*(float3*)buf799);
+    *(float4*)buf800 = half_rsqrt(*(float4*)buf801);
+    *(float*)buf802 = half_sqrt(*(float*)buf803);
+    *(float2*)buf804 = half_sqrt(*(float2*)buf805);
+    *(float3*)buf806 = half_sqrt(*(float3*)buf807);
+    *(float4*)buf808 = half_sqrt(*(float4*)buf809);
+    *(float*)buf810 = hypot(*(float*)buf811, *(float*)buf812);
+    *(float2*)buf813 = hypot(*(float2*)buf814, *(float2*)buf815);
+    *(float3*)buf816 = hypot(*(float3*)buf817, *(float3*)buf818);
+    *(float4*)buf819 = hypot(*(float4*)buf820, *(float4*)buf821);
+    *(int*)buf822 = ilogb(*(float*)buf823);
+    *(int2*)buf824 = ilogb(*(float2*)buf825);
+    *(int3*)buf826 = ilogb(*(float3*)buf827);
+    *(int4*)buf828 = ilogb(*(float4*)buf829);
+    *(float*)buf830 = ldexp(*(float*)buf831, *(int*)buf832);
+    *(float2*)buf833 = ldexp(*(float2*)buf834, *(int2*)buf835);
+    *(float3*)buf836 = ldexp(*(float3*)buf837, *(int3*)buf838);
+    *(float4*)buf839 = ldexp(*(float4*)buf840, *(int4*)buf841);
+    *(float2*)buf842 = ldexp(*(float2*)buf843, *(int*)buf844);
+    *(float3*)buf845 = ldexp(*(float3*)buf846, *(int*)buf847);
+    *(float4*)buf848 = ldexp(*(float4*)buf849, *(int*)buf850);
+    *(float*)buf851 = length(*(float*)buf852);
+    *(float*)buf853 = length(*(float2*)buf854);
+    *(float*)buf855 = length(*(float3*)buf856);
+    *(float*)buf857 = length(*(float4*)buf858);
+    *(float*)buf859 = lgamma(*(float*)buf860);
+    *(float2*)buf861 = lgamma(*(float2*)buf862);
+    *(float3*)buf863 = lgamma(*(float3*)buf864);
+    *(float4*)buf865 = lgamma(*(float4*)buf866);
+    *(float*)buf867 = lgamma(*(float*)buf868, (int*) buf869);
+    *(float2*)buf870 = lgamma(*(float2*)buf871, (int2*) buf872);
+    *(float3*)buf873 = lgamma(*(float3*)buf874, (int3*) buf875);
+    *(float4*)buf876 = lgamma(*(float4*)buf877, (int4*) buf878);
+    *(float*)buf879 = log(*(float*)buf880);
+    *(float2*)buf881 = log(*(float2*)buf882);
+    *(float3*)buf883 = log(*(float3*)buf884);
+    *(float4*)buf885 = log(*(float4*)buf886);
+    *(float*)buf887 = log10(*(float*)buf888);
+    *(float2*)buf889 = log10(*(float2*)buf890);
+    *(float3*)buf891 = log10(*(float3*)buf892);
+    *(float4*)buf893 = log10(*(float4*)buf894);
+    *(float*)buf895 = log1p(*(float*)buf896);
+    *(float2*)buf897 = log1p(*(float2*)buf898);
+    *(float3*)buf899 = log1p(*(float3*)buf900);
+    *(float4*)buf901 = log1p(*(float4*)buf902);
+    *(float*)buf903 = log2(*(float*)buf904);
+    *(float2*)buf905 = log2(*(float2*)buf906);
+    *(float3*)buf907 = log2(*(float3*)buf908);
+    *(float4*)buf909 = log2(*(float4*)buf910);
+    *(float*)buf911 = logb(*(float*)buf912);
+    *(float2*)buf913 = logb(*(float2*)buf914);
+    *(float3*)buf915 = logb(*(float3*)buf916);
+    *(float4*)buf917 = logb(*(float4*)buf918);
+    *(float*)buf919 = mad(*(float*)buf920, *(float*)buf921, *(float*)buf922);
+    *(float2*)buf923 = mad(*(float2*)buf924, *(float2*)buf925, *(float2*)buf926);
+    *(float3*)buf927 = mad(*(float3*)buf928, *(float3*)buf929, *(float3*)buf930);
+    *(float4*)buf931 = mad(*(float4*)buf932, *(float4*)buf933, *(float4*)buf934);
+    *(float*)buf935 = max(*(float*)buf936, *(float*)buf937);
+    *(float2*)buf938 = max(*(float2*)buf939, *(float2*)buf940);
+    *(float3*)buf941 = max(*(float3*)buf942, *(float3*)buf943);
+    *(float4*)buf944 = max(*(float4*)buf945, *(float4*)buf946);
+    *(float2*)buf947 = max(*(float2*)buf948, *(float*)buf949);
+    *(float3*)buf950 = max(*(float3*)buf951, *(float*)buf952);
+    *(float4*)buf953 = max(*(float4*)buf954, *(float*)buf955);
+    *(char*)buf956 = max(*(char*)buf957, *(char*)buf958);
+    *(uchar*)buf959 = max(*(uchar*)buf960, *(uchar*)buf961);
+    *(short*)buf962 = max(*(short*)buf963, *(short*)buf964);
+    *(ushort*)buf965 = max(*(ushort*)buf966, *(ushort*)buf967);
+    *(int*)buf968 = max(*(int*)buf969, *(int*)buf970);
+    *(uint*)buf971 = max(*(uint*)buf972, *(uint*)buf973);
+    *(char2*)buf974 = max(*(char2*)buf975, *(char2*)buf976);
+    *(uchar2*)buf977 = max(*(uchar2*)buf978, *(uchar2*)buf979);
+    *(short2*)buf980 = max(*(short2*)buf981, *(short2*)buf982);
+    *(ushort2*)buf983 = max(*(ushort2*)buf984, *(ushort2*)buf985);
+    *(int2*)buf986 = max(*(int2*)buf987, *(int2*)buf988);
+    *(uint2*)buf989 = max(*(uint2*)buf990, *(uint2*)buf991);
+    *(char3*)buf992 = max(*(char3*)buf993, *(char3*)buf994);
+    *(uchar3*)buf995 = max(*(uchar3*)buf996, *(uchar3*)buf997);
+    *(short3*)buf998 = max(*(short3*)buf999, *(short3*)buf1000);
+    *(ushort3*)buf1001 = max(*(ushort3*)buf1002, *(ushort3*)buf1003);
+    *(int3*)buf1004 = max(*(int3*)buf1005, *(int3*)buf1006);
+    *(uint3*)buf1007 = max(*(uint3*)buf1008, *(uint3*)buf1009);
+    *(char4*)buf1010 = max(*(char4*)buf1011, *(char4*)buf1012);
+    *(uchar4*)buf1013 = max(*(uchar4*)buf1014, *(uchar4*)buf1015);
+    *(short4*)buf1016 = max(*(short4*)buf1017, *(short4*)buf1018);
+    *(ushort4*)buf1019 = max(*(ushort4*)buf1020, *(ushort4*)buf1021);
+    *(int4*)buf1022 = max(*(int4*)buf1023, *(int4*)buf1024);
+    *(uint4*)buf1025 = max(*(uint4*)buf1026, *(uint4*)buf1027);
+    *(float*)buf1028 = min(*(float*)buf1029, *(float*)buf1030);
+    *(float2*)buf1031 = min(*(float2*)buf1032, *(float2*)buf1033);
+    *(float3*)buf1034 = min(*(float3*)buf1035, *(float3*)buf1036);
+    *(float4*)buf1037 = min(*(float4*)buf1038, *(float4*)buf1039);
+    *(float2*)buf1040 = min(*(float2*)buf1041, *(float*)buf1042);
+    *(float3*)buf1043 = min(*(float3*)buf1044, *(float*)buf1045);
+    *(float4*)buf1046 = min(*(float4*)buf1047, *(float*)buf1048);
+    *(char*)buf1049 = min(*(char*)buf1050, *(char*)buf1051);
+    *(uchar*)buf1052 = min(*(uchar*)buf1053, *(uchar*)buf1054);
+    *(short*)buf1055 = min(*(short*)buf1056, *(short*)buf1057);
+    *(ushort*)buf1058 = min(*(ushort*)buf1059, *(ushort*)buf1060);
+    *(int*)buf1061 = min(*(int*)buf1062, *(int*)buf1063);
+    *(uint*)buf1064 = min(*(uint*)buf1065, *(uint*)buf1066);
+    *(char2*)buf1067 = min(*(char2*)buf1068, *(char2*)buf1069);
+    *(uchar2*)buf1070 = min(*(uchar2*)buf1071, *(uchar2*)buf1072);
+    *(short2*)buf1073 = min(*(short2*)buf1074, *(short2*)buf1075);
+    *(ushort2*)buf1076 = min(*(ushort2*)buf1077, *(ushort2*)buf1078);
+    *(int2*)buf1079 = min(*(int2*)buf1080, *(int2*)buf1081);
+    *(uint2*)buf1082 = min(*(uint2*)buf1083, *(uint2*)buf1084);
+    *(char3*)buf1085 = min(*(char3*)buf1086, *(char3*)buf1087);
+    *(uchar3*)buf1088 = min(*(uchar3*)buf1089, *(uchar3*)buf1090);
+    *(short3*)buf1091 = min(*(short3*)buf1092, *(short3*)buf1093);
+    *(ushort3*)buf1094 = min(*(ushort3*)buf1095, *(ushort3*)buf1096);
+    *(int3*)buf1097 = min(*(int3*)buf1098, *(int3*)buf1099);
+    *(uint3*)buf1100 = min(*(uint3*)buf1101, *(uint3*)buf1102);
+    *(char4*)buf1103 = min(*(char4*)buf1104, *(char4*)buf1105);
+    *(uchar4*)buf1106 = min(*(uchar4*)buf1107, *(uchar4*)buf1108);
+    *(short4*)buf1109 = min(*(short4*)buf1110, *(short4*)buf1111);
+    *(ushort4*)buf1112 = min(*(ushort4*)buf1113, *(ushort4*)buf1114);
+    *(int4*)buf1115 = min(*(int4*)buf1116, *(int4*)buf1117);
+    *(uint4*)buf1118 = min(*(uint4*)buf1119, *(uint4*)buf1120);
+    *(float*)buf1121 = mix(*(float*)buf1122, *(float*)buf1123, *(float*)buf1124);
+    *(float2*)buf1125 = mix(*(float2*)buf1126, *(float2*)buf1127, *(float2*)buf1128);
+    *(float3*)buf1129 = mix(*(float3*)buf1130, *(float3*)buf1131, *(float3*)buf1132);
+    *(float4*)buf1133 = mix(*(float4*)buf1134, *(float4*)buf1135, *(float4*)buf1136);
+    *(float2*)buf1137 = mix(*(float2*)buf1138, *(float2*)buf1139, *(float*)buf1140);
+    *(float3*)buf1141 = mix(*(float3*)buf1142, *(float3*)buf1143, *(float*)buf1144);
+    *(float4*)buf1145 = mix(*(float4*)buf1146, *(float4*)buf1147, *(float*)buf1148);
+    *(float*)buf1149 = modf(*(float*)buf1150, (float*) buf1151);
+    *(float2*)buf1152 = modf(*(float2*)buf1153, (float2*) buf1154);
+    *(float3*)buf1155 = modf(*(float3*)buf1156, (float3*) buf1157);
+    *(float4*)buf1158 = modf(*(float4*)buf1159, (float4*) buf1160);
+    *(float*)buf1161 = nan(*(uint*)buf1162);
+    *(float*)buf1163 = nextafter(*(float*)buf1164, *(float*)buf1165);
+    *(float2*)buf1166 = nextafter(*(float2*)buf1167, *(float2*)buf1168);
+    *(float3*)buf1169 = nextafter(*(float3*)buf1170, *(float3*)buf1171);
+    *(float4*)buf1172 = nextafter(*(float4*)buf1173, *(float4*)buf1174);
+    *(float*)buf1175 = normalize(*(float*)buf1176);
+    *(float2*)buf1177 = normalize(*(float2*)buf1178);
+    *(float3*)buf1179 = normalize(*(float3*)buf1180);
+    *(float4*)buf1181 = normalize(*(float4*)buf1182);
+    *(float*)buf1183 = pow(*(float*)buf1184, *(float*)buf1185);
+    *(float2*)buf1186 = pow(*(float2*)buf1187, *(float2*)buf1188);
+    *(float3*)buf1189 = pow(*(float3*)buf1190, *(float3*)buf1191);
+    *(float4*)buf1192 = pow(*(float4*)buf1193, *(float4*)buf1194);
+    *(float*)buf1195 = pown(*(float*)buf1196, *(int*)buf1197);
+    *(float2*)buf1198 = pown(*(float2*)buf1199, *(int2*)buf1200);
+    *(float3*)buf1201 = pown(*(float3*)buf1202, *(int3*)buf1203);
+    *(float4*)buf1204 = pown(*(float4*)buf1205, *(int4*)buf1206);
+    *(float*)buf1207 = powr(*(float*)buf1208, *(float*)buf1209);
+    *(float2*)buf1210 = powr(*(float2*)buf1211, *(float2*)buf1212);
+    *(float3*)buf1213 = powr(*(float3*)buf1214, *(float3*)buf1215);
+    *(float4*)buf1216 = powr(*(float4*)buf1217, *(float4*)buf1218);
+    *(float*)buf1219 = radians(*(float*)buf1220);
+    *(float2*)buf1221 = radians(*(float2*)buf1222);
+    *(float3*)buf1223 = radians(*(float3*)buf1224);
+    *(float4*)buf1225 = radians(*(float4*)buf1226);
+    *(float*)buf1227 = remainder(*(float*)buf1228, *(float*)buf1229);
+    *(float2*)buf1230 = remainder(*(float2*)buf1231, *(float2*)buf1232);
+    *(float3*)buf1233 = remainder(*(float3*)buf1234, *(float3*)buf1235);
+    *(float4*)buf1236 = remainder(*(float4*)buf1237, *(float4*)buf1238);
+    *(float*)buf1239 = remquo(*(float*)buf1240, *(float*)buf1241, (int*) buf1242);
+    *(float2*)buf1243 = remquo(*(float2*)buf1244, *(float2*)buf1245, (int2*) buf1246);
+    *(float3*)buf1247 = remquo(*(float3*)buf1248, *(float3*)buf1249, (int3*) buf1250);
+    *(float4*)buf1251 = remquo(*(float4*)buf1252, *(float4*)buf1253, (int4*) buf1254);
+    *(float*)buf1255 = rint(*(float*)buf1256);
+    *(float2*)buf1257 = rint(*(float2*)buf1258);
+    *(float3*)buf1259 = rint(*(float3*)buf1260);
+    *(float4*)buf1261 = rint(*(float4*)buf1262);
+    *(float*)buf1263 = rootn(*(float*)buf1264, *(int*)buf1265);
+    *(float2*)buf1266 = rootn(*(float2*)buf1267, *(int2*)buf1268);
+    *(float3*)buf1269 = rootn(*(float3*)buf1270, *(int3*)buf1271);
+    *(float4*)buf1272 = rootn(*(float4*)buf1273, *(int4*)buf1274);
+    *(float*)buf1275 = round(*(float*)buf1276);
+    *(float2*)buf1277 = round(*(float2*)buf1278);
+    *(float3*)buf1279 = round(*(float3*)buf1280);
+    *(float4*)buf1281 = round(*(float4*)buf1282);
+    rsAllocationCopy1DRange(*(rs_allocation*)buf1283, *(uint32_t*)buf1284, *(uint32_t*)buf1285, *(uint32_t*)buf1286, *(rs_allocation*)buf1287, *(uint32_t*)buf1288, *(uint32_t*)buf1289);
+    rsAllocationCopy2DRange(*(rs_allocation*)buf1290, *(uint32_t*)buf1291, *(uint32_t*)buf1292, *(uint32_t*)buf1293, *(rs_allocation_cubemap_face*)buf1294, *(uint32_t*)buf1295, *(uint32_t*)buf1296, *(rs_allocation*)buf1297, *(uint32_t*)buf1298, *(uint32_t*)buf1299, *(uint32_t*)buf1300, *(rs_allocation_cubemap_face*)buf1301);
+    *(uint32_t*)buf1302 = rsAllocationGetDimFaces(*(rs_allocation*)buf1303);
+    *(uint32_t*)buf1304 = rsAllocationGetDimLOD(*(rs_allocation*)buf1305);
+    *(uint32_t*)buf1306 = rsAllocationGetDimX(*(rs_allocation*)buf1307);
+    *(uint32_t*)buf1308 = rsAllocationGetDimY(*(rs_allocation*)buf1309);
+    *(uint32_t*)buf1310 = rsAllocationGetDimZ(*(rs_allocation*)buf1311);
+    *(rs_element*)buf1312 = rsAllocationGetElement(*(rs_allocation*)buf1313);
+    rsAllocationIoReceive(*(rs_allocation*)buf1314);
+    rsAllocationIoSend(*(rs_allocation*)buf1315);
+    *(int32_t*)buf1316 = rsAtomicAdd((volatile int32_t*) buf1317, *(int32_t*)buf1318);
+    *(int32_t*)buf1319 = rsAtomicAnd((volatile int32_t*) buf1320, *(int32_t*)buf1321);
+    *(int32_t*)buf1322 = rsAtomicCas((volatile int32_t*) buf1323, *(int32_t*)buf1324, *(int32_t*)buf1325);
+    *(uint32_t*)buf1326 = rsAtomicCas((volatile uint32_t*) buf1327, *(uint32_t*)buf1328, *(uint32_t*)buf1329);
+    *(int32_t*)buf1330 = rsAtomicDec((volatile int32_t*) buf1331);
+    *(int32_t*)buf1332 = rsAtomicInc((volatile int32_t*) buf1333);
+    *(uint32_t*)buf1334 = rsAtomicMax((volatile uint32_t*) buf1335, *(uint32_t*)buf1336);
+    *(int32_t*)buf1337 = rsAtomicMax((volatile int32_t*) buf1338, *(int32_t*)buf1339);
+    *(uint32_t*)buf1340 = rsAtomicMin((volatile uint32_t*) buf1341, *(uint32_t*)buf1342);
+    *(int32_t*)buf1343 = rsAtomicMin((volatile int32_t*) buf1344, *(int32_t*)buf1345);
+    *(int32_t*)buf1346 = rsAtomicOr((volatile int32_t*) buf1347, *(int32_t*)buf1348);
+    *(int32_t*)buf1349 = rsAtomicSub((volatile int32_t*) buf1350, *(int32_t*)buf1351);
+    *(int32_t*)buf1352 = rsAtomicXor((volatile int32_t*) buf1353, *(int32_t*)buf1354);
+    *(char*)buf1355 = rsClamp(*(char*)buf1356, *(char*)buf1357, *(char*)buf1358);
+    *(uchar*)buf1359 = rsClamp(*(uchar*)buf1360, *(uchar*)buf1361, *(uchar*)buf1362);
+    *(short*)buf1363 = rsClamp(*(short*)buf1364, *(short*)buf1365, *(short*)buf1366);
+    *(ushort*)buf1367 = rsClamp(*(ushort*)buf1368, *(ushort*)buf1369, *(ushort*)buf1370);
+    *(int*)buf1371 = rsClamp(*(int*)buf1372, *(int*)buf1373, *(int*)buf1374);
+    *(uint*)buf1375 = rsClamp(*(uint*)buf1376, *(uint*)buf1377, *(uint*)buf1378);
+    rsClearObject((rs_element*) buf1379);
+    rsClearObject((rs_type*) buf1380);
+    rsClearObject((rs_allocation*) buf1381);
+    rsClearObject((rs_sampler*) buf1382);
+    rsClearObject((rs_script*) buf1383);
+#ifndef __LP64__
+    rsClearObject((rs_mesh*) buf1384);
+    rsClearObject((rs_program_fragment*) buf1385);
+    rsClearObject((rs_program_vertex*) buf1386);
+    rsClearObject((rs_program_raster*) buf1387);
+    rsClearObject((rs_program_store*) buf1388);
+    rsClearObject((rs_font*) buf1389);
+#endif
+    rsDebug((const char*) buf1390, *(double*)buf1391);
+    rsDebug((const char*) buf1392, *(int*)buf1393);
+    rsDebug((const char*) buf1394, *(uint*)buf1395);
+    rsDebug((const char*) buf1396, *(long*)buf1397);
+    rsDebug((const char*) buf1398, *(ulong*)buf1399);
+    rsDebug((const char*) buf1400, *(int2*)buf1401);
+    rsDebug((const char*) buf1402, *(int3*)buf1403);
+    rsDebug((const char*) buf1404, *(int4*)buf1405);
+    rsDebug((const char*) buf1406, *(uint2*)buf1407);
+    rsDebug((const char*) buf1408, *(uint3*)buf1409);
+    rsDebug((const char*) buf1410, *(uint4*)buf1411);
+    rsDebug((const char*) buf1412, *(long2*)buf1413);
+    rsDebug((const char*) buf1414, *(long3*)buf1415);
+    rsDebug((const char*) buf1416, *(long4*)buf1417);
+    rsDebug((const char*) buf1418, *(ulong2*)buf1419);
+    rsDebug((const char*) buf1420, *(ulong3*)buf1421);
+    rsDebug((const char*) buf1422, *(ulong4*)buf1423);
+    rsDebug((const char*) buf1424, *(float*)buf1425);
+    rsDebug((const char*) buf1426, *(float2*)buf1427);
+    rsDebug((const char*) buf1428, *(float3*)buf1429);
+    rsDebug((const char*) buf1430, *(float4*)buf1431);
+    rsDebug((const char*) buf1432, *(char*)buf1433);
+    rsDebug((const char*) buf1434, *(char2*)buf1435);
+    rsDebug((const char*) buf1436, *(char3*)buf1437);
+    rsDebug((const char*) buf1438, *(char4*)buf1439);
+    rsDebug((const char*) buf1440, *(uchar*)buf1441);
+    rsDebug((const char*) buf1442, *(uchar2*)buf1443);
+    rsDebug((const char*) buf1444, *(uchar3*)buf1445);
+    rsDebug((const char*) buf1446, *(uchar4*)buf1447);
+    rsDebug((const char*) buf1448, *(short*)buf1449);
+    rsDebug((const char*) buf1450, *(short2*)buf1451);
+    rsDebug((const char*) buf1452, *(short3*)buf1453);
+    rsDebug((const char*) buf1454, *(short4*)buf1455);
+    rsDebug((const char*) buf1456, *(ushort*)buf1457);
+    rsDebug((const char*) buf1458, *(ushort2*)buf1459);
+    rsDebug((const char*) buf1460, *(ushort3*)buf1461);
+    rsDebug((const char*) buf1462, *(ushort4*)buf1463);
+    rsDebug((const char*) buf1464, *(float*)buf1465, *(float*)buf1466);
+    rsDebug((const char*) buf1467, *(float*)buf1468, *(float*)buf1469, *(float*)buf1470);
+    rsDebug((const char*) buf1471, *(float*)buf1472, *(float*)buf1473, *(float*)buf1474, *(float*)buf1475);
+    rsDebug((const char*) buf1476, *(long long*)buf1477);
+    rsDebug((const char*) buf1478, *(unsigned long long*)buf1479);
+    rsDebug((const char*) buf1480, (const void*) buf1481);
+    rsDebug((const char*) buf1482, (const rs_matrix4x4*) buf1483);
+    rsDebug((const char*) buf1484, (const rs_matrix3x3*) buf1485);
+    rsDebug((const char*) buf1486, (const rs_matrix2x2*) buf1487);
+    *(uint32_t*)buf1488 = rsElementGetBytesSize(*(rs_element*)buf1489);
+    *(rs_data_kind*)buf1490 = rsElementGetDataKind(*(rs_element*)buf1491);
+    *(rs_data_type*)buf1492 = rsElementGetDataType(*(rs_element*)buf1493);
+    *(rs_element*)buf1494 = rsElementGetSubElement(*(rs_element*)buf1495, *(uint32_t*)buf1496);
+    *(uint32_t*)buf1497 = rsElementGetSubElementArraySize(*(rs_element*)buf1498, *(uint32_t*)buf1499);
+    *(uint32_t*)buf1500 = rsElementGetSubElementCount(*(rs_element*)buf1501);
+    *(uint32_t*)buf1502 = rsElementGetSubElementName(*(rs_element*)buf1503, *(uint32_t*)buf1504, (char*) buf1505, *(uint32_t*)buf1506);
+    *(uint32_t*)buf1507 = rsElementGetSubElementNameLength(*(rs_element*)buf1508, *(uint32_t*)buf1509);
+    *(uint32_t*)buf1510 = rsElementGetSubElementOffsetBytes(*(rs_element*)buf1511, *(uint32_t*)buf1512);
+    *(uint32_t*)buf1513 = rsElementGetVectorSize(*(rs_element*)buf1514);
+    rsExtractFrustumPlanes((const rs_matrix4x4*) buf1515, (float4*) buf1516, (float4*) buf1517, (float4*) buf1518, (float4*) buf1519, (float4*) buf1520, (float4*) buf1521);
+    rsForEach(*(rs_script*)buf1522, *(rs_allocation*)buf1523, *(rs_allocation*)buf1524, (const void*) buf1525, *(size_t*)buf1526, (const rs_script_call_t*) buf1527);
+    rsForEach(*(rs_script*)buf1528, *(rs_allocation*)buf1529, *(rs_allocation*)buf1530, (const void*) buf1531, *(size_t*)buf1532);
+    rsForEach(*(rs_script*)buf1533, *(rs_allocation*)buf1534, *(rs_allocation*)buf1535);
+    *(float*)buf1536 = rsFrac(*(float*)buf1537);
+    *(rs_allocation*)buf1538 = rsGetAllocation((const void*) buf1539);
+    *(float*)buf1540 = rsGetDt();
+    *(const void**)buf1541 = rsGetElementAt(*(rs_allocation*)buf1542, *(uint32_t*)buf1543);
+    *(const void**)buf1544 = rsGetElementAt(*(rs_allocation*)buf1545, *(uint32_t*)buf1546, *(uint32_t*)buf1547);
+    *(const void**)buf1548 = rsGetElementAt(*(rs_allocation*)buf1549, *(uint32_t*)buf1550, *(uint32_t*)buf1551, *(uint32_t*)buf1552);
+    *(float*)buf1553 = rsGetElementAt_float(*(rs_allocation*)buf1554, *(uint32_t*)buf1555);
+    *(float2*)buf1556 = rsGetElementAt_float2(*(rs_allocation*)buf1557, *(uint32_t*)buf1558);
+    *(float3*)buf1559 = rsGetElementAt_float3(*(rs_allocation*)buf1560, *(uint32_t*)buf1561);
+    *(float4*)buf1562 = rsGetElementAt_float4(*(rs_allocation*)buf1563, *(uint32_t*)buf1564);
+    *(double*)buf1565 = rsGetElementAt_double(*(rs_allocation*)buf1566, *(uint32_t*)buf1567);
+    *(double2*)buf1568 = rsGetElementAt_double2(*(rs_allocation*)buf1569, *(uint32_t*)buf1570);
+    *(double3*)buf1571 = rsGetElementAt_double3(*(rs_allocation*)buf1572, *(uint32_t*)buf1573);
+    *(double4*)buf1574 = rsGetElementAt_double4(*(rs_allocation*)buf1575, *(uint32_t*)buf1576);
+    *(char*)buf1577 = rsGetElementAt_char(*(rs_allocation*)buf1578, *(uint32_t*)buf1579);
+    *(char2*)buf1580 = rsGetElementAt_char2(*(rs_allocation*)buf1581, *(uint32_t*)buf1582);
+    *(char3*)buf1583 = rsGetElementAt_char3(*(rs_allocation*)buf1584, *(uint32_t*)buf1585);
+    *(char4*)buf1586 = rsGetElementAt_char4(*(rs_allocation*)buf1587, *(uint32_t*)buf1588);
+    *(uchar*)buf1589 = rsGetElementAt_uchar(*(rs_allocation*)buf1590, *(uint32_t*)buf1591);
+    *(uchar2*)buf1592 = rsGetElementAt_uchar2(*(rs_allocation*)buf1593, *(uint32_t*)buf1594);
+    *(uchar3*)buf1595 = rsGetElementAt_uchar3(*(rs_allocation*)buf1596, *(uint32_t*)buf1597);
+    *(uchar4*)buf1598 = rsGetElementAt_uchar4(*(rs_allocation*)buf1599, *(uint32_t*)buf1600);
+    *(short*)buf1601 = rsGetElementAt_short(*(rs_allocation*)buf1602, *(uint32_t*)buf1603);
+    *(short2*)buf1604 = rsGetElementAt_short2(*(rs_allocation*)buf1605, *(uint32_t*)buf1606);
+    *(short3*)buf1607 = rsGetElementAt_short3(*(rs_allocation*)buf1608, *(uint32_t*)buf1609);
+    *(short4*)buf1610 = rsGetElementAt_short4(*(rs_allocation*)buf1611, *(uint32_t*)buf1612);
+    *(ushort*)buf1613 = rsGetElementAt_ushort(*(rs_allocation*)buf1614, *(uint32_t*)buf1615);
+    *(ushort2*)buf1616 = rsGetElementAt_ushort2(*(rs_allocation*)buf1617, *(uint32_t*)buf1618);
+    *(ushort3*)buf1619 = rsGetElementAt_ushort3(*(rs_allocation*)buf1620, *(uint32_t*)buf1621);
+    *(ushort4*)buf1622 = rsGetElementAt_ushort4(*(rs_allocation*)buf1623, *(uint32_t*)buf1624);
+    *(int*)buf1625 = rsGetElementAt_int(*(rs_allocation*)buf1626, *(uint32_t*)buf1627);
+    *(int2*)buf1628 = rsGetElementAt_int2(*(rs_allocation*)buf1629, *(uint32_t*)buf1630);
+    *(int3*)buf1631 = rsGetElementAt_int3(*(rs_allocation*)buf1632, *(uint32_t*)buf1633);
+    *(int4*)buf1634 = rsGetElementAt_int4(*(rs_allocation*)buf1635, *(uint32_t*)buf1636);
+    *(uint*)buf1637 = rsGetElementAt_uint(*(rs_allocation*)buf1638, *(uint32_t*)buf1639);
+    *(uint2*)buf1640 = rsGetElementAt_uint2(*(rs_allocation*)buf1641, *(uint32_t*)buf1642);
+    *(uint3*)buf1643 = rsGetElementAt_uint3(*(rs_allocation*)buf1644, *(uint32_t*)buf1645);
+    *(uint4*)buf1646 = rsGetElementAt_uint4(*(rs_allocation*)buf1647, *(uint32_t*)buf1648);
+    *(long*)buf1649 = rsGetElementAt_long(*(rs_allocation*)buf1650, *(uint32_t*)buf1651);
+    *(long2*)buf1652 = rsGetElementAt_long2(*(rs_allocation*)buf1653, *(uint32_t*)buf1654);
+    *(long3*)buf1655 = rsGetElementAt_long3(*(rs_allocation*)buf1656, *(uint32_t*)buf1657);
+    *(long4*)buf1658 = rsGetElementAt_long4(*(rs_allocation*)buf1659, *(uint32_t*)buf1660);
+    *(ulong*)buf1661 = rsGetElementAt_ulong(*(rs_allocation*)buf1662, *(uint32_t*)buf1663);
+    *(ulong2*)buf1664 = rsGetElementAt_ulong2(*(rs_allocation*)buf1665, *(uint32_t*)buf1666);
+    *(ulong3*)buf1667 = rsGetElementAt_ulong3(*(rs_allocation*)buf1668, *(uint32_t*)buf1669);
+    *(ulong4*)buf1670 = rsGetElementAt_ulong4(*(rs_allocation*)buf1671, *(uint32_t*)buf1672);
+    *(float*)buf1673 = rsGetElementAt_float(*(rs_allocation*)buf1674, *(uint32_t*)buf1675, *(uint32_t*)buf1676);
+    *(float2*)buf1677 = rsGetElementAt_float2(*(rs_allocation*)buf1678, *(uint32_t*)buf1679, *(uint32_t*)buf1680);
+    *(float3*)buf1681 = rsGetElementAt_float3(*(rs_allocation*)buf1682, *(uint32_t*)buf1683, *(uint32_t*)buf1684);
+    *(float4*)buf1685 = rsGetElementAt_float4(*(rs_allocation*)buf1686, *(uint32_t*)buf1687, *(uint32_t*)buf1688);
+    *(double*)buf1689 = rsGetElementAt_double(*(rs_allocation*)buf1690, *(uint32_t*)buf1691, *(uint32_t*)buf1692);
+    *(double2*)buf1693 = rsGetElementAt_double2(*(rs_allocation*)buf1694, *(uint32_t*)buf1695, *(uint32_t*)buf1696);
+    *(double3*)buf1697 = rsGetElementAt_double3(*(rs_allocation*)buf1698, *(uint32_t*)buf1699, *(uint32_t*)buf1700);
+    *(double4*)buf1701 = rsGetElementAt_double4(*(rs_allocation*)buf1702, *(uint32_t*)buf1703, *(uint32_t*)buf1704);
+    *(char*)buf1705 = rsGetElementAt_char(*(rs_allocation*)buf1706, *(uint32_t*)buf1707, *(uint32_t*)buf1708);
+    *(char2*)buf1709 = rsGetElementAt_char2(*(rs_allocation*)buf1710, *(uint32_t*)buf1711, *(uint32_t*)buf1712);
+    *(char3*)buf1713 = rsGetElementAt_char3(*(rs_allocation*)buf1714, *(uint32_t*)buf1715, *(uint32_t*)buf1716);
+    *(char4*)buf1717 = rsGetElementAt_char4(*(rs_allocation*)buf1718, *(uint32_t*)buf1719, *(uint32_t*)buf1720);
+    *(uchar*)buf1721 = rsGetElementAt_uchar(*(rs_allocation*)buf1722, *(uint32_t*)buf1723, *(uint32_t*)buf1724);
+    *(uchar2*)buf1725 = rsGetElementAt_uchar2(*(rs_allocation*)buf1726, *(uint32_t*)buf1727, *(uint32_t*)buf1728);
+    *(uchar3*)buf1729 = rsGetElementAt_uchar3(*(rs_allocation*)buf1730, *(uint32_t*)buf1731, *(uint32_t*)buf1732);
+    *(uchar4*)buf1733 = rsGetElementAt_uchar4(*(rs_allocation*)buf1734, *(uint32_t*)buf1735, *(uint32_t*)buf1736);
+    *(short*)buf1737 = rsGetElementAt_short(*(rs_allocation*)buf1738, *(uint32_t*)buf1739, *(uint32_t*)buf1740);
+    *(short2*)buf1741 = rsGetElementAt_short2(*(rs_allocation*)buf1742, *(uint32_t*)buf1743, *(uint32_t*)buf1744);
+    *(short3*)buf1745 = rsGetElementAt_short3(*(rs_allocation*)buf1746, *(uint32_t*)buf1747, *(uint32_t*)buf1748);
+    *(short4*)buf1749 = rsGetElementAt_short4(*(rs_allocation*)buf1750, *(uint32_t*)buf1751, *(uint32_t*)buf1752);
+    *(ushort*)buf1753 = rsGetElementAt_ushort(*(rs_allocation*)buf1754, *(uint32_t*)buf1755, *(uint32_t*)buf1756);
+    *(ushort2*)buf1757 = rsGetElementAt_ushort2(*(rs_allocation*)buf1758, *(uint32_t*)buf1759, *(uint32_t*)buf1760);
+    *(ushort3*)buf1761 = rsGetElementAt_ushort3(*(rs_allocation*)buf1762, *(uint32_t*)buf1763, *(uint32_t*)buf1764);
+    *(ushort4*)buf1765 = rsGetElementAt_ushort4(*(rs_allocation*)buf1766, *(uint32_t*)buf1767, *(uint32_t*)buf1768);
+    *(int*)buf1769 = rsGetElementAt_int(*(rs_allocation*)buf1770, *(uint32_t*)buf1771, *(uint32_t*)buf1772);
+    *(int2*)buf1773 = rsGetElementAt_int2(*(rs_allocation*)buf1774, *(uint32_t*)buf1775, *(uint32_t*)buf1776);
+    *(int3*)buf1777 = rsGetElementAt_int3(*(rs_allocation*)buf1778, *(uint32_t*)buf1779, *(uint32_t*)buf1780);
+    *(int4*)buf1781 = rsGetElementAt_int4(*(rs_allocation*)buf1782, *(uint32_t*)buf1783, *(uint32_t*)buf1784);
+    *(uint*)buf1785 = rsGetElementAt_uint(*(rs_allocation*)buf1786, *(uint32_t*)buf1787, *(uint32_t*)buf1788);
+    *(uint2*)buf1789 = rsGetElementAt_uint2(*(rs_allocation*)buf1790, *(uint32_t*)buf1791, *(uint32_t*)buf1792);
+    *(uint3*)buf1793 = rsGetElementAt_uint3(*(rs_allocation*)buf1794, *(uint32_t*)buf1795, *(uint32_t*)buf1796);
+    *(uint4*)buf1797 = rsGetElementAt_uint4(*(rs_allocation*)buf1798, *(uint32_t*)buf1799, *(uint32_t*)buf1800);
+    *(long*)buf1801 = rsGetElementAt_long(*(rs_allocation*)buf1802, *(uint32_t*)buf1803, *(uint32_t*)buf1804);
+    *(long2*)buf1805 = rsGetElementAt_long2(*(rs_allocation*)buf1806, *(uint32_t*)buf1807, *(uint32_t*)buf1808);
+    *(long3*)buf1809 = rsGetElementAt_long3(*(rs_allocation*)buf1810, *(uint32_t*)buf1811, *(uint32_t*)buf1812);
+    *(long4*)buf1813 = rsGetElementAt_long4(*(rs_allocation*)buf1814, *(uint32_t*)buf1815, *(uint32_t*)buf1816);
+    *(ulong*)buf1817 = rsGetElementAt_ulong(*(rs_allocation*)buf1818, *(uint32_t*)buf1819, *(uint32_t*)buf1820);
+    *(ulong2*)buf1821 = rsGetElementAt_ulong2(*(rs_allocation*)buf1822, *(uint32_t*)buf1823, *(uint32_t*)buf1824);
+    *(ulong3*)buf1825 = rsGetElementAt_ulong3(*(rs_allocation*)buf1826, *(uint32_t*)buf1827, *(uint32_t*)buf1828);
+    *(ulong4*)buf1829 = rsGetElementAt_ulong4(*(rs_allocation*)buf1830, *(uint32_t*)buf1831, *(uint32_t*)buf1832);
+    *(float*)buf1833 = rsGetElementAt_float(*(rs_allocation*)buf1834, *(uint32_t*)buf1835, *(uint32_t*)buf1836, *(uint32_t*)buf1837);
+    *(float2*)buf1838 = rsGetElementAt_float2(*(rs_allocation*)buf1839, *(uint32_t*)buf1840, *(uint32_t*)buf1841, *(uint32_t*)buf1842);
+    *(float3*)buf1843 = rsGetElementAt_float3(*(rs_allocation*)buf1844, *(uint32_t*)buf1845, *(uint32_t*)buf1846, *(uint32_t*)buf1847);
+    *(float4*)buf1848 = rsGetElementAt_float4(*(rs_allocation*)buf1849, *(uint32_t*)buf1850, *(uint32_t*)buf1851, *(uint32_t*)buf1852);
+    *(double*)buf1853 = rsGetElementAt_double(*(rs_allocation*)buf1854, *(uint32_t*)buf1855, *(uint32_t*)buf1856, *(uint32_t*)buf1857);
+    *(double2*)buf1858 = rsGetElementAt_double2(*(rs_allocation*)buf1859, *(uint32_t*)buf1860, *(uint32_t*)buf1861, *(uint32_t*)buf1862);
+    *(double3*)buf1863 = rsGetElementAt_double3(*(rs_allocation*)buf1864, *(uint32_t*)buf1865, *(uint32_t*)buf1866, *(uint32_t*)buf1867);
+    *(double4*)buf1868 = rsGetElementAt_double4(*(rs_allocation*)buf1869, *(uint32_t*)buf1870, *(uint32_t*)buf1871, *(uint32_t*)buf1872);
+    *(char*)buf1873 = rsGetElementAt_char(*(rs_allocation*)buf1874, *(uint32_t*)buf1875, *(uint32_t*)buf1876, *(uint32_t*)buf1877);
+    *(char2*)buf1878 = rsGetElementAt_char2(*(rs_allocation*)buf1879, *(uint32_t*)buf1880, *(uint32_t*)buf1881, *(uint32_t*)buf1882);
+    *(char3*)buf1883 = rsGetElementAt_char3(*(rs_allocation*)buf1884, *(uint32_t*)buf1885, *(uint32_t*)buf1886, *(uint32_t*)buf1887);
+    *(char4*)buf1888 = rsGetElementAt_char4(*(rs_allocation*)buf1889, *(uint32_t*)buf1890, *(uint32_t*)buf1891, *(uint32_t*)buf1892);
+    *(uchar*)buf1893 = rsGetElementAt_uchar(*(rs_allocation*)buf1894, *(uint32_t*)buf1895, *(uint32_t*)buf1896, *(uint32_t*)buf1897);
+    *(uchar2*)buf1898 = rsGetElementAt_uchar2(*(rs_allocation*)buf1899, *(uint32_t*)buf1900, *(uint32_t*)buf1901, *(uint32_t*)buf1902);
+    *(uchar3*)buf1903 = rsGetElementAt_uchar3(*(rs_allocation*)buf1904, *(uint32_t*)buf1905, *(uint32_t*)buf1906, *(uint32_t*)buf1907);
+    *(uchar4*)buf1908 = rsGetElementAt_uchar4(*(rs_allocation*)buf1909, *(uint32_t*)buf1910, *(uint32_t*)buf1911, *(uint32_t*)buf1912);
+    *(short*)buf1913 = rsGetElementAt_short(*(rs_allocation*)buf1914, *(uint32_t*)buf1915, *(uint32_t*)buf1916, *(uint32_t*)buf1917);
+    *(short2*)buf1918 = rsGetElementAt_short2(*(rs_allocation*)buf1919, *(uint32_t*)buf1920, *(uint32_t*)buf1921, *(uint32_t*)buf1922);
+    *(short3*)buf1923 = rsGetElementAt_short3(*(rs_allocation*)buf1924, *(uint32_t*)buf1925, *(uint32_t*)buf1926, *(uint32_t*)buf1927);
+    *(short4*)buf1928 = rsGetElementAt_short4(*(rs_allocation*)buf1929, *(uint32_t*)buf1930, *(uint32_t*)buf1931, *(uint32_t*)buf1932);
+    *(ushort*)buf1933 = rsGetElementAt_ushort(*(rs_allocation*)buf1934, *(uint32_t*)buf1935, *(uint32_t*)buf1936, *(uint32_t*)buf1937);
+    *(ushort2*)buf1938 = rsGetElementAt_ushort2(*(rs_allocation*)buf1939, *(uint32_t*)buf1940, *(uint32_t*)buf1941, *(uint32_t*)buf1942);
+    *(ushort3*)buf1943 = rsGetElementAt_ushort3(*(rs_allocation*)buf1944, *(uint32_t*)buf1945, *(uint32_t*)buf1946, *(uint32_t*)buf1947);
+    *(ushort4*)buf1948 = rsGetElementAt_ushort4(*(rs_allocation*)buf1949, *(uint32_t*)buf1950, *(uint32_t*)buf1951, *(uint32_t*)buf1952);
+    *(int*)buf1953 = rsGetElementAt_int(*(rs_allocation*)buf1954, *(uint32_t*)buf1955, *(uint32_t*)buf1956, *(uint32_t*)buf1957);
+    *(int2*)buf1958 = rsGetElementAt_int2(*(rs_allocation*)buf1959, *(uint32_t*)buf1960, *(uint32_t*)buf1961, *(uint32_t*)buf1962);
+    *(int3*)buf1963 = rsGetElementAt_int3(*(rs_allocation*)buf1964, *(uint32_t*)buf1965, *(uint32_t*)buf1966, *(uint32_t*)buf1967);
+    *(int4*)buf1968 = rsGetElementAt_int4(*(rs_allocation*)buf1969, *(uint32_t*)buf1970, *(uint32_t*)buf1971, *(uint32_t*)buf1972);
+    *(uint*)buf1973 = rsGetElementAt_uint(*(rs_allocation*)buf1974, *(uint32_t*)buf1975, *(uint32_t*)buf1976, *(uint32_t*)buf1977);
+    *(uint2*)buf1978 = rsGetElementAt_uint2(*(rs_allocation*)buf1979, *(uint32_t*)buf1980, *(uint32_t*)buf1981, *(uint32_t*)buf1982);
+    *(uint3*)buf1983 = rsGetElementAt_uint3(*(rs_allocation*)buf1984, *(uint32_t*)buf1985, *(uint32_t*)buf1986, *(uint32_t*)buf1987);
+    *(uint4*)buf1988 = rsGetElementAt_uint4(*(rs_allocation*)buf1989, *(uint32_t*)buf1990, *(uint32_t*)buf1991, *(uint32_t*)buf1992);
+    *(long*)buf1993 = rsGetElementAt_long(*(rs_allocation*)buf1994, *(uint32_t*)buf1995, *(uint32_t*)buf1996, *(uint32_t*)buf1997);
+    *(long2*)buf1998 = rsGetElementAt_long2(*(rs_allocation*)buf1999, *(uint32_t*)buf2000, *(uint32_t*)buf2001, *(uint32_t*)buf2002);
+    *(long3*)buf2003 = rsGetElementAt_long3(*(rs_allocation*)buf2004, *(uint32_t*)buf2005, *(uint32_t*)buf2006, *(uint32_t*)buf2007);
+    *(long4*)buf2008 = rsGetElementAt_long4(*(rs_allocation*)buf2009, *(uint32_t*)buf2010, *(uint32_t*)buf2011, *(uint32_t*)buf2012);
+    *(ulong*)buf2013 = rsGetElementAt_ulong(*(rs_allocation*)buf2014, *(uint32_t*)buf2015, *(uint32_t*)buf2016, *(uint32_t*)buf2017);
+    *(ulong2*)buf2018 = rsGetElementAt_ulong2(*(rs_allocation*)buf2019, *(uint32_t*)buf2020, *(uint32_t*)buf2021, *(uint32_t*)buf2022);
+    *(ulong3*)buf2023 = rsGetElementAt_ulong3(*(rs_allocation*)buf2024, *(uint32_t*)buf2025, *(uint32_t*)buf2026, *(uint32_t*)buf2027);
+    *(ulong4*)buf2028 = rsGetElementAt_ulong4(*(rs_allocation*)buf2029, *(uint32_t*)buf2030, *(uint32_t*)buf2031, *(uint32_t*)buf2032);
+    *(bool*)buf2033 = rsIsObject(*(rs_element*)buf2034);
+    *(bool*)buf2035 = rsIsObject(*(rs_type*)buf2036);
+    *(bool*)buf2037 = rsIsObject(*(rs_allocation*)buf2038);
+    *(bool*)buf2039 = rsIsObject(*(rs_sampler*)buf2040);
+    *(bool*)buf2041 = rsIsObject(*(rs_script*)buf2042);
+#ifndef __LP64__
+    *(bool*)buf2043 = rsIsObject(*(rs_mesh*)buf2044);
+    *(bool*)buf2045 = rsIsObject(*(rs_program_fragment*)buf2046);
+    *(bool*)buf2047 = rsIsObject(*(rs_program_vertex*)buf2048);
+    *(bool*)buf2049 = rsIsObject(*(rs_program_raster*)buf2050);
+    *(bool*)buf2051 = rsIsObject(*(rs_program_store*)buf2052);
+    *(bool*)buf2053 = rsIsObject(*(rs_font*)buf2054);
+#endif
+    *(bool*)buf2055 = rsIsSphereInFrustum((float4*) buf2056, (float4*) buf2057, (float4*) buf2058, (float4*) buf2059, (float4*) buf2060, (float4*) buf2061, (float4*) buf2062);
+    *(rs_tm**)buf2063 = rsLocaltime((rs_tm*) buf2064, (const rs_time_t*) buf2065);
+    *(float*)buf2066 = rsMatrixGet((const rs_matrix4x4*) buf2067, *(uint32_t*)buf2068, *(uint32_t*)buf2069);
+    *(float*)buf2070 = rsMatrixGet((const rs_matrix3x3*) buf2071, *(uint32_t*)buf2072, *(uint32_t*)buf2073);
+    *(float*)buf2074 = rsMatrixGet((const rs_matrix2x2*) buf2075, *(uint32_t*)buf2076, *(uint32_t*)buf2077);
+    *(bool*)buf2078 = rsMatrixInverse((rs_matrix4x4*) buf2079);
+    *(bool*)buf2080 = rsMatrixInverseTranspose((rs_matrix4x4*) buf2081);
+    rsMatrixLoad((rs_matrix4x4*) buf2082, (const float*) buf2083);
+    rsMatrixLoad((rs_matrix3x3*) buf2084, (const float*) buf2085);
+    rsMatrixLoad((rs_matrix2x2*) buf2086, (const float*) buf2087);
+    rsMatrixLoad((rs_matrix4x4*) buf2088, (const rs_matrix4x4*) buf2089);
+    rsMatrixLoad((rs_matrix3x3*) buf2090, (const rs_matrix3x3*) buf2091);
+    rsMatrixLoad((rs_matrix2x2*) buf2092, (const rs_matrix2x2*) buf2093);
+    rsMatrixLoad((rs_matrix4x4*) buf2094, (const rs_matrix3x3*) buf2095);
+    rsMatrixLoad((rs_matrix4x4*) buf2096, (const rs_matrix2x2*) buf2097);
+    rsMatrixLoadFrustum((rs_matrix4x4*) buf2098, *(float*)buf2099, *(float*)buf2100, *(float*)buf2101, *(float*)buf2102, *(float*)buf2103, *(float*)buf2104);
+    rsMatrixLoadIdentity((rs_matrix4x4*) buf2105);
+    rsMatrixLoadIdentity((rs_matrix3x3*) buf2106);
+    rsMatrixLoadIdentity((rs_matrix2x2*) buf2107);
+    rsMatrixLoadMultiply((rs_matrix4x4*) buf2108, (const rs_matrix4x4*) buf2109, (const rs_matrix4x4*) buf2110);
+    rsMatrixLoadMultiply((rs_matrix3x3*) buf2111, (const rs_matrix3x3*) buf2112, (const rs_matrix3x3*) buf2113);
+    rsMatrixLoadMultiply((rs_matrix2x2*) buf2114, (const rs_matrix2x2*) buf2115, (const rs_matrix2x2*) buf2116);
+    rsMatrixLoadOrtho((rs_matrix4x4*) buf2117, *(float*)buf2118, *(float*)buf2119, *(float*)buf2120, *(float*)buf2121, *(float*)buf2122, *(float*)buf2123);
+    rsMatrixLoadPerspective((rs_matrix4x4*) buf2124, *(float*)buf2125, *(float*)buf2126, *(float*)buf2127, *(float*)buf2128);
+    rsMatrixLoadRotate((rs_matrix4x4*) buf2129, *(float*)buf2130, *(float*)buf2131, *(float*)buf2132, *(float*)buf2133);
+    rsMatrixLoadScale((rs_matrix4x4*) buf2134, *(float*)buf2135, *(float*)buf2136, *(float*)buf2137);
+    rsMatrixLoadTranslate((rs_matrix4x4*) buf2138, *(float*)buf2139, *(float*)buf2140, *(float*)buf2141);
+    rsMatrixMultiply((rs_matrix4x4*) buf2142, (const rs_matrix4x4*) buf2143);
+    rsMatrixMultiply((rs_matrix3x3*) buf2144, (const rs_matrix3x3*) buf2145);
+    rsMatrixMultiply((rs_matrix2x2*) buf2146, (const rs_matrix2x2*) buf2147);
+    *(float4*)buf2148 = rsMatrixMultiply((const rs_matrix4x4*) buf2149, *(float4*)buf2150);
+    *(float4*)buf2151 = rsMatrixMultiply((const rs_matrix4x4*) buf2152, *(float3*)buf2153);
+    *(float4*)buf2154 = rsMatrixMultiply((const rs_matrix4x4*) buf2155, *(float2*)buf2156);
+    *(float3*)buf2157 = rsMatrixMultiply((const rs_matrix3x3*) buf2158, *(float3*)buf2159);
+    *(float3*)buf2160 = rsMatrixMultiply((const rs_matrix3x3*) buf2161, *(float2*)buf2162);
+    *(float2*)buf2163 = rsMatrixMultiply((const rs_matrix2x2*) buf2164, *(float2*)buf2165);
+    rsMatrixRotate((rs_matrix4x4*) buf2166, *(float*)buf2167, *(float*)buf2168, *(float*)buf2169, *(float*)buf2170);
+    rsMatrixScale((rs_matrix4x4*) buf2171, *(float*)buf2172, *(float*)buf2173, *(float*)buf2174);
+    rsMatrixSet((rs_matrix4x4*) buf2175, *(uint32_t*)buf2176, *(uint32_t*)buf2177, *(float*)buf2178);
+    rsMatrixSet((rs_matrix3x3*) buf2179, *(uint32_t*)buf2180, *(uint32_t*)buf2181, *(float*)buf2182);
+    rsMatrixSet((rs_matrix2x2*) buf2183, *(uint32_t*)buf2184, *(uint32_t*)buf2185, *(float*)buf2186);
+    rsMatrixTranslate((rs_matrix4x4*) buf2187, *(float*)buf2188, *(float*)buf2189, *(float*)buf2190);
+    rsMatrixTranspose((rs_matrix4x4*) buf2191);
+    rsMatrixTranspose((rs_matrix3x3*) buf2192);
+    rsMatrixTranspose((rs_matrix2x2*) buf2193);
+    *(uchar4*)buf2194 = rsPackColorTo8888(*(float*)buf2195, *(float*)buf2196, *(float*)buf2197);
+    *(uchar4*)buf2198 = rsPackColorTo8888(*(float*)buf2199, *(float*)buf2200, *(float*)buf2201, *(float*)buf2202);
+    *(uchar4*)buf2203 = rsPackColorTo8888(*(float3*)buf2204);
+    *(uchar4*)buf2205 = rsPackColorTo8888(*(float4*)buf2206);
+    rsQuaternionAdd((rs_quaternion*) buf2207, (const rs_quaternion*) buf2208);
+    rsQuaternionConjugate((rs_quaternion*) buf2209);
+    *(float*)buf2210 = rsQuaternionDot((const rs_quaternion*) buf2211, (const rs_quaternion*) buf2212);
+    rsQuaternionGetMatrixUnit((rs_matrix4x4*) buf2213, (const rs_quaternion*) buf2214);
+    rsQuaternionLoadRotate((rs_quaternion*) buf2215, *(float*)buf2216, *(float*)buf2217, *(float*)buf2218, *(float*)buf2219);
+    rsQuaternionLoadRotateUnit((rs_quaternion*) buf2220, *(float*)buf2221, *(float*)buf2222, *(float*)buf2223, *(float*)buf2224);
+    rsQuaternionMultiply((rs_quaternion*) buf2225, *(float*)buf2226);
+    rsQuaternionMultiply((rs_quaternion*) buf2227, (const rs_quaternion*) buf2228);
+    rsQuaternionNormalize((rs_quaternion*) buf2229);
+    rsQuaternionSet((rs_quaternion*) buf2230, *(float*)buf2231, *(float*)buf2232, *(float*)buf2233, *(float*)buf2234);
+    rsQuaternionSet((rs_quaternion*) buf2235, (const rs_quaternion*) buf2236);
+    rsQuaternionSlerp((rs_quaternion*) buf2237, (const rs_quaternion*) buf2238, (const rs_quaternion*) buf2239, *(float*)buf2240);
+    *(int*)buf2241 = rsRand(*(int*)buf2242);
+    *(int*)buf2243 = rsRand(*(int*)buf2244, *(int*)buf2245);
+    *(float*)buf2246 = rsRand(*(float*)buf2247);
+    *(float*)buf2248 = rsRand(*(float*)buf2249, *(float*)buf2250);
+    *(float4*)buf2251 = rsSample(*(rs_allocation*)buf2252, *(rs_sampler*)buf2253, *(float*)buf2254);
+    *(float4*)buf2255 = rsSample(*(rs_allocation*)buf2256, *(rs_sampler*)buf2257, *(float*)buf2258, *(float*)buf2259);
+    *(float4*)buf2260 = rsSample(*(rs_allocation*)buf2261, *(rs_sampler*)buf2262, *(float2*)buf2263);
+    *(float4*)buf2264 = rsSample(*(rs_allocation*)buf2265, *(rs_sampler*)buf2266, *(float2*)buf2267, *(float*)buf2268);
+    *(float*)buf2269 = rsSamplerGetAnisotropy(*(rs_sampler*)buf2270);
+    *(rs_sampler_value*)buf2271 = rsSamplerGetMagnification(*(rs_sampler*)buf2272);
+    *(rs_sampler_value*)buf2273 = rsSamplerGetMinification(*(rs_sampler*)buf2274);
+    *(rs_sampler_value*)buf2275 = rsSamplerGetWrapS(*(rs_sampler*)buf2276);
+    *(rs_sampler_value*)buf2277 = rsSamplerGetWrapT(*(rs_sampler*)buf2278);
+    *(bool*)buf2279 = rsSendToClient(*(int*)buf2280);
+    *(bool*)buf2281 = rsSendToClient(*(int*)buf2282, (const void*) buf2283, *(uint*)buf2284);
+    rsSendToClientBlocking(*(int*)buf2285);
+    rsSendToClientBlocking(*(int*)buf2286, (const void*) buf2287, *(uint*)buf2288);
+    rsSetObject((rs_element*) buf2289, *(rs_element*)buf2290);
+    rsSetObject((rs_type*) buf2291, *(rs_type*)buf2292);
+    rsSetObject((rs_allocation*) buf2293, *(rs_allocation*)buf2294);
+    rsSetObject((rs_sampler*) buf2295, *(rs_sampler*)buf2296);
+    rsSetObject((rs_script*) buf2297, *(rs_script*)buf2298);
+#ifndef __LP64__
+    rsSetObject((rs_mesh*) buf2299, *(rs_mesh*)buf2300);
+    rsSetObject((rs_program_fragment*) buf2301, *(rs_program_fragment*)buf2302);
+    rsSetObject((rs_program_vertex*) buf2303, *(rs_program_vertex*)buf2304);
+    rsSetObject((rs_program_raster*) buf2305, *(rs_program_raster*)buf2306);
+    rsSetObject((rs_program_store*) buf2307, *(rs_program_store*)buf2308);
+    rsSetObject((rs_font*) buf2309, *(rs_font*)buf2310);
+#endif
+    *(rs_time_t*)buf2311 = rsTime((rs_time_t*) buf2312);
+    *(float4*)buf2313 = rsUnpackColor8888(*(uchar4*)buf2314);
+    *(int64_t*)buf2315 = rsUptimeMillis();
+    *(int64_t*)buf2316 = rsUptimeNanos();
+    *(float4*)buf2317 = rsYuvToRGBA_float4(*(uchar*)buf2318, *(uchar*)buf2319, *(uchar*)buf2320);
+    *(uchar4*)buf2321 = rsYuvToRGBA_uchar4(*(uchar*)buf2322, *(uchar*)buf2323, *(uchar*)buf2324);
+#ifndef __LP64__
+    rsgAllocationSyncAll(*(rs_allocation*)buf2325);
+#endif
+#ifndef __LP64__
+    rsgAllocationSyncAll(*(rs_allocation*)buf2326, *(rs_allocation_usage_type*)buf2327);
+#endif
+#ifndef __LP64__
+    rsgBindColorTarget(*(rs_allocation*)buf2328, *(uint*)buf2329);
+#endif
+#ifndef __LP64__
+    rsgBindConstant(*(rs_program_fragment*)buf2330, *(uint*)buf2331, *(rs_allocation*)buf2332);
+#endif
+#ifndef __LP64__
+    rsgBindConstant(*(rs_program_vertex*)buf2333, *(uint*)buf2334, *(rs_allocation*)buf2335);
+#endif
+#ifndef __LP64__
+    rsgBindDepthTarget(*(rs_allocation*)buf2336);
+#endif
+#ifndef __LP64__
+    rsgBindFont(*(rs_font*)buf2337);
+#endif
+#ifndef __LP64__
+    rsgBindProgramFragment(*(rs_program_fragment*)buf2338);
+#endif
+#ifndef __LP64__
+    rsgBindProgramRaster(*(rs_program_raster*)buf2339);
+#endif
+#ifndef __LP64__
+    rsgBindProgramStore(*(rs_program_store*)buf2340);
+#endif
+#ifndef __LP64__
+    rsgBindProgramVertex(*(rs_program_vertex*)buf2341);
+#endif
+#ifndef __LP64__
+    rsgBindSampler(*(rs_program_fragment*)buf2342, *(uint*)buf2343, *(rs_sampler*)buf2344);
+#endif
+#ifndef __LP64__
+    rsgBindTexture(*(rs_program_fragment*)buf2345, *(uint*)buf2346, *(rs_allocation*)buf2347);
+#endif
+#ifndef __LP64__
+    rsgClearAllRenderTargets();
+#endif
+#ifndef __LP64__
+    rsgClearColor(*(float*)buf2348, *(float*)buf2349, *(float*)buf2350, *(float*)buf2351);
+#endif
+#ifndef __LP64__
+    rsgClearColorTarget(*(uint*)buf2352);
+#endif
+#ifndef __LP64__
+    rsgClearDepth(*(float*)buf2353);
+#endif
+#ifndef __LP64__
+    rsgClearDepthTarget();
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf2354);
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf2355, *(uint*)buf2356);
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf2357, *(uint*)buf2358, *(uint*)buf2359, *(uint*)buf2360);
+#endif
+#ifndef __LP64__
+    rsgDrawQuad(*(float*)buf2361, *(float*)buf2362, *(float*)buf2363, *(float*)buf2364, *(float*)buf2365, *(float*)buf2366, *(float*)buf2367, *(float*)buf2368, *(float*)buf2369, *(float*)buf2370, *(float*)buf2371, *(float*)buf2372);
+#endif
+#ifndef __LP64__
+    rsgDrawQuadTexCoords(*(float*)buf2373, *(float*)buf2374, *(float*)buf2375, *(float*)buf2376, *(float*)buf2377, *(float*)buf2378, *(float*)buf2379, *(float*)buf2380, *(float*)buf2381, *(float*)buf2382, *(float*)buf2383, *(float*)buf2384, *(float*)buf2385, *(float*)buf2386, *(float*)buf2387, *(float*)buf2388, *(float*)buf2389, *(float*)buf2390, *(float*)buf2391, *(float*)buf2392);
+#endif
+#ifndef __LP64__
+    rsgDrawRect(*(float*)buf2393, *(float*)buf2394, *(float*)buf2395, *(float*)buf2396, *(float*)buf2397);
+#endif
+#ifndef __LP64__
+    rsgDrawSpriteScreenspace(*(float*)buf2398, *(float*)buf2399, *(float*)buf2400, *(float*)buf2401, *(float*)buf2402);
+#endif
+#ifndef __LP64__
+    rsgDrawText((const char*) buf2403, *(int*)buf2404, *(int*)buf2405);
+#endif
+#ifndef __LP64__
+    rsgDrawText(*(rs_allocation*)buf2406, *(int*)buf2407, *(int*)buf2408);
+#endif
+#ifndef __LP64__
+    *(uint*)buf2409 = rsgFinish();
+#endif
+#ifndef __LP64__
+    rsgFontColor(*(float*)buf2410, *(float*)buf2411, *(float*)buf2412, *(float*)buf2413);
+#endif
+#ifndef __LP64__
+    *(uint*)buf2414 = rsgGetHeight();
+#endif
+#ifndef __LP64__
+    *(uint*)buf2415 = rsgGetWidth();
+#endif
+#ifndef __LP64__
+    rsgMeasureText((const char*) buf2416, (int*) buf2417, (int*) buf2418, (int*) buf2419, (int*) buf2420);
+#endif
+#ifndef __LP64__
+    rsgMeasureText(*(rs_allocation*)buf2421, (int*) buf2422, (int*) buf2423, (int*) buf2424, (int*) buf2425);
+#endif
+#ifndef __LP64__
+    rsgMeshComputeBoundingBox(*(rs_mesh*)buf2426, (float*) buf2427, (float*) buf2428, (float*) buf2429, (float*) buf2430, (float*) buf2431, (float*) buf2432);
+#endif
+#ifndef __LP64__
+    rsgMeshComputeBoundingBox(*(rs_mesh*)buf2433, (float3*) buf2434, (float3*) buf2435);
+#endif
+#ifndef __LP64__
+    *(rs_allocation*)buf2436 = rsgMeshGetIndexAllocation(*(rs_mesh*)buf2437, *(uint32_t*)buf2438);
+#endif
+#ifndef __LP64__
+    *(rs_primitive*)buf2439 = rsgMeshGetPrimitive(*(rs_mesh*)buf2440, *(uint32_t*)buf2441);
+#endif
+#ifndef __LP64__
+    *(uint32_t*)buf2442 = rsgMeshGetPrimitiveCount(*(rs_mesh*)buf2443);
+#endif
+#ifndef __LP64__
+    *(rs_allocation*)buf2444 = rsgMeshGetVertexAllocation(*(rs_mesh*)buf2445, *(uint32_t*)buf2446);
+#endif
+#ifndef __LP64__
+    *(uint32_t*)buf2447 = rsgMeshGetVertexAllocationCount(*(rs_mesh*)buf2448);
+#endif
+#ifndef __LP64__
+    rsgProgramFragmentConstantColor(*(rs_program_fragment*)buf2449, *(float*)buf2450, *(float*)buf2451, *(float*)buf2452, *(float*)buf2453);
+#endif
+#ifndef __LP64__
+    *(rs_cull_mode*)buf2454 = rsgProgramRasterGetCullMode(*(rs_program_raster*)buf2455);
+#endif
+#ifndef __LP64__
+    *(bool*)buf2456 = rsgProgramRasterIsPointSpriteEnabled(*(rs_program_raster*)buf2457);
+#endif
+#ifndef __LP64__
+    *(rs_blend_dst_func*)buf2458 = rsgProgramStoreGetBlendDstFunc(*(rs_program_store*)buf2459);
+#endif
+#ifndef __LP64__
+    *(rs_blend_src_func*)buf2460 = rsgProgramStoreGetBlendSrcFunc(*(rs_program_store*)buf2461);
+#endif
+#ifndef __LP64__
+    *(rs_depth_func*)buf2462 = rsgProgramStoreGetDepthFunc(*(rs_program_store*)buf2463);
+#endif
+#ifndef __LP64__
+    *(bool*)buf2464 = rsgProgramStoreIsColorMaskAlphaEnabled(*(rs_program_store*)buf2465);
+#endif
+#ifndef __LP64__
+    *(bool*)buf2466 = rsgProgramStoreIsColorMaskBlueEnabled(*(rs_program_store*)buf2467);
+#endif
+#ifndef __LP64__
+    *(bool*)buf2468 = rsgProgramStoreIsColorMaskGreenEnabled(*(rs_program_store*)buf2469);
+#endif
+#ifndef __LP64__
+    *(bool*)buf2470 = rsgProgramStoreIsColorMaskRedEnabled(*(rs_program_store*)buf2471);
+#endif
+#ifndef __LP64__
+    *(bool*)buf2472 = rsgProgramStoreIsDepthMaskEnabled(*(rs_program_store*)buf2473);
+#endif
+#ifndef __LP64__
+    *(bool*)buf2474 = rsgProgramStoreIsDitherEnabled(*(rs_program_store*)buf2475);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexGetProjectionMatrix((rs_matrix4x4*) buf2476);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadModelMatrix((const rs_matrix4x4*) buf2477);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadProjectionMatrix((const rs_matrix4x4*) buf2478);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadTextureMatrix((const rs_matrix4x4*) buf2479);
+#endif
+    *(float*)buf2480 = rsqrt(*(float*)buf2481);
+    *(float2*)buf2482 = rsqrt(*(float2*)buf2483);
+    *(float3*)buf2484 = rsqrt(*(float3*)buf2485);
+    *(float4*)buf2486 = rsqrt(*(float4*)buf2487);
+    *(float*)buf2488 = sign(*(float*)buf2489);
+    *(float2*)buf2490 = sign(*(float2*)buf2491);
+    *(float3*)buf2492 = sign(*(float3*)buf2493);
+    *(float4*)buf2494 = sign(*(float4*)buf2495);
+    *(float*)buf2496 = sin(*(float*)buf2497);
+    *(float2*)buf2498 = sin(*(float2*)buf2499);
+    *(float3*)buf2500 = sin(*(float3*)buf2501);
+    *(float4*)buf2502 = sin(*(float4*)buf2503);
+    *(float*)buf2504 = sincos(*(float*)buf2505, (float*) buf2506);
+    *(float2*)buf2507 = sincos(*(float2*)buf2508, (float2*) buf2509);
+    *(float3*)buf2510 = sincos(*(float3*)buf2511, (float3*) buf2512);
+    *(float4*)buf2513 = sincos(*(float4*)buf2514, (float4*) buf2515);
+    *(float*)buf2516 = sinh(*(float*)buf2517);
+    *(float2*)buf2518 = sinh(*(float2*)buf2519);
+    *(float3*)buf2520 = sinh(*(float3*)buf2521);
+    *(float4*)buf2522 = sinh(*(float4*)buf2523);
+    *(float*)buf2524 = sinpi(*(float*)buf2525);
+    *(float2*)buf2526 = sinpi(*(float2*)buf2527);
+    *(float3*)buf2528 = sinpi(*(float3*)buf2529);
+    *(float4*)buf2530 = sinpi(*(float4*)buf2531);
+    *(float*)buf2532 = sqrt(*(float*)buf2533);
+    *(float2*)buf2534 = sqrt(*(float2*)buf2535);
+    *(float3*)buf2536 = sqrt(*(float3*)buf2537);
+    *(float4*)buf2538 = sqrt(*(float4*)buf2539);
+    *(float*)buf2540 = step(*(float*)buf2541, *(float*)buf2542);
+    *(float2*)buf2543 = step(*(float2*)buf2544, *(float2*)buf2545);
+    *(float3*)buf2546 = step(*(float3*)buf2547, *(float3*)buf2548);
+    *(float4*)buf2549 = step(*(float4*)buf2550, *(float4*)buf2551);
+    *(float2*)buf2552 = step(*(float2*)buf2553, *(float*)buf2554);
+    *(float3*)buf2555 = step(*(float3*)buf2556, *(float*)buf2557);
+    *(float4*)buf2558 = step(*(float4*)buf2559, *(float*)buf2560);
+    *(float*)buf2561 = tan(*(float*)buf2562);
+    *(float2*)buf2563 = tan(*(float2*)buf2564);
+    *(float3*)buf2565 = tan(*(float3*)buf2566);
+    *(float4*)buf2567 = tan(*(float4*)buf2568);
+    *(float*)buf2569 = tanh(*(float*)buf2570);
+    *(float2*)buf2571 = tanh(*(float2*)buf2572);
+    *(float3*)buf2573 = tanh(*(float3*)buf2574);
+    *(float4*)buf2575 = tanh(*(float4*)buf2576);
+    *(float*)buf2577 = tanpi(*(float*)buf2578);
+    *(float2*)buf2579 = tanpi(*(float2*)buf2580);
+    *(float3*)buf2581 = tanpi(*(float3*)buf2582);
+    *(float4*)buf2583 = tanpi(*(float4*)buf2584);
+    *(float*)buf2585 = tgamma(*(float*)buf2586);
+    *(float2*)buf2587 = tgamma(*(float2*)buf2588);
+    *(float3*)buf2589 = tgamma(*(float3*)buf2590);
+    *(float4*)buf2591 = tgamma(*(float4*)buf2592);
+    *(float*)buf2593 = trunc(*(float*)buf2594);
+    *(float2*)buf2595 = trunc(*(float2*)buf2596);
+    *(float3*)buf2597 = trunc(*(float3*)buf2598);
+    *(float4*)buf2599 = trunc(*(float4*)buf2600);
+}
diff --git a/slang/tests/P_all_api_17/stderr.txt.expect b/slang/tests/P_all_api_17/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_all_api_17/stderr.txt.expect
diff --git a/slang/tests/P_all_api_17/stdout.txt.expect b/slang/tests/P_all_api_17/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_all_api_17/stdout.txt.expect
diff --git a/slang/tests/P_all_api_18/all18.rs b/slang/tests/P_all_api_18/all18.rs
new file mode 100644
index 0000000..d07107e
--- /dev/null
+++ b/slang/tests/P_all_api_18/all18.rs
@@ -0,0 +1,4436 @@
+// -target-api 18 -Wno-deprecated-declarations
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Don't edit this file!  It is auto-generated by frameworks/rs/api/generate.sh.
+
+#pragma version(1)
+#pragma rs java_package_name(com.example.renderscript.testallapi)
+
+#include "rs_graphics.rsh"
+
+char buf0[200];
+char buf1[200];
+char buf2[200];
+char buf3[200];
+char buf4[200];
+char buf5[200];
+char buf6[200];
+char buf7[200];
+char buf8[200];
+char buf9[200];
+char buf10[200];
+char buf11[200];
+char buf12[200];
+char buf13[200];
+char buf14[200];
+char buf15[200];
+char buf16[200];
+char buf17[200];
+char buf18[200];
+char buf19[200];
+char buf20[200];
+char buf21[200];
+char buf22[200];
+char buf23[200];
+char buf24[200];
+char buf25[200];
+char buf26[200];
+char buf27[200];
+char buf28[200];
+char buf29[200];
+char buf30[200];
+char buf31[200];
+char buf32[200];
+char buf33[200];
+char buf34[200];
+char buf35[200];
+char buf36[200];
+char buf37[200];
+char buf38[200];
+char buf39[200];
+char buf40[200];
+char buf41[200];
+char buf42[200];
+char buf43[200];
+char buf44[200];
+char buf45[200];
+char buf46[200];
+char buf47[200];
+char buf48[200];
+char buf49[200];
+char buf50[200];
+char buf51[200];
+char buf52[200];
+char buf53[200];
+char buf54[200];
+char buf55[200];
+char buf56[200];
+char buf57[200];
+char buf58[200];
+char buf59[200];
+char buf60[200];
+char buf61[200];
+char buf62[200];
+char buf63[200];
+char buf64[200];
+char buf65[200];
+char buf66[200];
+char buf67[200];
+char buf68[200];
+char buf69[200];
+char buf70[200];
+char buf71[200];
+char buf72[200];
+char buf73[200];
+char buf74[200];
+char buf75[200];
+char buf76[200];
+char buf77[200];
+char buf78[200];
+char buf79[200];
+char buf80[200];
+char buf81[200];
+char buf82[200];
+char buf83[200];
+char buf84[200];
+char buf85[200];
+char buf86[200];
+char buf87[200];
+char buf88[200];
+char buf89[200];
+char buf90[200];
+char buf91[200];
+char buf92[200];
+char buf93[200];
+char buf94[200];
+char buf95[200];
+char buf96[200];
+char buf97[200];
+char buf98[200];
+char buf99[200];
+char buf100[200];
+char buf101[200];
+char buf102[200];
+char buf103[200];
+char buf104[200];
+char buf105[200];
+char buf106[200];
+char buf107[200];
+char buf108[200];
+char buf109[200];
+char buf110[200];
+char buf111[200];
+char buf112[200];
+char buf113[200];
+char buf114[200];
+char buf115[200];
+char buf116[200];
+char buf117[200];
+char buf118[200];
+char buf119[200];
+char buf120[200];
+char buf121[200];
+char buf122[200];
+char buf123[200];
+char buf124[200];
+char buf125[200];
+char buf126[200];
+char buf127[200];
+char buf128[200];
+char buf129[200];
+char buf130[200];
+char buf131[200];
+char buf132[200];
+char buf133[200];
+char buf134[200];
+char buf135[200];
+char buf136[200];
+char buf137[200];
+char buf138[200];
+char buf139[200];
+char buf140[200];
+char buf141[200];
+char buf142[200];
+char buf143[200];
+char buf144[200];
+char buf145[200];
+char buf146[200];
+char buf147[200];
+char buf148[200];
+char buf149[200];
+char buf150[200];
+char buf151[200];
+char buf152[200];
+char buf153[200];
+char buf154[200];
+char buf155[200];
+char buf156[200];
+char buf157[200];
+char buf158[200];
+char buf159[200];
+char buf160[200];
+char buf161[200];
+char buf162[200];
+char buf163[200];
+char buf164[200];
+char buf165[200];
+char buf166[200];
+char buf167[200];
+char buf168[200];
+char buf169[200];
+char buf170[200];
+char buf171[200];
+char buf172[200];
+char buf173[200];
+char buf174[200];
+char buf175[200];
+char buf176[200];
+char buf177[200];
+char buf178[200];
+char buf179[200];
+char buf180[200];
+char buf181[200];
+char buf182[200];
+char buf183[200];
+char buf184[200];
+char buf185[200];
+char buf186[200];
+char buf187[200];
+char buf188[200];
+char buf189[200];
+char buf190[200];
+char buf191[200];
+char buf192[200];
+char buf193[200];
+char buf194[200];
+char buf195[200];
+char buf196[200];
+char buf197[200];
+char buf198[200];
+char buf199[200];
+char buf200[200];
+char buf201[200];
+char buf202[200];
+char buf203[200];
+char buf204[200];
+char buf205[200];
+char buf206[200];
+char buf207[200];
+char buf208[200];
+char buf209[200];
+char buf210[200];
+char buf211[200];
+char buf212[200];
+char buf213[200];
+char buf214[200];
+char buf215[200];
+char buf216[200];
+char buf217[200];
+char buf218[200];
+char buf219[200];
+char buf220[200];
+char buf221[200];
+char buf222[200];
+char buf223[200];
+char buf224[200];
+char buf225[200];
+char buf226[200];
+char buf227[200];
+char buf228[200];
+char buf229[200];
+char buf230[200];
+char buf231[200];
+char buf232[200];
+char buf233[200];
+char buf234[200];
+char buf235[200];
+char buf236[200];
+char buf237[200];
+char buf238[200];
+char buf239[200];
+char buf240[200];
+char buf241[200];
+char buf242[200];
+char buf243[200];
+char buf244[200];
+char buf245[200];
+char buf246[200];
+char buf247[200];
+char buf248[200];
+char buf249[200];
+char buf250[200];
+char buf251[200];
+char buf252[200];
+char buf253[200];
+char buf254[200];
+char buf255[200];
+char buf256[200];
+char buf257[200];
+char buf258[200];
+char buf259[200];
+char buf260[200];
+char buf261[200];
+char buf262[200];
+char buf263[200];
+char buf264[200];
+char buf265[200];
+char buf266[200];
+char buf267[200];
+char buf268[200];
+char buf269[200];
+char buf270[200];
+char buf271[200];
+char buf272[200];
+char buf273[200];
+char buf274[200];
+char buf275[200];
+char buf276[200];
+char buf277[200];
+char buf278[200];
+char buf279[200];
+char buf280[200];
+char buf281[200];
+char buf282[200];
+char buf283[200];
+char buf284[200];
+char buf285[200];
+char buf286[200];
+char buf287[200];
+char buf288[200];
+char buf289[200];
+char buf290[200];
+char buf291[200];
+char buf292[200];
+char buf293[200];
+char buf294[200];
+char buf295[200];
+char buf296[200];
+char buf297[200];
+char buf298[200];
+char buf299[200];
+char buf300[200];
+char buf301[200];
+char buf302[200];
+char buf303[200];
+char buf304[200];
+char buf305[200];
+char buf306[200];
+char buf307[200];
+char buf308[200];
+char buf309[200];
+char buf310[200];
+char buf311[200];
+char buf312[200];
+char buf313[200];
+char buf314[200];
+char buf315[200];
+char buf316[200];
+char buf317[200];
+char buf318[200];
+char buf319[200];
+char buf320[200];
+char buf321[200];
+char buf322[200];
+char buf323[200];
+char buf324[200];
+char buf325[200];
+char buf326[200];
+char buf327[200];
+char buf328[200];
+char buf329[200];
+char buf330[200];
+char buf331[200];
+char buf332[200];
+char buf333[200];
+char buf334[200];
+char buf335[200];
+char buf336[200];
+char buf337[200];
+char buf338[200];
+char buf339[200];
+char buf340[200];
+char buf341[200];
+char buf342[200];
+char buf343[200];
+char buf344[200];
+char buf345[200];
+char buf346[200];
+char buf347[200];
+char buf348[200];
+char buf349[200];
+char buf350[200];
+char buf351[200];
+char buf352[200];
+char buf353[200];
+char buf354[200];
+char buf355[200];
+char buf356[200];
+char buf357[200];
+char buf358[200];
+char buf359[200];
+char buf360[200];
+char buf361[200];
+char buf362[200];
+char buf363[200];
+char buf364[200];
+char buf365[200];
+char buf366[200];
+char buf367[200];
+char buf368[200];
+char buf369[200];
+char buf370[200];
+char buf371[200];
+char buf372[200];
+char buf373[200];
+char buf374[200];
+char buf375[200];
+char buf376[200];
+char buf377[200];
+char buf378[200];
+char buf379[200];
+char buf380[200];
+char buf381[200];
+char buf382[200];
+char buf383[200];
+char buf384[200];
+char buf385[200];
+char buf386[200];
+char buf387[200];
+char buf388[200];
+char buf389[200];
+char buf390[200];
+char buf391[200];
+char buf392[200];
+char buf393[200];
+char buf394[200];
+char buf395[200];
+char buf396[200];
+char buf397[200];
+char buf398[200];
+char buf399[200];
+char buf400[200];
+char buf401[200];
+char buf402[200];
+char buf403[200];
+char buf404[200];
+char buf405[200];
+char buf406[200];
+char buf407[200];
+char buf408[200];
+char buf409[200];
+char buf410[200];
+char buf411[200];
+char buf412[200];
+char buf413[200];
+char buf414[200];
+char buf415[200];
+char buf416[200];
+char buf417[200];
+char buf418[200];
+char buf419[200];
+char buf420[200];
+char buf421[200];
+char buf422[200];
+char buf423[200];
+char buf424[200];
+char buf425[200];
+char buf426[200];
+char buf427[200];
+char buf428[200];
+char buf429[200];
+char buf430[200];
+char buf431[200];
+char buf432[200];
+char buf433[200];
+char buf434[200];
+char buf435[200];
+char buf436[200];
+char buf437[200];
+char buf438[200];
+char buf439[200];
+char buf440[200];
+char buf441[200];
+char buf442[200];
+char buf443[200];
+char buf444[200];
+char buf445[200];
+char buf446[200];
+char buf447[200];
+char buf448[200];
+char buf449[200];
+char buf450[200];
+char buf451[200];
+char buf452[200];
+char buf453[200];
+char buf454[200];
+char buf455[200];
+char buf456[200];
+char buf457[200];
+char buf458[200];
+char buf459[200];
+char buf460[200];
+char buf461[200];
+char buf462[200];
+char buf463[200];
+char buf464[200];
+char buf465[200];
+char buf466[200];
+char buf467[200];
+char buf468[200];
+char buf469[200];
+char buf470[200];
+char buf471[200];
+char buf472[200];
+char buf473[200];
+char buf474[200];
+char buf475[200];
+char buf476[200];
+char buf477[200];
+char buf478[200];
+char buf479[200];
+char buf480[200];
+char buf481[200];
+char buf482[200];
+char buf483[200];
+char buf484[200];
+char buf485[200];
+char buf486[200];
+char buf487[200];
+char buf488[200];
+char buf489[200];
+char buf490[200];
+char buf491[200];
+char buf492[200];
+char buf493[200];
+char buf494[200];
+char buf495[200];
+char buf496[200];
+char buf497[200];
+char buf498[200];
+char buf499[200];
+char buf500[200];
+char buf501[200];
+char buf502[200];
+char buf503[200];
+char buf504[200];
+char buf505[200];
+char buf506[200];
+char buf507[200];
+char buf508[200];
+char buf509[200];
+char buf510[200];
+char buf511[200];
+char buf512[200];
+char buf513[200];
+char buf514[200];
+char buf515[200];
+char buf516[200];
+char buf517[200];
+char buf518[200];
+char buf519[200];
+char buf520[200];
+char buf521[200];
+char buf522[200];
+char buf523[200];
+char buf524[200];
+char buf525[200];
+char buf526[200];
+char buf527[200];
+char buf528[200];
+char buf529[200];
+char buf530[200];
+char buf531[200];
+char buf532[200];
+char buf533[200];
+char buf534[200];
+char buf535[200];
+char buf536[200];
+char buf537[200];
+char buf538[200];
+char buf539[200];
+char buf540[200];
+char buf541[200];
+char buf542[200];
+char buf543[200];
+char buf544[200];
+char buf545[200];
+char buf546[200];
+char buf547[200];
+char buf548[200];
+char buf549[200];
+char buf550[200];
+char buf551[200];
+char buf552[200];
+char buf553[200];
+char buf554[200];
+char buf555[200];
+char buf556[200];
+char buf557[200];
+char buf558[200];
+char buf559[200];
+char buf560[200];
+char buf561[200];
+char buf562[200];
+char buf563[200];
+char buf564[200];
+char buf565[200];
+char buf566[200];
+char buf567[200];
+char buf568[200];
+char buf569[200];
+char buf570[200];
+char buf571[200];
+char buf572[200];
+char buf573[200];
+char buf574[200];
+char buf575[200];
+char buf576[200];
+char buf577[200];
+char buf578[200];
+char buf579[200];
+char buf580[200];
+char buf581[200];
+char buf582[200];
+char buf583[200];
+char buf584[200];
+char buf585[200];
+char buf586[200];
+char buf587[200];
+char buf588[200];
+char buf589[200];
+char buf590[200];
+char buf591[200];
+char buf592[200];
+char buf593[200];
+char buf594[200];
+char buf595[200];
+char buf596[200];
+char buf597[200];
+char buf598[200];
+char buf599[200];
+char buf600[200];
+char buf601[200];
+char buf602[200];
+char buf603[200];
+char buf604[200];
+char buf605[200];
+char buf606[200];
+char buf607[200];
+char buf608[200];
+char buf609[200];
+char buf610[200];
+char buf611[200];
+char buf612[200];
+char buf613[200];
+char buf614[200];
+char buf615[200];
+char buf616[200];
+char buf617[200];
+char buf618[200];
+char buf619[200];
+char buf620[200];
+char buf621[200];
+char buf622[200];
+char buf623[200];
+char buf624[200];
+char buf625[200];
+char buf626[200];
+char buf627[200];
+char buf628[200];
+char buf629[200];
+char buf630[200];
+char buf631[200];
+char buf632[200];
+char buf633[200];
+char buf634[200];
+char buf635[200];
+char buf636[200];
+char buf637[200];
+char buf638[200];
+char buf639[200];
+char buf640[200];
+char buf641[200];
+char buf642[200];
+char buf643[200];
+char buf644[200];
+char buf645[200];
+char buf646[200];
+char buf647[200];
+char buf648[200];
+char buf649[200];
+char buf650[200];
+char buf651[200];
+char buf652[200];
+char buf653[200];
+char buf654[200];
+char buf655[200];
+char buf656[200];
+char buf657[200];
+char buf658[200];
+char buf659[200];
+char buf660[200];
+char buf661[200];
+char buf662[200];
+char buf663[200];
+char buf664[200];
+char buf665[200];
+char buf666[200];
+char buf667[200];
+char buf668[200];
+char buf669[200];
+char buf670[200];
+char buf671[200];
+char buf672[200];
+char buf673[200];
+char buf674[200];
+char buf675[200];
+char buf676[200];
+char buf677[200];
+char buf678[200];
+char buf679[200];
+char buf680[200];
+char buf681[200];
+char buf682[200];
+char buf683[200];
+char buf684[200];
+char buf685[200];
+char buf686[200];
+char buf687[200];
+char buf688[200];
+char buf689[200];
+char buf690[200];
+char buf691[200];
+char buf692[200];
+char buf693[200];
+char buf694[200];
+char buf695[200];
+char buf696[200];
+char buf697[200];
+char buf698[200];
+char buf699[200];
+char buf700[200];
+char buf701[200];
+char buf702[200];
+char buf703[200];
+char buf704[200];
+char buf705[200];
+char buf706[200];
+char buf707[200];
+char buf708[200];
+char buf709[200];
+char buf710[200];
+char buf711[200];
+char buf712[200];
+char buf713[200];
+char buf714[200];
+char buf715[200];
+char buf716[200];
+char buf717[200];
+char buf718[200];
+char buf719[200];
+char buf720[200];
+char buf721[200];
+char buf722[200];
+char buf723[200];
+char buf724[200];
+char buf725[200];
+char buf726[200];
+char buf727[200];
+char buf728[200];
+char buf729[200];
+char buf730[200];
+char buf731[200];
+char buf732[200];
+char buf733[200];
+char buf734[200];
+char buf735[200];
+char buf736[200];
+char buf737[200];
+char buf738[200];
+char buf739[200];
+char buf740[200];
+char buf741[200];
+char buf742[200];
+char buf743[200];
+char buf744[200];
+char buf745[200];
+char buf746[200];
+char buf747[200];
+char buf748[200];
+char buf749[200];
+char buf750[200];
+char buf751[200];
+char buf752[200];
+char buf753[200];
+char buf754[200];
+char buf755[200];
+char buf756[200];
+char buf757[200];
+char buf758[200];
+char buf759[200];
+char buf760[200];
+char buf761[200];
+char buf762[200];
+char buf763[200];
+char buf764[200];
+char buf765[200];
+char buf766[200];
+char buf767[200];
+char buf768[200];
+char buf769[200];
+char buf770[200];
+char buf771[200];
+char buf772[200];
+char buf773[200];
+char buf774[200];
+char buf775[200];
+char buf776[200];
+char buf777[200];
+char buf778[200];
+char buf779[200];
+char buf780[200];
+char buf781[200];
+char buf782[200];
+char buf783[200];
+char buf784[200];
+char buf785[200];
+char buf786[200];
+char buf787[200];
+char buf788[200];
+char buf789[200];
+char buf790[200];
+char buf791[200];
+char buf792[200];
+char buf793[200];
+char buf794[200];
+char buf795[200];
+char buf796[200];
+char buf797[200];
+char buf798[200];
+char buf799[200];
+char buf800[200];
+char buf801[200];
+char buf802[200];
+char buf803[200];
+char buf804[200];
+char buf805[200];
+char buf806[200];
+char buf807[200];
+char buf808[200];
+char buf809[200];
+char buf810[200];
+char buf811[200];
+char buf812[200];
+char buf813[200];
+char buf814[200];
+char buf815[200];
+char buf816[200];
+char buf817[200];
+char buf818[200];
+char buf819[200];
+char buf820[200];
+char buf821[200];
+char buf822[200];
+char buf823[200];
+char buf824[200];
+char buf825[200];
+char buf826[200];
+char buf827[200];
+char buf828[200];
+char buf829[200];
+char buf830[200];
+char buf831[200];
+char buf832[200];
+char buf833[200];
+char buf834[200];
+char buf835[200];
+char buf836[200];
+char buf837[200];
+char buf838[200];
+char buf839[200];
+char buf840[200];
+char buf841[200];
+char buf842[200];
+char buf843[200];
+char buf844[200];
+char buf845[200];
+char buf846[200];
+char buf847[200];
+char buf848[200];
+char buf849[200];
+char buf850[200];
+char buf851[200];
+char buf852[200];
+char buf853[200];
+char buf854[200];
+char buf855[200];
+char buf856[200];
+char buf857[200];
+char buf858[200];
+char buf859[200];
+char buf860[200];
+char buf861[200];
+char buf862[200];
+char buf863[200];
+char buf864[200];
+char buf865[200];
+char buf866[200];
+char buf867[200];
+char buf868[200];
+char buf869[200];
+char buf870[200];
+char buf871[200];
+char buf872[200];
+char buf873[200];
+char buf874[200];
+char buf875[200];
+char buf876[200];
+char buf877[200];
+char buf878[200];
+char buf879[200];
+char buf880[200];
+char buf881[200];
+char buf882[200];
+char buf883[200];
+char buf884[200];
+char buf885[200];
+char buf886[200];
+char buf887[200];
+char buf888[200];
+char buf889[200];
+char buf890[200];
+char buf891[200];
+char buf892[200];
+char buf893[200];
+char buf894[200];
+char buf895[200];
+char buf896[200];
+char buf897[200];
+char buf898[200];
+char buf899[200];
+char buf900[200];
+char buf901[200];
+char buf902[200];
+char buf903[200];
+char buf904[200];
+char buf905[200];
+char buf906[200];
+char buf907[200];
+char buf908[200];
+char buf909[200];
+char buf910[200];
+char buf911[200];
+char buf912[200];
+char buf913[200];
+char buf914[200];
+char buf915[200];
+char buf916[200];
+char buf917[200];
+char buf918[200];
+char buf919[200];
+char buf920[200];
+char buf921[200];
+char buf922[200];
+char buf923[200];
+char buf924[200];
+char buf925[200];
+char buf926[200];
+char buf927[200];
+char buf928[200];
+char buf929[200];
+char buf930[200];
+char buf931[200];
+char buf932[200];
+char buf933[200];
+char buf934[200];
+char buf935[200];
+char buf936[200];
+char buf937[200];
+char buf938[200];
+char buf939[200];
+char buf940[200];
+char buf941[200];
+char buf942[200];
+char buf943[200];
+char buf944[200];
+char buf945[200];
+char buf946[200];
+char buf947[200];
+char buf948[200];
+char buf949[200];
+char buf950[200];
+char buf951[200];
+char buf952[200];
+char buf953[200];
+char buf954[200];
+char buf955[200];
+char buf956[200];
+char buf957[200];
+char buf958[200];
+char buf959[200];
+char buf960[200];
+char buf961[200];
+char buf962[200];
+char buf963[200];
+char buf964[200];
+char buf965[200];
+char buf966[200];
+char buf967[200];
+char buf968[200];
+char buf969[200];
+char buf970[200];
+char buf971[200];
+char buf972[200];
+char buf973[200];
+char buf974[200];
+char buf975[200];
+char buf976[200];
+char buf977[200];
+char buf978[200];
+char buf979[200];
+char buf980[200];
+char buf981[200];
+char buf982[200];
+char buf983[200];
+char buf984[200];
+char buf985[200];
+char buf986[200];
+char buf987[200];
+char buf988[200];
+char buf989[200];
+char buf990[200];
+char buf991[200];
+char buf992[200];
+char buf993[200];
+char buf994[200];
+char buf995[200];
+char buf996[200];
+char buf997[200];
+char buf998[200];
+char buf999[200];
+char buf1000[200];
+char buf1001[200];
+char buf1002[200];
+char buf1003[200];
+char buf1004[200];
+char buf1005[200];
+char buf1006[200];
+char buf1007[200];
+char buf1008[200];
+char buf1009[200];
+char buf1010[200];
+char buf1011[200];
+char buf1012[200];
+char buf1013[200];
+char buf1014[200];
+char buf1015[200];
+char buf1016[200];
+char buf1017[200];
+char buf1018[200];
+char buf1019[200];
+char buf1020[200];
+char buf1021[200];
+char buf1022[200];
+char buf1023[200];
+char buf1024[200];
+char buf1025[200];
+char buf1026[200];
+char buf1027[200];
+char buf1028[200];
+char buf1029[200];
+char buf1030[200];
+char buf1031[200];
+char buf1032[200];
+char buf1033[200];
+char buf1034[200];
+char buf1035[200];
+char buf1036[200];
+char buf1037[200];
+char buf1038[200];
+char buf1039[200];
+char buf1040[200];
+char buf1041[200];
+char buf1042[200];
+char buf1043[200];
+char buf1044[200];
+char buf1045[200];
+char buf1046[200];
+char buf1047[200];
+char buf1048[200];
+char buf1049[200];
+char buf1050[200];
+char buf1051[200];
+char buf1052[200];
+char buf1053[200];
+char buf1054[200];
+char buf1055[200];
+char buf1056[200];
+char buf1057[200];
+char buf1058[200];
+char buf1059[200];
+char buf1060[200];
+char buf1061[200];
+char buf1062[200];
+char buf1063[200];
+char buf1064[200];
+char buf1065[200];
+char buf1066[200];
+char buf1067[200];
+char buf1068[200];
+char buf1069[200];
+char buf1070[200];
+char buf1071[200];
+char buf1072[200];
+char buf1073[200];
+char buf1074[200];
+char buf1075[200];
+char buf1076[200];
+char buf1077[200];
+char buf1078[200];
+char buf1079[200];
+char buf1080[200];
+char buf1081[200];
+char buf1082[200];
+char buf1083[200];
+char buf1084[200];
+char buf1085[200];
+char buf1086[200];
+char buf1087[200];
+char buf1088[200];
+char buf1089[200];
+char buf1090[200];
+char buf1091[200];
+char buf1092[200];
+char buf1093[200];
+char buf1094[200];
+char buf1095[200];
+char buf1096[200];
+char buf1097[200];
+char buf1098[200];
+char buf1099[200];
+char buf1100[200];
+char buf1101[200];
+char buf1102[200];
+char buf1103[200];
+char buf1104[200];
+char buf1105[200];
+char buf1106[200];
+char buf1107[200];
+char buf1108[200];
+char buf1109[200];
+char buf1110[200];
+char buf1111[200];
+char buf1112[200];
+char buf1113[200];
+char buf1114[200];
+char buf1115[200];
+char buf1116[200];
+char buf1117[200];
+char buf1118[200];
+char buf1119[200];
+char buf1120[200];
+char buf1121[200];
+char buf1122[200];
+char buf1123[200];
+char buf1124[200];
+char buf1125[200];
+char buf1126[200];
+char buf1127[200];
+char buf1128[200];
+char buf1129[200];
+char buf1130[200];
+char buf1131[200];
+char buf1132[200];
+char buf1133[200];
+char buf1134[200];
+char buf1135[200];
+char buf1136[200];
+char buf1137[200];
+char buf1138[200];
+char buf1139[200];
+char buf1140[200];
+char buf1141[200];
+char buf1142[200];
+char buf1143[200];
+char buf1144[200];
+char buf1145[200];
+char buf1146[200];
+char buf1147[200];
+char buf1148[200];
+char buf1149[200];
+char buf1150[200];
+char buf1151[200];
+char buf1152[200];
+char buf1153[200];
+char buf1154[200];
+char buf1155[200];
+char buf1156[200];
+char buf1157[200];
+char buf1158[200];
+char buf1159[200];
+char buf1160[200];
+char buf1161[200];
+char buf1162[200];
+char buf1163[200];
+char buf1164[200];
+char buf1165[200];
+char buf1166[200];
+char buf1167[200];
+char buf1168[200];
+char buf1169[200];
+char buf1170[200];
+char buf1171[200];
+char buf1172[200];
+char buf1173[200];
+char buf1174[200];
+char buf1175[200];
+char buf1176[200];
+char buf1177[200];
+char buf1178[200];
+char buf1179[200];
+char buf1180[200];
+char buf1181[200];
+char buf1182[200];
+char buf1183[200];
+char buf1184[200];
+char buf1185[200];
+char buf1186[200];
+char buf1187[200];
+char buf1188[200];
+char buf1189[200];
+char buf1190[200];
+char buf1191[200];
+char buf1192[200];
+char buf1193[200];
+char buf1194[200];
+char buf1195[200];
+char buf1196[200];
+char buf1197[200];
+char buf1198[200];
+char buf1199[200];
+char buf1200[200];
+char buf1201[200];
+char buf1202[200];
+char buf1203[200];
+char buf1204[200];
+char buf1205[200];
+char buf1206[200];
+char buf1207[200];
+char buf1208[200];
+char buf1209[200];
+char buf1210[200];
+char buf1211[200];
+char buf1212[200];
+char buf1213[200];
+char buf1214[200];
+char buf1215[200];
+char buf1216[200];
+char buf1217[200];
+char buf1218[200];
+char buf1219[200];
+char buf1220[200];
+char buf1221[200];
+char buf1222[200];
+char buf1223[200];
+char buf1224[200];
+char buf1225[200];
+char buf1226[200];
+char buf1227[200];
+char buf1228[200];
+char buf1229[200];
+char buf1230[200];
+char buf1231[200];
+char buf1232[200];
+char buf1233[200];
+char buf1234[200];
+char buf1235[200];
+char buf1236[200];
+char buf1237[200];
+char buf1238[200];
+char buf1239[200];
+char buf1240[200];
+char buf1241[200];
+char buf1242[200];
+char buf1243[200];
+char buf1244[200];
+char buf1245[200];
+char buf1246[200];
+char buf1247[200];
+char buf1248[200];
+char buf1249[200];
+char buf1250[200];
+char buf1251[200];
+char buf1252[200];
+char buf1253[200];
+char buf1254[200];
+char buf1255[200];
+char buf1256[200];
+char buf1257[200];
+char buf1258[200];
+char buf1259[200];
+char buf1260[200];
+char buf1261[200];
+char buf1262[200];
+char buf1263[200];
+char buf1264[200];
+char buf1265[200];
+char buf1266[200];
+char buf1267[200];
+char buf1268[200];
+char buf1269[200];
+char buf1270[200];
+char buf1271[200];
+char buf1272[200];
+char buf1273[200];
+char buf1274[200];
+char buf1275[200];
+char buf1276[200];
+char buf1277[200];
+char buf1278[200];
+char buf1279[200];
+char buf1280[200];
+char buf1281[200];
+char buf1282[200];
+char buf1283[200];
+char buf1284[200];
+char buf1285[200];
+char buf1286[200];
+char buf1287[200];
+char buf1288[200];
+char buf1289[200];
+char buf1290[200];
+char buf1291[200];
+char buf1292[200];
+char buf1293[200];
+char buf1294[200];
+char buf1295[200];
+char buf1296[200];
+char buf1297[200];
+char buf1298[200];
+char buf1299[200];
+char buf1300[200];
+char buf1301[200];
+char buf1302[200];
+char buf1303[200];
+char buf1304[200];
+char buf1305[200];
+char buf1306[200];
+char buf1307[200];
+char buf1308[200];
+char buf1309[200];
+char buf1310[200];
+char buf1311[200];
+char buf1312[200];
+char buf1313[200];
+char buf1314[200];
+char buf1315[200];
+char buf1316[200];
+char buf1317[200];
+char buf1318[200];
+char buf1319[200];
+char buf1320[200];
+char buf1321[200];
+char buf1322[200];
+char buf1323[200];
+char buf1324[200];
+char buf1325[200];
+char buf1326[200];
+char buf1327[200];
+char buf1328[200];
+char buf1329[200];
+char buf1330[200];
+char buf1331[200];
+char buf1332[200];
+char buf1333[200];
+char buf1334[200];
+char buf1335[200];
+char buf1336[200];
+char buf1337[200];
+char buf1338[200];
+char buf1339[200];
+char buf1340[200];
+char buf1341[200];
+char buf1342[200];
+char buf1343[200];
+char buf1344[200];
+char buf1345[200];
+char buf1346[200];
+char buf1347[200];
+char buf1348[200];
+char buf1349[200];
+char buf1350[200];
+char buf1351[200];
+char buf1352[200];
+char buf1353[200];
+char buf1354[200];
+char buf1355[200];
+char buf1356[200];
+char buf1357[200];
+char buf1358[200];
+char buf1359[200];
+char buf1360[200];
+char buf1361[200];
+char buf1362[200];
+char buf1363[200];
+char buf1364[200];
+char buf1365[200];
+char buf1366[200];
+char buf1367[200];
+char buf1368[200];
+char buf1369[200];
+char buf1370[200];
+char buf1371[200];
+char buf1372[200];
+char buf1373[200];
+char buf1374[200];
+char buf1375[200];
+char buf1376[200];
+char buf1377[200];
+char buf1378[200];
+char buf1379[200];
+char buf1380[200];
+char buf1381[200];
+char buf1382[200];
+char buf1383[200];
+char buf1384[200];
+char buf1385[200];
+char buf1386[200];
+char buf1387[200];
+char buf1388[200];
+char buf1389[200];
+char buf1390[200];
+char buf1391[200];
+char buf1392[200];
+char buf1393[200];
+char buf1394[200];
+char buf1395[200];
+char buf1396[200];
+char buf1397[200];
+char buf1398[200];
+char buf1399[200];
+char buf1400[200];
+char buf1401[200];
+char buf1402[200];
+char buf1403[200];
+char buf1404[200];
+char buf1405[200];
+char buf1406[200];
+char buf1407[200];
+char buf1408[200];
+char buf1409[200];
+char buf1410[200];
+char buf1411[200];
+char buf1412[200];
+char buf1413[200];
+char buf1414[200];
+char buf1415[200];
+char buf1416[200];
+char buf1417[200];
+char buf1418[200];
+char buf1419[200];
+char buf1420[200];
+char buf1421[200];
+char buf1422[200];
+char buf1423[200];
+char buf1424[200];
+char buf1425[200];
+char buf1426[200];
+char buf1427[200];
+char buf1428[200];
+char buf1429[200];
+char buf1430[200];
+char buf1431[200];
+char buf1432[200];
+char buf1433[200];
+char buf1434[200];
+char buf1435[200];
+char buf1436[200];
+char buf1437[200];
+char buf1438[200];
+char buf1439[200];
+char buf1440[200];
+char buf1441[200];
+char buf1442[200];
+char buf1443[200];
+char buf1444[200];
+char buf1445[200];
+char buf1446[200];
+char buf1447[200];
+char buf1448[200];
+char buf1449[200];
+char buf1450[200];
+char buf1451[200];
+char buf1452[200];
+char buf1453[200];
+char buf1454[200];
+char buf1455[200];
+char buf1456[200];
+char buf1457[200];
+char buf1458[200];
+char buf1459[200];
+char buf1460[200];
+char buf1461[200];
+char buf1462[200];
+char buf1463[200];
+char buf1464[200];
+char buf1465[200];
+char buf1466[200];
+char buf1467[200];
+char buf1468[200];
+char buf1469[200];
+char buf1470[200];
+char buf1471[200];
+char buf1472[200];
+char buf1473[200];
+char buf1474[200];
+char buf1475[200];
+char buf1476[200];
+char buf1477[200];
+char buf1478[200];
+char buf1479[200];
+char buf1480[200];
+char buf1481[200];
+char buf1482[200];
+char buf1483[200];
+char buf1484[200];
+char buf1485[200];
+char buf1486[200];
+char buf1487[200];
+char buf1488[200];
+char buf1489[200];
+char buf1490[200];
+char buf1491[200];
+char buf1492[200];
+char buf1493[200];
+char buf1494[200];
+char buf1495[200];
+char buf1496[200];
+char buf1497[200];
+char buf1498[200];
+char buf1499[200];
+char buf1500[200];
+char buf1501[200];
+char buf1502[200];
+char buf1503[200];
+char buf1504[200];
+char buf1505[200];
+char buf1506[200];
+char buf1507[200];
+char buf1508[200];
+char buf1509[200];
+char buf1510[200];
+char buf1511[200];
+char buf1512[200];
+char buf1513[200];
+char buf1514[200];
+char buf1515[200];
+char buf1516[200];
+char buf1517[200];
+char buf1518[200];
+char buf1519[200];
+char buf1520[200];
+char buf1521[200];
+char buf1522[200];
+char buf1523[200];
+char buf1524[200];
+char buf1525[200];
+char buf1526[200];
+char buf1527[200];
+char buf1528[200];
+char buf1529[200];
+char buf1530[200];
+char buf1531[200];
+char buf1532[200];
+char buf1533[200];
+char buf1534[200];
+char buf1535[200];
+char buf1536[200];
+char buf1537[200];
+char buf1538[200];
+char buf1539[200];
+char buf1540[200];
+char buf1541[200];
+char buf1542[200];
+char buf1543[200];
+char buf1544[200];
+char buf1545[200];
+char buf1546[200];
+char buf1547[200];
+char buf1548[200];
+char buf1549[200];
+char buf1550[200];
+char buf1551[200];
+char buf1552[200];
+char buf1553[200];
+char buf1554[200];
+char buf1555[200];
+char buf1556[200];
+char buf1557[200];
+char buf1558[200];
+char buf1559[200];
+char buf1560[200];
+char buf1561[200];
+char buf1562[200];
+char buf1563[200];
+char buf1564[200];
+char buf1565[200];
+char buf1566[200];
+char buf1567[200];
+char buf1568[200];
+char buf1569[200];
+char buf1570[200];
+char buf1571[200];
+char buf1572[200];
+char buf1573[200];
+char buf1574[200];
+char buf1575[200];
+char buf1576[200];
+char buf1577[200];
+char buf1578[200];
+char buf1579[200];
+char buf1580[200];
+char buf1581[200];
+char buf1582[200];
+char buf1583[200];
+char buf1584[200];
+char buf1585[200];
+char buf1586[200];
+char buf1587[200];
+char buf1588[200];
+char buf1589[200];
+char buf1590[200];
+char buf1591[200];
+char buf1592[200];
+char buf1593[200];
+char buf1594[200];
+char buf1595[200];
+char buf1596[200];
+char buf1597[200];
+char buf1598[200];
+char buf1599[200];
+char buf1600[200];
+char buf1601[200];
+char buf1602[200];
+char buf1603[200];
+char buf1604[200];
+char buf1605[200];
+char buf1606[200];
+char buf1607[200];
+char buf1608[200];
+char buf1609[200];
+char buf1610[200];
+char buf1611[200];
+char buf1612[200];
+char buf1613[200];
+char buf1614[200];
+char buf1615[200];
+char buf1616[200];
+char buf1617[200];
+char buf1618[200];
+char buf1619[200];
+char buf1620[200];
+char buf1621[200];
+char buf1622[200];
+char buf1623[200];
+char buf1624[200];
+char buf1625[200];
+char buf1626[200];
+char buf1627[200];
+char buf1628[200];
+char buf1629[200];
+char buf1630[200];
+char buf1631[200];
+char buf1632[200];
+char buf1633[200];
+char buf1634[200];
+char buf1635[200];
+char buf1636[200];
+char buf1637[200];
+char buf1638[200];
+char buf1639[200];
+char buf1640[200];
+char buf1641[200];
+char buf1642[200];
+char buf1643[200];
+char buf1644[200];
+char buf1645[200];
+char buf1646[200];
+char buf1647[200];
+char buf1648[200];
+char buf1649[200];
+char buf1650[200];
+char buf1651[200];
+char buf1652[200];
+char buf1653[200];
+char buf1654[200];
+char buf1655[200];
+char buf1656[200];
+char buf1657[200];
+char buf1658[200];
+char buf1659[200];
+char buf1660[200];
+char buf1661[200];
+char buf1662[200];
+char buf1663[200];
+char buf1664[200];
+char buf1665[200];
+char buf1666[200];
+char buf1667[200];
+char buf1668[200];
+char buf1669[200];
+char buf1670[200];
+char buf1671[200];
+char buf1672[200];
+char buf1673[200];
+char buf1674[200];
+char buf1675[200];
+char buf1676[200];
+char buf1677[200];
+char buf1678[200];
+char buf1679[200];
+char buf1680[200];
+char buf1681[200];
+char buf1682[200];
+char buf1683[200];
+char buf1684[200];
+char buf1685[200];
+char buf1686[200];
+char buf1687[200];
+char buf1688[200];
+char buf1689[200];
+char buf1690[200];
+char buf1691[200];
+char buf1692[200];
+char buf1693[200];
+char buf1694[200];
+char buf1695[200];
+char buf1696[200];
+char buf1697[200];
+char buf1698[200];
+char buf1699[200];
+char buf1700[200];
+char buf1701[200];
+char buf1702[200];
+char buf1703[200];
+char buf1704[200];
+char buf1705[200];
+char buf1706[200];
+char buf1707[200];
+char buf1708[200];
+char buf1709[200];
+char buf1710[200];
+char buf1711[200];
+char buf1712[200];
+char buf1713[200];
+char buf1714[200];
+char buf1715[200];
+char buf1716[200];
+char buf1717[200];
+char buf1718[200];
+char buf1719[200];
+char buf1720[200];
+char buf1721[200];
+char buf1722[200];
+char buf1723[200];
+char buf1724[200];
+char buf1725[200];
+char buf1726[200];
+char buf1727[200];
+char buf1728[200];
+char buf1729[200];
+char buf1730[200];
+char buf1731[200];
+char buf1732[200];
+char buf1733[200];
+char buf1734[200];
+char buf1735[200];
+char buf1736[200];
+char buf1737[200];
+char buf1738[200];
+char buf1739[200];
+char buf1740[200];
+char buf1741[200];
+char buf1742[200];
+char buf1743[200];
+char buf1744[200];
+char buf1745[200];
+char buf1746[200];
+char buf1747[200];
+char buf1748[200];
+char buf1749[200];
+char buf1750[200];
+char buf1751[200];
+char buf1752[200];
+char buf1753[200];
+char buf1754[200];
+char buf1755[200];
+char buf1756[200];
+char buf1757[200];
+char buf1758[200];
+char buf1759[200];
+char buf1760[200];
+char buf1761[200];
+char buf1762[200];
+char buf1763[200];
+char buf1764[200];
+char buf1765[200];
+char buf1766[200];
+char buf1767[200];
+char buf1768[200];
+char buf1769[200];
+char buf1770[200];
+char buf1771[200];
+char buf1772[200];
+char buf1773[200];
+char buf1774[200];
+char buf1775[200];
+char buf1776[200];
+char buf1777[200];
+char buf1778[200];
+char buf1779[200];
+char buf1780[200];
+char buf1781[200];
+char buf1782[200];
+char buf1783[200];
+char buf1784[200];
+char buf1785[200];
+char buf1786[200];
+char buf1787[200];
+char buf1788[200];
+char buf1789[200];
+char buf1790[200];
+char buf1791[200];
+char buf1792[200];
+char buf1793[200];
+char buf1794[200];
+char buf1795[200];
+char buf1796[200];
+char buf1797[200];
+char buf1798[200];
+char buf1799[200];
+char buf1800[200];
+char buf1801[200];
+char buf1802[200];
+char buf1803[200];
+char buf1804[200];
+char buf1805[200];
+char buf1806[200];
+char buf1807[200];
+char buf1808[200];
+char buf1809[200];
+char buf1810[200];
+char buf1811[200];
+char buf1812[200];
+char buf1813[200];
+char buf1814[200];
+char buf1815[200];
+char buf1816[200];
+char buf1817[200];
+char buf1818[200];
+char buf1819[200];
+char buf1820[200];
+char buf1821[200];
+char buf1822[200];
+char buf1823[200];
+char buf1824[200];
+char buf1825[200];
+char buf1826[200];
+char buf1827[200];
+char buf1828[200];
+char buf1829[200];
+char buf1830[200];
+char buf1831[200];
+char buf1832[200];
+char buf1833[200];
+char buf1834[200];
+char buf1835[200];
+char buf1836[200];
+char buf1837[200];
+char buf1838[200];
+char buf1839[200];
+char buf1840[200];
+char buf1841[200];
+char buf1842[200];
+char buf1843[200];
+char buf1844[200];
+char buf1845[200];
+char buf1846[200];
+char buf1847[200];
+char buf1848[200];
+char buf1849[200];
+char buf1850[200];
+char buf1851[200];
+char buf1852[200];
+char buf1853[200];
+char buf1854[200];
+char buf1855[200];
+char buf1856[200];
+char buf1857[200];
+char buf1858[200];
+char buf1859[200];
+char buf1860[200];
+char buf1861[200];
+char buf1862[200];
+char buf1863[200];
+char buf1864[200];
+char buf1865[200];
+char buf1866[200];
+char buf1867[200];
+char buf1868[200];
+char buf1869[200];
+char buf1870[200];
+char buf1871[200];
+char buf1872[200];
+char buf1873[200];
+char buf1874[200];
+char buf1875[200];
+char buf1876[200];
+char buf1877[200];
+char buf1878[200];
+char buf1879[200];
+char buf1880[200];
+char buf1881[200];
+char buf1882[200];
+char buf1883[200];
+char buf1884[200];
+char buf1885[200];
+char buf1886[200];
+char buf1887[200];
+char buf1888[200];
+char buf1889[200];
+char buf1890[200];
+char buf1891[200];
+char buf1892[200];
+char buf1893[200];
+char buf1894[200];
+char buf1895[200];
+char buf1896[200];
+char buf1897[200];
+char buf1898[200];
+char buf1899[200];
+char buf1900[200];
+char buf1901[200];
+char buf1902[200];
+char buf1903[200];
+char buf1904[200];
+char buf1905[200];
+char buf1906[200];
+char buf1907[200];
+char buf1908[200];
+char buf1909[200];
+char buf1910[200];
+char buf1911[200];
+char buf1912[200];
+char buf1913[200];
+char buf1914[200];
+char buf1915[200];
+char buf1916[200];
+char buf1917[200];
+char buf1918[200];
+char buf1919[200];
+char buf1920[200];
+char buf1921[200];
+char buf1922[200];
+char buf1923[200];
+char buf1924[200];
+char buf1925[200];
+char buf1926[200];
+char buf1927[200];
+char buf1928[200];
+char buf1929[200];
+char buf1930[200];
+char buf1931[200];
+char buf1932[200];
+char buf1933[200];
+char buf1934[200];
+char buf1935[200];
+char buf1936[200];
+char buf1937[200];
+char buf1938[200];
+char buf1939[200];
+char buf1940[200];
+char buf1941[200];
+char buf1942[200];
+char buf1943[200];
+char buf1944[200];
+char buf1945[200];
+char buf1946[200];
+char buf1947[200];
+char buf1948[200];
+char buf1949[200];
+char buf1950[200];
+char buf1951[200];
+char buf1952[200];
+char buf1953[200];
+char buf1954[200];
+char buf1955[200];
+char buf1956[200];
+char buf1957[200];
+char buf1958[200];
+char buf1959[200];
+char buf1960[200];
+char buf1961[200];
+char buf1962[200];
+char buf1963[200];
+char buf1964[200];
+char buf1965[200];
+char buf1966[200];
+char buf1967[200];
+char buf1968[200];
+char buf1969[200];
+char buf1970[200];
+char buf1971[200];
+char buf1972[200];
+char buf1973[200];
+char buf1974[200];
+char buf1975[200];
+char buf1976[200];
+char buf1977[200];
+char buf1978[200];
+char buf1979[200];
+char buf1980[200];
+char buf1981[200];
+char buf1982[200];
+char buf1983[200];
+char buf1984[200];
+char buf1985[200];
+char buf1986[200];
+char buf1987[200];
+char buf1988[200];
+char buf1989[200];
+char buf1990[200];
+char buf1991[200];
+char buf1992[200];
+char buf1993[200];
+char buf1994[200];
+char buf1995[200];
+char buf1996[200];
+char buf1997[200];
+char buf1998[200];
+char buf1999[200];
+char buf2000[200];
+char buf2001[200];
+char buf2002[200];
+char buf2003[200];
+char buf2004[200];
+char buf2005[200];
+char buf2006[200];
+char buf2007[200];
+char buf2008[200];
+char buf2009[200];
+char buf2010[200];
+char buf2011[200];
+char buf2012[200];
+char buf2013[200];
+char buf2014[200];
+char buf2015[200];
+char buf2016[200];
+char buf2017[200];
+char buf2018[200];
+char buf2019[200];
+char buf2020[200];
+char buf2021[200];
+char buf2022[200];
+char buf2023[200];
+char buf2024[200];
+char buf2025[200];
+char buf2026[200];
+char buf2027[200];
+char buf2028[200];
+char buf2029[200];
+char buf2030[200];
+char buf2031[200];
+char buf2032[200];
+char buf2033[200];
+char buf2034[200];
+char buf2035[200];
+char buf2036[200];
+char buf2037[200];
+char buf2038[200];
+char buf2039[200];
+char buf2040[200];
+char buf2041[200];
+char buf2042[200];
+char buf2043[200];
+char buf2044[200];
+char buf2045[200];
+char buf2046[200];
+char buf2047[200];
+char buf2048[200];
+char buf2049[200];
+char buf2050[200];
+char buf2051[200];
+char buf2052[200];
+char buf2053[200];
+char buf2054[200];
+char buf2055[200];
+char buf2056[200];
+char buf2057[200];
+char buf2058[200];
+char buf2059[200];
+char buf2060[200];
+char buf2061[200];
+char buf2062[200];
+char buf2063[200];
+char buf2064[200];
+char buf2065[200];
+char buf2066[200];
+char buf2067[200];
+char buf2068[200];
+char buf2069[200];
+char buf2070[200];
+char buf2071[200];
+char buf2072[200];
+char buf2073[200];
+char buf2074[200];
+char buf2075[200];
+char buf2076[200];
+char buf2077[200];
+char buf2078[200];
+char buf2079[200];
+char buf2080[200];
+char buf2081[200];
+char buf2082[200];
+char buf2083[200];
+char buf2084[200];
+char buf2085[200];
+char buf2086[200];
+char buf2087[200];
+char buf2088[200];
+char buf2089[200];
+char buf2090[200];
+char buf2091[200];
+char buf2092[200];
+char buf2093[200];
+char buf2094[200];
+char buf2095[200];
+char buf2096[200];
+char buf2097[200];
+char buf2098[200];
+char buf2099[200];
+char buf2100[200];
+char buf2101[200];
+char buf2102[200];
+char buf2103[200];
+char buf2104[200];
+char buf2105[200];
+char buf2106[200];
+char buf2107[200];
+char buf2108[200];
+char buf2109[200];
+char buf2110[200];
+char buf2111[200];
+char buf2112[200];
+char buf2113[200];
+char buf2114[200];
+char buf2115[200];
+char buf2116[200];
+char buf2117[200];
+char buf2118[200];
+char buf2119[200];
+char buf2120[200];
+char buf2121[200];
+char buf2122[200];
+char buf2123[200];
+char buf2124[200];
+char buf2125[200];
+char buf2126[200];
+char buf2127[200];
+char buf2128[200];
+char buf2129[200];
+char buf2130[200];
+char buf2131[200];
+char buf2132[200];
+char buf2133[200];
+char buf2134[200];
+char buf2135[200];
+char buf2136[200];
+char buf2137[200];
+char buf2138[200];
+char buf2139[200];
+char buf2140[200];
+char buf2141[200];
+char buf2142[200];
+char buf2143[200];
+char buf2144[200];
+char buf2145[200];
+char buf2146[200];
+char buf2147[200];
+char buf2148[200];
+char buf2149[200];
+char buf2150[200];
+char buf2151[200];
+char buf2152[200];
+char buf2153[200];
+char buf2154[200];
+char buf2155[200];
+char buf2156[200];
+char buf2157[200];
+char buf2158[200];
+char buf2159[200];
+char buf2160[200];
+char buf2161[200];
+char buf2162[200];
+char buf2163[200];
+char buf2164[200];
+char buf2165[200];
+char buf2166[200];
+char buf2167[200];
+char buf2168[200];
+char buf2169[200];
+char buf2170[200];
+char buf2171[200];
+char buf2172[200];
+char buf2173[200];
+char buf2174[200];
+char buf2175[200];
+char buf2176[200];
+char buf2177[200];
+char buf2178[200];
+char buf2179[200];
+char buf2180[200];
+char buf2181[200];
+char buf2182[200];
+char buf2183[200];
+char buf2184[200];
+char buf2185[200];
+char buf2186[200];
+char buf2187[200];
+char buf2188[200];
+char buf2189[200];
+char buf2190[200];
+char buf2191[200];
+char buf2192[200];
+char buf2193[200];
+char buf2194[200];
+char buf2195[200];
+char buf2196[200];
+char buf2197[200];
+char buf2198[200];
+char buf2199[200];
+char buf2200[200];
+char buf2201[200];
+char buf2202[200];
+char buf2203[200];
+char buf2204[200];
+char buf2205[200];
+char buf2206[200];
+char buf2207[200];
+char buf2208[200];
+char buf2209[200];
+char buf2210[200];
+char buf2211[200];
+char buf2212[200];
+char buf2213[200];
+char buf2214[200];
+char buf2215[200];
+char buf2216[200];
+char buf2217[200];
+char buf2218[200];
+char buf2219[200];
+char buf2220[200];
+char buf2221[200];
+char buf2222[200];
+char buf2223[200];
+char buf2224[200];
+char buf2225[200];
+char buf2226[200];
+char buf2227[200];
+char buf2228[200];
+char buf2229[200];
+char buf2230[200];
+char buf2231[200];
+char buf2232[200];
+char buf2233[200];
+char buf2234[200];
+char buf2235[200];
+char buf2236[200];
+char buf2237[200];
+char buf2238[200];
+char buf2239[200];
+char buf2240[200];
+char buf2241[200];
+char buf2242[200];
+char buf2243[200];
+char buf2244[200];
+char buf2245[200];
+char buf2246[200];
+char buf2247[200];
+char buf2248[200];
+char buf2249[200];
+char buf2250[200];
+char buf2251[200];
+char buf2252[200];
+char buf2253[200];
+char buf2254[200];
+char buf2255[200];
+char buf2256[200];
+char buf2257[200];
+char buf2258[200];
+char buf2259[200];
+char buf2260[200];
+char buf2261[200];
+char buf2262[200];
+char buf2263[200];
+char buf2264[200];
+char buf2265[200];
+char buf2266[200];
+char buf2267[200];
+char buf2268[200];
+char buf2269[200];
+char buf2270[200];
+char buf2271[200];
+char buf2272[200];
+char buf2273[200];
+char buf2274[200];
+char buf2275[200];
+char buf2276[200];
+char buf2277[200];
+char buf2278[200];
+char buf2279[200];
+char buf2280[200];
+char buf2281[200];
+char buf2282[200];
+char buf2283[200];
+char buf2284[200];
+char buf2285[200];
+char buf2286[200];
+char buf2287[200];
+char buf2288[200];
+char buf2289[200];
+char buf2290[200];
+char buf2291[200];
+char buf2292[200];
+char buf2293[200];
+char buf2294[200];
+char buf2295[200];
+char buf2296[200];
+char buf2297[200];
+char buf2298[200];
+char buf2299[200];
+char buf2300[200];
+char buf2301[200];
+char buf2302[200];
+char buf2303[200];
+char buf2304[200];
+char buf2305[200];
+char buf2306[200];
+char buf2307[200];
+char buf2308[200];
+char buf2309[200];
+char buf2310[200];
+char buf2311[200];
+char buf2312[200];
+char buf2313[200];
+char buf2314[200];
+char buf2315[200];
+char buf2316[200];
+char buf2317[200];
+char buf2318[200];
+char buf2319[200];
+char buf2320[200];
+char buf2321[200];
+char buf2322[200];
+char buf2323[200];
+char buf2324[200];
+char buf2325[200];
+char buf2326[200];
+char buf2327[200];
+char buf2328[200];
+char buf2329[200];
+char buf2330[200];
+char buf2331[200];
+char buf2332[200];
+char buf2333[200];
+char buf2334[200];
+char buf2335[200];
+char buf2336[200];
+char buf2337[200];
+char buf2338[200];
+char buf2339[200];
+char buf2340[200];
+char buf2341[200];
+char buf2342[200];
+char buf2343[200];
+char buf2344[200];
+char buf2345[200];
+char buf2346[200];
+char buf2347[200];
+char buf2348[200];
+char buf2349[200];
+char buf2350[200];
+char buf2351[200];
+char buf2352[200];
+char buf2353[200];
+char buf2354[200];
+char buf2355[200];
+char buf2356[200];
+char buf2357[200];
+char buf2358[200];
+char buf2359[200];
+char buf2360[200];
+char buf2361[200];
+char buf2362[200];
+char buf2363[200];
+char buf2364[200];
+char buf2365[200];
+char buf2366[200];
+char buf2367[200];
+char buf2368[200];
+char buf2369[200];
+char buf2370[200];
+char buf2371[200];
+char buf2372[200];
+char buf2373[200];
+char buf2374[200];
+char buf2375[200];
+char buf2376[200];
+char buf2377[200];
+char buf2378[200];
+char buf2379[200];
+char buf2380[200];
+char buf2381[200];
+char buf2382[200];
+char buf2383[200];
+char buf2384[200];
+char buf2385[200];
+char buf2386[200];
+char buf2387[200];
+char buf2388[200];
+char buf2389[200];
+char buf2390[200];
+char buf2391[200];
+char buf2392[200];
+char buf2393[200];
+char buf2394[200];
+char buf2395[200];
+char buf2396[200];
+char buf2397[200];
+char buf2398[200];
+char buf2399[200];
+char buf2400[200];
+char buf2401[200];
+char buf2402[200];
+char buf2403[200];
+char buf2404[200];
+char buf2405[200];
+char buf2406[200];
+char buf2407[200];
+char buf2408[200];
+char buf2409[200];
+char buf2410[200];
+char buf2411[200];
+char buf2412[200];
+char buf2413[200];
+char buf2414[200];
+char buf2415[200];
+char buf2416[200];
+char buf2417[200];
+char buf2418[200];
+char buf2419[200];
+char buf2420[200];
+char buf2421[200];
+char buf2422[200];
+char buf2423[200];
+char buf2424[200];
+char buf2425[200];
+char buf2426[200];
+char buf2427[200];
+char buf2428[200];
+char buf2429[200];
+char buf2430[200];
+char buf2431[200];
+char buf2432[200];
+char buf2433[200];
+char buf2434[200];
+char buf2435[200];
+char buf2436[200];
+char buf2437[200];
+char buf2438[200];
+char buf2439[200];
+char buf2440[200];
+char buf2441[200];
+char buf2442[200];
+char buf2443[200];
+char buf2444[200];
+char buf2445[200];
+char buf2446[200];
+char buf2447[200];
+char buf2448[200];
+char buf2449[200];
+char buf2450[200];
+char buf2451[200];
+char buf2452[200];
+char buf2453[200];
+char buf2454[200];
+char buf2455[200];
+char buf2456[200];
+char buf2457[200];
+char buf2458[200];
+char buf2459[200];
+char buf2460[200];
+char buf2461[200];
+char buf2462[200];
+char buf2463[200];
+char buf2464[200];
+char buf2465[200];
+char buf2466[200];
+char buf2467[200];
+char buf2468[200];
+char buf2469[200];
+char buf2470[200];
+char buf2471[200];
+char buf2472[200];
+char buf2473[200];
+char buf2474[200];
+char buf2475[200];
+char buf2476[200];
+char buf2477[200];
+char buf2478[200];
+char buf2479[200];
+char buf2480[200];
+char buf2481[200];
+char buf2482[200];
+char buf2483[200];
+char buf2484[200];
+char buf2485[200];
+char buf2486[200];
+char buf2487[200];
+char buf2488[200];
+char buf2489[200];
+char buf2490[200];
+char buf2491[200];
+char buf2492[200];
+char buf2493[200];
+char buf2494[200];
+char buf2495[200];
+char buf2496[200];
+char buf2497[200];
+char buf2498[200];
+char buf2499[200];
+char buf2500[200];
+char buf2501[200];
+char buf2502[200];
+char buf2503[200];
+char buf2504[200];
+char buf2505[200];
+char buf2506[200];
+char buf2507[200];
+char buf2508[200];
+char buf2509[200];
+char buf2510[200];
+char buf2511[200];
+char buf2512[200];
+char buf2513[200];
+char buf2514[200];
+char buf2515[200];
+char buf2516[200];
+char buf2517[200];
+char buf2518[200];
+char buf2519[200];
+char buf2520[200];
+char buf2521[200];
+char buf2522[200];
+char buf2523[200];
+char buf2524[200];
+char buf2525[200];
+char buf2526[200];
+char buf2527[200];
+char buf2528[200];
+char buf2529[200];
+char buf2530[200];
+char buf2531[200];
+char buf2532[200];
+char buf2533[200];
+char buf2534[200];
+char buf2535[200];
+char buf2536[200];
+char buf2537[200];
+char buf2538[200];
+char buf2539[200];
+char buf2540[200];
+char buf2541[200];
+char buf2542[200];
+char buf2543[200];
+char buf2544[200];
+char buf2545[200];
+char buf2546[200];
+char buf2547[200];
+char buf2548[200];
+char buf2549[200];
+char buf2550[200];
+char buf2551[200];
+char buf2552[200];
+char buf2553[200];
+char buf2554[200];
+char buf2555[200];
+char buf2556[200];
+char buf2557[200];
+char buf2558[200];
+char buf2559[200];
+char buf2560[200];
+char buf2561[200];
+char buf2562[200];
+char buf2563[200];
+char buf2564[200];
+char buf2565[200];
+char buf2566[200];
+char buf2567[200];
+char buf2568[200];
+char buf2569[200];
+char buf2570[200];
+char buf2571[200];
+char buf2572[200];
+char buf2573[200];
+char buf2574[200];
+char buf2575[200];
+char buf2576[200];
+char buf2577[200];
+char buf2578[200];
+char buf2579[200];
+char buf2580[200];
+char buf2581[200];
+char buf2582[200];
+char buf2583[200];
+char buf2584[200];
+char buf2585[200];
+char buf2586[200];
+char buf2587[200];
+char buf2588[200];
+char buf2589[200];
+char buf2590[200];
+char buf2591[200];
+char buf2592[200];
+char buf2593[200];
+char buf2594[200];
+char buf2595[200];
+char buf2596[200];
+char buf2597[200];
+char buf2598[200];
+char buf2599[200];
+char buf2600[200];
+char buf2601[200];
+char buf2602[200];
+char buf2603[200];
+char buf2604[200];
+char buf2605[200];
+char buf2606[200];
+char buf2607[200];
+char buf2608[200];
+char buf2609[200];
+char buf2610[200];
+char buf2611[200];
+char buf2612[200];
+char buf2613[200];
+char buf2614[200];
+char buf2615[200];
+char buf2616[200];
+char buf2617[200];
+char buf2618[200];
+char buf2619[200];
+char buf2620[200];
+char buf2621[200];
+char buf2622[200];
+char buf2623[200];
+char buf2624[200];
+char buf2625[200];
+char buf2626[200];
+char buf2627[200];
+char buf2628[200];
+char buf2629[200];
+char buf2630[200];
+char buf2631[200];
+char buf2632[200];
+char buf2633[200];
+char buf2634[200];
+char buf2635[200];
+char buf2636[200];
+char buf2637[200];
+char buf2638[200];
+char buf2639[200];
+char buf2640[200];
+char buf2641[200];
+char buf2642[200];
+char buf2643[200];
+char buf2644[200];
+char buf2645[200];
+char buf2646[200];
+char buf2647[200];
+char buf2648[200];
+char buf2649[200];
+char buf2650[200];
+char buf2651[200];
+char buf2652[200];
+char buf2653[200];
+char buf2654[200];
+char buf2655[200];
+char buf2656[200];
+char buf2657[200];
+char buf2658[200];
+char buf2659[200];
+char buf2660[200];
+char buf2661[200];
+char buf2662[200];
+char buf2663[200];
+char buf2664[200];
+char buf2665[200];
+char buf2666[200];
+char buf2667[200];
+char buf2668[200];
+char buf2669[200];
+char buf2670[200];
+char buf2671[200];
+char buf2672[200];
+char buf2673[200];
+char buf2674[200];
+char buf2675[200];
+char buf2676[200];
+char buf2677[200];
+char buf2678[200];
+char buf2679[200];
+char buf2680[200];
+char buf2681[200];
+char buf2682[200];
+char buf2683[200];
+char buf2684[200];
+char buf2685[200];
+char buf2686[200];
+char buf2687[200];
+char buf2688[200];
+char buf2689[200];
+char buf2690[200];
+char buf2691[200];
+char buf2692[200];
+char buf2693[200];
+char buf2694[200];
+char buf2695[200];
+char buf2696[200];
+char buf2697[200];
+char buf2698[200];
+char buf2699[200];
+char buf2700[200];
+char buf2701[200];
+char buf2702[200];
+char buf2703[200];
+char buf2704[200];
+char buf2705[200];
+char buf2706[200];
+char buf2707[200];
+char buf2708[200];
+char buf2709[200];
+char buf2710[200];
+char buf2711[200];
+char buf2712[200];
+char buf2713[200];
+char buf2714[200];
+char buf2715[200];
+char buf2716[200];
+char buf2717[200];
+char buf2718[200];
+char buf2719[200];
+char buf2720[200];
+char buf2721[200];
+char buf2722[200];
+char buf2723[200];
+char buf2724[200];
+char buf2725[200];
+char buf2726[200];
+char buf2727[200];
+char buf2728[200];
+char buf2729[200];
+char buf2730[200];
+char buf2731[200];
+char buf2732[200];
+char buf2733[200];
+char buf2734[200];
+char buf2735[200];
+char buf2736[200];
+char buf2737[200];
+char buf2738[200];
+char buf2739[200];
+char buf2740[200];
+char buf2741[200];
+char buf2742[200];
+char buf2743[200];
+char buf2744[200];
+char buf2745[200];
+char buf2746[200];
+char buf2747[200];
+char buf2748[200];
+char buf2749[200];
+char buf2750[200];
+char buf2751[200];
+char buf2752[200];
+char buf2753[200];
+char buf2754[200];
+char buf2755[200];
+char buf2756[200];
+char buf2757[200];
+char buf2758[200];
+char buf2759[200];
+char buf2760[200];
+char buf2761[200];
+char buf2762[200];
+char buf2763[200];
+char buf2764[200];
+char buf2765[200];
+char buf2766[200];
+char buf2767[200];
+char buf2768[200];
+char buf2769[200];
+char buf2770[200];
+char buf2771[200];
+char buf2772[200];
+char buf2773[200];
+char buf2774[200];
+char buf2775[200];
+char buf2776[200];
+char buf2777[200];
+char buf2778[200];
+char buf2779[200];
+char buf2780[200];
+char buf2781[200];
+char buf2782[200];
+char buf2783[200];
+char buf2784[200];
+char buf2785[200];
+char buf2786[200];
+char buf2787[200];
+char buf2788[200];
+char buf2789[200];
+char buf2790[200];
+char buf2791[200];
+char buf2792[200];
+char buf2793[200];
+char buf2794[200];
+char buf2795[200];
+char buf2796[200];
+char buf2797[200];
+char buf2798[200];
+char buf2799[200];
+char buf2800[200];
+char buf2801[200];
+char buf2802[200];
+char buf2803[200];
+char buf2804[200];
+char buf2805[200];
+char buf2806[200];
+char buf2807[200];
+char buf2808[200];
+char buf2809[200];
+char buf2810[200];
+char buf2811[200];
+char buf2812[200];
+char buf2813[200];
+char buf2814[200];
+char buf2815[200];
+char buf2816[200];
+char buf2817[200];
+char buf2818[200];
+char buf2819[200];
+char buf2820[200];
+char buf2821[200];
+char buf2822[200];
+char buf2823[200];
+char buf2824[200];
+char buf2825[200];
+char buf2826[200];
+char buf2827[200];
+char buf2828[200];
+char buf2829[200];
+char buf2830[200];
+char buf2831[200];
+char buf2832[200];
+char buf2833[200];
+char buf2834[200];
+char buf2835[200];
+char buf2836[200];
+char buf2837[200];
+char buf2838[200];
+char buf2839[200];
+char buf2840[200];
+char buf2841[200];
+char buf2842[200];
+char buf2843[200];
+char buf2844[200];
+char buf2845[200];
+char buf2846[200];
+char buf2847[200];
+char buf2848[200];
+char buf2849[200];
+char buf2850[200];
+char buf2851[200];
+char buf2852[200];
+char buf2853[200];
+char buf2854[200];
+char buf2855[200];
+char buf2856[200];
+char buf2857[200];
+char buf2858[200];
+char buf2859[200];
+char buf2860[200];
+char buf2861[200];
+char buf2862[200];
+char buf2863[200];
+char buf2864[200];
+char buf2865[200];
+char buf2866[200];
+char buf2867[200];
+char buf2868[200];
+char buf2869[200];
+char buf2870[200];
+char buf2871[200];
+char buf2872[200];
+char buf2873[200];
+char buf2874[200];
+char buf2875[200];
+char buf2876[200];
+char buf2877[200];
+char buf2878[200];
+char buf2879[200];
+char buf2880[200];
+char buf2881[200];
+char buf2882[200];
+char buf2883[200];
+char buf2884[200];
+char buf2885[200];
+char buf2886[200];
+char buf2887[200];
+char buf2888[200];
+char buf2889[200];
+char buf2890[200];
+char buf2891[200];
+char buf2892[200];
+char buf2893[200];
+char buf2894[200];
+char buf2895[200];
+char buf2896[200];
+char buf2897[200];
+char buf2898[200];
+char buf2899[200];
+char buf2900[200];
+char buf2901[200];
+char buf2902[200];
+char buf2903[200];
+char buf2904[200];
+char buf2905[200];
+char buf2906[200];
+char buf2907[200];
+char buf2908[200];
+char buf2909[200];
+char buf2910[200];
+char buf2911[200];
+char buf2912[200];
+char buf2913[200];
+char buf2914[200];
+char buf2915[200];
+char buf2916[200];
+char buf2917[200];
+char buf2918[200];
+char buf2919[200];
+char buf2920[200];
+char buf2921[200];
+char buf2922[200];
+char buf2923[200];
+char buf2924[200];
+char buf2925[200];
+char buf2926[200];
+char buf2927[200];
+char buf2928[200];
+char buf2929[200];
+char buf2930[200];
+char buf2931[200];
+char buf2932[200];
+char buf2933[200];
+char buf2934[200];
+char buf2935[200];
+char buf2936[200];
+char buf2937[200];
+char buf2938[200];
+char buf2939[200];
+char buf2940[200];
+char buf2941[200];
+char buf2942[200];
+char buf2943[200];
+char buf2944[200];
+char buf2945[200];
+char buf2946[200];
+char buf2947[200];
+char buf2948[200];
+char buf2949[200];
+char buf2950[200];
+char buf2951[200];
+char buf2952[200];
+char buf2953[200];
+char buf2954[200];
+char buf2955[200];
+char buf2956[200];
+char buf2957[200];
+char buf2958[200];
+char buf2959[200];
+char buf2960[200];
+char buf2961[200];
+char buf2962[200];
+char buf2963[200];
+char buf2964[200];
+char buf2965[200];
+char buf2966[200];
+char buf2967[200];
+char buf2968[200];
+char buf2969[200];
+char buf2970[200];
+char buf2971[200];
+char buf2972[200];
+char buf2973[200];
+char buf2974[200];
+char buf2975[200];
+char buf2976[200];
+char buf2977[200];
+char buf2978[200];
+char buf2979[200];
+char buf2980[200];
+char buf2981[200];
+char buf2982[200];
+char buf2983[200];
+char buf2984[200];
+char buf2985[200];
+char buf2986[200];
+char buf2987[200];
+char buf2988[200];
+char buf2989[200];
+char buf2990[200];
+char buf2991[200];
+char buf2992[200];
+char buf2993[200];
+char buf2994[200];
+char buf2995[200];
+char buf2996[200];
+char buf2997[200];
+char buf2998[200];
+char buf2999[200];
+char buf3000[200];
+char buf3001[200];
+char buf3002[200];
+char buf3003[200];
+char buf3004[200];
+char buf3005[200];
+char buf3006[200];
+char buf3007[200];
+char buf3008[200];
+char buf3009[200];
+char buf3010[200];
+char buf3011[200];
+char buf3012[200];
+char buf3013[200];
+char buf3014[200];
+char buf3015[200];
+char buf3016[200];
+char buf3017[200];
+char buf3018[200];
+char buf3019[200];
+char buf3020[200];
+char buf3021[200];
+char buf3022[200];
+char buf3023[200];
+char buf3024[200];
+char buf3025[200];
+char buf3026[200];
+char buf3027[200];
+char buf3028[200];
+char buf3029[200];
+char buf3030[200];
+char buf3031[200];
+char buf3032[200];
+char buf3033[200];
+char buf3034[200];
+char buf3035[200];
+char buf3036[200];
+char buf3037[200];
+char buf3038[200];
+char buf3039[200];
+char buf3040[200];
+char buf3041[200];
+char buf3042[200];
+char buf3043[200];
+char buf3044[200];
+char buf3045[200];
+char buf3046[200];
+char buf3047[200];
+char buf3048[200];
+char buf3049[200];
+char buf3050[200];
+char buf3051[200];
+char buf3052[200];
+char buf3053[200];
+char buf3054[200];
+char buf3055[200];
+char buf3056[200];
+char buf3057[200];
+char buf3058[200];
+char buf3059[200];
+char buf3060[200];
+char buf3061[200];
+char buf3062[200];
+char buf3063[200];
+char buf3064[200];
+char buf3065[200];
+char buf3066[200];
+char buf3067[200];
+char buf3068[200];
+char buf3069[200];
+char buf3070[200];
+char buf3071[200];
+char buf3072[200];
+char buf3073[200];
+char buf3074[200];
+char buf3075[200];
+char buf3076[200];
+char buf3077[200];
+char buf3078[200];
+char buf3079[200];
+char buf3080[200];
+char buf3081[200];
+char buf3082[200];
+char buf3083[200];
+char buf3084[200];
+char buf3085[200];
+char buf3086[200];
+char buf3087[200];
+char buf3088[200];
+char buf3089[200];
+char buf3090[200];
+char buf3091[200];
+char buf3092[200];
+char buf3093[200];
+char buf3094[200];
+char buf3095[200];
+char buf3096[200];
+char buf3097[200];
+char buf3098[200];
+char buf3099[200];
+char buf3100[200];
+char buf3101[200];
+char buf3102[200];
+char buf3103[200];
+char buf3104[200];
+char buf3105[200];
+char buf3106[200];
+char buf3107[200];
+char buf3108[200];
+char buf3109[200];
+char buf3110[200];
+char buf3111[200];
+char buf3112[200];
+char buf3113[200];
+char buf3114[200];
+char buf3115[200];
+char buf3116[200];
+char buf3117[200];
+char buf3118[200];
+char buf3119[200];
+char buf3120[200];
+char buf3121[200];
+char buf3122[200];
+char buf3123[200];
+char buf3124[200];
+char buf3125[200];
+char buf3126[200];
+char buf3127[200];
+char buf3128[200];
+char buf3129[200];
+char buf3130[200];
+char buf3131[200];
+char buf3132[200];
+char buf3133[200];
+char buf3134[200];
+char buf3135[200];
+char buf3136[200];
+char buf3137[200];
+char buf3138[200];
+char buf3139[200];
+char buf3140[200];
+char buf3141[200];
+char buf3142[200];
+char buf3143[200];
+char buf3144[200];
+char buf3145[200];
+char buf3146[200];
+char buf3147[200];
+char buf3148[200];
+char buf3149[200];
+char buf3150[200];
+char buf3151[200];
+char buf3152[200];
+char buf3153[200];
+char buf3154[200];
+char buf3155[200];
+char buf3156[200];
+char buf3157[200];
+char buf3158[200];
+char buf3159[200];
+
+void RS_KERNEL test(int in) {
+    *(uchar*)buf0 = abs(*(char*)buf1);
+    *(uchar2*)buf2 = abs(*(char2*)buf3);
+    *(uchar3*)buf4 = abs(*(char3*)buf5);
+    *(uchar4*)buf6 = abs(*(char4*)buf7);
+    *(ushort*)buf8 = abs(*(short*)buf9);
+    *(ushort2*)buf10 = abs(*(short2*)buf11);
+    *(ushort3*)buf12 = abs(*(short3*)buf13);
+    *(ushort4*)buf14 = abs(*(short4*)buf15);
+    *(uint*)buf16 = abs(*(int*)buf17);
+    *(uint2*)buf18 = abs(*(int2*)buf19);
+    *(uint3*)buf20 = abs(*(int3*)buf21);
+    *(uint4*)buf22 = abs(*(int4*)buf23);
+    *(float*)buf24 = acos(*(float*)buf25);
+    *(float2*)buf26 = acos(*(float2*)buf27);
+    *(float3*)buf28 = acos(*(float3*)buf29);
+    *(float4*)buf30 = acos(*(float4*)buf31);
+    *(float*)buf32 = acosh(*(float*)buf33);
+    *(float2*)buf34 = acosh(*(float2*)buf35);
+    *(float3*)buf36 = acosh(*(float3*)buf37);
+    *(float4*)buf38 = acosh(*(float4*)buf39);
+    *(float*)buf40 = acospi(*(float*)buf41);
+    *(float2*)buf42 = acospi(*(float2*)buf43);
+    *(float3*)buf44 = acospi(*(float3*)buf45);
+    *(float4*)buf46 = acospi(*(float4*)buf47);
+    *(float*)buf48 = asin(*(float*)buf49);
+    *(float2*)buf50 = asin(*(float2*)buf51);
+    *(float3*)buf52 = asin(*(float3*)buf53);
+    *(float4*)buf54 = asin(*(float4*)buf55);
+    *(float*)buf56 = asinh(*(float*)buf57);
+    *(float2*)buf58 = asinh(*(float2*)buf59);
+    *(float3*)buf60 = asinh(*(float3*)buf61);
+    *(float4*)buf62 = asinh(*(float4*)buf63);
+    *(float*)buf64 = asinpi(*(float*)buf65);
+    *(float2*)buf66 = asinpi(*(float2*)buf67);
+    *(float3*)buf68 = asinpi(*(float3*)buf69);
+    *(float4*)buf70 = asinpi(*(float4*)buf71);
+    *(float*)buf72 = atan(*(float*)buf73);
+    *(float2*)buf74 = atan(*(float2*)buf75);
+    *(float3*)buf76 = atan(*(float3*)buf77);
+    *(float4*)buf78 = atan(*(float4*)buf79);
+    *(float*)buf80 = atan2(*(float*)buf81, *(float*)buf82);
+    *(float2*)buf83 = atan2(*(float2*)buf84, *(float2*)buf85);
+    *(float3*)buf86 = atan2(*(float3*)buf87, *(float3*)buf88);
+    *(float4*)buf89 = atan2(*(float4*)buf90, *(float4*)buf91);
+    *(float*)buf92 = atan2pi(*(float*)buf93, *(float*)buf94);
+    *(float2*)buf95 = atan2pi(*(float2*)buf96, *(float2*)buf97);
+    *(float3*)buf98 = atan2pi(*(float3*)buf99, *(float3*)buf100);
+    *(float4*)buf101 = atan2pi(*(float4*)buf102, *(float4*)buf103);
+    *(float*)buf104 = atanh(*(float*)buf105);
+    *(float2*)buf106 = atanh(*(float2*)buf107);
+    *(float3*)buf108 = atanh(*(float3*)buf109);
+    *(float4*)buf110 = atanh(*(float4*)buf111);
+    *(float*)buf112 = atanpi(*(float*)buf113);
+    *(float2*)buf114 = atanpi(*(float2*)buf115);
+    *(float3*)buf116 = atanpi(*(float3*)buf117);
+    *(float4*)buf118 = atanpi(*(float4*)buf119);
+    *(float*)buf120 = cbrt(*(float*)buf121);
+    *(float2*)buf122 = cbrt(*(float2*)buf123);
+    *(float3*)buf124 = cbrt(*(float3*)buf125);
+    *(float4*)buf126 = cbrt(*(float4*)buf127);
+    *(float*)buf128 = ceil(*(float*)buf129);
+    *(float2*)buf130 = ceil(*(float2*)buf131);
+    *(float3*)buf132 = ceil(*(float3*)buf133);
+    *(float4*)buf134 = ceil(*(float4*)buf135);
+    *(float*)buf136 = clamp(*(float*)buf137, *(float*)buf138, *(float*)buf139);
+    *(float2*)buf140 = clamp(*(float2*)buf141, *(float2*)buf142, *(float2*)buf143);
+    *(float3*)buf144 = clamp(*(float3*)buf145, *(float3*)buf146, *(float3*)buf147);
+    *(float4*)buf148 = clamp(*(float4*)buf149, *(float4*)buf150, *(float4*)buf151);
+    *(float2*)buf152 = clamp(*(float2*)buf153, *(float*)buf154, *(float*)buf155);
+    *(float3*)buf156 = clamp(*(float3*)buf157, *(float*)buf158, *(float*)buf159);
+    *(float4*)buf160 = clamp(*(float4*)buf161, *(float*)buf162, *(float*)buf163);
+    *(char*)buf164 = clz(*(char*)buf165);
+    *(char2*)buf166 = clz(*(char2*)buf167);
+    *(char3*)buf168 = clz(*(char3*)buf169);
+    *(char4*)buf170 = clz(*(char4*)buf171);
+    *(uchar*)buf172 = clz(*(uchar*)buf173);
+    *(uchar2*)buf174 = clz(*(uchar2*)buf175);
+    *(uchar3*)buf176 = clz(*(uchar3*)buf177);
+    *(uchar4*)buf178 = clz(*(uchar4*)buf179);
+    *(short*)buf180 = clz(*(short*)buf181);
+    *(short2*)buf182 = clz(*(short2*)buf183);
+    *(short3*)buf184 = clz(*(short3*)buf185);
+    *(short4*)buf186 = clz(*(short4*)buf187);
+    *(ushort*)buf188 = clz(*(ushort*)buf189);
+    *(ushort2*)buf190 = clz(*(ushort2*)buf191);
+    *(ushort3*)buf192 = clz(*(ushort3*)buf193);
+    *(ushort4*)buf194 = clz(*(ushort4*)buf195);
+    *(int*)buf196 = clz(*(int*)buf197);
+    *(int2*)buf198 = clz(*(int2*)buf199);
+    *(int3*)buf200 = clz(*(int3*)buf201);
+    *(int4*)buf202 = clz(*(int4*)buf203);
+    *(uint*)buf204 = clz(*(uint*)buf205);
+    *(uint2*)buf206 = clz(*(uint2*)buf207);
+    *(uint3*)buf208 = clz(*(uint3*)buf209);
+    *(uint4*)buf210 = clz(*(uint4*)buf211);
+    *(float2*)buf212 = convert_float2(*(float2*)buf213);
+    *(float3*)buf214 = convert_float3(*(float3*)buf215);
+    *(float4*)buf216 = convert_float4(*(float4*)buf217);
+    *(float2*)buf218 = convert_float2(*(char2*)buf219);
+    *(float3*)buf220 = convert_float3(*(char3*)buf221);
+    *(float4*)buf222 = convert_float4(*(char4*)buf223);
+    *(float2*)buf224 = convert_float2(*(uchar2*)buf225);
+    *(float3*)buf226 = convert_float3(*(uchar3*)buf227);
+    *(float4*)buf228 = convert_float4(*(uchar4*)buf229);
+    *(float2*)buf230 = convert_float2(*(short2*)buf231);
+    *(float3*)buf232 = convert_float3(*(short3*)buf233);
+    *(float4*)buf234 = convert_float4(*(short4*)buf235);
+    *(float2*)buf236 = convert_float2(*(ushort2*)buf237);
+    *(float3*)buf238 = convert_float3(*(ushort3*)buf239);
+    *(float4*)buf240 = convert_float4(*(ushort4*)buf241);
+    *(float2*)buf242 = convert_float2(*(int2*)buf243);
+    *(float3*)buf244 = convert_float3(*(int3*)buf245);
+    *(float4*)buf246 = convert_float4(*(int4*)buf247);
+    *(float2*)buf248 = convert_float2(*(uint2*)buf249);
+    *(float3*)buf250 = convert_float3(*(uint3*)buf251);
+    *(float4*)buf252 = convert_float4(*(uint4*)buf253);
+    *(char2*)buf254 = convert_char2(*(float2*)buf255);
+    *(char3*)buf256 = convert_char3(*(float3*)buf257);
+    *(char4*)buf258 = convert_char4(*(float4*)buf259);
+    *(char2*)buf260 = convert_char2(*(char2*)buf261);
+    *(char3*)buf262 = convert_char3(*(char3*)buf263);
+    *(char4*)buf264 = convert_char4(*(char4*)buf265);
+    *(char2*)buf266 = convert_char2(*(uchar2*)buf267);
+    *(char3*)buf268 = convert_char3(*(uchar3*)buf269);
+    *(char4*)buf270 = convert_char4(*(uchar4*)buf271);
+    *(char2*)buf272 = convert_char2(*(short2*)buf273);
+    *(char3*)buf274 = convert_char3(*(short3*)buf275);
+    *(char4*)buf276 = convert_char4(*(short4*)buf277);
+    *(char2*)buf278 = convert_char2(*(ushort2*)buf279);
+    *(char3*)buf280 = convert_char3(*(ushort3*)buf281);
+    *(char4*)buf282 = convert_char4(*(ushort4*)buf283);
+    *(char2*)buf284 = convert_char2(*(int2*)buf285);
+    *(char3*)buf286 = convert_char3(*(int3*)buf287);
+    *(char4*)buf288 = convert_char4(*(int4*)buf289);
+    *(char2*)buf290 = convert_char2(*(uint2*)buf291);
+    *(char3*)buf292 = convert_char3(*(uint3*)buf293);
+    *(char4*)buf294 = convert_char4(*(uint4*)buf295);
+    *(uchar2*)buf296 = convert_uchar2(*(float2*)buf297);
+    *(uchar3*)buf298 = convert_uchar3(*(float3*)buf299);
+    *(uchar4*)buf300 = convert_uchar4(*(float4*)buf301);
+    *(uchar2*)buf302 = convert_uchar2(*(char2*)buf303);
+    *(uchar3*)buf304 = convert_uchar3(*(char3*)buf305);
+    *(uchar4*)buf306 = convert_uchar4(*(char4*)buf307);
+    *(uchar2*)buf308 = convert_uchar2(*(uchar2*)buf309);
+    *(uchar3*)buf310 = convert_uchar3(*(uchar3*)buf311);
+    *(uchar4*)buf312 = convert_uchar4(*(uchar4*)buf313);
+    *(uchar2*)buf314 = convert_uchar2(*(short2*)buf315);
+    *(uchar3*)buf316 = convert_uchar3(*(short3*)buf317);
+    *(uchar4*)buf318 = convert_uchar4(*(short4*)buf319);
+    *(uchar2*)buf320 = convert_uchar2(*(ushort2*)buf321);
+    *(uchar3*)buf322 = convert_uchar3(*(ushort3*)buf323);
+    *(uchar4*)buf324 = convert_uchar4(*(ushort4*)buf325);
+    *(uchar2*)buf326 = convert_uchar2(*(int2*)buf327);
+    *(uchar3*)buf328 = convert_uchar3(*(int3*)buf329);
+    *(uchar4*)buf330 = convert_uchar4(*(int4*)buf331);
+    *(uchar2*)buf332 = convert_uchar2(*(uint2*)buf333);
+    *(uchar3*)buf334 = convert_uchar3(*(uint3*)buf335);
+    *(uchar4*)buf336 = convert_uchar4(*(uint4*)buf337);
+    *(short2*)buf338 = convert_short2(*(float2*)buf339);
+    *(short3*)buf340 = convert_short3(*(float3*)buf341);
+    *(short4*)buf342 = convert_short4(*(float4*)buf343);
+    *(short2*)buf344 = convert_short2(*(char2*)buf345);
+    *(short3*)buf346 = convert_short3(*(char3*)buf347);
+    *(short4*)buf348 = convert_short4(*(char4*)buf349);
+    *(short2*)buf350 = convert_short2(*(uchar2*)buf351);
+    *(short3*)buf352 = convert_short3(*(uchar3*)buf353);
+    *(short4*)buf354 = convert_short4(*(uchar4*)buf355);
+    *(short2*)buf356 = convert_short2(*(short2*)buf357);
+    *(short3*)buf358 = convert_short3(*(short3*)buf359);
+    *(short4*)buf360 = convert_short4(*(short4*)buf361);
+    *(short2*)buf362 = convert_short2(*(ushort2*)buf363);
+    *(short3*)buf364 = convert_short3(*(ushort3*)buf365);
+    *(short4*)buf366 = convert_short4(*(ushort4*)buf367);
+    *(short2*)buf368 = convert_short2(*(int2*)buf369);
+    *(short3*)buf370 = convert_short3(*(int3*)buf371);
+    *(short4*)buf372 = convert_short4(*(int4*)buf373);
+    *(short2*)buf374 = convert_short2(*(uint2*)buf375);
+    *(short3*)buf376 = convert_short3(*(uint3*)buf377);
+    *(short4*)buf378 = convert_short4(*(uint4*)buf379);
+    *(ushort2*)buf380 = convert_ushort2(*(float2*)buf381);
+    *(ushort3*)buf382 = convert_ushort3(*(float3*)buf383);
+    *(ushort4*)buf384 = convert_ushort4(*(float4*)buf385);
+    *(ushort2*)buf386 = convert_ushort2(*(char2*)buf387);
+    *(ushort3*)buf388 = convert_ushort3(*(char3*)buf389);
+    *(ushort4*)buf390 = convert_ushort4(*(char4*)buf391);
+    *(ushort2*)buf392 = convert_ushort2(*(uchar2*)buf393);
+    *(ushort3*)buf394 = convert_ushort3(*(uchar3*)buf395);
+    *(ushort4*)buf396 = convert_ushort4(*(uchar4*)buf397);
+    *(ushort2*)buf398 = convert_ushort2(*(short2*)buf399);
+    *(ushort3*)buf400 = convert_ushort3(*(short3*)buf401);
+    *(ushort4*)buf402 = convert_ushort4(*(short4*)buf403);
+    *(ushort2*)buf404 = convert_ushort2(*(ushort2*)buf405);
+    *(ushort3*)buf406 = convert_ushort3(*(ushort3*)buf407);
+    *(ushort4*)buf408 = convert_ushort4(*(ushort4*)buf409);
+    *(ushort2*)buf410 = convert_ushort2(*(int2*)buf411);
+    *(ushort3*)buf412 = convert_ushort3(*(int3*)buf413);
+    *(ushort4*)buf414 = convert_ushort4(*(int4*)buf415);
+    *(ushort2*)buf416 = convert_ushort2(*(uint2*)buf417);
+    *(ushort3*)buf418 = convert_ushort3(*(uint3*)buf419);
+    *(ushort4*)buf420 = convert_ushort4(*(uint4*)buf421);
+    *(int2*)buf422 = convert_int2(*(float2*)buf423);
+    *(int3*)buf424 = convert_int3(*(float3*)buf425);
+    *(int4*)buf426 = convert_int4(*(float4*)buf427);
+    *(int2*)buf428 = convert_int2(*(char2*)buf429);
+    *(int3*)buf430 = convert_int3(*(char3*)buf431);
+    *(int4*)buf432 = convert_int4(*(char4*)buf433);
+    *(int2*)buf434 = convert_int2(*(uchar2*)buf435);
+    *(int3*)buf436 = convert_int3(*(uchar3*)buf437);
+    *(int4*)buf438 = convert_int4(*(uchar4*)buf439);
+    *(int2*)buf440 = convert_int2(*(short2*)buf441);
+    *(int3*)buf442 = convert_int3(*(short3*)buf443);
+    *(int4*)buf444 = convert_int4(*(short4*)buf445);
+    *(int2*)buf446 = convert_int2(*(ushort2*)buf447);
+    *(int3*)buf448 = convert_int3(*(ushort3*)buf449);
+    *(int4*)buf450 = convert_int4(*(ushort4*)buf451);
+    *(int2*)buf452 = convert_int2(*(int2*)buf453);
+    *(int3*)buf454 = convert_int3(*(int3*)buf455);
+    *(int4*)buf456 = convert_int4(*(int4*)buf457);
+    *(int2*)buf458 = convert_int2(*(uint2*)buf459);
+    *(int3*)buf460 = convert_int3(*(uint3*)buf461);
+    *(int4*)buf462 = convert_int4(*(uint4*)buf463);
+    *(uint2*)buf464 = convert_uint2(*(float2*)buf465);
+    *(uint3*)buf466 = convert_uint3(*(float3*)buf467);
+    *(uint4*)buf468 = convert_uint4(*(float4*)buf469);
+    *(uint2*)buf470 = convert_uint2(*(char2*)buf471);
+    *(uint3*)buf472 = convert_uint3(*(char3*)buf473);
+    *(uint4*)buf474 = convert_uint4(*(char4*)buf475);
+    *(uint2*)buf476 = convert_uint2(*(uchar2*)buf477);
+    *(uint3*)buf478 = convert_uint3(*(uchar3*)buf479);
+    *(uint4*)buf480 = convert_uint4(*(uchar4*)buf481);
+    *(uint2*)buf482 = convert_uint2(*(short2*)buf483);
+    *(uint3*)buf484 = convert_uint3(*(short3*)buf485);
+    *(uint4*)buf486 = convert_uint4(*(short4*)buf487);
+    *(uint2*)buf488 = convert_uint2(*(ushort2*)buf489);
+    *(uint3*)buf490 = convert_uint3(*(ushort3*)buf491);
+    *(uint4*)buf492 = convert_uint4(*(ushort4*)buf493);
+    *(uint2*)buf494 = convert_uint2(*(int2*)buf495);
+    *(uint3*)buf496 = convert_uint3(*(int3*)buf497);
+    *(uint4*)buf498 = convert_uint4(*(int4*)buf499);
+    *(uint2*)buf500 = convert_uint2(*(uint2*)buf501);
+    *(uint3*)buf502 = convert_uint3(*(uint3*)buf503);
+    *(uint4*)buf504 = convert_uint4(*(uint4*)buf505);
+    *(float*)buf506 = copysign(*(float*)buf507, *(float*)buf508);
+    *(float2*)buf509 = copysign(*(float2*)buf510, *(float2*)buf511);
+    *(float3*)buf512 = copysign(*(float3*)buf513, *(float3*)buf514);
+    *(float4*)buf515 = copysign(*(float4*)buf516, *(float4*)buf517);
+    *(float*)buf518 = cos(*(float*)buf519);
+    *(float2*)buf520 = cos(*(float2*)buf521);
+    *(float3*)buf522 = cos(*(float3*)buf523);
+    *(float4*)buf524 = cos(*(float4*)buf525);
+    *(float*)buf526 = cosh(*(float*)buf527);
+    *(float2*)buf528 = cosh(*(float2*)buf529);
+    *(float3*)buf530 = cosh(*(float3*)buf531);
+    *(float4*)buf532 = cosh(*(float4*)buf533);
+    *(float*)buf534 = cospi(*(float*)buf535);
+    *(float2*)buf536 = cospi(*(float2*)buf537);
+    *(float3*)buf538 = cospi(*(float3*)buf539);
+    *(float4*)buf540 = cospi(*(float4*)buf541);
+    *(float3*)buf542 = cross(*(float3*)buf543, *(float3*)buf544);
+    *(float4*)buf545 = cross(*(float4*)buf546, *(float4*)buf547);
+    *(float*)buf548 = degrees(*(float*)buf549);
+    *(float2*)buf550 = degrees(*(float2*)buf551);
+    *(float3*)buf552 = degrees(*(float3*)buf553);
+    *(float4*)buf554 = degrees(*(float4*)buf555);
+    *(float*)buf556 = distance(*(float*)buf557, *(float*)buf558);
+    *(float*)buf559 = distance(*(float2*)buf560, *(float2*)buf561);
+    *(float*)buf562 = distance(*(float3*)buf563, *(float3*)buf564);
+    *(float*)buf565 = distance(*(float4*)buf566, *(float4*)buf567);
+    *(float*)buf568 = dot(*(float*)buf569, *(float*)buf570);
+    *(float*)buf571 = dot(*(float2*)buf572, *(float2*)buf573);
+    *(float*)buf574 = dot(*(float3*)buf575, *(float3*)buf576);
+    *(float*)buf577 = dot(*(float4*)buf578, *(float4*)buf579);
+    *(float*)buf580 = erf(*(float*)buf581);
+    *(float2*)buf582 = erf(*(float2*)buf583);
+    *(float3*)buf584 = erf(*(float3*)buf585);
+    *(float4*)buf586 = erf(*(float4*)buf587);
+    *(float*)buf588 = erfc(*(float*)buf589);
+    *(float2*)buf590 = erfc(*(float2*)buf591);
+    *(float3*)buf592 = erfc(*(float3*)buf593);
+    *(float4*)buf594 = erfc(*(float4*)buf595);
+    *(float*)buf596 = exp(*(float*)buf597);
+    *(float2*)buf598 = exp(*(float2*)buf599);
+    *(float3*)buf600 = exp(*(float3*)buf601);
+    *(float4*)buf602 = exp(*(float4*)buf603);
+    *(float*)buf604 = exp10(*(float*)buf605);
+    *(float2*)buf606 = exp10(*(float2*)buf607);
+    *(float3*)buf608 = exp10(*(float3*)buf609);
+    *(float4*)buf610 = exp10(*(float4*)buf611);
+    *(float*)buf612 = exp2(*(float*)buf613);
+    *(float2*)buf614 = exp2(*(float2*)buf615);
+    *(float3*)buf616 = exp2(*(float3*)buf617);
+    *(float4*)buf618 = exp2(*(float4*)buf619);
+    *(float*)buf620 = expm1(*(float*)buf621);
+    *(float2*)buf622 = expm1(*(float2*)buf623);
+    *(float3*)buf624 = expm1(*(float3*)buf625);
+    *(float4*)buf626 = expm1(*(float4*)buf627);
+    *(float*)buf628 = fabs(*(float*)buf629);
+    *(float2*)buf630 = fabs(*(float2*)buf631);
+    *(float3*)buf632 = fabs(*(float3*)buf633);
+    *(float4*)buf634 = fabs(*(float4*)buf635);
+    *(float*)buf636 = fast_distance(*(float*)buf637, *(float*)buf638);
+    *(float*)buf639 = fast_distance(*(float2*)buf640, *(float2*)buf641);
+    *(float*)buf642 = fast_distance(*(float3*)buf643, *(float3*)buf644);
+    *(float*)buf645 = fast_distance(*(float4*)buf646, *(float4*)buf647);
+    *(float*)buf648 = fast_length(*(float*)buf649);
+    *(float*)buf650 = fast_length(*(float2*)buf651);
+    *(float*)buf652 = fast_length(*(float3*)buf653);
+    *(float*)buf654 = fast_length(*(float4*)buf655);
+    *(float*)buf656 = fast_normalize(*(float*)buf657);
+    *(float2*)buf658 = fast_normalize(*(float2*)buf659);
+    *(float3*)buf660 = fast_normalize(*(float3*)buf661);
+    *(float4*)buf662 = fast_normalize(*(float4*)buf663);
+    *(float*)buf664 = fdim(*(float*)buf665, *(float*)buf666);
+    *(float2*)buf667 = fdim(*(float2*)buf668, *(float2*)buf669);
+    *(float3*)buf670 = fdim(*(float3*)buf671, *(float3*)buf672);
+    *(float4*)buf673 = fdim(*(float4*)buf674, *(float4*)buf675);
+    *(float*)buf676 = floor(*(float*)buf677);
+    *(float2*)buf678 = floor(*(float2*)buf679);
+    *(float3*)buf680 = floor(*(float3*)buf681);
+    *(float4*)buf682 = floor(*(float4*)buf683);
+    *(float*)buf684 = fma(*(float*)buf685, *(float*)buf686, *(float*)buf687);
+    *(float2*)buf688 = fma(*(float2*)buf689, *(float2*)buf690, *(float2*)buf691);
+    *(float3*)buf692 = fma(*(float3*)buf693, *(float3*)buf694, *(float3*)buf695);
+    *(float4*)buf696 = fma(*(float4*)buf697, *(float4*)buf698, *(float4*)buf699);
+    *(float*)buf700 = fmax(*(float*)buf701, *(float*)buf702);
+    *(float2*)buf703 = fmax(*(float2*)buf704, *(float2*)buf705);
+    *(float3*)buf706 = fmax(*(float3*)buf707, *(float3*)buf708);
+    *(float4*)buf709 = fmax(*(float4*)buf710, *(float4*)buf711);
+    *(float2*)buf712 = fmax(*(float2*)buf713, *(float*)buf714);
+    *(float3*)buf715 = fmax(*(float3*)buf716, *(float*)buf717);
+    *(float4*)buf718 = fmax(*(float4*)buf719, *(float*)buf720);
+    *(float*)buf721 = fmin(*(float*)buf722, *(float*)buf723);
+    *(float2*)buf724 = fmin(*(float2*)buf725, *(float2*)buf726);
+    *(float3*)buf727 = fmin(*(float3*)buf728, *(float3*)buf729);
+    *(float4*)buf730 = fmin(*(float4*)buf731, *(float4*)buf732);
+    *(float2*)buf733 = fmin(*(float2*)buf734, *(float*)buf735);
+    *(float3*)buf736 = fmin(*(float3*)buf737, *(float*)buf738);
+    *(float4*)buf739 = fmin(*(float4*)buf740, *(float*)buf741);
+    *(float*)buf742 = fmod(*(float*)buf743, *(float*)buf744);
+    *(float2*)buf745 = fmod(*(float2*)buf746, *(float2*)buf747);
+    *(float3*)buf748 = fmod(*(float3*)buf749, *(float3*)buf750);
+    *(float4*)buf751 = fmod(*(float4*)buf752, *(float4*)buf753);
+    *(float*)buf754 = fract(*(float*)buf755, (float*) buf756);
+    *(float2*)buf757 = fract(*(float2*)buf758, (float2*) buf759);
+    *(float3*)buf760 = fract(*(float3*)buf761, (float3*) buf762);
+    *(float4*)buf763 = fract(*(float4*)buf764, (float4*) buf765);
+    *(float*)buf766 = fract(*(float*)buf767);
+    *(float2*)buf768 = fract(*(float2*)buf769);
+    *(float3*)buf770 = fract(*(float3*)buf771);
+    *(float4*)buf772 = fract(*(float4*)buf773);
+    *(float*)buf774 = frexp(*(float*)buf775, (int*) buf776);
+    *(float2*)buf777 = frexp(*(float2*)buf778, (int2*) buf779);
+    *(float3*)buf780 = frexp(*(float3*)buf781, (int3*) buf782);
+    *(float4*)buf783 = frexp(*(float4*)buf784, (int4*) buf785);
+    *(float*)buf786 = half_recip(*(float*)buf787);
+    *(float2*)buf788 = half_recip(*(float2*)buf789);
+    *(float3*)buf790 = half_recip(*(float3*)buf791);
+    *(float4*)buf792 = half_recip(*(float4*)buf793);
+    *(float*)buf794 = half_rsqrt(*(float*)buf795);
+    *(float2*)buf796 = half_rsqrt(*(float2*)buf797);
+    *(float3*)buf798 = half_rsqrt(*(float3*)buf799);
+    *(float4*)buf800 = half_rsqrt(*(float4*)buf801);
+    *(float*)buf802 = half_sqrt(*(float*)buf803);
+    *(float2*)buf804 = half_sqrt(*(float2*)buf805);
+    *(float3*)buf806 = half_sqrt(*(float3*)buf807);
+    *(float4*)buf808 = half_sqrt(*(float4*)buf809);
+    *(float*)buf810 = hypot(*(float*)buf811, *(float*)buf812);
+    *(float2*)buf813 = hypot(*(float2*)buf814, *(float2*)buf815);
+    *(float3*)buf816 = hypot(*(float3*)buf817, *(float3*)buf818);
+    *(float4*)buf819 = hypot(*(float4*)buf820, *(float4*)buf821);
+    *(int*)buf822 = ilogb(*(float*)buf823);
+    *(int2*)buf824 = ilogb(*(float2*)buf825);
+    *(int3*)buf826 = ilogb(*(float3*)buf827);
+    *(int4*)buf828 = ilogb(*(float4*)buf829);
+    *(float*)buf830 = ldexp(*(float*)buf831, *(int*)buf832);
+    *(float2*)buf833 = ldexp(*(float2*)buf834, *(int2*)buf835);
+    *(float3*)buf836 = ldexp(*(float3*)buf837, *(int3*)buf838);
+    *(float4*)buf839 = ldexp(*(float4*)buf840, *(int4*)buf841);
+    *(float2*)buf842 = ldexp(*(float2*)buf843, *(int*)buf844);
+    *(float3*)buf845 = ldexp(*(float3*)buf846, *(int*)buf847);
+    *(float4*)buf848 = ldexp(*(float4*)buf849, *(int*)buf850);
+    *(float*)buf851 = length(*(float*)buf852);
+    *(float*)buf853 = length(*(float2*)buf854);
+    *(float*)buf855 = length(*(float3*)buf856);
+    *(float*)buf857 = length(*(float4*)buf858);
+    *(float*)buf859 = lgamma(*(float*)buf860);
+    *(float2*)buf861 = lgamma(*(float2*)buf862);
+    *(float3*)buf863 = lgamma(*(float3*)buf864);
+    *(float4*)buf865 = lgamma(*(float4*)buf866);
+    *(float*)buf867 = lgamma(*(float*)buf868, (int*) buf869);
+    *(float2*)buf870 = lgamma(*(float2*)buf871, (int2*) buf872);
+    *(float3*)buf873 = lgamma(*(float3*)buf874, (int3*) buf875);
+    *(float4*)buf876 = lgamma(*(float4*)buf877, (int4*) buf878);
+    *(float*)buf879 = log(*(float*)buf880);
+    *(float2*)buf881 = log(*(float2*)buf882);
+    *(float3*)buf883 = log(*(float3*)buf884);
+    *(float4*)buf885 = log(*(float4*)buf886);
+    *(float*)buf887 = log10(*(float*)buf888);
+    *(float2*)buf889 = log10(*(float2*)buf890);
+    *(float3*)buf891 = log10(*(float3*)buf892);
+    *(float4*)buf893 = log10(*(float4*)buf894);
+    *(float*)buf895 = log1p(*(float*)buf896);
+    *(float2*)buf897 = log1p(*(float2*)buf898);
+    *(float3*)buf899 = log1p(*(float3*)buf900);
+    *(float4*)buf901 = log1p(*(float4*)buf902);
+    *(float*)buf903 = log2(*(float*)buf904);
+    *(float2*)buf905 = log2(*(float2*)buf906);
+    *(float3*)buf907 = log2(*(float3*)buf908);
+    *(float4*)buf909 = log2(*(float4*)buf910);
+    *(float*)buf911 = logb(*(float*)buf912);
+    *(float2*)buf913 = logb(*(float2*)buf914);
+    *(float3*)buf915 = logb(*(float3*)buf916);
+    *(float4*)buf917 = logb(*(float4*)buf918);
+    *(float*)buf919 = mad(*(float*)buf920, *(float*)buf921, *(float*)buf922);
+    *(float2*)buf923 = mad(*(float2*)buf924, *(float2*)buf925, *(float2*)buf926);
+    *(float3*)buf927 = mad(*(float3*)buf928, *(float3*)buf929, *(float3*)buf930);
+    *(float4*)buf931 = mad(*(float4*)buf932, *(float4*)buf933, *(float4*)buf934);
+    *(float*)buf935 = max(*(float*)buf936, *(float*)buf937);
+    *(float2*)buf938 = max(*(float2*)buf939, *(float2*)buf940);
+    *(float3*)buf941 = max(*(float3*)buf942, *(float3*)buf943);
+    *(float4*)buf944 = max(*(float4*)buf945, *(float4*)buf946);
+    *(float2*)buf947 = max(*(float2*)buf948, *(float*)buf949);
+    *(float3*)buf950 = max(*(float3*)buf951, *(float*)buf952);
+    *(float4*)buf953 = max(*(float4*)buf954, *(float*)buf955);
+    *(char*)buf956 = max(*(char*)buf957, *(char*)buf958);
+    *(uchar*)buf959 = max(*(uchar*)buf960, *(uchar*)buf961);
+    *(short*)buf962 = max(*(short*)buf963, *(short*)buf964);
+    *(ushort*)buf965 = max(*(ushort*)buf966, *(ushort*)buf967);
+    *(int*)buf968 = max(*(int*)buf969, *(int*)buf970);
+    *(uint*)buf971 = max(*(uint*)buf972, *(uint*)buf973);
+    *(char2*)buf974 = max(*(char2*)buf975, *(char2*)buf976);
+    *(uchar2*)buf977 = max(*(uchar2*)buf978, *(uchar2*)buf979);
+    *(short2*)buf980 = max(*(short2*)buf981, *(short2*)buf982);
+    *(ushort2*)buf983 = max(*(ushort2*)buf984, *(ushort2*)buf985);
+    *(int2*)buf986 = max(*(int2*)buf987, *(int2*)buf988);
+    *(uint2*)buf989 = max(*(uint2*)buf990, *(uint2*)buf991);
+    *(char3*)buf992 = max(*(char3*)buf993, *(char3*)buf994);
+    *(uchar3*)buf995 = max(*(uchar3*)buf996, *(uchar3*)buf997);
+    *(short3*)buf998 = max(*(short3*)buf999, *(short3*)buf1000);
+    *(ushort3*)buf1001 = max(*(ushort3*)buf1002, *(ushort3*)buf1003);
+    *(int3*)buf1004 = max(*(int3*)buf1005, *(int3*)buf1006);
+    *(uint3*)buf1007 = max(*(uint3*)buf1008, *(uint3*)buf1009);
+    *(char4*)buf1010 = max(*(char4*)buf1011, *(char4*)buf1012);
+    *(uchar4*)buf1013 = max(*(uchar4*)buf1014, *(uchar4*)buf1015);
+    *(short4*)buf1016 = max(*(short4*)buf1017, *(short4*)buf1018);
+    *(ushort4*)buf1019 = max(*(ushort4*)buf1020, *(ushort4*)buf1021);
+    *(int4*)buf1022 = max(*(int4*)buf1023, *(int4*)buf1024);
+    *(uint4*)buf1025 = max(*(uint4*)buf1026, *(uint4*)buf1027);
+    *(float*)buf1028 = min(*(float*)buf1029, *(float*)buf1030);
+    *(float2*)buf1031 = min(*(float2*)buf1032, *(float2*)buf1033);
+    *(float3*)buf1034 = min(*(float3*)buf1035, *(float3*)buf1036);
+    *(float4*)buf1037 = min(*(float4*)buf1038, *(float4*)buf1039);
+    *(float2*)buf1040 = min(*(float2*)buf1041, *(float*)buf1042);
+    *(float3*)buf1043 = min(*(float3*)buf1044, *(float*)buf1045);
+    *(float4*)buf1046 = min(*(float4*)buf1047, *(float*)buf1048);
+    *(char*)buf1049 = min(*(char*)buf1050, *(char*)buf1051);
+    *(uchar*)buf1052 = min(*(uchar*)buf1053, *(uchar*)buf1054);
+    *(short*)buf1055 = min(*(short*)buf1056, *(short*)buf1057);
+    *(ushort*)buf1058 = min(*(ushort*)buf1059, *(ushort*)buf1060);
+    *(int*)buf1061 = min(*(int*)buf1062, *(int*)buf1063);
+    *(uint*)buf1064 = min(*(uint*)buf1065, *(uint*)buf1066);
+    *(char2*)buf1067 = min(*(char2*)buf1068, *(char2*)buf1069);
+    *(uchar2*)buf1070 = min(*(uchar2*)buf1071, *(uchar2*)buf1072);
+    *(short2*)buf1073 = min(*(short2*)buf1074, *(short2*)buf1075);
+    *(ushort2*)buf1076 = min(*(ushort2*)buf1077, *(ushort2*)buf1078);
+    *(int2*)buf1079 = min(*(int2*)buf1080, *(int2*)buf1081);
+    *(uint2*)buf1082 = min(*(uint2*)buf1083, *(uint2*)buf1084);
+    *(char3*)buf1085 = min(*(char3*)buf1086, *(char3*)buf1087);
+    *(uchar3*)buf1088 = min(*(uchar3*)buf1089, *(uchar3*)buf1090);
+    *(short3*)buf1091 = min(*(short3*)buf1092, *(short3*)buf1093);
+    *(ushort3*)buf1094 = min(*(ushort3*)buf1095, *(ushort3*)buf1096);
+    *(int3*)buf1097 = min(*(int3*)buf1098, *(int3*)buf1099);
+    *(uint3*)buf1100 = min(*(uint3*)buf1101, *(uint3*)buf1102);
+    *(char4*)buf1103 = min(*(char4*)buf1104, *(char4*)buf1105);
+    *(uchar4*)buf1106 = min(*(uchar4*)buf1107, *(uchar4*)buf1108);
+    *(short4*)buf1109 = min(*(short4*)buf1110, *(short4*)buf1111);
+    *(ushort4*)buf1112 = min(*(ushort4*)buf1113, *(ushort4*)buf1114);
+    *(int4*)buf1115 = min(*(int4*)buf1116, *(int4*)buf1117);
+    *(uint4*)buf1118 = min(*(uint4*)buf1119, *(uint4*)buf1120);
+    *(float*)buf1121 = mix(*(float*)buf1122, *(float*)buf1123, *(float*)buf1124);
+    *(float2*)buf1125 = mix(*(float2*)buf1126, *(float2*)buf1127, *(float2*)buf1128);
+    *(float3*)buf1129 = mix(*(float3*)buf1130, *(float3*)buf1131, *(float3*)buf1132);
+    *(float4*)buf1133 = mix(*(float4*)buf1134, *(float4*)buf1135, *(float4*)buf1136);
+    *(float2*)buf1137 = mix(*(float2*)buf1138, *(float2*)buf1139, *(float*)buf1140);
+    *(float3*)buf1141 = mix(*(float3*)buf1142, *(float3*)buf1143, *(float*)buf1144);
+    *(float4*)buf1145 = mix(*(float4*)buf1146, *(float4*)buf1147, *(float*)buf1148);
+    *(float*)buf1149 = modf(*(float*)buf1150, (float*) buf1151);
+    *(float2*)buf1152 = modf(*(float2*)buf1153, (float2*) buf1154);
+    *(float3*)buf1155 = modf(*(float3*)buf1156, (float3*) buf1157);
+    *(float4*)buf1158 = modf(*(float4*)buf1159, (float4*) buf1160);
+    *(float*)buf1161 = nan(*(uint*)buf1162);
+    *(float*)buf1163 = native_exp(*(float*)buf1164);
+    *(float2*)buf1165 = native_exp(*(float2*)buf1166);
+    *(float3*)buf1167 = native_exp(*(float3*)buf1168);
+    *(float4*)buf1169 = native_exp(*(float4*)buf1170);
+    *(float*)buf1171 = native_exp10(*(float*)buf1172);
+    *(float2*)buf1173 = native_exp10(*(float2*)buf1174);
+    *(float3*)buf1175 = native_exp10(*(float3*)buf1176);
+    *(float4*)buf1177 = native_exp10(*(float4*)buf1178);
+    *(float*)buf1179 = native_exp2(*(float*)buf1180);
+    *(float2*)buf1181 = native_exp2(*(float2*)buf1182);
+    *(float3*)buf1183 = native_exp2(*(float3*)buf1184);
+    *(float4*)buf1185 = native_exp2(*(float4*)buf1186);
+    *(float*)buf1187 = native_log(*(float*)buf1188);
+    *(float2*)buf1189 = native_log(*(float2*)buf1190);
+    *(float3*)buf1191 = native_log(*(float3*)buf1192);
+    *(float4*)buf1193 = native_log(*(float4*)buf1194);
+    *(float*)buf1195 = native_log10(*(float*)buf1196);
+    *(float2*)buf1197 = native_log10(*(float2*)buf1198);
+    *(float3*)buf1199 = native_log10(*(float3*)buf1200);
+    *(float4*)buf1201 = native_log10(*(float4*)buf1202);
+    *(float*)buf1203 = native_log2(*(float*)buf1204);
+    *(float2*)buf1205 = native_log2(*(float2*)buf1206);
+    *(float3*)buf1207 = native_log2(*(float3*)buf1208);
+    *(float4*)buf1209 = native_log2(*(float4*)buf1210);
+    *(float*)buf1211 = native_powr(*(float*)buf1212, *(float*)buf1213);
+    *(float2*)buf1214 = native_powr(*(float2*)buf1215, *(float2*)buf1216);
+    *(float3*)buf1217 = native_powr(*(float3*)buf1218, *(float3*)buf1219);
+    *(float4*)buf1220 = native_powr(*(float4*)buf1221, *(float4*)buf1222);
+    *(float*)buf1223 = nextafter(*(float*)buf1224, *(float*)buf1225);
+    *(float2*)buf1226 = nextafter(*(float2*)buf1227, *(float2*)buf1228);
+    *(float3*)buf1229 = nextafter(*(float3*)buf1230, *(float3*)buf1231);
+    *(float4*)buf1232 = nextafter(*(float4*)buf1233, *(float4*)buf1234);
+    *(float*)buf1235 = normalize(*(float*)buf1236);
+    *(float2*)buf1237 = normalize(*(float2*)buf1238);
+    *(float3*)buf1239 = normalize(*(float3*)buf1240);
+    *(float4*)buf1241 = normalize(*(float4*)buf1242);
+    *(float*)buf1243 = pow(*(float*)buf1244, *(float*)buf1245);
+    *(float2*)buf1246 = pow(*(float2*)buf1247, *(float2*)buf1248);
+    *(float3*)buf1249 = pow(*(float3*)buf1250, *(float3*)buf1251);
+    *(float4*)buf1252 = pow(*(float4*)buf1253, *(float4*)buf1254);
+    *(float*)buf1255 = pown(*(float*)buf1256, *(int*)buf1257);
+    *(float2*)buf1258 = pown(*(float2*)buf1259, *(int2*)buf1260);
+    *(float3*)buf1261 = pown(*(float3*)buf1262, *(int3*)buf1263);
+    *(float4*)buf1264 = pown(*(float4*)buf1265, *(int4*)buf1266);
+    *(float*)buf1267 = powr(*(float*)buf1268, *(float*)buf1269);
+    *(float2*)buf1270 = powr(*(float2*)buf1271, *(float2*)buf1272);
+    *(float3*)buf1273 = powr(*(float3*)buf1274, *(float3*)buf1275);
+    *(float4*)buf1276 = powr(*(float4*)buf1277, *(float4*)buf1278);
+    *(float*)buf1279 = radians(*(float*)buf1280);
+    *(float2*)buf1281 = radians(*(float2*)buf1282);
+    *(float3*)buf1283 = radians(*(float3*)buf1284);
+    *(float4*)buf1285 = radians(*(float4*)buf1286);
+    *(float*)buf1287 = remainder(*(float*)buf1288, *(float*)buf1289);
+    *(float2*)buf1290 = remainder(*(float2*)buf1291, *(float2*)buf1292);
+    *(float3*)buf1293 = remainder(*(float3*)buf1294, *(float3*)buf1295);
+    *(float4*)buf1296 = remainder(*(float4*)buf1297, *(float4*)buf1298);
+    *(float*)buf1299 = remquo(*(float*)buf1300, *(float*)buf1301, (int*) buf1302);
+    *(float2*)buf1303 = remquo(*(float2*)buf1304, *(float2*)buf1305, (int2*) buf1306);
+    *(float3*)buf1307 = remquo(*(float3*)buf1308, *(float3*)buf1309, (int3*) buf1310);
+    *(float4*)buf1311 = remquo(*(float4*)buf1312, *(float4*)buf1313, (int4*) buf1314);
+    *(float*)buf1315 = rint(*(float*)buf1316);
+    *(float2*)buf1317 = rint(*(float2*)buf1318);
+    *(float3*)buf1319 = rint(*(float3*)buf1320);
+    *(float4*)buf1321 = rint(*(float4*)buf1322);
+    *(float*)buf1323 = rootn(*(float*)buf1324, *(int*)buf1325);
+    *(float2*)buf1326 = rootn(*(float2*)buf1327, *(int2*)buf1328);
+    *(float3*)buf1329 = rootn(*(float3*)buf1330, *(int3*)buf1331);
+    *(float4*)buf1332 = rootn(*(float4*)buf1333, *(int4*)buf1334);
+    *(float*)buf1335 = round(*(float*)buf1336);
+    *(float2*)buf1337 = round(*(float2*)buf1338);
+    *(float3*)buf1339 = round(*(float3*)buf1340);
+    *(float4*)buf1341 = round(*(float4*)buf1342);
+    rsAllocationCopy1DRange(*(rs_allocation*)buf1343, *(uint32_t*)buf1344, *(uint32_t*)buf1345, *(uint32_t*)buf1346, *(rs_allocation*)buf1347, *(uint32_t*)buf1348, *(uint32_t*)buf1349);
+    rsAllocationCopy2DRange(*(rs_allocation*)buf1350, *(uint32_t*)buf1351, *(uint32_t*)buf1352, *(uint32_t*)buf1353, *(rs_allocation_cubemap_face*)buf1354, *(uint32_t*)buf1355, *(uint32_t*)buf1356, *(rs_allocation*)buf1357, *(uint32_t*)buf1358, *(uint32_t*)buf1359, *(uint32_t*)buf1360, *(rs_allocation_cubemap_face*)buf1361);
+    *(uint32_t*)buf1362 = rsAllocationGetDimFaces(*(rs_allocation*)buf1363);
+    *(uint32_t*)buf1364 = rsAllocationGetDimLOD(*(rs_allocation*)buf1365);
+    *(uint32_t*)buf1366 = rsAllocationGetDimX(*(rs_allocation*)buf1367);
+    *(uint32_t*)buf1368 = rsAllocationGetDimY(*(rs_allocation*)buf1369);
+    *(uint32_t*)buf1370 = rsAllocationGetDimZ(*(rs_allocation*)buf1371);
+    *(rs_element*)buf1372 = rsAllocationGetElement(*(rs_allocation*)buf1373);
+    rsAllocationIoReceive(*(rs_allocation*)buf1374);
+    rsAllocationIoSend(*(rs_allocation*)buf1375);
+    *(int32_t*)buf1376 = rsAtomicAdd((volatile int32_t*) buf1377, *(int32_t*)buf1378);
+    *(int32_t*)buf1379 = rsAtomicAnd((volatile int32_t*) buf1380, *(int32_t*)buf1381);
+    *(int32_t*)buf1382 = rsAtomicCas((volatile int32_t*) buf1383, *(int32_t*)buf1384, *(int32_t*)buf1385);
+    *(uint32_t*)buf1386 = rsAtomicCas((volatile uint32_t*) buf1387, *(uint32_t*)buf1388, *(uint32_t*)buf1389);
+    *(int32_t*)buf1390 = rsAtomicDec((volatile int32_t*) buf1391);
+    *(int32_t*)buf1392 = rsAtomicInc((volatile int32_t*) buf1393);
+    *(uint32_t*)buf1394 = rsAtomicMax((volatile uint32_t*) buf1395, *(uint32_t*)buf1396);
+    *(int32_t*)buf1397 = rsAtomicMax((volatile int32_t*) buf1398, *(int32_t*)buf1399);
+    *(uint32_t*)buf1400 = rsAtomicMin((volatile uint32_t*) buf1401, *(uint32_t*)buf1402);
+    *(int32_t*)buf1403 = rsAtomicMin((volatile int32_t*) buf1404, *(int32_t*)buf1405);
+    *(int32_t*)buf1406 = rsAtomicOr((volatile int32_t*) buf1407, *(int32_t*)buf1408);
+    *(int32_t*)buf1409 = rsAtomicSub((volatile int32_t*) buf1410, *(int32_t*)buf1411);
+    *(int32_t*)buf1412 = rsAtomicXor((volatile int32_t*) buf1413, *(int32_t*)buf1414);
+    *(char*)buf1415 = rsClamp(*(char*)buf1416, *(char*)buf1417, *(char*)buf1418);
+    *(uchar*)buf1419 = rsClamp(*(uchar*)buf1420, *(uchar*)buf1421, *(uchar*)buf1422);
+    *(short*)buf1423 = rsClamp(*(short*)buf1424, *(short*)buf1425, *(short*)buf1426);
+    *(ushort*)buf1427 = rsClamp(*(ushort*)buf1428, *(ushort*)buf1429, *(ushort*)buf1430);
+    *(int*)buf1431 = rsClamp(*(int*)buf1432, *(int*)buf1433, *(int*)buf1434);
+    *(uint*)buf1435 = rsClamp(*(uint*)buf1436, *(uint*)buf1437, *(uint*)buf1438);
+    rsClearObject((rs_element*) buf1439);
+    rsClearObject((rs_type*) buf1440);
+    rsClearObject((rs_allocation*) buf1441);
+    rsClearObject((rs_sampler*) buf1442);
+    rsClearObject((rs_script*) buf1443);
+#ifndef __LP64__
+    rsClearObject((rs_mesh*) buf1444);
+    rsClearObject((rs_program_fragment*) buf1445);
+    rsClearObject((rs_program_vertex*) buf1446);
+    rsClearObject((rs_program_raster*) buf1447);
+    rsClearObject((rs_program_store*) buf1448);
+    rsClearObject((rs_font*) buf1449);
+#endif
+    rsDebug((const char*) buf1450, *(double*)buf1451);
+    rsDebug((const char*) buf1452, *(int*)buf1453);
+    rsDebug((const char*) buf1454, *(uint*)buf1455);
+    rsDebug((const char*) buf1456, *(long*)buf1457);
+    rsDebug((const char*) buf1458, *(ulong*)buf1459);
+    rsDebug((const char*) buf1460, *(int2*)buf1461);
+    rsDebug((const char*) buf1462, *(int3*)buf1463);
+    rsDebug((const char*) buf1464, *(int4*)buf1465);
+    rsDebug((const char*) buf1466, *(uint2*)buf1467);
+    rsDebug((const char*) buf1468, *(uint3*)buf1469);
+    rsDebug((const char*) buf1470, *(uint4*)buf1471);
+    rsDebug((const char*) buf1472, *(long2*)buf1473);
+    rsDebug((const char*) buf1474, *(long3*)buf1475);
+    rsDebug((const char*) buf1476, *(long4*)buf1477);
+    rsDebug((const char*) buf1478, *(ulong2*)buf1479);
+    rsDebug((const char*) buf1480, *(ulong3*)buf1481);
+    rsDebug((const char*) buf1482, *(ulong4*)buf1483);
+    rsDebug((const char*) buf1484, *(float*)buf1485);
+    rsDebug((const char*) buf1486, *(float2*)buf1487);
+    rsDebug((const char*) buf1488, *(float3*)buf1489);
+    rsDebug((const char*) buf1490, *(float4*)buf1491);
+    rsDebug((const char*) buf1492, *(char*)buf1493);
+    rsDebug((const char*) buf1494, *(char2*)buf1495);
+    rsDebug((const char*) buf1496, *(char3*)buf1497);
+    rsDebug((const char*) buf1498, *(char4*)buf1499);
+    rsDebug((const char*) buf1500, *(uchar*)buf1501);
+    rsDebug((const char*) buf1502, *(uchar2*)buf1503);
+    rsDebug((const char*) buf1504, *(uchar3*)buf1505);
+    rsDebug((const char*) buf1506, *(uchar4*)buf1507);
+    rsDebug((const char*) buf1508, *(short*)buf1509);
+    rsDebug((const char*) buf1510, *(short2*)buf1511);
+    rsDebug((const char*) buf1512, *(short3*)buf1513);
+    rsDebug((const char*) buf1514, *(short4*)buf1515);
+    rsDebug((const char*) buf1516, *(ushort*)buf1517);
+    rsDebug((const char*) buf1518, *(ushort2*)buf1519);
+    rsDebug((const char*) buf1520, *(ushort3*)buf1521);
+    rsDebug((const char*) buf1522, *(ushort4*)buf1523);
+    rsDebug((const char*) buf1524, *(float*)buf1525, *(float*)buf1526);
+    rsDebug((const char*) buf1527, *(float*)buf1528, *(float*)buf1529, *(float*)buf1530);
+    rsDebug((const char*) buf1531, *(float*)buf1532, *(float*)buf1533, *(float*)buf1534, *(float*)buf1535);
+    rsDebug((const char*) buf1536, *(long long*)buf1537);
+    rsDebug((const char*) buf1538, *(unsigned long long*)buf1539);
+    rsDebug((const char*) buf1540, (const void*) buf1541);
+    rsDebug((const char*) buf1542, (const rs_matrix4x4*) buf1543);
+    rsDebug((const char*) buf1544, (const rs_matrix3x3*) buf1545);
+    rsDebug((const char*) buf1546, (const rs_matrix2x2*) buf1547);
+    *(uint32_t*)buf1548 = rsElementGetBytesSize(*(rs_element*)buf1549);
+    *(rs_data_kind*)buf1550 = rsElementGetDataKind(*(rs_element*)buf1551);
+    *(rs_data_type*)buf1552 = rsElementGetDataType(*(rs_element*)buf1553);
+    *(rs_element*)buf1554 = rsElementGetSubElement(*(rs_element*)buf1555, *(uint32_t*)buf1556);
+    *(uint32_t*)buf1557 = rsElementGetSubElementArraySize(*(rs_element*)buf1558, *(uint32_t*)buf1559);
+    *(uint32_t*)buf1560 = rsElementGetSubElementCount(*(rs_element*)buf1561);
+    *(uint32_t*)buf1562 = rsElementGetSubElementName(*(rs_element*)buf1563, *(uint32_t*)buf1564, (char*) buf1565, *(uint32_t*)buf1566);
+    *(uint32_t*)buf1567 = rsElementGetSubElementNameLength(*(rs_element*)buf1568, *(uint32_t*)buf1569);
+    *(uint32_t*)buf1570 = rsElementGetSubElementOffsetBytes(*(rs_element*)buf1571, *(uint32_t*)buf1572);
+    *(uint32_t*)buf1573 = rsElementGetVectorSize(*(rs_element*)buf1574);
+    rsExtractFrustumPlanes((const rs_matrix4x4*) buf1575, (float4*) buf1576, (float4*) buf1577, (float4*) buf1578, (float4*) buf1579, (float4*) buf1580, (float4*) buf1581);
+    rsForEach(*(rs_script*)buf1582, *(rs_allocation*)buf1583, *(rs_allocation*)buf1584, (const void*) buf1585, *(size_t*)buf1586, (const rs_script_call_t*) buf1587);
+    rsForEach(*(rs_script*)buf1588, *(rs_allocation*)buf1589, *(rs_allocation*)buf1590, (const void*) buf1591, *(size_t*)buf1592);
+    rsForEach(*(rs_script*)buf1593, *(rs_allocation*)buf1594, *(rs_allocation*)buf1595);
+    *(float*)buf1596 = rsFrac(*(float*)buf1597);
+    *(rs_allocation*)buf1598 = rsGetAllocation((const void*) buf1599);
+    *(float*)buf1600 = rsGetDt();
+    *(const void**)buf1601 = rsGetElementAt(*(rs_allocation*)buf1602, *(uint32_t*)buf1603);
+    *(const void**)buf1604 = rsGetElementAt(*(rs_allocation*)buf1605, *(uint32_t*)buf1606, *(uint32_t*)buf1607);
+    *(const void**)buf1608 = rsGetElementAt(*(rs_allocation*)buf1609, *(uint32_t*)buf1610, *(uint32_t*)buf1611, *(uint32_t*)buf1612);
+    *(float*)buf1613 = rsGetElementAt_float(*(rs_allocation*)buf1614, *(uint32_t*)buf1615);
+    *(float2*)buf1616 = rsGetElementAt_float2(*(rs_allocation*)buf1617, *(uint32_t*)buf1618);
+    *(float3*)buf1619 = rsGetElementAt_float3(*(rs_allocation*)buf1620, *(uint32_t*)buf1621);
+    *(float4*)buf1622 = rsGetElementAt_float4(*(rs_allocation*)buf1623, *(uint32_t*)buf1624);
+    *(double*)buf1625 = rsGetElementAt_double(*(rs_allocation*)buf1626, *(uint32_t*)buf1627);
+    *(double2*)buf1628 = rsGetElementAt_double2(*(rs_allocation*)buf1629, *(uint32_t*)buf1630);
+    *(double3*)buf1631 = rsGetElementAt_double3(*(rs_allocation*)buf1632, *(uint32_t*)buf1633);
+    *(double4*)buf1634 = rsGetElementAt_double4(*(rs_allocation*)buf1635, *(uint32_t*)buf1636);
+    *(char*)buf1637 = rsGetElementAt_char(*(rs_allocation*)buf1638, *(uint32_t*)buf1639);
+    *(char2*)buf1640 = rsGetElementAt_char2(*(rs_allocation*)buf1641, *(uint32_t*)buf1642);
+    *(char3*)buf1643 = rsGetElementAt_char3(*(rs_allocation*)buf1644, *(uint32_t*)buf1645);
+    *(char4*)buf1646 = rsGetElementAt_char4(*(rs_allocation*)buf1647, *(uint32_t*)buf1648);
+    *(uchar*)buf1649 = rsGetElementAt_uchar(*(rs_allocation*)buf1650, *(uint32_t*)buf1651);
+    *(uchar2*)buf1652 = rsGetElementAt_uchar2(*(rs_allocation*)buf1653, *(uint32_t*)buf1654);
+    *(uchar3*)buf1655 = rsGetElementAt_uchar3(*(rs_allocation*)buf1656, *(uint32_t*)buf1657);
+    *(uchar4*)buf1658 = rsGetElementAt_uchar4(*(rs_allocation*)buf1659, *(uint32_t*)buf1660);
+    *(short*)buf1661 = rsGetElementAt_short(*(rs_allocation*)buf1662, *(uint32_t*)buf1663);
+    *(short2*)buf1664 = rsGetElementAt_short2(*(rs_allocation*)buf1665, *(uint32_t*)buf1666);
+    *(short3*)buf1667 = rsGetElementAt_short3(*(rs_allocation*)buf1668, *(uint32_t*)buf1669);
+    *(short4*)buf1670 = rsGetElementAt_short4(*(rs_allocation*)buf1671, *(uint32_t*)buf1672);
+    *(ushort*)buf1673 = rsGetElementAt_ushort(*(rs_allocation*)buf1674, *(uint32_t*)buf1675);
+    *(ushort2*)buf1676 = rsGetElementAt_ushort2(*(rs_allocation*)buf1677, *(uint32_t*)buf1678);
+    *(ushort3*)buf1679 = rsGetElementAt_ushort3(*(rs_allocation*)buf1680, *(uint32_t*)buf1681);
+    *(ushort4*)buf1682 = rsGetElementAt_ushort4(*(rs_allocation*)buf1683, *(uint32_t*)buf1684);
+    *(int*)buf1685 = rsGetElementAt_int(*(rs_allocation*)buf1686, *(uint32_t*)buf1687);
+    *(int2*)buf1688 = rsGetElementAt_int2(*(rs_allocation*)buf1689, *(uint32_t*)buf1690);
+    *(int3*)buf1691 = rsGetElementAt_int3(*(rs_allocation*)buf1692, *(uint32_t*)buf1693);
+    *(int4*)buf1694 = rsGetElementAt_int4(*(rs_allocation*)buf1695, *(uint32_t*)buf1696);
+    *(uint*)buf1697 = rsGetElementAt_uint(*(rs_allocation*)buf1698, *(uint32_t*)buf1699);
+    *(uint2*)buf1700 = rsGetElementAt_uint2(*(rs_allocation*)buf1701, *(uint32_t*)buf1702);
+    *(uint3*)buf1703 = rsGetElementAt_uint3(*(rs_allocation*)buf1704, *(uint32_t*)buf1705);
+    *(uint4*)buf1706 = rsGetElementAt_uint4(*(rs_allocation*)buf1707, *(uint32_t*)buf1708);
+    *(long*)buf1709 = rsGetElementAt_long(*(rs_allocation*)buf1710, *(uint32_t*)buf1711);
+    *(long2*)buf1712 = rsGetElementAt_long2(*(rs_allocation*)buf1713, *(uint32_t*)buf1714);
+    *(long3*)buf1715 = rsGetElementAt_long3(*(rs_allocation*)buf1716, *(uint32_t*)buf1717);
+    *(long4*)buf1718 = rsGetElementAt_long4(*(rs_allocation*)buf1719, *(uint32_t*)buf1720);
+    *(ulong*)buf1721 = rsGetElementAt_ulong(*(rs_allocation*)buf1722, *(uint32_t*)buf1723);
+    *(ulong2*)buf1724 = rsGetElementAt_ulong2(*(rs_allocation*)buf1725, *(uint32_t*)buf1726);
+    *(ulong3*)buf1727 = rsGetElementAt_ulong3(*(rs_allocation*)buf1728, *(uint32_t*)buf1729);
+    *(ulong4*)buf1730 = rsGetElementAt_ulong4(*(rs_allocation*)buf1731, *(uint32_t*)buf1732);
+    *(float*)buf1733 = rsGetElementAt_float(*(rs_allocation*)buf1734, *(uint32_t*)buf1735, *(uint32_t*)buf1736);
+    *(float2*)buf1737 = rsGetElementAt_float2(*(rs_allocation*)buf1738, *(uint32_t*)buf1739, *(uint32_t*)buf1740);
+    *(float3*)buf1741 = rsGetElementAt_float3(*(rs_allocation*)buf1742, *(uint32_t*)buf1743, *(uint32_t*)buf1744);
+    *(float4*)buf1745 = rsGetElementAt_float4(*(rs_allocation*)buf1746, *(uint32_t*)buf1747, *(uint32_t*)buf1748);
+    *(double*)buf1749 = rsGetElementAt_double(*(rs_allocation*)buf1750, *(uint32_t*)buf1751, *(uint32_t*)buf1752);
+    *(double2*)buf1753 = rsGetElementAt_double2(*(rs_allocation*)buf1754, *(uint32_t*)buf1755, *(uint32_t*)buf1756);
+    *(double3*)buf1757 = rsGetElementAt_double3(*(rs_allocation*)buf1758, *(uint32_t*)buf1759, *(uint32_t*)buf1760);
+    *(double4*)buf1761 = rsGetElementAt_double4(*(rs_allocation*)buf1762, *(uint32_t*)buf1763, *(uint32_t*)buf1764);
+    *(char*)buf1765 = rsGetElementAt_char(*(rs_allocation*)buf1766, *(uint32_t*)buf1767, *(uint32_t*)buf1768);
+    *(char2*)buf1769 = rsGetElementAt_char2(*(rs_allocation*)buf1770, *(uint32_t*)buf1771, *(uint32_t*)buf1772);
+    *(char3*)buf1773 = rsGetElementAt_char3(*(rs_allocation*)buf1774, *(uint32_t*)buf1775, *(uint32_t*)buf1776);
+    *(char4*)buf1777 = rsGetElementAt_char4(*(rs_allocation*)buf1778, *(uint32_t*)buf1779, *(uint32_t*)buf1780);
+    *(uchar*)buf1781 = rsGetElementAt_uchar(*(rs_allocation*)buf1782, *(uint32_t*)buf1783, *(uint32_t*)buf1784);
+    *(uchar2*)buf1785 = rsGetElementAt_uchar2(*(rs_allocation*)buf1786, *(uint32_t*)buf1787, *(uint32_t*)buf1788);
+    *(uchar3*)buf1789 = rsGetElementAt_uchar3(*(rs_allocation*)buf1790, *(uint32_t*)buf1791, *(uint32_t*)buf1792);
+    *(uchar4*)buf1793 = rsGetElementAt_uchar4(*(rs_allocation*)buf1794, *(uint32_t*)buf1795, *(uint32_t*)buf1796);
+    *(short*)buf1797 = rsGetElementAt_short(*(rs_allocation*)buf1798, *(uint32_t*)buf1799, *(uint32_t*)buf1800);
+    *(short2*)buf1801 = rsGetElementAt_short2(*(rs_allocation*)buf1802, *(uint32_t*)buf1803, *(uint32_t*)buf1804);
+    *(short3*)buf1805 = rsGetElementAt_short3(*(rs_allocation*)buf1806, *(uint32_t*)buf1807, *(uint32_t*)buf1808);
+    *(short4*)buf1809 = rsGetElementAt_short4(*(rs_allocation*)buf1810, *(uint32_t*)buf1811, *(uint32_t*)buf1812);
+    *(ushort*)buf1813 = rsGetElementAt_ushort(*(rs_allocation*)buf1814, *(uint32_t*)buf1815, *(uint32_t*)buf1816);
+    *(ushort2*)buf1817 = rsGetElementAt_ushort2(*(rs_allocation*)buf1818, *(uint32_t*)buf1819, *(uint32_t*)buf1820);
+    *(ushort3*)buf1821 = rsGetElementAt_ushort3(*(rs_allocation*)buf1822, *(uint32_t*)buf1823, *(uint32_t*)buf1824);
+    *(ushort4*)buf1825 = rsGetElementAt_ushort4(*(rs_allocation*)buf1826, *(uint32_t*)buf1827, *(uint32_t*)buf1828);
+    *(int*)buf1829 = rsGetElementAt_int(*(rs_allocation*)buf1830, *(uint32_t*)buf1831, *(uint32_t*)buf1832);
+    *(int2*)buf1833 = rsGetElementAt_int2(*(rs_allocation*)buf1834, *(uint32_t*)buf1835, *(uint32_t*)buf1836);
+    *(int3*)buf1837 = rsGetElementAt_int3(*(rs_allocation*)buf1838, *(uint32_t*)buf1839, *(uint32_t*)buf1840);
+    *(int4*)buf1841 = rsGetElementAt_int4(*(rs_allocation*)buf1842, *(uint32_t*)buf1843, *(uint32_t*)buf1844);
+    *(uint*)buf1845 = rsGetElementAt_uint(*(rs_allocation*)buf1846, *(uint32_t*)buf1847, *(uint32_t*)buf1848);
+    *(uint2*)buf1849 = rsGetElementAt_uint2(*(rs_allocation*)buf1850, *(uint32_t*)buf1851, *(uint32_t*)buf1852);
+    *(uint3*)buf1853 = rsGetElementAt_uint3(*(rs_allocation*)buf1854, *(uint32_t*)buf1855, *(uint32_t*)buf1856);
+    *(uint4*)buf1857 = rsGetElementAt_uint4(*(rs_allocation*)buf1858, *(uint32_t*)buf1859, *(uint32_t*)buf1860);
+    *(long*)buf1861 = rsGetElementAt_long(*(rs_allocation*)buf1862, *(uint32_t*)buf1863, *(uint32_t*)buf1864);
+    *(long2*)buf1865 = rsGetElementAt_long2(*(rs_allocation*)buf1866, *(uint32_t*)buf1867, *(uint32_t*)buf1868);
+    *(long3*)buf1869 = rsGetElementAt_long3(*(rs_allocation*)buf1870, *(uint32_t*)buf1871, *(uint32_t*)buf1872);
+    *(long4*)buf1873 = rsGetElementAt_long4(*(rs_allocation*)buf1874, *(uint32_t*)buf1875, *(uint32_t*)buf1876);
+    *(ulong*)buf1877 = rsGetElementAt_ulong(*(rs_allocation*)buf1878, *(uint32_t*)buf1879, *(uint32_t*)buf1880);
+    *(ulong2*)buf1881 = rsGetElementAt_ulong2(*(rs_allocation*)buf1882, *(uint32_t*)buf1883, *(uint32_t*)buf1884);
+    *(ulong3*)buf1885 = rsGetElementAt_ulong3(*(rs_allocation*)buf1886, *(uint32_t*)buf1887, *(uint32_t*)buf1888);
+    *(ulong4*)buf1889 = rsGetElementAt_ulong4(*(rs_allocation*)buf1890, *(uint32_t*)buf1891, *(uint32_t*)buf1892);
+    *(float*)buf1893 = rsGetElementAt_float(*(rs_allocation*)buf1894, *(uint32_t*)buf1895, *(uint32_t*)buf1896, *(uint32_t*)buf1897);
+    *(float2*)buf1898 = rsGetElementAt_float2(*(rs_allocation*)buf1899, *(uint32_t*)buf1900, *(uint32_t*)buf1901, *(uint32_t*)buf1902);
+    *(float3*)buf1903 = rsGetElementAt_float3(*(rs_allocation*)buf1904, *(uint32_t*)buf1905, *(uint32_t*)buf1906, *(uint32_t*)buf1907);
+    *(float4*)buf1908 = rsGetElementAt_float4(*(rs_allocation*)buf1909, *(uint32_t*)buf1910, *(uint32_t*)buf1911, *(uint32_t*)buf1912);
+    *(double*)buf1913 = rsGetElementAt_double(*(rs_allocation*)buf1914, *(uint32_t*)buf1915, *(uint32_t*)buf1916, *(uint32_t*)buf1917);
+    *(double2*)buf1918 = rsGetElementAt_double2(*(rs_allocation*)buf1919, *(uint32_t*)buf1920, *(uint32_t*)buf1921, *(uint32_t*)buf1922);
+    *(double3*)buf1923 = rsGetElementAt_double3(*(rs_allocation*)buf1924, *(uint32_t*)buf1925, *(uint32_t*)buf1926, *(uint32_t*)buf1927);
+    *(double4*)buf1928 = rsGetElementAt_double4(*(rs_allocation*)buf1929, *(uint32_t*)buf1930, *(uint32_t*)buf1931, *(uint32_t*)buf1932);
+    *(char*)buf1933 = rsGetElementAt_char(*(rs_allocation*)buf1934, *(uint32_t*)buf1935, *(uint32_t*)buf1936, *(uint32_t*)buf1937);
+    *(char2*)buf1938 = rsGetElementAt_char2(*(rs_allocation*)buf1939, *(uint32_t*)buf1940, *(uint32_t*)buf1941, *(uint32_t*)buf1942);
+    *(char3*)buf1943 = rsGetElementAt_char3(*(rs_allocation*)buf1944, *(uint32_t*)buf1945, *(uint32_t*)buf1946, *(uint32_t*)buf1947);
+    *(char4*)buf1948 = rsGetElementAt_char4(*(rs_allocation*)buf1949, *(uint32_t*)buf1950, *(uint32_t*)buf1951, *(uint32_t*)buf1952);
+    *(uchar*)buf1953 = rsGetElementAt_uchar(*(rs_allocation*)buf1954, *(uint32_t*)buf1955, *(uint32_t*)buf1956, *(uint32_t*)buf1957);
+    *(uchar2*)buf1958 = rsGetElementAt_uchar2(*(rs_allocation*)buf1959, *(uint32_t*)buf1960, *(uint32_t*)buf1961, *(uint32_t*)buf1962);
+    *(uchar3*)buf1963 = rsGetElementAt_uchar3(*(rs_allocation*)buf1964, *(uint32_t*)buf1965, *(uint32_t*)buf1966, *(uint32_t*)buf1967);
+    *(uchar4*)buf1968 = rsGetElementAt_uchar4(*(rs_allocation*)buf1969, *(uint32_t*)buf1970, *(uint32_t*)buf1971, *(uint32_t*)buf1972);
+    *(short*)buf1973 = rsGetElementAt_short(*(rs_allocation*)buf1974, *(uint32_t*)buf1975, *(uint32_t*)buf1976, *(uint32_t*)buf1977);
+    *(short2*)buf1978 = rsGetElementAt_short2(*(rs_allocation*)buf1979, *(uint32_t*)buf1980, *(uint32_t*)buf1981, *(uint32_t*)buf1982);
+    *(short3*)buf1983 = rsGetElementAt_short3(*(rs_allocation*)buf1984, *(uint32_t*)buf1985, *(uint32_t*)buf1986, *(uint32_t*)buf1987);
+    *(short4*)buf1988 = rsGetElementAt_short4(*(rs_allocation*)buf1989, *(uint32_t*)buf1990, *(uint32_t*)buf1991, *(uint32_t*)buf1992);
+    *(ushort*)buf1993 = rsGetElementAt_ushort(*(rs_allocation*)buf1994, *(uint32_t*)buf1995, *(uint32_t*)buf1996, *(uint32_t*)buf1997);
+    *(ushort2*)buf1998 = rsGetElementAt_ushort2(*(rs_allocation*)buf1999, *(uint32_t*)buf2000, *(uint32_t*)buf2001, *(uint32_t*)buf2002);
+    *(ushort3*)buf2003 = rsGetElementAt_ushort3(*(rs_allocation*)buf2004, *(uint32_t*)buf2005, *(uint32_t*)buf2006, *(uint32_t*)buf2007);
+    *(ushort4*)buf2008 = rsGetElementAt_ushort4(*(rs_allocation*)buf2009, *(uint32_t*)buf2010, *(uint32_t*)buf2011, *(uint32_t*)buf2012);
+    *(int*)buf2013 = rsGetElementAt_int(*(rs_allocation*)buf2014, *(uint32_t*)buf2015, *(uint32_t*)buf2016, *(uint32_t*)buf2017);
+    *(int2*)buf2018 = rsGetElementAt_int2(*(rs_allocation*)buf2019, *(uint32_t*)buf2020, *(uint32_t*)buf2021, *(uint32_t*)buf2022);
+    *(int3*)buf2023 = rsGetElementAt_int3(*(rs_allocation*)buf2024, *(uint32_t*)buf2025, *(uint32_t*)buf2026, *(uint32_t*)buf2027);
+    *(int4*)buf2028 = rsGetElementAt_int4(*(rs_allocation*)buf2029, *(uint32_t*)buf2030, *(uint32_t*)buf2031, *(uint32_t*)buf2032);
+    *(uint*)buf2033 = rsGetElementAt_uint(*(rs_allocation*)buf2034, *(uint32_t*)buf2035, *(uint32_t*)buf2036, *(uint32_t*)buf2037);
+    *(uint2*)buf2038 = rsGetElementAt_uint2(*(rs_allocation*)buf2039, *(uint32_t*)buf2040, *(uint32_t*)buf2041, *(uint32_t*)buf2042);
+    *(uint3*)buf2043 = rsGetElementAt_uint3(*(rs_allocation*)buf2044, *(uint32_t*)buf2045, *(uint32_t*)buf2046, *(uint32_t*)buf2047);
+    *(uint4*)buf2048 = rsGetElementAt_uint4(*(rs_allocation*)buf2049, *(uint32_t*)buf2050, *(uint32_t*)buf2051, *(uint32_t*)buf2052);
+    *(long*)buf2053 = rsGetElementAt_long(*(rs_allocation*)buf2054, *(uint32_t*)buf2055, *(uint32_t*)buf2056, *(uint32_t*)buf2057);
+    *(long2*)buf2058 = rsGetElementAt_long2(*(rs_allocation*)buf2059, *(uint32_t*)buf2060, *(uint32_t*)buf2061, *(uint32_t*)buf2062);
+    *(long3*)buf2063 = rsGetElementAt_long3(*(rs_allocation*)buf2064, *(uint32_t*)buf2065, *(uint32_t*)buf2066, *(uint32_t*)buf2067);
+    *(long4*)buf2068 = rsGetElementAt_long4(*(rs_allocation*)buf2069, *(uint32_t*)buf2070, *(uint32_t*)buf2071, *(uint32_t*)buf2072);
+    *(ulong*)buf2073 = rsGetElementAt_ulong(*(rs_allocation*)buf2074, *(uint32_t*)buf2075, *(uint32_t*)buf2076, *(uint32_t*)buf2077);
+    *(ulong2*)buf2078 = rsGetElementAt_ulong2(*(rs_allocation*)buf2079, *(uint32_t*)buf2080, *(uint32_t*)buf2081, *(uint32_t*)buf2082);
+    *(ulong3*)buf2083 = rsGetElementAt_ulong3(*(rs_allocation*)buf2084, *(uint32_t*)buf2085, *(uint32_t*)buf2086, *(uint32_t*)buf2087);
+    *(ulong4*)buf2088 = rsGetElementAt_ulong4(*(rs_allocation*)buf2089, *(uint32_t*)buf2090, *(uint32_t*)buf2091, *(uint32_t*)buf2092);
+    *(uchar*)buf2093 = rsGetElementAtYuv_uchar_U(*(rs_allocation*)buf2094, *(uint32_t*)buf2095, *(uint32_t*)buf2096);
+    *(uchar*)buf2097 = rsGetElementAtYuv_uchar_V(*(rs_allocation*)buf2098, *(uint32_t*)buf2099, *(uint32_t*)buf2100);
+    *(uchar*)buf2101 = rsGetElementAtYuv_uchar_Y(*(rs_allocation*)buf2102, *(uint32_t*)buf2103, *(uint32_t*)buf2104);
+    *(bool*)buf2105 = rsIsObject(*(rs_element*)buf2106);
+    *(bool*)buf2107 = rsIsObject(*(rs_type*)buf2108);
+    *(bool*)buf2109 = rsIsObject(*(rs_allocation*)buf2110);
+    *(bool*)buf2111 = rsIsObject(*(rs_sampler*)buf2112);
+    *(bool*)buf2113 = rsIsObject(*(rs_script*)buf2114);
+#ifndef __LP64__
+    *(bool*)buf2115 = rsIsObject(*(rs_mesh*)buf2116);
+    *(bool*)buf2117 = rsIsObject(*(rs_program_fragment*)buf2118);
+    *(bool*)buf2119 = rsIsObject(*(rs_program_vertex*)buf2120);
+    *(bool*)buf2121 = rsIsObject(*(rs_program_raster*)buf2122);
+    *(bool*)buf2123 = rsIsObject(*(rs_program_store*)buf2124);
+    *(bool*)buf2125 = rsIsObject(*(rs_font*)buf2126);
+#endif
+    *(bool*)buf2127 = rsIsSphereInFrustum((float4*) buf2128, (float4*) buf2129, (float4*) buf2130, (float4*) buf2131, (float4*) buf2132, (float4*) buf2133, (float4*) buf2134);
+    *(rs_tm**)buf2135 = rsLocaltime((rs_tm*) buf2136, (const rs_time_t*) buf2137);
+    *(float*)buf2138 = rsMatrixGet((const rs_matrix4x4*) buf2139, *(uint32_t*)buf2140, *(uint32_t*)buf2141);
+    *(float*)buf2142 = rsMatrixGet((const rs_matrix3x3*) buf2143, *(uint32_t*)buf2144, *(uint32_t*)buf2145);
+    *(float*)buf2146 = rsMatrixGet((const rs_matrix2x2*) buf2147, *(uint32_t*)buf2148, *(uint32_t*)buf2149);
+    *(bool*)buf2150 = rsMatrixInverse((rs_matrix4x4*) buf2151);
+    *(bool*)buf2152 = rsMatrixInverseTranspose((rs_matrix4x4*) buf2153);
+    rsMatrixLoad((rs_matrix4x4*) buf2154, (const float*) buf2155);
+    rsMatrixLoad((rs_matrix3x3*) buf2156, (const float*) buf2157);
+    rsMatrixLoad((rs_matrix2x2*) buf2158, (const float*) buf2159);
+    rsMatrixLoad((rs_matrix4x4*) buf2160, (const rs_matrix4x4*) buf2161);
+    rsMatrixLoad((rs_matrix3x3*) buf2162, (const rs_matrix3x3*) buf2163);
+    rsMatrixLoad((rs_matrix2x2*) buf2164, (const rs_matrix2x2*) buf2165);
+    rsMatrixLoad((rs_matrix4x4*) buf2166, (const rs_matrix3x3*) buf2167);
+    rsMatrixLoad((rs_matrix4x4*) buf2168, (const rs_matrix2x2*) buf2169);
+    rsMatrixLoadFrustum((rs_matrix4x4*) buf2170, *(float*)buf2171, *(float*)buf2172, *(float*)buf2173, *(float*)buf2174, *(float*)buf2175, *(float*)buf2176);
+    rsMatrixLoadIdentity((rs_matrix4x4*) buf2177);
+    rsMatrixLoadIdentity((rs_matrix3x3*) buf2178);
+    rsMatrixLoadIdentity((rs_matrix2x2*) buf2179);
+    rsMatrixLoadMultiply((rs_matrix4x4*) buf2180, (const rs_matrix4x4*) buf2181, (const rs_matrix4x4*) buf2182);
+    rsMatrixLoadMultiply((rs_matrix3x3*) buf2183, (const rs_matrix3x3*) buf2184, (const rs_matrix3x3*) buf2185);
+    rsMatrixLoadMultiply((rs_matrix2x2*) buf2186, (const rs_matrix2x2*) buf2187, (const rs_matrix2x2*) buf2188);
+    rsMatrixLoadOrtho((rs_matrix4x4*) buf2189, *(float*)buf2190, *(float*)buf2191, *(float*)buf2192, *(float*)buf2193, *(float*)buf2194, *(float*)buf2195);
+    rsMatrixLoadPerspective((rs_matrix4x4*) buf2196, *(float*)buf2197, *(float*)buf2198, *(float*)buf2199, *(float*)buf2200);
+    rsMatrixLoadRotate((rs_matrix4x4*) buf2201, *(float*)buf2202, *(float*)buf2203, *(float*)buf2204, *(float*)buf2205);
+    rsMatrixLoadScale((rs_matrix4x4*) buf2206, *(float*)buf2207, *(float*)buf2208, *(float*)buf2209);
+    rsMatrixLoadTranslate((rs_matrix4x4*) buf2210, *(float*)buf2211, *(float*)buf2212, *(float*)buf2213);
+    rsMatrixMultiply((rs_matrix4x4*) buf2214, (const rs_matrix4x4*) buf2215);
+    rsMatrixMultiply((rs_matrix3x3*) buf2216, (const rs_matrix3x3*) buf2217);
+    rsMatrixMultiply((rs_matrix2x2*) buf2218, (const rs_matrix2x2*) buf2219);
+    *(float4*)buf2220 = rsMatrixMultiply((const rs_matrix4x4*) buf2221, *(float4*)buf2222);
+    *(float4*)buf2223 = rsMatrixMultiply((const rs_matrix4x4*) buf2224, *(float3*)buf2225);
+    *(float4*)buf2226 = rsMatrixMultiply((const rs_matrix4x4*) buf2227, *(float2*)buf2228);
+    *(float3*)buf2229 = rsMatrixMultiply((const rs_matrix3x3*) buf2230, *(float3*)buf2231);
+    *(float3*)buf2232 = rsMatrixMultiply((const rs_matrix3x3*) buf2233, *(float2*)buf2234);
+    *(float2*)buf2235 = rsMatrixMultiply((const rs_matrix2x2*) buf2236, *(float2*)buf2237);
+    rsMatrixRotate((rs_matrix4x4*) buf2238, *(float*)buf2239, *(float*)buf2240, *(float*)buf2241, *(float*)buf2242);
+    rsMatrixScale((rs_matrix4x4*) buf2243, *(float*)buf2244, *(float*)buf2245, *(float*)buf2246);
+    rsMatrixSet((rs_matrix4x4*) buf2247, *(uint32_t*)buf2248, *(uint32_t*)buf2249, *(float*)buf2250);
+    rsMatrixSet((rs_matrix3x3*) buf2251, *(uint32_t*)buf2252, *(uint32_t*)buf2253, *(float*)buf2254);
+    rsMatrixSet((rs_matrix2x2*) buf2255, *(uint32_t*)buf2256, *(uint32_t*)buf2257, *(float*)buf2258);
+    rsMatrixTranslate((rs_matrix4x4*) buf2259, *(float*)buf2260, *(float*)buf2261, *(float*)buf2262);
+    rsMatrixTranspose((rs_matrix4x4*) buf2263);
+    rsMatrixTranspose((rs_matrix3x3*) buf2264);
+    rsMatrixTranspose((rs_matrix2x2*) buf2265);
+    *(uchar4*)buf2266 = rsPackColorTo8888(*(float*)buf2267, *(float*)buf2268, *(float*)buf2269);
+    *(uchar4*)buf2270 = rsPackColorTo8888(*(float*)buf2271, *(float*)buf2272, *(float*)buf2273, *(float*)buf2274);
+    *(uchar4*)buf2275 = rsPackColorTo8888(*(float3*)buf2276);
+    *(uchar4*)buf2277 = rsPackColorTo8888(*(float4*)buf2278);
+    rsQuaternionAdd((rs_quaternion*) buf2279, (const rs_quaternion*) buf2280);
+    rsQuaternionConjugate((rs_quaternion*) buf2281);
+    *(float*)buf2282 = rsQuaternionDot((const rs_quaternion*) buf2283, (const rs_quaternion*) buf2284);
+    rsQuaternionGetMatrixUnit((rs_matrix4x4*) buf2285, (const rs_quaternion*) buf2286);
+    rsQuaternionLoadRotate((rs_quaternion*) buf2287, *(float*)buf2288, *(float*)buf2289, *(float*)buf2290, *(float*)buf2291);
+    rsQuaternionLoadRotateUnit((rs_quaternion*) buf2292, *(float*)buf2293, *(float*)buf2294, *(float*)buf2295, *(float*)buf2296);
+    rsQuaternionMultiply((rs_quaternion*) buf2297, *(float*)buf2298);
+    rsQuaternionMultiply((rs_quaternion*) buf2299, (const rs_quaternion*) buf2300);
+    rsQuaternionNormalize((rs_quaternion*) buf2301);
+    rsQuaternionSet((rs_quaternion*) buf2302, *(float*)buf2303, *(float*)buf2304, *(float*)buf2305, *(float*)buf2306);
+    rsQuaternionSet((rs_quaternion*) buf2307, (const rs_quaternion*) buf2308);
+    rsQuaternionSlerp((rs_quaternion*) buf2309, (const rs_quaternion*) buf2310, (const rs_quaternion*) buf2311, *(float*)buf2312);
+    *(int*)buf2313 = rsRand(*(int*)buf2314);
+    *(int*)buf2315 = rsRand(*(int*)buf2316, *(int*)buf2317);
+    *(float*)buf2318 = rsRand(*(float*)buf2319);
+    *(float*)buf2320 = rsRand(*(float*)buf2321, *(float*)buf2322);
+    *(float4*)buf2323 = rsSample(*(rs_allocation*)buf2324, *(rs_sampler*)buf2325, *(float*)buf2326);
+    *(float4*)buf2327 = rsSample(*(rs_allocation*)buf2328, *(rs_sampler*)buf2329, *(float*)buf2330, *(float*)buf2331);
+    *(float4*)buf2332 = rsSample(*(rs_allocation*)buf2333, *(rs_sampler*)buf2334, *(float2*)buf2335);
+    *(float4*)buf2336 = rsSample(*(rs_allocation*)buf2337, *(rs_sampler*)buf2338, *(float2*)buf2339, *(float*)buf2340);
+    *(float*)buf2341 = rsSamplerGetAnisotropy(*(rs_sampler*)buf2342);
+    *(rs_sampler_value*)buf2343 = rsSamplerGetMagnification(*(rs_sampler*)buf2344);
+    *(rs_sampler_value*)buf2345 = rsSamplerGetMinification(*(rs_sampler*)buf2346);
+    *(rs_sampler_value*)buf2347 = rsSamplerGetWrapS(*(rs_sampler*)buf2348);
+    *(rs_sampler_value*)buf2349 = rsSamplerGetWrapT(*(rs_sampler*)buf2350);
+    *(bool*)buf2351 = rsSendToClient(*(int*)buf2352);
+    *(bool*)buf2353 = rsSendToClient(*(int*)buf2354, (const void*) buf2355, *(uint*)buf2356);
+    rsSendToClientBlocking(*(int*)buf2357);
+    rsSendToClientBlocking(*(int*)buf2358, (const void*) buf2359, *(uint*)buf2360);
+    rsSetElementAt(*(rs_allocation*)buf2361, (void*) buf2362, *(uint32_t*)buf2363);
+    rsSetElementAt(*(rs_allocation*)buf2364, (void*) buf2365, *(uint32_t*)buf2366, *(uint32_t*)buf2367);
+    rsSetElementAt_float(*(rs_allocation*)buf2368, *(float*)buf2369, *(uint32_t*)buf2370);
+    rsSetElementAt_float2(*(rs_allocation*)buf2371, *(float2*)buf2372, *(uint32_t*)buf2373);
+    rsSetElementAt_float3(*(rs_allocation*)buf2374, *(float3*)buf2375, *(uint32_t*)buf2376);
+    rsSetElementAt_float4(*(rs_allocation*)buf2377, *(float4*)buf2378, *(uint32_t*)buf2379);
+    rsSetElementAt_double(*(rs_allocation*)buf2380, *(double*)buf2381, *(uint32_t*)buf2382);
+    rsSetElementAt_double2(*(rs_allocation*)buf2383, *(double2*)buf2384, *(uint32_t*)buf2385);
+    rsSetElementAt_double3(*(rs_allocation*)buf2386, *(double3*)buf2387, *(uint32_t*)buf2388);
+    rsSetElementAt_double4(*(rs_allocation*)buf2389, *(double4*)buf2390, *(uint32_t*)buf2391);
+    rsSetElementAt_char(*(rs_allocation*)buf2392, *(char*)buf2393, *(uint32_t*)buf2394);
+    rsSetElementAt_char2(*(rs_allocation*)buf2395, *(char2*)buf2396, *(uint32_t*)buf2397);
+    rsSetElementAt_char3(*(rs_allocation*)buf2398, *(char3*)buf2399, *(uint32_t*)buf2400);
+    rsSetElementAt_char4(*(rs_allocation*)buf2401, *(char4*)buf2402, *(uint32_t*)buf2403);
+    rsSetElementAt_uchar(*(rs_allocation*)buf2404, *(uchar*)buf2405, *(uint32_t*)buf2406);
+    rsSetElementAt_uchar2(*(rs_allocation*)buf2407, *(uchar2*)buf2408, *(uint32_t*)buf2409);
+    rsSetElementAt_uchar3(*(rs_allocation*)buf2410, *(uchar3*)buf2411, *(uint32_t*)buf2412);
+    rsSetElementAt_uchar4(*(rs_allocation*)buf2413, *(uchar4*)buf2414, *(uint32_t*)buf2415);
+    rsSetElementAt_short(*(rs_allocation*)buf2416, *(short*)buf2417, *(uint32_t*)buf2418);
+    rsSetElementAt_short2(*(rs_allocation*)buf2419, *(short2*)buf2420, *(uint32_t*)buf2421);
+    rsSetElementAt_short3(*(rs_allocation*)buf2422, *(short3*)buf2423, *(uint32_t*)buf2424);
+    rsSetElementAt_short4(*(rs_allocation*)buf2425, *(short4*)buf2426, *(uint32_t*)buf2427);
+    rsSetElementAt_ushort(*(rs_allocation*)buf2428, *(ushort*)buf2429, *(uint32_t*)buf2430);
+    rsSetElementAt_ushort2(*(rs_allocation*)buf2431, *(ushort2*)buf2432, *(uint32_t*)buf2433);
+    rsSetElementAt_ushort3(*(rs_allocation*)buf2434, *(ushort3*)buf2435, *(uint32_t*)buf2436);
+    rsSetElementAt_ushort4(*(rs_allocation*)buf2437, *(ushort4*)buf2438, *(uint32_t*)buf2439);
+    rsSetElementAt_int(*(rs_allocation*)buf2440, *(int*)buf2441, *(uint32_t*)buf2442);
+    rsSetElementAt_int2(*(rs_allocation*)buf2443, *(int2*)buf2444, *(uint32_t*)buf2445);
+    rsSetElementAt_int3(*(rs_allocation*)buf2446, *(int3*)buf2447, *(uint32_t*)buf2448);
+    rsSetElementAt_int4(*(rs_allocation*)buf2449, *(int4*)buf2450, *(uint32_t*)buf2451);
+    rsSetElementAt_uint(*(rs_allocation*)buf2452, *(uint*)buf2453, *(uint32_t*)buf2454);
+    rsSetElementAt_uint2(*(rs_allocation*)buf2455, *(uint2*)buf2456, *(uint32_t*)buf2457);
+    rsSetElementAt_uint3(*(rs_allocation*)buf2458, *(uint3*)buf2459, *(uint32_t*)buf2460);
+    rsSetElementAt_uint4(*(rs_allocation*)buf2461, *(uint4*)buf2462, *(uint32_t*)buf2463);
+    rsSetElementAt_long(*(rs_allocation*)buf2464, *(long*)buf2465, *(uint32_t*)buf2466);
+    rsSetElementAt_long2(*(rs_allocation*)buf2467, *(long2*)buf2468, *(uint32_t*)buf2469);
+    rsSetElementAt_long3(*(rs_allocation*)buf2470, *(long3*)buf2471, *(uint32_t*)buf2472);
+    rsSetElementAt_long4(*(rs_allocation*)buf2473, *(long4*)buf2474, *(uint32_t*)buf2475);
+    rsSetElementAt_ulong(*(rs_allocation*)buf2476, *(ulong*)buf2477, *(uint32_t*)buf2478);
+    rsSetElementAt_ulong2(*(rs_allocation*)buf2479, *(ulong2*)buf2480, *(uint32_t*)buf2481);
+    rsSetElementAt_ulong3(*(rs_allocation*)buf2482, *(ulong3*)buf2483, *(uint32_t*)buf2484);
+    rsSetElementAt_ulong4(*(rs_allocation*)buf2485, *(ulong4*)buf2486, *(uint32_t*)buf2487);
+    rsSetElementAt_float(*(rs_allocation*)buf2488, *(float*)buf2489, *(uint32_t*)buf2490, *(uint32_t*)buf2491);
+    rsSetElementAt_float2(*(rs_allocation*)buf2492, *(float2*)buf2493, *(uint32_t*)buf2494, *(uint32_t*)buf2495);
+    rsSetElementAt_float3(*(rs_allocation*)buf2496, *(float3*)buf2497, *(uint32_t*)buf2498, *(uint32_t*)buf2499);
+    rsSetElementAt_float4(*(rs_allocation*)buf2500, *(float4*)buf2501, *(uint32_t*)buf2502, *(uint32_t*)buf2503);
+    rsSetElementAt_double(*(rs_allocation*)buf2504, *(double*)buf2505, *(uint32_t*)buf2506, *(uint32_t*)buf2507);
+    rsSetElementAt_double2(*(rs_allocation*)buf2508, *(double2*)buf2509, *(uint32_t*)buf2510, *(uint32_t*)buf2511);
+    rsSetElementAt_double3(*(rs_allocation*)buf2512, *(double3*)buf2513, *(uint32_t*)buf2514, *(uint32_t*)buf2515);
+    rsSetElementAt_double4(*(rs_allocation*)buf2516, *(double4*)buf2517, *(uint32_t*)buf2518, *(uint32_t*)buf2519);
+    rsSetElementAt_char(*(rs_allocation*)buf2520, *(char*)buf2521, *(uint32_t*)buf2522, *(uint32_t*)buf2523);
+    rsSetElementAt_char2(*(rs_allocation*)buf2524, *(char2*)buf2525, *(uint32_t*)buf2526, *(uint32_t*)buf2527);
+    rsSetElementAt_char3(*(rs_allocation*)buf2528, *(char3*)buf2529, *(uint32_t*)buf2530, *(uint32_t*)buf2531);
+    rsSetElementAt_char4(*(rs_allocation*)buf2532, *(char4*)buf2533, *(uint32_t*)buf2534, *(uint32_t*)buf2535);
+    rsSetElementAt_uchar(*(rs_allocation*)buf2536, *(uchar*)buf2537, *(uint32_t*)buf2538, *(uint32_t*)buf2539);
+    rsSetElementAt_uchar2(*(rs_allocation*)buf2540, *(uchar2*)buf2541, *(uint32_t*)buf2542, *(uint32_t*)buf2543);
+    rsSetElementAt_uchar3(*(rs_allocation*)buf2544, *(uchar3*)buf2545, *(uint32_t*)buf2546, *(uint32_t*)buf2547);
+    rsSetElementAt_uchar4(*(rs_allocation*)buf2548, *(uchar4*)buf2549, *(uint32_t*)buf2550, *(uint32_t*)buf2551);
+    rsSetElementAt_short(*(rs_allocation*)buf2552, *(short*)buf2553, *(uint32_t*)buf2554, *(uint32_t*)buf2555);
+    rsSetElementAt_short2(*(rs_allocation*)buf2556, *(short2*)buf2557, *(uint32_t*)buf2558, *(uint32_t*)buf2559);
+    rsSetElementAt_short3(*(rs_allocation*)buf2560, *(short3*)buf2561, *(uint32_t*)buf2562, *(uint32_t*)buf2563);
+    rsSetElementAt_short4(*(rs_allocation*)buf2564, *(short4*)buf2565, *(uint32_t*)buf2566, *(uint32_t*)buf2567);
+    rsSetElementAt_ushort(*(rs_allocation*)buf2568, *(ushort*)buf2569, *(uint32_t*)buf2570, *(uint32_t*)buf2571);
+    rsSetElementAt_ushort2(*(rs_allocation*)buf2572, *(ushort2*)buf2573, *(uint32_t*)buf2574, *(uint32_t*)buf2575);
+    rsSetElementAt_ushort3(*(rs_allocation*)buf2576, *(ushort3*)buf2577, *(uint32_t*)buf2578, *(uint32_t*)buf2579);
+    rsSetElementAt_ushort4(*(rs_allocation*)buf2580, *(ushort4*)buf2581, *(uint32_t*)buf2582, *(uint32_t*)buf2583);
+    rsSetElementAt_int(*(rs_allocation*)buf2584, *(int*)buf2585, *(uint32_t*)buf2586, *(uint32_t*)buf2587);
+    rsSetElementAt_int2(*(rs_allocation*)buf2588, *(int2*)buf2589, *(uint32_t*)buf2590, *(uint32_t*)buf2591);
+    rsSetElementAt_int3(*(rs_allocation*)buf2592, *(int3*)buf2593, *(uint32_t*)buf2594, *(uint32_t*)buf2595);
+    rsSetElementAt_int4(*(rs_allocation*)buf2596, *(int4*)buf2597, *(uint32_t*)buf2598, *(uint32_t*)buf2599);
+    rsSetElementAt_uint(*(rs_allocation*)buf2600, *(uint*)buf2601, *(uint32_t*)buf2602, *(uint32_t*)buf2603);
+    rsSetElementAt_uint2(*(rs_allocation*)buf2604, *(uint2*)buf2605, *(uint32_t*)buf2606, *(uint32_t*)buf2607);
+    rsSetElementAt_uint3(*(rs_allocation*)buf2608, *(uint3*)buf2609, *(uint32_t*)buf2610, *(uint32_t*)buf2611);
+    rsSetElementAt_uint4(*(rs_allocation*)buf2612, *(uint4*)buf2613, *(uint32_t*)buf2614, *(uint32_t*)buf2615);
+    rsSetElementAt_long(*(rs_allocation*)buf2616, *(long*)buf2617, *(uint32_t*)buf2618, *(uint32_t*)buf2619);
+    rsSetElementAt_long2(*(rs_allocation*)buf2620, *(long2*)buf2621, *(uint32_t*)buf2622, *(uint32_t*)buf2623);
+    rsSetElementAt_long3(*(rs_allocation*)buf2624, *(long3*)buf2625, *(uint32_t*)buf2626, *(uint32_t*)buf2627);
+    rsSetElementAt_long4(*(rs_allocation*)buf2628, *(long4*)buf2629, *(uint32_t*)buf2630, *(uint32_t*)buf2631);
+    rsSetElementAt_ulong(*(rs_allocation*)buf2632, *(ulong*)buf2633, *(uint32_t*)buf2634, *(uint32_t*)buf2635);
+    rsSetElementAt_ulong2(*(rs_allocation*)buf2636, *(ulong2*)buf2637, *(uint32_t*)buf2638, *(uint32_t*)buf2639);
+    rsSetElementAt_ulong3(*(rs_allocation*)buf2640, *(ulong3*)buf2641, *(uint32_t*)buf2642, *(uint32_t*)buf2643);
+    rsSetElementAt_ulong4(*(rs_allocation*)buf2644, *(ulong4*)buf2645, *(uint32_t*)buf2646, *(uint32_t*)buf2647);
+    rsSetElementAt_float(*(rs_allocation*)buf2648, *(float*)buf2649, *(uint32_t*)buf2650, *(uint32_t*)buf2651, *(uint32_t*)buf2652);
+    rsSetElementAt_float2(*(rs_allocation*)buf2653, *(float2*)buf2654, *(uint32_t*)buf2655, *(uint32_t*)buf2656, *(uint32_t*)buf2657);
+    rsSetElementAt_float3(*(rs_allocation*)buf2658, *(float3*)buf2659, *(uint32_t*)buf2660, *(uint32_t*)buf2661, *(uint32_t*)buf2662);
+    rsSetElementAt_float4(*(rs_allocation*)buf2663, *(float4*)buf2664, *(uint32_t*)buf2665, *(uint32_t*)buf2666, *(uint32_t*)buf2667);
+    rsSetElementAt_double(*(rs_allocation*)buf2668, *(double*)buf2669, *(uint32_t*)buf2670, *(uint32_t*)buf2671, *(uint32_t*)buf2672);
+    rsSetElementAt_double2(*(rs_allocation*)buf2673, *(double2*)buf2674, *(uint32_t*)buf2675, *(uint32_t*)buf2676, *(uint32_t*)buf2677);
+    rsSetElementAt_double3(*(rs_allocation*)buf2678, *(double3*)buf2679, *(uint32_t*)buf2680, *(uint32_t*)buf2681, *(uint32_t*)buf2682);
+    rsSetElementAt_double4(*(rs_allocation*)buf2683, *(double4*)buf2684, *(uint32_t*)buf2685, *(uint32_t*)buf2686, *(uint32_t*)buf2687);
+    rsSetElementAt_char(*(rs_allocation*)buf2688, *(char*)buf2689, *(uint32_t*)buf2690, *(uint32_t*)buf2691, *(uint32_t*)buf2692);
+    rsSetElementAt_char2(*(rs_allocation*)buf2693, *(char2*)buf2694, *(uint32_t*)buf2695, *(uint32_t*)buf2696, *(uint32_t*)buf2697);
+    rsSetElementAt_char3(*(rs_allocation*)buf2698, *(char3*)buf2699, *(uint32_t*)buf2700, *(uint32_t*)buf2701, *(uint32_t*)buf2702);
+    rsSetElementAt_char4(*(rs_allocation*)buf2703, *(char4*)buf2704, *(uint32_t*)buf2705, *(uint32_t*)buf2706, *(uint32_t*)buf2707);
+    rsSetElementAt_uchar(*(rs_allocation*)buf2708, *(uchar*)buf2709, *(uint32_t*)buf2710, *(uint32_t*)buf2711, *(uint32_t*)buf2712);
+    rsSetElementAt_uchar2(*(rs_allocation*)buf2713, *(uchar2*)buf2714, *(uint32_t*)buf2715, *(uint32_t*)buf2716, *(uint32_t*)buf2717);
+    rsSetElementAt_uchar3(*(rs_allocation*)buf2718, *(uchar3*)buf2719, *(uint32_t*)buf2720, *(uint32_t*)buf2721, *(uint32_t*)buf2722);
+    rsSetElementAt_uchar4(*(rs_allocation*)buf2723, *(uchar4*)buf2724, *(uint32_t*)buf2725, *(uint32_t*)buf2726, *(uint32_t*)buf2727);
+    rsSetElementAt_short(*(rs_allocation*)buf2728, *(short*)buf2729, *(uint32_t*)buf2730, *(uint32_t*)buf2731, *(uint32_t*)buf2732);
+    rsSetElementAt_short2(*(rs_allocation*)buf2733, *(short2*)buf2734, *(uint32_t*)buf2735, *(uint32_t*)buf2736, *(uint32_t*)buf2737);
+    rsSetElementAt_short3(*(rs_allocation*)buf2738, *(short3*)buf2739, *(uint32_t*)buf2740, *(uint32_t*)buf2741, *(uint32_t*)buf2742);
+    rsSetElementAt_short4(*(rs_allocation*)buf2743, *(short4*)buf2744, *(uint32_t*)buf2745, *(uint32_t*)buf2746, *(uint32_t*)buf2747);
+    rsSetElementAt_ushort(*(rs_allocation*)buf2748, *(ushort*)buf2749, *(uint32_t*)buf2750, *(uint32_t*)buf2751, *(uint32_t*)buf2752);
+    rsSetElementAt_ushort2(*(rs_allocation*)buf2753, *(ushort2*)buf2754, *(uint32_t*)buf2755, *(uint32_t*)buf2756, *(uint32_t*)buf2757);
+    rsSetElementAt_ushort3(*(rs_allocation*)buf2758, *(ushort3*)buf2759, *(uint32_t*)buf2760, *(uint32_t*)buf2761, *(uint32_t*)buf2762);
+    rsSetElementAt_ushort4(*(rs_allocation*)buf2763, *(ushort4*)buf2764, *(uint32_t*)buf2765, *(uint32_t*)buf2766, *(uint32_t*)buf2767);
+    rsSetElementAt_int(*(rs_allocation*)buf2768, *(int*)buf2769, *(uint32_t*)buf2770, *(uint32_t*)buf2771, *(uint32_t*)buf2772);
+    rsSetElementAt_int2(*(rs_allocation*)buf2773, *(int2*)buf2774, *(uint32_t*)buf2775, *(uint32_t*)buf2776, *(uint32_t*)buf2777);
+    rsSetElementAt_int3(*(rs_allocation*)buf2778, *(int3*)buf2779, *(uint32_t*)buf2780, *(uint32_t*)buf2781, *(uint32_t*)buf2782);
+    rsSetElementAt_int4(*(rs_allocation*)buf2783, *(int4*)buf2784, *(uint32_t*)buf2785, *(uint32_t*)buf2786, *(uint32_t*)buf2787);
+    rsSetElementAt_uint(*(rs_allocation*)buf2788, *(uint*)buf2789, *(uint32_t*)buf2790, *(uint32_t*)buf2791, *(uint32_t*)buf2792);
+    rsSetElementAt_uint2(*(rs_allocation*)buf2793, *(uint2*)buf2794, *(uint32_t*)buf2795, *(uint32_t*)buf2796, *(uint32_t*)buf2797);
+    rsSetElementAt_uint3(*(rs_allocation*)buf2798, *(uint3*)buf2799, *(uint32_t*)buf2800, *(uint32_t*)buf2801, *(uint32_t*)buf2802);
+    rsSetElementAt_uint4(*(rs_allocation*)buf2803, *(uint4*)buf2804, *(uint32_t*)buf2805, *(uint32_t*)buf2806, *(uint32_t*)buf2807);
+    rsSetElementAt_long(*(rs_allocation*)buf2808, *(long*)buf2809, *(uint32_t*)buf2810, *(uint32_t*)buf2811, *(uint32_t*)buf2812);
+    rsSetElementAt_long2(*(rs_allocation*)buf2813, *(long2*)buf2814, *(uint32_t*)buf2815, *(uint32_t*)buf2816, *(uint32_t*)buf2817);
+    rsSetElementAt_long3(*(rs_allocation*)buf2818, *(long3*)buf2819, *(uint32_t*)buf2820, *(uint32_t*)buf2821, *(uint32_t*)buf2822);
+    rsSetElementAt_long4(*(rs_allocation*)buf2823, *(long4*)buf2824, *(uint32_t*)buf2825, *(uint32_t*)buf2826, *(uint32_t*)buf2827);
+    rsSetElementAt_ulong(*(rs_allocation*)buf2828, *(ulong*)buf2829, *(uint32_t*)buf2830, *(uint32_t*)buf2831, *(uint32_t*)buf2832);
+    rsSetElementAt_ulong2(*(rs_allocation*)buf2833, *(ulong2*)buf2834, *(uint32_t*)buf2835, *(uint32_t*)buf2836, *(uint32_t*)buf2837);
+    rsSetElementAt_ulong3(*(rs_allocation*)buf2838, *(ulong3*)buf2839, *(uint32_t*)buf2840, *(uint32_t*)buf2841, *(uint32_t*)buf2842);
+    rsSetElementAt_ulong4(*(rs_allocation*)buf2843, *(ulong4*)buf2844, *(uint32_t*)buf2845, *(uint32_t*)buf2846, *(uint32_t*)buf2847);
+    rsSetObject((rs_element*) buf2848, *(rs_element*)buf2849);
+    rsSetObject((rs_type*) buf2850, *(rs_type*)buf2851);
+    rsSetObject((rs_allocation*) buf2852, *(rs_allocation*)buf2853);
+    rsSetObject((rs_sampler*) buf2854, *(rs_sampler*)buf2855);
+    rsSetObject((rs_script*) buf2856, *(rs_script*)buf2857);
+#ifndef __LP64__
+    rsSetObject((rs_mesh*) buf2858, *(rs_mesh*)buf2859);
+    rsSetObject((rs_program_fragment*) buf2860, *(rs_program_fragment*)buf2861);
+    rsSetObject((rs_program_vertex*) buf2862, *(rs_program_vertex*)buf2863);
+    rsSetObject((rs_program_raster*) buf2864, *(rs_program_raster*)buf2865);
+    rsSetObject((rs_program_store*) buf2866, *(rs_program_store*)buf2867);
+    rsSetObject((rs_font*) buf2868, *(rs_font*)buf2869);
+#endif
+    *(rs_time_t*)buf2870 = rsTime((rs_time_t*) buf2871);
+    *(float4*)buf2872 = rsUnpackColor8888(*(uchar4*)buf2873);
+    *(int64_t*)buf2874 = rsUptimeMillis();
+    *(int64_t*)buf2875 = rsUptimeNanos();
+    *(float4*)buf2876 = rsYuvToRGBA_float4(*(uchar*)buf2877, *(uchar*)buf2878, *(uchar*)buf2879);
+    *(uchar4*)buf2880 = rsYuvToRGBA_uchar4(*(uchar*)buf2881, *(uchar*)buf2882, *(uchar*)buf2883);
+#ifndef __LP64__
+    rsgAllocationSyncAll(*(rs_allocation*)buf2884);
+#endif
+#ifndef __LP64__
+    rsgAllocationSyncAll(*(rs_allocation*)buf2885, *(rs_allocation_usage_type*)buf2886);
+#endif
+#ifndef __LP64__
+    rsgBindColorTarget(*(rs_allocation*)buf2887, *(uint*)buf2888);
+#endif
+#ifndef __LP64__
+    rsgBindConstant(*(rs_program_fragment*)buf2889, *(uint*)buf2890, *(rs_allocation*)buf2891);
+#endif
+#ifndef __LP64__
+    rsgBindConstant(*(rs_program_vertex*)buf2892, *(uint*)buf2893, *(rs_allocation*)buf2894);
+#endif
+#ifndef __LP64__
+    rsgBindDepthTarget(*(rs_allocation*)buf2895);
+#endif
+#ifndef __LP64__
+    rsgBindFont(*(rs_font*)buf2896);
+#endif
+#ifndef __LP64__
+    rsgBindProgramFragment(*(rs_program_fragment*)buf2897);
+#endif
+#ifndef __LP64__
+    rsgBindProgramRaster(*(rs_program_raster*)buf2898);
+#endif
+#ifndef __LP64__
+    rsgBindProgramStore(*(rs_program_store*)buf2899);
+#endif
+#ifndef __LP64__
+    rsgBindProgramVertex(*(rs_program_vertex*)buf2900);
+#endif
+#ifndef __LP64__
+    rsgBindSampler(*(rs_program_fragment*)buf2901, *(uint*)buf2902, *(rs_sampler*)buf2903);
+#endif
+#ifndef __LP64__
+    rsgBindTexture(*(rs_program_fragment*)buf2904, *(uint*)buf2905, *(rs_allocation*)buf2906);
+#endif
+#ifndef __LP64__
+    rsgClearAllRenderTargets();
+#endif
+#ifndef __LP64__
+    rsgClearColor(*(float*)buf2907, *(float*)buf2908, *(float*)buf2909, *(float*)buf2910);
+#endif
+#ifndef __LP64__
+    rsgClearColorTarget(*(uint*)buf2911);
+#endif
+#ifndef __LP64__
+    rsgClearDepth(*(float*)buf2912);
+#endif
+#ifndef __LP64__
+    rsgClearDepthTarget();
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf2913);
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf2914, *(uint*)buf2915);
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf2916, *(uint*)buf2917, *(uint*)buf2918, *(uint*)buf2919);
+#endif
+#ifndef __LP64__
+    rsgDrawQuad(*(float*)buf2920, *(float*)buf2921, *(float*)buf2922, *(float*)buf2923, *(float*)buf2924, *(float*)buf2925, *(float*)buf2926, *(float*)buf2927, *(float*)buf2928, *(float*)buf2929, *(float*)buf2930, *(float*)buf2931);
+#endif
+#ifndef __LP64__
+    rsgDrawQuadTexCoords(*(float*)buf2932, *(float*)buf2933, *(float*)buf2934, *(float*)buf2935, *(float*)buf2936, *(float*)buf2937, *(float*)buf2938, *(float*)buf2939, *(float*)buf2940, *(float*)buf2941, *(float*)buf2942, *(float*)buf2943, *(float*)buf2944, *(float*)buf2945, *(float*)buf2946, *(float*)buf2947, *(float*)buf2948, *(float*)buf2949, *(float*)buf2950, *(float*)buf2951);
+#endif
+#ifndef __LP64__
+    rsgDrawRect(*(float*)buf2952, *(float*)buf2953, *(float*)buf2954, *(float*)buf2955, *(float*)buf2956);
+#endif
+#ifndef __LP64__
+    rsgDrawSpriteScreenspace(*(float*)buf2957, *(float*)buf2958, *(float*)buf2959, *(float*)buf2960, *(float*)buf2961);
+#endif
+#ifndef __LP64__
+    rsgDrawText((const char*) buf2962, *(int*)buf2963, *(int*)buf2964);
+#endif
+#ifndef __LP64__
+    rsgDrawText(*(rs_allocation*)buf2965, *(int*)buf2966, *(int*)buf2967);
+#endif
+#ifndef __LP64__
+    *(uint*)buf2968 = rsgFinish();
+#endif
+#ifndef __LP64__
+    rsgFontColor(*(float*)buf2969, *(float*)buf2970, *(float*)buf2971, *(float*)buf2972);
+#endif
+#ifndef __LP64__
+    *(uint*)buf2973 = rsgGetHeight();
+#endif
+#ifndef __LP64__
+    *(uint*)buf2974 = rsgGetWidth();
+#endif
+#ifndef __LP64__
+    rsgMeasureText((const char*) buf2975, (int*) buf2976, (int*) buf2977, (int*) buf2978, (int*) buf2979);
+#endif
+#ifndef __LP64__
+    rsgMeasureText(*(rs_allocation*)buf2980, (int*) buf2981, (int*) buf2982, (int*) buf2983, (int*) buf2984);
+#endif
+#ifndef __LP64__
+    rsgMeshComputeBoundingBox(*(rs_mesh*)buf2985, (float*) buf2986, (float*) buf2987, (float*) buf2988, (float*) buf2989, (float*) buf2990, (float*) buf2991);
+#endif
+#ifndef __LP64__
+    rsgMeshComputeBoundingBox(*(rs_mesh*)buf2992, (float3*) buf2993, (float3*) buf2994);
+#endif
+#ifndef __LP64__
+    *(rs_allocation*)buf2995 = rsgMeshGetIndexAllocation(*(rs_mesh*)buf2996, *(uint32_t*)buf2997);
+#endif
+#ifndef __LP64__
+    *(rs_primitive*)buf2998 = rsgMeshGetPrimitive(*(rs_mesh*)buf2999, *(uint32_t*)buf3000);
+#endif
+#ifndef __LP64__
+    *(uint32_t*)buf3001 = rsgMeshGetPrimitiveCount(*(rs_mesh*)buf3002);
+#endif
+#ifndef __LP64__
+    *(rs_allocation*)buf3003 = rsgMeshGetVertexAllocation(*(rs_mesh*)buf3004, *(uint32_t*)buf3005);
+#endif
+#ifndef __LP64__
+    *(uint32_t*)buf3006 = rsgMeshGetVertexAllocationCount(*(rs_mesh*)buf3007);
+#endif
+#ifndef __LP64__
+    rsgProgramFragmentConstantColor(*(rs_program_fragment*)buf3008, *(float*)buf3009, *(float*)buf3010, *(float*)buf3011, *(float*)buf3012);
+#endif
+#ifndef __LP64__
+    *(rs_cull_mode*)buf3013 = rsgProgramRasterGetCullMode(*(rs_program_raster*)buf3014);
+#endif
+#ifndef __LP64__
+    *(bool*)buf3015 = rsgProgramRasterIsPointSpriteEnabled(*(rs_program_raster*)buf3016);
+#endif
+#ifndef __LP64__
+    *(rs_blend_dst_func*)buf3017 = rsgProgramStoreGetBlendDstFunc(*(rs_program_store*)buf3018);
+#endif
+#ifndef __LP64__
+    *(rs_blend_src_func*)buf3019 = rsgProgramStoreGetBlendSrcFunc(*(rs_program_store*)buf3020);
+#endif
+#ifndef __LP64__
+    *(rs_depth_func*)buf3021 = rsgProgramStoreGetDepthFunc(*(rs_program_store*)buf3022);
+#endif
+#ifndef __LP64__
+    *(bool*)buf3023 = rsgProgramStoreIsColorMaskAlphaEnabled(*(rs_program_store*)buf3024);
+#endif
+#ifndef __LP64__
+    *(bool*)buf3025 = rsgProgramStoreIsColorMaskBlueEnabled(*(rs_program_store*)buf3026);
+#endif
+#ifndef __LP64__
+    *(bool*)buf3027 = rsgProgramStoreIsColorMaskGreenEnabled(*(rs_program_store*)buf3028);
+#endif
+#ifndef __LP64__
+    *(bool*)buf3029 = rsgProgramStoreIsColorMaskRedEnabled(*(rs_program_store*)buf3030);
+#endif
+#ifndef __LP64__
+    *(bool*)buf3031 = rsgProgramStoreIsDepthMaskEnabled(*(rs_program_store*)buf3032);
+#endif
+#ifndef __LP64__
+    *(bool*)buf3033 = rsgProgramStoreIsDitherEnabled(*(rs_program_store*)buf3034);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexGetProjectionMatrix((rs_matrix4x4*) buf3035);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadModelMatrix((const rs_matrix4x4*) buf3036);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadProjectionMatrix((const rs_matrix4x4*) buf3037);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadTextureMatrix((const rs_matrix4x4*) buf3038);
+#endif
+    *(float*)buf3039 = rsqrt(*(float*)buf3040);
+    *(float2*)buf3041 = rsqrt(*(float2*)buf3042);
+    *(float3*)buf3043 = rsqrt(*(float3*)buf3044);
+    *(float4*)buf3045 = rsqrt(*(float4*)buf3046);
+    *(float*)buf3047 = sign(*(float*)buf3048);
+    *(float2*)buf3049 = sign(*(float2*)buf3050);
+    *(float3*)buf3051 = sign(*(float3*)buf3052);
+    *(float4*)buf3053 = sign(*(float4*)buf3054);
+    *(float*)buf3055 = sin(*(float*)buf3056);
+    *(float2*)buf3057 = sin(*(float2*)buf3058);
+    *(float3*)buf3059 = sin(*(float3*)buf3060);
+    *(float4*)buf3061 = sin(*(float4*)buf3062);
+    *(float*)buf3063 = sincos(*(float*)buf3064, (float*) buf3065);
+    *(float2*)buf3066 = sincos(*(float2*)buf3067, (float2*) buf3068);
+    *(float3*)buf3069 = sincos(*(float3*)buf3070, (float3*) buf3071);
+    *(float4*)buf3072 = sincos(*(float4*)buf3073, (float4*) buf3074);
+    *(float*)buf3075 = sinh(*(float*)buf3076);
+    *(float2*)buf3077 = sinh(*(float2*)buf3078);
+    *(float3*)buf3079 = sinh(*(float3*)buf3080);
+    *(float4*)buf3081 = sinh(*(float4*)buf3082);
+    *(float*)buf3083 = sinpi(*(float*)buf3084);
+    *(float2*)buf3085 = sinpi(*(float2*)buf3086);
+    *(float3*)buf3087 = sinpi(*(float3*)buf3088);
+    *(float4*)buf3089 = sinpi(*(float4*)buf3090);
+    *(float*)buf3091 = sqrt(*(float*)buf3092);
+    *(float2*)buf3093 = sqrt(*(float2*)buf3094);
+    *(float3*)buf3095 = sqrt(*(float3*)buf3096);
+    *(float4*)buf3097 = sqrt(*(float4*)buf3098);
+    *(float*)buf3099 = step(*(float*)buf3100, *(float*)buf3101);
+    *(float2*)buf3102 = step(*(float2*)buf3103, *(float2*)buf3104);
+    *(float3*)buf3105 = step(*(float3*)buf3106, *(float3*)buf3107);
+    *(float4*)buf3108 = step(*(float4*)buf3109, *(float4*)buf3110);
+    *(float2*)buf3111 = step(*(float2*)buf3112, *(float*)buf3113);
+    *(float3*)buf3114 = step(*(float3*)buf3115, *(float*)buf3116);
+    *(float4*)buf3117 = step(*(float4*)buf3118, *(float*)buf3119);
+    *(float*)buf3120 = tan(*(float*)buf3121);
+    *(float2*)buf3122 = tan(*(float2*)buf3123);
+    *(float3*)buf3124 = tan(*(float3*)buf3125);
+    *(float4*)buf3126 = tan(*(float4*)buf3127);
+    *(float*)buf3128 = tanh(*(float*)buf3129);
+    *(float2*)buf3130 = tanh(*(float2*)buf3131);
+    *(float3*)buf3132 = tanh(*(float3*)buf3133);
+    *(float4*)buf3134 = tanh(*(float4*)buf3135);
+    *(float*)buf3136 = tanpi(*(float*)buf3137);
+    *(float2*)buf3138 = tanpi(*(float2*)buf3139);
+    *(float3*)buf3140 = tanpi(*(float3*)buf3141);
+    *(float4*)buf3142 = tanpi(*(float4*)buf3143);
+    *(float*)buf3144 = tgamma(*(float*)buf3145);
+    *(float2*)buf3146 = tgamma(*(float2*)buf3147);
+    *(float3*)buf3148 = tgamma(*(float3*)buf3149);
+    *(float4*)buf3150 = tgamma(*(float4*)buf3151);
+    *(float*)buf3152 = trunc(*(float*)buf3153);
+    *(float2*)buf3154 = trunc(*(float2*)buf3155);
+    *(float3*)buf3156 = trunc(*(float3*)buf3157);
+    *(float4*)buf3158 = trunc(*(float4*)buf3159);
+}
diff --git a/slang/tests/P_all_api_18/stderr.txt.expect b/slang/tests/P_all_api_18/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_all_api_18/stderr.txt.expect
diff --git a/slang/tests/P_all_api_18/stdout.txt.expect b/slang/tests/P_all_api_18/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_all_api_18/stdout.txt.expect
diff --git a/slang/tests/P_all_api_19/all19.rs b/slang/tests/P_all_api_19/all19.rs
new file mode 100644
index 0000000..da44c86
--- /dev/null
+++ b/slang/tests/P_all_api_19/all19.rs
@@ -0,0 +1,4716 @@
+// -target-api 19 -Wno-deprecated-declarations
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Don't edit this file!  It is auto-generated by frameworks/rs/api/generate.sh.
+
+#pragma version(1)
+#pragma rs java_package_name(com.example.renderscript.testallapi)
+
+#include "rs_graphics.rsh"
+
+char buf0[200];
+char buf1[200];
+char buf2[200];
+char buf3[200];
+char buf4[200];
+char buf5[200];
+char buf6[200];
+char buf7[200];
+char buf8[200];
+char buf9[200];
+char buf10[200];
+char buf11[200];
+char buf12[200];
+char buf13[200];
+char buf14[200];
+char buf15[200];
+char buf16[200];
+char buf17[200];
+char buf18[200];
+char buf19[200];
+char buf20[200];
+char buf21[200];
+char buf22[200];
+char buf23[200];
+char buf24[200];
+char buf25[200];
+char buf26[200];
+char buf27[200];
+char buf28[200];
+char buf29[200];
+char buf30[200];
+char buf31[200];
+char buf32[200];
+char buf33[200];
+char buf34[200];
+char buf35[200];
+char buf36[200];
+char buf37[200];
+char buf38[200];
+char buf39[200];
+char buf40[200];
+char buf41[200];
+char buf42[200];
+char buf43[200];
+char buf44[200];
+char buf45[200];
+char buf46[200];
+char buf47[200];
+char buf48[200];
+char buf49[200];
+char buf50[200];
+char buf51[200];
+char buf52[200];
+char buf53[200];
+char buf54[200];
+char buf55[200];
+char buf56[200];
+char buf57[200];
+char buf58[200];
+char buf59[200];
+char buf60[200];
+char buf61[200];
+char buf62[200];
+char buf63[200];
+char buf64[200];
+char buf65[200];
+char buf66[200];
+char buf67[200];
+char buf68[200];
+char buf69[200];
+char buf70[200];
+char buf71[200];
+char buf72[200];
+char buf73[200];
+char buf74[200];
+char buf75[200];
+char buf76[200];
+char buf77[200];
+char buf78[200];
+char buf79[200];
+char buf80[200];
+char buf81[200];
+char buf82[200];
+char buf83[200];
+char buf84[200];
+char buf85[200];
+char buf86[200];
+char buf87[200];
+char buf88[200];
+char buf89[200];
+char buf90[200];
+char buf91[200];
+char buf92[200];
+char buf93[200];
+char buf94[200];
+char buf95[200];
+char buf96[200];
+char buf97[200];
+char buf98[200];
+char buf99[200];
+char buf100[200];
+char buf101[200];
+char buf102[200];
+char buf103[200];
+char buf104[200];
+char buf105[200];
+char buf106[200];
+char buf107[200];
+char buf108[200];
+char buf109[200];
+char buf110[200];
+char buf111[200];
+char buf112[200];
+char buf113[200];
+char buf114[200];
+char buf115[200];
+char buf116[200];
+char buf117[200];
+char buf118[200];
+char buf119[200];
+char buf120[200];
+char buf121[200];
+char buf122[200];
+char buf123[200];
+char buf124[200];
+char buf125[200];
+char buf126[200];
+char buf127[200];
+char buf128[200];
+char buf129[200];
+char buf130[200];
+char buf131[200];
+char buf132[200];
+char buf133[200];
+char buf134[200];
+char buf135[200];
+char buf136[200];
+char buf137[200];
+char buf138[200];
+char buf139[200];
+char buf140[200];
+char buf141[200];
+char buf142[200];
+char buf143[200];
+char buf144[200];
+char buf145[200];
+char buf146[200];
+char buf147[200];
+char buf148[200];
+char buf149[200];
+char buf150[200];
+char buf151[200];
+char buf152[200];
+char buf153[200];
+char buf154[200];
+char buf155[200];
+char buf156[200];
+char buf157[200];
+char buf158[200];
+char buf159[200];
+char buf160[200];
+char buf161[200];
+char buf162[200];
+char buf163[200];
+char buf164[200];
+char buf165[200];
+char buf166[200];
+char buf167[200];
+char buf168[200];
+char buf169[200];
+char buf170[200];
+char buf171[200];
+char buf172[200];
+char buf173[200];
+char buf174[200];
+char buf175[200];
+char buf176[200];
+char buf177[200];
+char buf178[200];
+char buf179[200];
+char buf180[200];
+char buf181[200];
+char buf182[200];
+char buf183[200];
+char buf184[200];
+char buf185[200];
+char buf186[200];
+char buf187[200];
+char buf188[200];
+char buf189[200];
+char buf190[200];
+char buf191[200];
+char buf192[200];
+char buf193[200];
+char buf194[200];
+char buf195[200];
+char buf196[200];
+char buf197[200];
+char buf198[200];
+char buf199[200];
+char buf200[200];
+char buf201[200];
+char buf202[200];
+char buf203[200];
+char buf204[200];
+char buf205[200];
+char buf206[200];
+char buf207[200];
+char buf208[200];
+char buf209[200];
+char buf210[200];
+char buf211[200];
+char buf212[200];
+char buf213[200];
+char buf214[200];
+char buf215[200];
+char buf216[200];
+char buf217[200];
+char buf218[200];
+char buf219[200];
+char buf220[200];
+char buf221[200];
+char buf222[200];
+char buf223[200];
+char buf224[200];
+char buf225[200];
+char buf226[200];
+char buf227[200];
+char buf228[200];
+char buf229[200];
+char buf230[200];
+char buf231[200];
+char buf232[200];
+char buf233[200];
+char buf234[200];
+char buf235[200];
+char buf236[200];
+char buf237[200];
+char buf238[200];
+char buf239[200];
+char buf240[200];
+char buf241[200];
+char buf242[200];
+char buf243[200];
+char buf244[200];
+char buf245[200];
+char buf246[200];
+char buf247[200];
+char buf248[200];
+char buf249[200];
+char buf250[200];
+char buf251[200];
+char buf252[200];
+char buf253[200];
+char buf254[200];
+char buf255[200];
+char buf256[200];
+char buf257[200];
+char buf258[200];
+char buf259[200];
+char buf260[200];
+char buf261[200];
+char buf262[200];
+char buf263[200];
+char buf264[200];
+char buf265[200];
+char buf266[200];
+char buf267[200];
+char buf268[200];
+char buf269[200];
+char buf270[200];
+char buf271[200];
+char buf272[200];
+char buf273[200];
+char buf274[200];
+char buf275[200];
+char buf276[200];
+char buf277[200];
+char buf278[200];
+char buf279[200];
+char buf280[200];
+char buf281[200];
+char buf282[200];
+char buf283[200];
+char buf284[200];
+char buf285[200];
+char buf286[200];
+char buf287[200];
+char buf288[200];
+char buf289[200];
+char buf290[200];
+char buf291[200];
+char buf292[200];
+char buf293[200];
+char buf294[200];
+char buf295[200];
+char buf296[200];
+char buf297[200];
+char buf298[200];
+char buf299[200];
+char buf300[200];
+char buf301[200];
+char buf302[200];
+char buf303[200];
+char buf304[200];
+char buf305[200];
+char buf306[200];
+char buf307[200];
+char buf308[200];
+char buf309[200];
+char buf310[200];
+char buf311[200];
+char buf312[200];
+char buf313[200];
+char buf314[200];
+char buf315[200];
+char buf316[200];
+char buf317[200];
+char buf318[200];
+char buf319[200];
+char buf320[200];
+char buf321[200];
+char buf322[200];
+char buf323[200];
+char buf324[200];
+char buf325[200];
+char buf326[200];
+char buf327[200];
+char buf328[200];
+char buf329[200];
+char buf330[200];
+char buf331[200];
+char buf332[200];
+char buf333[200];
+char buf334[200];
+char buf335[200];
+char buf336[200];
+char buf337[200];
+char buf338[200];
+char buf339[200];
+char buf340[200];
+char buf341[200];
+char buf342[200];
+char buf343[200];
+char buf344[200];
+char buf345[200];
+char buf346[200];
+char buf347[200];
+char buf348[200];
+char buf349[200];
+char buf350[200];
+char buf351[200];
+char buf352[200];
+char buf353[200];
+char buf354[200];
+char buf355[200];
+char buf356[200];
+char buf357[200];
+char buf358[200];
+char buf359[200];
+char buf360[200];
+char buf361[200];
+char buf362[200];
+char buf363[200];
+char buf364[200];
+char buf365[200];
+char buf366[200];
+char buf367[200];
+char buf368[200];
+char buf369[200];
+char buf370[200];
+char buf371[200];
+char buf372[200];
+char buf373[200];
+char buf374[200];
+char buf375[200];
+char buf376[200];
+char buf377[200];
+char buf378[200];
+char buf379[200];
+char buf380[200];
+char buf381[200];
+char buf382[200];
+char buf383[200];
+char buf384[200];
+char buf385[200];
+char buf386[200];
+char buf387[200];
+char buf388[200];
+char buf389[200];
+char buf390[200];
+char buf391[200];
+char buf392[200];
+char buf393[200];
+char buf394[200];
+char buf395[200];
+char buf396[200];
+char buf397[200];
+char buf398[200];
+char buf399[200];
+char buf400[200];
+char buf401[200];
+char buf402[200];
+char buf403[200];
+char buf404[200];
+char buf405[200];
+char buf406[200];
+char buf407[200];
+char buf408[200];
+char buf409[200];
+char buf410[200];
+char buf411[200];
+char buf412[200];
+char buf413[200];
+char buf414[200];
+char buf415[200];
+char buf416[200];
+char buf417[200];
+char buf418[200];
+char buf419[200];
+char buf420[200];
+char buf421[200];
+char buf422[200];
+char buf423[200];
+char buf424[200];
+char buf425[200];
+char buf426[200];
+char buf427[200];
+char buf428[200];
+char buf429[200];
+char buf430[200];
+char buf431[200];
+char buf432[200];
+char buf433[200];
+char buf434[200];
+char buf435[200];
+char buf436[200];
+char buf437[200];
+char buf438[200];
+char buf439[200];
+char buf440[200];
+char buf441[200];
+char buf442[200];
+char buf443[200];
+char buf444[200];
+char buf445[200];
+char buf446[200];
+char buf447[200];
+char buf448[200];
+char buf449[200];
+char buf450[200];
+char buf451[200];
+char buf452[200];
+char buf453[200];
+char buf454[200];
+char buf455[200];
+char buf456[200];
+char buf457[200];
+char buf458[200];
+char buf459[200];
+char buf460[200];
+char buf461[200];
+char buf462[200];
+char buf463[200];
+char buf464[200];
+char buf465[200];
+char buf466[200];
+char buf467[200];
+char buf468[200];
+char buf469[200];
+char buf470[200];
+char buf471[200];
+char buf472[200];
+char buf473[200];
+char buf474[200];
+char buf475[200];
+char buf476[200];
+char buf477[200];
+char buf478[200];
+char buf479[200];
+char buf480[200];
+char buf481[200];
+char buf482[200];
+char buf483[200];
+char buf484[200];
+char buf485[200];
+char buf486[200];
+char buf487[200];
+char buf488[200];
+char buf489[200];
+char buf490[200];
+char buf491[200];
+char buf492[200];
+char buf493[200];
+char buf494[200];
+char buf495[200];
+char buf496[200];
+char buf497[200];
+char buf498[200];
+char buf499[200];
+char buf500[200];
+char buf501[200];
+char buf502[200];
+char buf503[200];
+char buf504[200];
+char buf505[200];
+char buf506[200];
+char buf507[200];
+char buf508[200];
+char buf509[200];
+char buf510[200];
+char buf511[200];
+char buf512[200];
+char buf513[200];
+char buf514[200];
+char buf515[200];
+char buf516[200];
+char buf517[200];
+char buf518[200];
+char buf519[200];
+char buf520[200];
+char buf521[200];
+char buf522[200];
+char buf523[200];
+char buf524[200];
+char buf525[200];
+char buf526[200];
+char buf527[200];
+char buf528[200];
+char buf529[200];
+char buf530[200];
+char buf531[200];
+char buf532[200];
+char buf533[200];
+char buf534[200];
+char buf535[200];
+char buf536[200];
+char buf537[200];
+char buf538[200];
+char buf539[200];
+char buf540[200];
+char buf541[200];
+char buf542[200];
+char buf543[200];
+char buf544[200];
+char buf545[200];
+char buf546[200];
+char buf547[200];
+char buf548[200];
+char buf549[200];
+char buf550[200];
+char buf551[200];
+char buf552[200];
+char buf553[200];
+char buf554[200];
+char buf555[200];
+char buf556[200];
+char buf557[200];
+char buf558[200];
+char buf559[200];
+char buf560[200];
+char buf561[200];
+char buf562[200];
+char buf563[200];
+char buf564[200];
+char buf565[200];
+char buf566[200];
+char buf567[200];
+char buf568[200];
+char buf569[200];
+char buf570[200];
+char buf571[200];
+char buf572[200];
+char buf573[200];
+char buf574[200];
+char buf575[200];
+char buf576[200];
+char buf577[200];
+char buf578[200];
+char buf579[200];
+char buf580[200];
+char buf581[200];
+char buf582[200];
+char buf583[200];
+char buf584[200];
+char buf585[200];
+char buf586[200];
+char buf587[200];
+char buf588[200];
+char buf589[200];
+char buf590[200];
+char buf591[200];
+char buf592[200];
+char buf593[200];
+char buf594[200];
+char buf595[200];
+char buf596[200];
+char buf597[200];
+char buf598[200];
+char buf599[200];
+char buf600[200];
+char buf601[200];
+char buf602[200];
+char buf603[200];
+char buf604[200];
+char buf605[200];
+char buf606[200];
+char buf607[200];
+char buf608[200];
+char buf609[200];
+char buf610[200];
+char buf611[200];
+char buf612[200];
+char buf613[200];
+char buf614[200];
+char buf615[200];
+char buf616[200];
+char buf617[200];
+char buf618[200];
+char buf619[200];
+char buf620[200];
+char buf621[200];
+char buf622[200];
+char buf623[200];
+char buf624[200];
+char buf625[200];
+char buf626[200];
+char buf627[200];
+char buf628[200];
+char buf629[200];
+char buf630[200];
+char buf631[200];
+char buf632[200];
+char buf633[200];
+char buf634[200];
+char buf635[200];
+char buf636[200];
+char buf637[200];
+char buf638[200];
+char buf639[200];
+char buf640[200];
+char buf641[200];
+char buf642[200];
+char buf643[200];
+char buf644[200];
+char buf645[200];
+char buf646[200];
+char buf647[200];
+char buf648[200];
+char buf649[200];
+char buf650[200];
+char buf651[200];
+char buf652[200];
+char buf653[200];
+char buf654[200];
+char buf655[200];
+char buf656[200];
+char buf657[200];
+char buf658[200];
+char buf659[200];
+char buf660[200];
+char buf661[200];
+char buf662[200];
+char buf663[200];
+char buf664[200];
+char buf665[200];
+char buf666[200];
+char buf667[200];
+char buf668[200];
+char buf669[200];
+char buf670[200];
+char buf671[200];
+char buf672[200];
+char buf673[200];
+char buf674[200];
+char buf675[200];
+char buf676[200];
+char buf677[200];
+char buf678[200];
+char buf679[200];
+char buf680[200];
+char buf681[200];
+char buf682[200];
+char buf683[200];
+char buf684[200];
+char buf685[200];
+char buf686[200];
+char buf687[200];
+char buf688[200];
+char buf689[200];
+char buf690[200];
+char buf691[200];
+char buf692[200];
+char buf693[200];
+char buf694[200];
+char buf695[200];
+char buf696[200];
+char buf697[200];
+char buf698[200];
+char buf699[200];
+char buf700[200];
+char buf701[200];
+char buf702[200];
+char buf703[200];
+char buf704[200];
+char buf705[200];
+char buf706[200];
+char buf707[200];
+char buf708[200];
+char buf709[200];
+char buf710[200];
+char buf711[200];
+char buf712[200];
+char buf713[200];
+char buf714[200];
+char buf715[200];
+char buf716[200];
+char buf717[200];
+char buf718[200];
+char buf719[200];
+char buf720[200];
+char buf721[200];
+char buf722[200];
+char buf723[200];
+char buf724[200];
+char buf725[200];
+char buf726[200];
+char buf727[200];
+char buf728[200];
+char buf729[200];
+char buf730[200];
+char buf731[200];
+char buf732[200];
+char buf733[200];
+char buf734[200];
+char buf735[200];
+char buf736[200];
+char buf737[200];
+char buf738[200];
+char buf739[200];
+char buf740[200];
+char buf741[200];
+char buf742[200];
+char buf743[200];
+char buf744[200];
+char buf745[200];
+char buf746[200];
+char buf747[200];
+char buf748[200];
+char buf749[200];
+char buf750[200];
+char buf751[200];
+char buf752[200];
+char buf753[200];
+char buf754[200];
+char buf755[200];
+char buf756[200];
+char buf757[200];
+char buf758[200];
+char buf759[200];
+char buf760[200];
+char buf761[200];
+char buf762[200];
+char buf763[200];
+char buf764[200];
+char buf765[200];
+char buf766[200];
+char buf767[200];
+char buf768[200];
+char buf769[200];
+char buf770[200];
+char buf771[200];
+char buf772[200];
+char buf773[200];
+char buf774[200];
+char buf775[200];
+char buf776[200];
+char buf777[200];
+char buf778[200];
+char buf779[200];
+char buf780[200];
+char buf781[200];
+char buf782[200];
+char buf783[200];
+char buf784[200];
+char buf785[200];
+char buf786[200];
+char buf787[200];
+char buf788[200];
+char buf789[200];
+char buf790[200];
+char buf791[200];
+char buf792[200];
+char buf793[200];
+char buf794[200];
+char buf795[200];
+char buf796[200];
+char buf797[200];
+char buf798[200];
+char buf799[200];
+char buf800[200];
+char buf801[200];
+char buf802[200];
+char buf803[200];
+char buf804[200];
+char buf805[200];
+char buf806[200];
+char buf807[200];
+char buf808[200];
+char buf809[200];
+char buf810[200];
+char buf811[200];
+char buf812[200];
+char buf813[200];
+char buf814[200];
+char buf815[200];
+char buf816[200];
+char buf817[200];
+char buf818[200];
+char buf819[200];
+char buf820[200];
+char buf821[200];
+char buf822[200];
+char buf823[200];
+char buf824[200];
+char buf825[200];
+char buf826[200];
+char buf827[200];
+char buf828[200];
+char buf829[200];
+char buf830[200];
+char buf831[200];
+char buf832[200];
+char buf833[200];
+char buf834[200];
+char buf835[200];
+char buf836[200];
+char buf837[200];
+char buf838[200];
+char buf839[200];
+char buf840[200];
+char buf841[200];
+char buf842[200];
+char buf843[200];
+char buf844[200];
+char buf845[200];
+char buf846[200];
+char buf847[200];
+char buf848[200];
+char buf849[200];
+char buf850[200];
+char buf851[200];
+char buf852[200];
+char buf853[200];
+char buf854[200];
+char buf855[200];
+char buf856[200];
+char buf857[200];
+char buf858[200];
+char buf859[200];
+char buf860[200];
+char buf861[200];
+char buf862[200];
+char buf863[200];
+char buf864[200];
+char buf865[200];
+char buf866[200];
+char buf867[200];
+char buf868[200];
+char buf869[200];
+char buf870[200];
+char buf871[200];
+char buf872[200];
+char buf873[200];
+char buf874[200];
+char buf875[200];
+char buf876[200];
+char buf877[200];
+char buf878[200];
+char buf879[200];
+char buf880[200];
+char buf881[200];
+char buf882[200];
+char buf883[200];
+char buf884[200];
+char buf885[200];
+char buf886[200];
+char buf887[200];
+char buf888[200];
+char buf889[200];
+char buf890[200];
+char buf891[200];
+char buf892[200];
+char buf893[200];
+char buf894[200];
+char buf895[200];
+char buf896[200];
+char buf897[200];
+char buf898[200];
+char buf899[200];
+char buf900[200];
+char buf901[200];
+char buf902[200];
+char buf903[200];
+char buf904[200];
+char buf905[200];
+char buf906[200];
+char buf907[200];
+char buf908[200];
+char buf909[200];
+char buf910[200];
+char buf911[200];
+char buf912[200];
+char buf913[200];
+char buf914[200];
+char buf915[200];
+char buf916[200];
+char buf917[200];
+char buf918[200];
+char buf919[200];
+char buf920[200];
+char buf921[200];
+char buf922[200];
+char buf923[200];
+char buf924[200];
+char buf925[200];
+char buf926[200];
+char buf927[200];
+char buf928[200];
+char buf929[200];
+char buf930[200];
+char buf931[200];
+char buf932[200];
+char buf933[200];
+char buf934[200];
+char buf935[200];
+char buf936[200];
+char buf937[200];
+char buf938[200];
+char buf939[200];
+char buf940[200];
+char buf941[200];
+char buf942[200];
+char buf943[200];
+char buf944[200];
+char buf945[200];
+char buf946[200];
+char buf947[200];
+char buf948[200];
+char buf949[200];
+char buf950[200];
+char buf951[200];
+char buf952[200];
+char buf953[200];
+char buf954[200];
+char buf955[200];
+char buf956[200];
+char buf957[200];
+char buf958[200];
+char buf959[200];
+char buf960[200];
+char buf961[200];
+char buf962[200];
+char buf963[200];
+char buf964[200];
+char buf965[200];
+char buf966[200];
+char buf967[200];
+char buf968[200];
+char buf969[200];
+char buf970[200];
+char buf971[200];
+char buf972[200];
+char buf973[200];
+char buf974[200];
+char buf975[200];
+char buf976[200];
+char buf977[200];
+char buf978[200];
+char buf979[200];
+char buf980[200];
+char buf981[200];
+char buf982[200];
+char buf983[200];
+char buf984[200];
+char buf985[200];
+char buf986[200];
+char buf987[200];
+char buf988[200];
+char buf989[200];
+char buf990[200];
+char buf991[200];
+char buf992[200];
+char buf993[200];
+char buf994[200];
+char buf995[200];
+char buf996[200];
+char buf997[200];
+char buf998[200];
+char buf999[200];
+char buf1000[200];
+char buf1001[200];
+char buf1002[200];
+char buf1003[200];
+char buf1004[200];
+char buf1005[200];
+char buf1006[200];
+char buf1007[200];
+char buf1008[200];
+char buf1009[200];
+char buf1010[200];
+char buf1011[200];
+char buf1012[200];
+char buf1013[200];
+char buf1014[200];
+char buf1015[200];
+char buf1016[200];
+char buf1017[200];
+char buf1018[200];
+char buf1019[200];
+char buf1020[200];
+char buf1021[200];
+char buf1022[200];
+char buf1023[200];
+char buf1024[200];
+char buf1025[200];
+char buf1026[200];
+char buf1027[200];
+char buf1028[200];
+char buf1029[200];
+char buf1030[200];
+char buf1031[200];
+char buf1032[200];
+char buf1033[200];
+char buf1034[200];
+char buf1035[200];
+char buf1036[200];
+char buf1037[200];
+char buf1038[200];
+char buf1039[200];
+char buf1040[200];
+char buf1041[200];
+char buf1042[200];
+char buf1043[200];
+char buf1044[200];
+char buf1045[200];
+char buf1046[200];
+char buf1047[200];
+char buf1048[200];
+char buf1049[200];
+char buf1050[200];
+char buf1051[200];
+char buf1052[200];
+char buf1053[200];
+char buf1054[200];
+char buf1055[200];
+char buf1056[200];
+char buf1057[200];
+char buf1058[200];
+char buf1059[200];
+char buf1060[200];
+char buf1061[200];
+char buf1062[200];
+char buf1063[200];
+char buf1064[200];
+char buf1065[200];
+char buf1066[200];
+char buf1067[200];
+char buf1068[200];
+char buf1069[200];
+char buf1070[200];
+char buf1071[200];
+char buf1072[200];
+char buf1073[200];
+char buf1074[200];
+char buf1075[200];
+char buf1076[200];
+char buf1077[200];
+char buf1078[200];
+char buf1079[200];
+char buf1080[200];
+char buf1081[200];
+char buf1082[200];
+char buf1083[200];
+char buf1084[200];
+char buf1085[200];
+char buf1086[200];
+char buf1087[200];
+char buf1088[200];
+char buf1089[200];
+char buf1090[200];
+char buf1091[200];
+char buf1092[200];
+char buf1093[200];
+char buf1094[200];
+char buf1095[200];
+char buf1096[200];
+char buf1097[200];
+char buf1098[200];
+char buf1099[200];
+char buf1100[200];
+char buf1101[200];
+char buf1102[200];
+char buf1103[200];
+char buf1104[200];
+char buf1105[200];
+char buf1106[200];
+char buf1107[200];
+char buf1108[200];
+char buf1109[200];
+char buf1110[200];
+char buf1111[200];
+char buf1112[200];
+char buf1113[200];
+char buf1114[200];
+char buf1115[200];
+char buf1116[200];
+char buf1117[200];
+char buf1118[200];
+char buf1119[200];
+char buf1120[200];
+char buf1121[200];
+char buf1122[200];
+char buf1123[200];
+char buf1124[200];
+char buf1125[200];
+char buf1126[200];
+char buf1127[200];
+char buf1128[200];
+char buf1129[200];
+char buf1130[200];
+char buf1131[200];
+char buf1132[200];
+char buf1133[200];
+char buf1134[200];
+char buf1135[200];
+char buf1136[200];
+char buf1137[200];
+char buf1138[200];
+char buf1139[200];
+char buf1140[200];
+char buf1141[200];
+char buf1142[200];
+char buf1143[200];
+char buf1144[200];
+char buf1145[200];
+char buf1146[200];
+char buf1147[200];
+char buf1148[200];
+char buf1149[200];
+char buf1150[200];
+char buf1151[200];
+char buf1152[200];
+char buf1153[200];
+char buf1154[200];
+char buf1155[200];
+char buf1156[200];
+char buf1157[200];
+char buf1158[200];
+char buf1159[200];
+char buf1160[200];
+char buf1161[200];
+char buf1162[200];
+char buf1163[200];
+char buf1164[200];
+char buf1165[200];
+char buf1166[200];
+char buf1167[200];
+char buf1168[200];
+char buf1169[200];
+char buf1170[200];
+char buf1171[200];
+char buf1172[200];
+char buf1173[200];
+char buf1174[200];
+char buf1175[200];
+char buf1176[200];
+char buf1177[200];
+char buf1178[200];
+char buf1179[200];
+char buf1180[200];
+char buf1181[200];
+char buf1182[200];
+char buf1183[200];
+char buf1184[200];
+char buf1185[200];
+char buf1186[200];
+char buf1187[200];
+char buf1188[200];
+char buf1189[200];
+char buf1190[200];
+char buf1191[200];
+char buf1192[200];
+char buf1193[200];
+char buf1194[200];
+char buf1195[200];
+char buf1196[200];
+char buf1197[200];
+char buf1198[200];
+char buf1199[200];
+char buf1200[200];
+char buf1201[200];
+char buf1202[200];
+char buf1203[200];
+char buf1204[200];
+char buf1205[200];
+char buf1206[200];
+char buf1207[200];
+char buf1208[200];
+char buf1209[200];
+char buf1210[200];
+char buf1211[200];
+char buf1212[200];
+char buf1213[200];
+char buf1214[200];
+char buf1215[200];
+char buf1216[200];
+char buf1217[200];
+char buf1218[200];
+char buf1219[200];
+char buf1220[200];
+char buf1221[200];
+char buf1222[200];
+char buf1223[200];
+char buf1224[200];
+char buf1225[200];
+char buf1226[200];
+char buf1227[200];
+char buf1228[200];
+char buf1229[200];
+char buf1230[200];
+char buf1231[200];
+char buf1232[200];
+char buf1233[200];
+char buf1234[200];
+char buf1235[200];
+char buf1236[200];
+char buf1237[200];
+char buf1238[200];
+char buf1239[200];
+char buf1240[200];
+char buf1241[200];
+char buf1242[200];
+char buf1243[200];
+char buf1244[200];
+char buf1245[200];
+char buf1246[200];
+char buf1247[200];
+char buf1248[200];
+char buf1249[200];
+char buf1250[200];
+char buf1251[200];
+char buf1252[200];
+char buf1253[200];
+char buf1254[200];
+char buf1255[200];
+char buf1256[200];
+char buf1257[200];
+char buf1258[200];
+char buf1259[200];
+char buf1260[200];
+char buf1261[200];
+char buf1262[200];
+char buf1263[200];
+char buf1264[200];
+char buf1265[200];
+char buf1266[200];
+char buf1267[200];
+char buf1268[200];
+char buf1269[200];
+char buf1270[200];
+char buf1271[200];
+char buf1272[200];
+char buf1273[200];
+char buf1274[200];
+char buf1275[200];
+char buf1276[200];
+char buf1277[200];
+char buf1278[200];
+char buf1279[200];
+char buf1280[200];
+char buf1281[200];
+char buf1282[200];
+char buf1283[200];
+char buf1284[200];
+char buf1285[200];
+char buf1286[200];
+char buf1287[200];
+char buf1288[200];
+char buf1289[200];
+char buf1290[200];
+char buf1291[200];
+char buf1292[200];
+char buf1293[200];
+char buf1294[200];
+char buf1295[200];
+char buf1296[200];
+char buf1297[200];
+char buf1298[200];
+char buf1299[200];
+char buf1300[200];
+char buf1301[200];
+char buf1302[200];
+char buf1303[200];
+char buf1304[200];
+char buf1305[200];
+char buf1306[200];
+char buf1307[200];
+char buf1308[200];
+char buf1309[200];
+char buf1310[200];
+char buf1311[200];
+char buf1312[200];
+char buf1313[200];
+char buf1314[200];
+char buf1315[200];
+char buf1316[200];
+char buf1317[200];
+char buf1318[200];
+char buf1319[200];
+char buf1320[200];
+char buf1321[200];
+char buf1322[200];
+char buf1323[200];
+char buf1324[200];
+char buf1325[200];
+char buf1326[200];
+char buf1327[200];
+char buf1328[200];
+char buf1329[200];
+char buf1330[200];
+char buf1331[200];
+char buf1332[200];
+char buf1333[200];
+char buf1334[200];
+char buf1335[200];
+char buf1336[200];
+char buf1337[200];
+char buf1338[200];
+char buf1339[200];
+char buf1340[200];
+char buf1341[200];
+char buf1342[200];
+char buf1343[200];
+char buf1344[200];
+char buf1345[200];
+char buf1346[200];
+char buf1347[200];
+char buf1348[200];
+char buf1349[200];
+char buf1350[200];
+char buf1351[200];
+char buf1352[200];
+char buf1353[200];
+char buf1354[200];
+char buf1355[200];
+char buf1356[200];
+char buf1357[200];
+char buf1358[200];
+char buf1359[200];
+char buf1360[200];
+char buf1361[200];
+char buf1362[200];
+char buf1363[200];
+char buf1364[200];
+char buf1365[200];
+char buf1366[200];
+char buf1367[200];
+char buf1368[200];
+char buf1369[200];
+char buf1370[200];
+char buf1371[200];
+char buf1372[200];
+char buf1373[200];
+char buf1374[200];
+char buf1375[200];
+char buf1376[200];
+char buf1377[200];
+char buf1378[200];
+char buf1379[200];
+char buf1380[200];
+char buf1381[200];
+char buf1382[200];
+char buf1383[200];
+char buf1384[200];
+char buf1385[200];
+char buf1386[200];
+char buf1387[200];
+char buf1388[200];
+char buf1389[200];
+char buf1390[200];
+char buf1391[200];
+char buf1392[200];
+char buf1393[200];
+char buf1394[200];
+char buf1395[200];
+char buf1396[200];
+char buf1397[200];
+char buf1398[200];
+char buf1399[200];
+char buf1400[200];
+char buf1401[200];
+char buf1402[200];
+char buf1403[200];
+char buf1404[200];
+char buf1405[200];
+char buf1406[200];
+char buf1407[200];
+char buf1408[200];
+char buf1409[200];
+char buf1410[200];
+char buf1411[200];
+char buf1412[200];
+char buf1413[200];
+char buf1414[200];
+char buf1415[200];
+char buf1416[200];
+char buf1417[200];
+char buf1418[200];
+char buf1419[200];
+char buf1420[200];
+char buf1421[200];
+char buf1422[200];
+char buf1423[200];
+char buf1424[200];
+char buf1425[200];
+char buf1426[200];
+char buf1427[200];
+char buf1428[200];
+char buf1429[200];
+char buf1430[200];
+char buf1431[200];
+char buf1432[200];
+char buf1433[200];
+char buf1434[200];
+char buf1435[200];
+char buf1436[200];
+char buf1437[200];
+char buf1438[200];
+char buf1439[200];
+char buf1440[200];
+char buf1441[200];
+char buf1442[200];
+char buf1443[200];
+char buf1444[200];
+char buf1445[200];
+char buf1446[200];
+char buf1447[200];
+char buf1448[200];
+char buf1449[200];
+char buf1450[200];
+char buf1451[200];
+char buf1452[200];
+char buf1453[200];
+char buf1454[200];
+char buf1455[200];
+char buf1456[200];
+char buf1457[200];
+char buf1458[200];
+char buf1459[200];
+char buf1460[200];
+char buf1461[200];
+char buf1462[200];
+char buf1463[200];
+char buf1464[200];
+char buf1465[200];
+char buf1466[200];
+char buf1467[200];
+char buf1468[200];
+char buf1469[200];
+char buf1470[200];
+char buf1471[200];
+char buf1472[200];
+char buf1473[200];
+char buf1474[200];
+char buf1475[200];
+char buf1476[200];
+char buf1477[200];
+char buf1478[200];
+char buf1479[200];
+char buf1480[200];
+char buf1481[200];
+char buf1482[200];
+char buf1483[200];
+char buf1484[200];
+char buf1485[200];
+char buf1486[200];
+char buf1487[200];
+char buf1488[200];
+char buf1489[200];
+char buf1490[200];
+char buf1491[200];
+char buf1492[200];
+char buf1493[200];
+char buf1494[200];
+char buf1495[200];
+char buf1496[200];
+char buf1497[200];
+char buf1498[200];
+char buf1499[200];
+char buf1500[200];
+char buf1501[200];
+char buf1502[200];
+char buf1503[200];
+char buf1504[200];
+char buf1505[200];
+char buf1506[200];
+char buf1507[200];
+char buf1508[200];
+char buf1509[200];
+char buf1510[200];
+char buf1511[200];
+char buf1512[200];
+char buf1513[200];
+char buf1514[200];
+char buf1515[200];
+char buf1516[200];
+char buf1517[200];
+char buf1518[200];
+char buf1519[200];
+char buf1520[200];
+char buf1521[200];
+char buf1522[200];
+char buf1523[200];
+char buf1524[200];
+char buf1525[200];
+char buf1526[200];
+char buf1527[200];
+char buf1528[200];
+char buf1529[200];
+char buf1530[200];
+char buf1531[200];
+char buf1532[200];
+char buf1533[200];
+char buf1534[200];
+char buf1535[200];
+char buf1536[200];
+char buf1537[200];
+char buf1538[200];
+char buf1539[200];
+char buf1540[200];
+char buf1541[200];
+char buf1542[200];
+char buf1543[200];
+char buf1544[200];
+char buf1545[200];
+char buf1546[200];
+char buf1547[200];
+char buf1548[200];
+char buf1549[200];
+char buf1550[200];
+char buf1551[200];
+char buf1552[200];
+char buf1553[200];
+char buf1554[200];
+char buf1555[200];
+char buf1556[200];
+char buf1557[200];
+char buf1558[200];
+char buf1559[200];
+char buf1560[200];
+char buf1561[200];
+char buf1562[200];
+char buf1563[200];
+char buf1564[200];
+char buf1565[200];
+char buf1566[200];
+char buf1567[200];
+char buf1568[200];
+char buf1569[200];
+char buf1570[200];
+char buf1571[200];
+char buf1572[200];
+char buf1573[200];
+char buf1574[200];
+char buf1575[200];
+char buf1576[200];
+char buf1577[200];
+char buf1578[200];
+char buf1579[200];
+char buf1580[200];
+char buf1581[200];
+char buf1582[200];
+char buf1583[200];
+char buf1584[200];
+char buf1585[200];
+char buf1586[200];
+char buf1587[200];
+char buf1588[200];
+char buf1589[200];
+char buf1590[200];
+char buf1591[200];
+char buf1592[200];
+char buf1593[200];
+char buf1594[200];
+char buf1595[200];
+char buf1596[200];
+char buf1597[200];
+char buf1598[200];
+char buf1599[200];
+char buf1600[200];
+char buf1601[200];
+char buf1602[200];
+char buf1603[200];
+char buf1604[200];
+char buf1605[200];
+char buf1606[200];
+char buf1607[200];
+char buf1608[200];
+char buf1609[200];
+char buf1610[200];
+char buf1611[200];
+char buf1612[200];
+char buf1613[200];
+char buf1614[200];
+char buf1615[200];
+char buf1616[200];
+char buf1617[200];
+char buf1618[200];
+char buf1619[200];
+char buf1620[200];
+char buf1621[200];
+char buf1622[200];
+char buf1623[200];
+char buf1624[200];
+char buf1625[200];
+char buf1626[200];
+char buf1627[200];
+char buf1628[200];
+char buf1629[200];
+char buf1630[200];
+char buf1631[200];
+char buf1632[200];
+char buf1633[200];
+char buf1634[200];
+char buf1635[200];
+char buf1636[200];
+char buf1637[200];
+char buf1638[200];
+char buf1639[200];
+char buf1640[200];
+char buf1641[200];
+char buf1642[200];
+char buf1643[200];
+char buf1644[200];
+char buf1645[200];
+char buf1646[200];
+char buf1647[200];
+char buf1648[200];
+char buf1649[200];
+char buf1650[200];
+char buf1651[200];
+char buf1652[200];
+char buf1653[200];
+char buf1654[200];
+char buf1655[200];
+char buf1656[200];
+char buf1657[200];
+char buf1658[200];
+char buf1659[200];
+char buf1660[200];
+char buf1661[200];
+char buf1662[200];
+char buf1663[200];
+char buf1664[200];
+char buf1665[200];
+char buf1666[200];
+char buf1667[200];
+char buf1668[200];
+char buf1669[200];
+char buf1670[200];
+char buf1671[200];
+char buf1672[200];
+char buf1673[200];
+char buf1674[200];
+char buf1675[200];
+char buf1676[200];
+char buf1677[200];
+char buf1678[200];
+char buf1679[200];
+char buf1680[200];
+char buf1681[200];
+char buf1682[200];
+char buf1683[200];
+char buf1684[200];
+char buf1685[200];
+char buf1686[200];
+char buf1687[200];
+char buf1688[200];
+char buf1689[200];
+char buf1690[200];
+char buf1691[200];
+char buf1692[200];
+char buf1693[200];
+char buf1694[200];
+char buf1695[200];
+char buf1696[200];
+char buf1697[200];
+char buf1698[200];
+char buf1699[200];
+char buf1700[200];
+char buf1701[200];
+char buf1702[200];
+char buf1703[200];
+char buf1704[200];
+char buf1705[200];
+char buf1706[200];
+char buf1707[200];
+char buf1708[200];
+char buf1709[200];
+char buf1710[200];
+char buf1711[200];
+char buf1712[200];
+char buf1713[200];
+char buf1714[200];
+char buf1715[200];
+char buf1716[200];
+char buf1717[200];
+char buf1718[200];
+char buf1719[200];
+char buf1720[200];
+char buf1721[200];
+char buf1722[200];
+char buf1723[200];
+char buf1724[200];
+char buf1725[200];
+char buf1726[200];
+char buf1727[200];
+char buf1728[200];
+char buf1729[200];
+char buf1730[200];
+char buf1731[200];
+char buf1732[200];
+char buf1733[200];
+char buf1734[200];
+char buf1735[200];
+char buf1736[200];
+char buf1737[200];
+char buf1738[200];
+char buf1739[200];
+char buf1740[200];
+char buf1741[200];
+char buf1742[200];
+char buf1743[200];
+char buf1744[200];
+char buf1745[200];
+char buf1746[200];
+char buf1747[200];
+char buf1748[200];
+char buf1749[200];
+char buf1750[200];
+char buf1751[200];
+char buf1752[200];
+char buf1753[200];
+char buf1754[200];
+char buf1755[200];
+char buf1756[200];
+char buf1757[200];
+char buf1758[200];
+char buf1759[200];
+char buf1760[200];
+char buf1761[200];
+char buf1762[200];
+char buf1763[200];
+char buf1764[200];
+char buf1765[200];
+char buf1766[200];
+char buf1767[200];
+char buf1768[200];
+char buf1769[200];
+char buf1770[200];
+char buf1771[200];
+char buf1772[200];
+char buf1773[200];
+char buf1774[200];
+char buf1775[200];
+char buf1776[200];
+char buf1777[200];
+char buf1778[200];
+char buf1779[200];
+char buf1780[200];
+char buf1781[200];
+char buf1782[200];
+char buf1783[200];
+char buf1784[200];
+char buf1785[200];
+char buf1786[200];
+char buf1787[200];
+char buf1788[200];
+char buf1789[200];
+char buf1790[200];
+char buf1791[200];
+char buf1792[200];
+char buf1793[200];
+char buf1794[200];
+char buf1795[200];
+char buf1796[200];
+char buf1797[200];
+char buf1798[200];
+char buf1799[200];
+char buf1800[200];
+char buf1801[200];
+char buf1802[200];
+char buf1803[200];
+char buf1804[200];
+char buf1805[200];
+char buf1806[200];
+char buf1807[200];
+char buf1808[200];
+char buf1809[200];
+char buf1810[200];
+char buf1811[200];
+char buf1812[200];
+char buf1813[200];
+char buf1814[200];
+char buf1815[200];
+char buf1816[200];
+char buf1817[200];
+char buf1818[200];
+char buf1819[200];
+char buf1820[200];
+char buf1821[200];
+char buf1822[200];
+char buf1823[200];
+char buf1824[200];
+char buf1825[200];
+char buf1826[200];
+char buf1827[200];
+char buf1828[200];
+char buf1829[200];
+char buf1830[200];
+char buf1831[200];
+char buf1832[200];
+char buf1833[200];
+char buf1834[200];
+char buf1835[200];
+char buf1836[200];
+char buf1837[200];
+char buf1838[200];
+char buf1839[200];
+char buf1840[200];
+char buf1841[200];
+char buf1842[200];
+char buf1843[200];
+char buf1844[200];
+char buf1845[200];
+char buf1846[200];
+char buf1847[200];
+char buf1848[200];
+char buf1849[200];
+char buf1850[200];
+char buf1851[200];
+char buf1852[200];
+char buf1853[200];
+char buf1854[200];
+char buf1855[200];
+char buf1856[200];
+char buf1857[200];
+char buf1858[200];
+char buf1859[200];
+char buf1860[200];
+char buf1861[200];
+char buf1862[200];
+char buf1863[200];
+char buf1864[200];
+char buf1865[200];
+char buf1866[200];
+char buf1867[200];
+char buf1868[200];
+char buf1869[200];
+char buf1870[200];
+char buf1871[200];
+char buf1872[200];
+char buf1873[200];
+char buf1874[200];
+char buf1875[200];
+char buf1876[200];
+char buf1877[200];
+char buf1878[200];
+char buf1879[200];
+char buf1880[200];
+char buf1881[200];
+char buf1882[200];
+char buf1883[200];
+char buf1884[200];
+char buf1885[200];
+char buf1886[200];
+char buf1887[200];
+char buf1888[200];
+char buf1889[200];
+char buf1890[200];
+char buf1891[200];
+char buf1892[200];
+char buf1893[200];
+char buf1894[200];
+char buf1895[200];
+char buf1896[200];
+char buf1897[200];
+char buf1898[200];
+char buf1899[200];
+char buf1900[200];
+char buf1901[200];
+char buf1902[200];
+char buf1903[200];
+char buf1904[200];
+char buf1905[200];
+char buf1906[200];
+char buf1907[200];
+char buf1908[200];
+char buf1909[200];
+char buf1910[200];
+char buf1911[200];
+char buf1912[200];
+char buf1913[200];
+char buf1914[200];
+char buf1915[200];
+char buf1916[200];
+char buf1917[200];
+char buf1918[200];
+char buf1919[200];
+char buf1920[200];
+char buf1921[200];
+char buf1922[200];
+char buf1923[200];
+char buf1924[200];
+char buf1925[200];
+char buf1926[200];
+char buf1927[200];
+char buf1928[200];
+char buf1929[200];
+char buf1930[200];
+char buf1931[200];
+char buf1932[200];
+char buf1933[200];
+char buf1934[200];
+char buf1935[200];
+char buf1936[200];
+char buf1937[200];
+char buf1938[200];
+char buf1939[200];
+char buf1940[200];
+char buf1941[200];
+char buf1942[200];
+char buf1943[200];
+char buf1944[200];
+char buf1945[200];
+char buf1946[200];
+char buf1947[200];
+char buf1948[200];
+char buf1949[200];
+char buf1950[200];
+char buf1951[200];
+char buf1952[200];
+char buf1953[200];
+char buf1954[200];
+char buf1955[200];
+char buf1956[200];
+char buf1957[200];
+char buf1958[200];
+char buf1959[200];
+char buf1960[200];
+char buf1961[200];
+char buf1962[200];
+char buf1963[200];
+char buf1964[200];
+char buf1965[200];
+char buf1966[200];
+char buf1967[200];
+char buf1968[200];
+char buf1969[200];
+char buf1970[200];
+char buf1971[200];
+char buf1972[200];
+char buf1973[200];
+char buf1974[200];
+char buf1975[200];
+char buf1976[200];
+char buf1977[200];
+char buf1978[200];
+char buf1979[200];
+char buf1980[200];
+char buf1981[200];
+char buf1982[200];
+char buf1983[200];
+char buf1984[200];
+char buf1985[200];
+char buf1986[200];
+char buf1987[200];
+char buf1988[200];
+char buf1989[200];
+char buf1990[200];
+char buf1991[200];
+char buf1992[200];
+char buf1993[200];
+char buf1994[200];
+char buf1995[200];
+char buf1996[200];
+char buf1997[200];
+char buf1998[200];
+char buf1999[200];
+char buf2000[200];
+char buf2001[200];
+char buf2002[200];
+char buf2003[200];
+char buf2004[200];
+char buf2005[200];
+char buf2006[200];
+char buf2007[200];
+char buf2008[200];
+char buf2009[200];
+char buf2010[200];
+char buf2011[200];
+char buf2012[200];
+char buf2013[200];
+char buf2014[200];
+char buf2015[200];
+char buf2016[200];
+char buf2017[200];
+char buf2018[200];
+char buf2019[200];
+char buf2020[200];
+char buf2021[200];
+char buf2022[200];
+char buf2023[200];
+char buf2024[200];
+char buf2025[200];
+char buf2026[200];
+char buf2027[200];
+char buf2028[200];
+char buf2029[200];
+char buf2030[200];
+char buf2031[200];
+char buf2032[200];
+char buf2033[200];
+char buf2034[200];
+char buf2035[200];
+char buf2036[200];
+char buf2037[200];
+char buf2038[200];
+char buf2039[200];
+char buf2040[200];
+char buf2041[200];
+char buf2042[200];
+char buf2043[200];
+char buf2044[200];
+char buf2045[200];
+char buf2046[200];
+char buf2047[200];
+char buf2048[200];
+char buf2049[200];
+char buf2050[200];
+char buf2051[200];
+char buf2052[200];
+char buf2053[200];
+char buf2054[200];
+char buf2055[200];
+char buf2056[200];
+char buf2057[200];
+char buf2058[200];
+char buf2059[200];
+char buf2060[200];
+char buf2061[200];
+char buf2062[200];
+char buf2063[200];
+char buf2064[200];
+char buf2065[200];
+char buf2066[200];
+char buf2067[200];
+char buf2068[200];
+char buf2069[200];
+char buf2070[200];
+char buf2071[200];
+char buf2072[200];
+char buf2073[200];
+char buf2074[200];
+char buf2075[200];
+char buf2076[200];
+char buf2077[200];
+char buf2078[200];
+char buf2079[200];
+char buf2080[200];
+char buf2081[200];
+char buf2082[200];
+char buf2083[200];
+char buf2084[200];
+char buf2085[200];
+char buf2086[200];
+char buf2087[200];
+char buf2088[200];
+char buf2089[200];
+char buf2090[200];
+char buf2091[200];
+char buf2092[200];
+char buf2093[200];
+char buf2094[200];
+char buf2095[200];
+char buf2096[200];
+char buf2097[200];
+char buf2098[200];
+char buf2099[200];
+char buf2100[200];
+char buf2101[200];
+char buf2102[200];
+char buf2103[200];
+char buf2104[200];
+char buf2105[200];
+char buf2106[200];
+char buf2107[200];
+char buf2108[200];
+char buf2109[200];
+char buf2110[200];
+char buf2111[200];
+char buf2112[200];
+char buf2113[200];
+char buf2114[200];
+char buf2115[200];
+char buf2116[200];
+char buf2117[200];
+char buf2118[200];
+char buf2119[200];
+char buf2120[200];
+char buf2121[200];
+char buf2122[200];
+char buf2123[200];
+char buf2124[200];
+char buf2125[200];
+char buf2126[200];
+char buf2127[200];
+char buf2128[200];
+char buf2129[200];
+char buf2130[200];
+char buf2131[200];
+char buf2132[200];
+char buf2133[200];
+char buf2134[200];
+char buf2135[200];
+char buf2136[200];
+char buf2137[200];
+char buf2138[200];
+char buf2139[200];
+char buf2140[200];
+char buf2141[200];
+char buf2142[200];
+char buf2143[200];
+char buf2144[200];
+char buf2145[200];
+char buf2146[200];
+char buf2147[200];
+char buf2148[200];
+char buf2149[200];
+char buf2150[200];
+char buf2151[200];
+char buf2152[200];
+char buf2153[200];
+char buf2154[200];
+char buf2155[200];
+char buf2156[200];
+char buf2157[200];
+char buf2158[200];
+char buf2159[200];
+char buf2160[200];
+char buf2161[200];
+char buf2162[200];
+char buf2163[200];
+char buf2164[200];
+char buf2165[200];
+char buf2166[200];
+char buf2167[200];
+char buf2168[200];
+char buf2169[200];
+char buf2170[200];
+char buf2171[200];
+char buf2172[200];
+char buf2173[200];
+char buf2174[200];
+char buf2175[200];
+char buf2176[200];
+char buf2177[200];
+char buf2178[200];
+char buf2179[200];
+char buf2180[200];
+char buf2181[200];
+char buf2182[200];
+char buf2183[200];
+char buf2184[200];
+char buf2185[200];
+char buf2186[200];
+char buf2187[200];
+char buf2188[200];
+char buf2189[200];
+char buf2190[200];
+char buf2191[200];
+char buf2192[200];
+char buf2193[200];
+char buf2194[200];
+char buf2195[200];
+char buf2196[200];
+char buf2197[200];
+char buf2198[200];
+char buf2199[200];
+char buf2200[200];
+char buf2201[200];
+char buf2202[200];
+char buf2203[200];
+char buf2204[200];
+char buf2205[200];
+char buf2206[200];
+char buf2207[200];
+char buf2208[200];
+char buf2209[200];
+char buf2210[200];
+char buf2211[200];
+char buf2212[200];
+char buf2213[200];
+char buf2214[200];
+char buf2215[200];
+char buf2216[200];
+char buf2217[200];
+char buf2218[200];
+char buf2219[200];
+char buf2220[200];
+char buf2221[200];
+char buf2222[200];
+char buf2223[200];
+char buf2224[200];
+char buf2225[200];
+char buf2226[200];
+char buf2227[200];
+char buf2228[200];
+char buf2229[200];
+char buf2230[200];
+char buf2231[200];
+char buf2232[200];
+char buf2233[200];
+char buf2234[200];
+char buf2235[200];
+char buf2236[200];
+char buf2237[200];
+char buf2238[200];
+char buf2239[200];
+char buf2240[200];
+char buf2241[200];
+char buf2242[200];
+char buf2243[200];
+char buf2244[200];
+char buf2245[200];
+char buf2246[200];
+char buf2247[200];
+char buf2248[200];
+char buf2249[200];
+char buf2250[200];
+char buf2251[200];
+char buf2252[200];
+char buf2253[200];
+char buf2254[200];
+char buf2255[200];
+char buf2256[200];
+char buf2257[200];
+char buf2258[200];
+char buf2259[200];
+char buf2260[200];
+char buf2261[200];
+char buf2262[200];
+char buf2263[200];
+char buf2264[200];
+char buf2265[200];
+char buf2266[200];
+char buf2267[200];
+char buf2268[200];
+char buf2269[200];
+char buf2270[200];
+char buf2271[200];
+char buf2272[200];
+char buf2273[200];
+char buf2274[200];
+char buf2275[200];
+char buf2276[200];
+char buf2277[200];
+char buf2278[200];
+char buf2279[200];
+char buf2280[200];
+char buf2281[200];
+char buf2282[200];
+char buf2283[200];
+char buf2284[200];
+char buf2285[200];
+char buf2286[200];
+char buf2287[200];
+char buf2288[200];
+char buf2289[200];
+char buf2290[200];
+char buf2291[200];
+char buf2292[200];
+char buf2293[200];
+char buf2294[200];
+char buf2295[200];
+char buf2296[200];
+char buf2297[200];
+char buf2298[200];
+char buf2299[200];
+char buf2300[200];
+char buf2301[200];
+char buf2302[200];
+char buf2303[200];
+char buf2304[200];
+char buf2305[200];
+char buf2306[200];
+char buf2307[200];
+char buf2308[200];
+char buf2309[200];
+char buf2310[200];
+char buf2311[200];
+char buf2312[200];
+char buf2313[200];
+char buf2314[200];
+char buf2315[200];
+char buf2316[200];
+char buf2317[200];
+char buf2318[200];
+char buf2319[200];
+char buf2320[200];
+char buf2321[200];
+char buf2322[200];
+char buf2323[200];
+char buf2324[200];
+char buf2325[200];
+char buf2326[200];
+char buf2327[200];
+char buf2328[200];
+char buf2329[200];
+char buf2330[200];
+char buf2331[200];
+char buf2332[200];
+char buf2333[200];
+char buf2334[200];
+char buf2335[200];
+char buf2336[200];
+char buf2337[200];
+char buf2338[200];
+char buf2339[200];
+char buf2340[200];
+char buf2341[200];
+char buf2342[200];
+char buf2343[200];
+char buf2344[200];
+char buf2345[200];
+char buf2346[200];
+char buf2347[200];
+char buf2348[200];
+char buf2349[200];
+char buf2350[200];
+char buf2351[200];
+char buf2352[200];
+char buf2353[200];
+char buf2354[200];
+char buf2355[200];
+char buf2356[200];
+char buf2357[200];
+char buf2358[200];
+char buf2359[200];
+char buf2360[200];
+char buf2361[200];
+char buf2362[200];
+char buf2363[200];
+char buf2364[200];
+char buf2365[200];
+char buf2366[200];
+char buf2367[200];
+char buf2368[200];
+char buf2369[200];
+char buf2370[200];
+char buf2371[200];
+char buf2372[200];
+char buf2373[200];
+char buf2374[200];
+char buf2375[200];
+char buf2376[200];
+char buf2377[200];
+char buf2378[200];
+char buf2379[200];
+char buf2380[200];
+char buf2381[200];
+char buf2382[200];
+char buf2383[200];
+char buf2384[200];
+char buf2385[200];
+char buf2386[200];
+char buf2387[200];
+char buf2388[200];
+char buf2389[200];
+char buf2390[200];
+char buf2391[200];
+char buf2392[200];
+char buf2393[200];
+char buf2394[200];
+char buf2395[200];
+char buf2396[200];
+char buf2397[200];
+char buf2398[200];
+char buf2399[200];
+char buf2400[200];
+char buf2401[200];
+char buf2402[200];
+char buf2403[200];
+char buf2404[200];
+char buf2405[200];
+char buf2406[200];
+char buf2407[200];
+char buf2408[200];
+char buf2409[200];
+char buf2410[200];
+char buf2411[200];
+char buf2412[200];
+char buf2413[200];
+char buf2414[200];
+char buf2415[200];
+char buf2416[200];
+char buf2417[200];
+char buf2418[200];
+char buf2419[200];
+char buf2420[200];
+char buf2421[200];
+char buf2422[200];
+char buf2423[200];
+char buf2424[200];
+char buf2425[200];
+char buf2426[200];
+char buf2427[200];
+char buf2428[200];
+char buf2429[200];
+char buf2430[200];
+char buf2431[200];
+char buf2432[200];
+char buf2433[200];
+char buf2434[200];
+char buf2435[200];
+char buf2436[200];
+char buf2437[200];
+char buf2438[200];
+char buf2439[200];
+char buf2440[200];
+char buf2441[200];
+char buf2442[200];
+char buf2443[200];
+char buf2444[200];
+char buf2445[200];
+char buf2446[200];
+char buf2447[200];
+char buf2448[200];
+char buf2449[200];
+char buf2450[200];
+char buf2451[200];
+char buf2452[200];
+char buf2453[200];
+char buf2454[200];
+char buf2455[200];
+char buf2456[200];
+char buf2457[200];
+char buf2458[200];
+char buf2459[200];
+char buf2460[200];
+char buf2461[200];
+char buf2462[200];
+char buf2463[200];
+char buf2464[200];
+char buf2465[200];
+char buf2466[200];
+char buf2467[200];
+char buf2468[200];
+char buf2469[200];
+char buf2470[200];
+char buf2471[200];
+char buf2472[200];
+char buf2473[200];
+char buf2474[200];
+char buf2475[200];
+char buf2476[200];
+char buf2477[200];
+char buf2478[200];
+char buf2479[200];
+char buf2480[200];
+char buf2481[200];
+char buf2482[200];
+char buf2483[200];
+char buf2484[200];
+char buf2485[200];
+char buf2486[200];
+char buf2487[200];
+char buf2488[200];
+char buf2489[200];
+char buf2490[200];
+char buf2491[200];
+char buf2492[200];
+char buf2493[200];
+char buf2494[200];
+char buf2495[200];
+char buf2496[200];
+char buf2497[200];
+char buf2498[200];
+char buf2499[200];
+char buf2500[200];
+char buf2501[200];
+char buf2502[200];
+char buf2503[200];
+char buf2504[200];
+char buf2505[200];
+char buf2506[200];
+char buf2507[200];
+char buf2508[200];
+char buf2509[200];
+char buf2510[200];
+char buf2511[200];
+char buf2512[200];
+char buf2513[200];
+char buf2514[200];
+char buf2515[200];
+char buf2516[200];
+char buf2517[200];
+char buf2518[200];
+char buf2519[200];
+char buf2520[200];
+char buf2521[200];
+char buf2522[200];
+char buf2523[200];
+char buf2524[200];
+char buf2525[200];
+char buf2526[200];
+char buf2527[200];
+char buf2528[200];
+char buf2529[200];
+char buf2530[200];
+char buf2531[200];
+char buf2532[200];
+char buf2533[200];
+char buf2534[200];
+char buf2535[200];
+char buf2536[200];
+char buf2537[200];
+char buf2538[200];
+char buf2539[200];
+char buf2540[200];
+char buf2541[200];
+char buf2542[200];
+char buf2543[200];
+char buf2544[200];
+char buf2545[200];
+char buf2546[200];
+char buf2547[200];
+char buf2548[200];
+char buf2549[200];
+char buf2550[200];
+char buf2551[200];
+char buf2552[200];
+char buf2553[200];
+char buf2554[200];
+char buf2555[200];
+char buf2556[200];
+char buf2557[200];
+char buf2558[200];
+char buf2559[200];
+char buf2560[200];
+char buf2561[200];
+char buf2562[200];
+char buf2563[200];
+char buf2564[200];
+char buf2565[200];
+char buf2566[200];
+char buf2567[200];
+char buf2568[200];
+char buf2569[200];
+char buf2570[200];
+char buf2571[200];
+char buf2572[200];
+char buf2573[200];
+char buf2574[200];
+char buf2575[200];
+char buf2576[200];
+char buf2577[200];
+char buf2578[200];
+char buf2579[200];
+char buf2580[200];
+char buf2581[200];
+char buf2582[200];
+char buf2583[200];
+char buf2584[200];
+char buf2585[200];
+char buf2586[200];
+char buf2587[200];
+char buf2588[200];
+char buf2589[200];
+char buf2590[200];
+char buf2591[200];
+char buf2592[200];
+char buf2593[200];
+char buf2594[200];
+char buf2595[200];
+char buf2596[200];
+char buf2597[200];
+char buf2598[200];
+char buf2599[200];
+char buf2600[200];
+char buf2601[200];
+char buf2602[200];
+char buf2603[200];
+char buf2604[200];
+char buf2605[200];
+char buf2606[200];
+char buf2607[200];
+char buf2608[200];
+char buf2609[200];
+char buf2610[200];
+char buf2611[200];
+char buf2612[200];
+char buf2613[200];
+char buf2614[200];
+char buf2615[200];
+char buf2616[200];
+char buf2617[200];
+char buf2618[200];
+char buf2619[200];
+char buf2620[200];
+char buf2621[200];
+char buf2622[200];
+char buf2623[200];
+char buf2624[200];
+char buf2625[200];
+char buf2626[200];
+char buf2627[200];
+char buf2628[200];
+char buf2629[200];
+char buf2630[200];
+char buf2631[200];
+char buf2632[200];
+char buf2633[200];
+char buf2634[200];
+char buf2635[200];
+char buf2636[200];
+char buf2637[200];
+char buf2638[200];
+char buf2639[200];
+char buf2640[200];
+char buf2641[200];
+char buf2642[200];
+char buf2643[200];
+char buf2644[200];
+char buf2645[200];
+char buf2646[200];
+char buf2647[200];
+char buf2648[200];
+char buf2649[200];
+char buf2650[200];
+char buf2651[200];
+char buf2652[200];
+char buf2653[200];
+char buf2654[200];
+char buf2655[200];
+char buf2656[200];
+char buf2657[200];
+char buf2658[200];
+char buf2659[200];
+char buf2660[200];
+char buf2661[200];
+char buf2662[200];
+char buf2663[200];
+char buf2664[200];
+char buf2665[200];
+char buf2666[200];
+char buf2667[200];
+char buf2668[200];
+char buf2669[200];
+char buf2670[200];
+char buf2671[200];
+char buf2672[200];
+char buf2673[200];
+char buf2674[200];
+char buf2675[200];
+char buf2676[200];
+char buf2677[200];
+char buf2678[200];
+char buf2679[200];
+char buf2680[200];
+char buf2681[200];
+char buf2682[200];
+char buf2683[200];
+char buf2684[200];
+char buf2685[200];
+char buf2686[200];
+char buf2687[200];
+char buf2688[200];
+char buf2689[200];
+char buf2690[200];
+char buf2691[200];
+char buf2692[200];
+char buf2693[200];
+char buf2694[200];
+char buf2695[200];
+char buf2696[200];
+char buf2697[200];
+char buf2698[200];
+char buf2699[200];
+char buf2700[200];
+char buf2701[200];
+char buf2702[200];
+char buf2703[200];
+char buf2704[200];
+char buf2705[200];
+char buf2706[200];
+char buf2707[200];
+char buf2708[200];
+char buf2709[200];
+char buf2710[200];
+char buf2711[200];
+char buf2712[200];
+char buf2713[200];
+char buf2714[200];
+char buf2715[200];
+char buf2716[200];
+char buf2717[200];
+char buf2718[200];
+char buf2719[200];
+char buf2720[200];
+char buf2721[200];
+char buf2722[200];
+char buf2723[200];
+char buf2724[200];
+char buf2725[200];
+char buf2726[200];
+char buf2727[200];
+char buf2728[200];
+char buf2729[200];
+char buf2730[200];
+char buf2731[200];
+char buf2732[200];
+char buf2733[200];
+char buf2734[200];
+char buf2735[200];
+char buf2736[200];
+char buf2737[200];
+char buf2738[200];
+char buf2739[200];
+char buf2740[200];
+char buf2741[200];
+char buf2742[200];
+char buf2743[200];
+char buf2744[200];
+char buf2745[200];
+char buf2746[200];
+char buf2747[200];
+char buf2748[200];
+char buf2749[200];
+char buf2750[200];
+char buf2751[200];
+char buf2752[200];
+char buf2753[200];
+char buf2754[200];
+char buf2755[200];
+char buf2756[200];
+char buf2757[200];
+char buf2758[200];
+char buf2759[200];
+char buf2760[200];
+char buf2761[200];
+char buf2762[200];
+char buf2763[200];
+char buf2764[200];
+char buf2765[200];
+char buf2766[200];
+char buf2767[200];
+char buf2768[200];
+char buf2769[200];
+char buf2770[200];
+char buf2771[200];
+char buf2772[200];
+char buf2773[200];
+char buf2774[200];
+char buf2775[200];
+char buf2776[200];
+char buf2777[200];
+char buf2778[200];
+char buf2779[200];
+char buf2780[200];
+char buf2781[200];
+char buf2782[200];
+char buf2783[200];
+char buf2784[200];
+char buf2785[200];
+char buf2786[200];
+char buf2787[200];
+char buf2788[200];
+char buf2789[200];
+char buf2790[200];
+char buf2791[200];
+char buf2792[200];
+char buf2793[200];
+char buf2794[200];
+char buf2795[200];
+char buf2796[200];
+char buf2797[200];
+char buf2798[200];
+char buf2799[200];
+char buf2800[200];
+char buf2801[200];
+char buf2802[200];
+char buf2803[200];
+char buf2804[200];
+char buf2805[200];
+char buf2806[200];
+char buf2807[200];
+char buf2808[200];
+char buf2809[200];
+char buf2810[200];
+char buf2811[200];
+char buf2812[200];
+char buf2813[200];
+char buf2814[200];
+char buf2815[200];
+char buf2816[200];
+char buf2817[200];
+char buf2818[200];
+char buf2819[200];
+char buf2820[200];
+char buf2821[200];
+char buf2822[200];
+char buf2823[200];
+char buf2824[200];
+char buf2825[200];
+char buf2826[200];
+char buf2827[200];
+char buf2828[200];
+char buf2829[200];
+char buf2830[200];
+char buf2831[200];
+char buf2832[200];
+char buf2833[200];
+char buf2834[200];
+char buf2835[200];
+char buf2836[200];
+char buf2837[200];
+char buf2838[200];
+char buf2839[200];
+char buf2840[200];
+char buf2841[200];
+char buf2842[200];
+char buf2843[200];
+char buf2844[200];
+char buf2845[200];
+char buf2846[200];
+char buf2847[200];
+char buf2848[200];
+char buf2849[200];
+char buf2850[200];
+char buf2851[200];
+char buf2852[200];
+char buf2853[200];
+char buf2854[200];
+char buf2855[200];
+char buf2856[200];
+char buf2857[200];
+char buf2858[200];
+char buf2859[200];
+char buf2860[200];
+char buf2861[200];
+char buf2862[200];
+char buf2863[200];
+char buf2864[200];
+char buf2865[200];
+char buf2866[200];
+char buf2867[200];
+char buf2868[200];
+char buf2869[200];
+char buf2870[200];
+char buf2871[200];
+char buf2872[200];
+char buf2873[200];
+char buf2874[200];
+char buf2875[200];
+char buf2876[200];
+char buf2877[200];
+char buf2878[200];
+char buf2879[200];
+char buf2880[200];
+char buf2881[200];
+char buf2882[200];
+char buf2883[200];
+char buf2884[200];
+char buf2885[200];
+char buf2886[200];
+char buf2887[200];
+char buf2888[200];
+char buf2889[200];
+char buf2890[200];
+char buf2891[200];
+char buf2892[200];
+char buf2893[200];
+char buf2894[200];
+char buf2895[200];
+char buf2896[200];
+char buf2897[200];
+char buf2898[200];
+char buf2899[200];
+char buf2900[200];
+char buf2901[200];
+char buf2902[200];
+char buf2903[200];
+char buf2904[200];
+char buf2905[200];
+char buf2906[200];
+char buf2907[200];
+char buf2908[200];
+char buf2909[200];
+char buf2910[200];
+char buf2911[200];
+char buf2912[200];
+char buf2913[200];
+char buf2914[200];
+char buf2915[200];
+char buf2916[200];
+char buf2917[200];
+char buf2918[200];
+char buf2919[200];
+char buf2920[200];
+char buf2921[200];
+char buf2922[200];
+char buf2923[200];
+char buf2924[200];
+char buf2925[200];
+char buf2926[200];
+char buf2927[200];
+char buf2928[200];
+char buf2929[200];
+char buf2930[200];
+char buf2931[200];
+char buf2932[200];
+char buf2933[200];
+char buf2934[200];
+char buf2935[200];
+char buf2936[200];
+char buf2937[200];
+char buf2938[200];
+char buf2939[200];
+char buf2940[200];
+char buf2941[200];
+char buf2942[200];
+char buf2943[200];
+char buf2944[200];
+char buf2945[200];
+char buf2946[200];
+char buf2947[200];
+char buf2948[200];
+char buf2949[200];
+char buf2950[200];
+char buf2951[200];
+char buf2952[200];
+char buf2953[200];
+char buf2954[200];
+char buf2955[200];
+char buf2956[200];
+char buf2957[200];
+char buf2958[200];
+char buf2959[200];
+char buf2960[200];
+char buf2961[200];
+char buf2962[200];
+char buf2963[200];
+char buf2964[200];
+char buf2965[200];
+char buf2966[200];
+char buf2967[200];
+char buf2968[200];
+char buf2969[200];
+char buf2970[200];
+char buf2971[200];
+char buf2972[200];
+char buf2973[200];
+char buf2974[200];
+char buf2975[200];
+char buf2976[200];
+char buf2977[200];
+char buf2978[200];
+char buf2979[200];
+char buf2980[200];
+char buf2981[200];
+char buf2982[200];
+char buf2983[200];
+char buf2984[200];
+char buf2985[200];
+char buf2986[200];
+char buf2987[200];
+char buf2988[200];
+char buf2989[200];
+char buf2990[200];
+char buf2991[200];
+char buf2992[200];
+char buf2993[200];
+char buf2994[200];
+char buf2995[200];
+char buf2996[200];
+char buf2997[200];
+char buf2998[200];
+char buf2999[200];
+char buf3000[200];
+char buf3001[200];
+char buf3002[200];
+char buf3003[200];
+char buf3004[200];
+char buf3005[200];
+char buf3006[200];
+char buf3007[200];
+char buf3008[200];
+char buf3009[200];
+char buf3010[200];
+char buf3011[200];
+char buf3012[200];
+char buf3013[200];
+char buf3014[200];
+char buf3015[200];
+char buf3016[200];
+char buf3017[200];
+char buf3018[200];
+char buf3019[200];
+char buf3020[200];
+char buf3021[200];
+char buf3022[200];
+char buf3023[200];
+char buf3024[200];
+char buf3025[200];
+char buf3026[200];
+char buf3027[200];
+char buf3028[200];
+char buf3029[200];
+char buf3030[200];
+char buf3031[200];
+char buf3032[200];
+char buf3033[200];
+char buf3034[200];
+char buf3035[200];
+char buf3036[200];
+char buf3037[200];
+char buf3038[200];
+char buf3039[200];
+char buf3040[200];
+char buf3041[200];
+char buf3042[200];
+char buf3043[200];
+char buf3044[200];
+char buf3045[200];
+char buf3046[200];
+char buf3047[200];
+char buf3048[200];
+char buf3049[200];
+char buf3050[200];
+char buf3051[200];
+char buf3052[200];
+char buf3053[200];
+char buf3054[200];
+char buf3055[200];
+char buf3056[200];
+char buf3057[200];
+char buf3058[200];
+char buf3059[200];
+char buf3060[200];
+char buf3061[200];
+char buf3062[200];
+char buf3063[200];
+char buf3064[200];
+char buf3065[200];
+char buf3066[200];
+char buf3067[200];
+char buf3068[200];
+char buf3069[200];
+char buf3070[200];
+char buf3071[200];
+char buf3072[200];
+char buf3073[200];
+char buf3074[200];
+char buf3075[200];
+char buf3076[200];
+char buf3077[200];
+char buf3078[200];
+char buf3079[200];
+char buf3080[200];
+char buf3081[200];
+char buf3082[200];
+char buf3083[200];
+char buf3084[200];
+char buf3085[200];
+char buf3086[200];
+char buf3087[200];
+char buf3088[200];
+char buf3089[200];
+char buf3090[200];
+char buf3091[200];
+char buf3092[200];
+char buf3093[200];
+char buf3094[200];
+char buf3095[200];
+char buf3096[200];
+char buf3097[200];
+char buf3098[200];
+char buf3099[200];
+char buf3100[200];
+char buf3101[200];
+char buf3102[200];
+char buf3103[200];
+char buf3104[200];
+char buf3105[200];
+char buf3106[200];
+char buf3107[200];
+char buf3108[200];
+char buf3109[200];
+char buf3110[200];
+char buf3111[200];
+char buf3112[200];
+char buf3113[200];
+char buf3114[200];
+char buf3115[200];
+char buf3116[200];
+char buf3117[200];
+char buf3118[200];
+char buf3119[200];
+char buf3120[200];
+char buf3121[200];
+char buf3122[200];
+char buf3123[200];
+char buf3124[200];
+char buf3125[200];
+char buf3126[200];
+char buf3127[200];
+char buf3128[200];
+char buf3129[200];
+char buf3130[200];
+char buf3131[200];
+char buf3132[200];
+char buf3133[200];
+char buf3134[200];
+char buf3135[200];
+char buf3136[200];
+char buf3137[200];
+char buf3138[200];
+char buf3139[200];
+char buf3140[200];
+char buf3141[200];
+char buf3142[200];
+char buf3143[200];
+char buf3144[200];
+char buf3145[200];
+char buf3146[200];
+char buf3147[200];
+char buf3148[200];
+char buf3149[200];
+char buf3150[200];
+char buf3151[200];
+char buf3152[200];
+char buf3153[200];
+char buf3154[200];
+char buf3155[200];
+char buf3156[200];
+char buf3157[200];
+char buf3158[200];
+char buf3159[200];
+char buf3160[200];
+char buf3161[200];
+char buf3162[200];
+char buf3163[200];
+char buf3164[200];
+char buf3165[200];
+char buf3166[200];
+char buf3167[200];
+char buf3168[200];
+char buf3169[200];
+char buf3170[200];
+char buf3171[200];
+char buf3172[200];
+char buf3173[200];
+char buf3174[200];
+char buf3175[200];
+char buf3176[200];
+char buf3177[200];
+char buf3178[200];
+char buf3179[200];
+char buf3180[200];
+char buf3181[200];
+char buf3182[200];
+char buf3183[200];
+char buf3184[200];
+char buf3185[200];
+char buf3186[200];
+char buf3187[200];
+char buf3188[200];
+char buf3189[200];
+char buf3190[200];
+char buf3191[200];
+char buf3192[200];
+char buf3193[200];
+char buf3194[200];
+char buf3195[200];
+char buf3196[200];
+char buf3197[200];
+char buf3198[200];
+char buf3199[200];
+char buf3200[200];
+char buf3201[200];
+char buf3202[200];
+char buf3203[200];
+char buf3204[200];
+char buf3205[200];
+char buf3206[200];
+char buf3207[200];
+char buf3208[200];
+char buf3209[200];
+char buf3210[200];
+char buf3211[200];
+char buf3212[200];
+char buf3213[200];
+char buf3214[200];
+char buf3215[200];
+char buf3216[200];
+char buf3217[200];
+char buf3218[200];
+char buf3219[200];
+char buf3220[200];
+char buf3221[200];
+char buf3222[200];
+char buf3223[200];
+char buf3224[200];
+char buf3225[200];
+char buf3226[200];
+char buf3227[200];
+char buf3228[200];
+char buf3229[200];
+char buf3230[200];
+char buf3231[200];
+char buf3232[200];
+char buf3233[200];
+char buf3234[200];
+char buf3235[200];
+char buf3236[200];
+char buf3237[200];
+char buf3238[200];
+char buf3239[200];
+char buf3240[200];
+char buf3241[200];
+char buf3242[200];
+char buf3243[200];
+char buf3244[200];
+char buf3245[200];
+char buf3246[200];
+char buf3247[200];
+char buf3248[200];
+char buf3249[200];
+char buf3250[200];
+char buf3251[200];
+char buf3252[200];
+char buf3253[200];
+char buf3254[200];
+char buf3255[200];
+char buf3256[200];
+char buf3257[200];
+char buf3258[200];
+char buf3259[200];
+char buf3260[200];
+char buf3261[200];
+char buf3262[200];
+char buf3263[200];
+char buf3264[200];
+char buf3265[200];
+char buf3266[200];
+char buf3267[200];
+char buf3268[200];
+char buf3269[200];
+char buf3270[200];
+char buf3271[200];
+char buf3272[200];
+char buf3273[200];
+char buf3274[200];
+char buf3275[200];
+char buf3276[200];
+char buf3277[200];
+char buf3278[200];
+char buf3279[200];
+char buf3280[200];
+char buf3281[200];
+char buf3282[200];
+char buf3283[200];
+char buf3284[200];
+char buf3285[200];
+char buf3286[200];
+char buf3287[200];
+char buf3288[200];
+char buf3289[200];
+char buf3290[200];
+char buf3291[200];
+char buf3292[200];
+char buf3293[200];
+char buf3294[200];
+char buf3295[200];
+char buf3296[200];
+char buf3297[200];
+char buf3298[200];
+char buf3299[200];
+char buf3300[200];
+char buf3301[200];
+char buf3302[200];
+char buf3303[200];
+char buf3304[200];
+char buf3305[200];
+char buf3306[200];
+char buf3307[200];
+char buf3308[200];
+char buf3309[200];
+char buf3310[200];
+char buf3311[200];
+char buf3312[200];
+char buf3313[200];
+char buf3314[200];
+char buf3315[200];
+char buf3316[200];
+char buf3317[200];
+char buf3318[200];
+char buf3319[200];
+char buf3320[200];
+char buf3321[200];
+char buf3322[200];
+char buf3323[200];
+char buf3324[200];
+char buf3325[200];
+char buf3326[200];
+char buf3327[200];
+char buf3328[200];
+char buf3329[200];
+char buf3330[200];
+char buf3331[200];
+char buf3332[200];
+char buf3333[200];
+char buf3334[200];
+char buf3335[200];
+char buf3336[200];
+char buf3337[200];
+char buf3338[200];
+char buf3339[200];
+char buf3340[200];
+char buf3341[200];
+char buf3342[200];
+char buf3343[200];
+char buf3344[200];
+char buf3345[200];
+char buf3346[200];
+char buf3347[200];
+char buf3348[200];
+char buf3349[200];
+char buf3350[200];
+char buf3351[200];
+char buf3352[200];
+char buf3353[200];
+char buf3354[200];
+char buf3355[200];
+char buf3356[200];
+char buf3357[200];
+char buf3358[200];
+char buf3359[200];
+char buf3360[200];
+char buf3361[200];
+char buf3362[200];
+char buf3363[200];
+char buf3364[200];
+char buf3365[200];
+char buf3366[200];
+char buf3367[200];
+char buf3368[200];
+char buf3369[200];
+char buf3370[200];
+char buf3371[200];
+char buf3372[200];
+char buf3373[200];
+char buf3374[200];
+char buf3375[200];
+char buf3376[200];
+char buf3377[200];
+char buf3378[200];
+char buf3379[200];
+char buf3380[200];
+char buf3381[200];
+char buf3382[200];
+char buf3383[200];
+
+void RS_KERNEL test(int in) {
+    *(uchar*)buf0 = abs(*(char*)buf1);
+    *(uchar2*)buf2 = abs(*(char2*)buf3);
+    *(uchar3*)buf4 = abs(*(char3*)buf5);
+    *(uchar4*)buf6 = abs(*(char4*)buf7);
+    *(ushort*)buf8 = abs(*(short*)buf9);
+    *(ushort2*)buf10 = abs(*(short2*)buf11);
+    *(ushort3*)buf12 = abs(*(short3*)buf13);
+    *(ushort4*)buf14 = abs(*(short4*)buf15);
+    *(uint*)buf16 = abs(*(int*)buf17);
+    *(uint2*)buf18 = abs(*(int2*)buf19);
+    *(uint3*)buf20 = abs(*(int3*)buf21);
+    *(uint4*)buf22 = abs(*(int4*)buf23);
+    *(float*)buf24 = acos(*(float*)buf25);
+    *(float2*)buf26 = acos(*(float2*)buf27);
+    *(float3*)buf28 = acos(*(float3*)buf29);
+    *(float4*)buf30 = acos(*(float4*)buf31);
+    *(float*)buf32 = acosh(*(float*)buf33);
+    *(float2*)buf34 = acosh(*(float2*)buf35);
+    *(float3*)buf36 = acosh(*(float3*)buf37);
+    *(float4*)buf38 = acosh(*(float4*)buf39);
+    *(float*)buf40 = acospi(*(float*)buf41);
+    *(float2*)buf42 = acospi(*(float2*)buf43);
+    *(float3*)buf44 = acospi(*(float3*)buf45);
+    *(float4*)buf46 = acospi(*(float4*)buf47);
+    *(float*)buf48 = asin(*(float*)buf49);
+    *(float2*)buf50 = asin(*(float2*)buf51);
+    *(float3*)buf52 = asin(*(float3*)buf53);
+    *(float4*)buf54 = asin(*(float4*)buf55);
+    *(float*)buf56 = asinh(*(float*)buf57);
+    *(float2*)buf58 = asinh(*(float2*)buf59);
+    *(float3*)buf60 = asinh(*(float3*)buf61);
+    *(float4*)buf62 = asinh(*(float4*)buf63);
+    *(float*)buf64 = asinpi(*(float*)buf65);
+    *(float2*)buf66 = asinpi(*(float2*)buf67);
+    *(float3*)buf68 = asinpi(*(float3*)buf69);
+    *(float4*)buf70 = asinpi(*(float4*)buf71);
+    *(float*)buf72 = atan(*(float*)buf73);
+    *(float2*)buf74 = atan(*(float2*)buf75);
+    *(float3*)buf76 = atan(*(float3*)buf77);
+    *(float4*)buf78 = atan(*(float4*)buf79);
+    *(float*)buf80 = atan2(*(float*)buf81, *(float*)buf82);
+    *(float2*)buf83 = atan2(*(float2*)buf84, *(float2*)buf85);
+    *(float3*)buf86 = atan2(*(float3*)buf87, *(float3*)buf88);
+    *(float4*)buf89 = atan2(*(float4*)buf90, *(float4*)buf91);
+    *(float*)buf92 = atan2pi(*(float*)buf93, *(float*)buf94);
+    *(float2*)buf95 = atan2pi(*(float2*)buf96, *(float2*)buf97);
+    *(float3*)buf98 = atan2pi(*(float3*)buf99, *(float3*)buf100);
+    *(float4*)buf101 = atan2pi(*(float4*)buf102, *(float4*)buf103);
+    *(float*)buf104 = atanh(*(float*)buf105);
+    *(float2*)buf106 = atanh(*(float2*)buf107);
+    *(float3*)buf108 = atanh(*(float3*)buf109);
+    *(float4*)buf110 = atanh(*(float4*)buf111);
+    *(float*)buf112 = atanpi(*(float*)buf113);
+    *(float2*)buf114 = atanpi(*(float2*)buf115);
+    *(float3*)buf116 = atanpi(*(float3*)buf117);
+    *(float4*)buf118 = atanpi(*(float4*)buf119);
+    *(float*)buf120 = cbrt(*(float*)buf121);
+    *(float2*)buf122 = cbrt(*(float2*)buf123);
+    *(float3*)buf124 = cbrt(*(float3*)buf125);
+    *(float4*)buf126 = cbrt(*(float4*)buf127);
+    *(float*)buf128 = ceil(*(float*)buf129);
+    *(float2*)buf130 = ceil(*(float2*)buf131);
+    *(float3*)buf132 = ceil(*(float3*)buf133);
+    *(float4*)buf134 = ceil(*(float4*)buf135);
+    *(float*)buf136 = clamp(*(float*)buf137, *(float*)buf138, *(float*)buf139);
+    *(float2*)buf140 = clamp(*(float2*)buf141, *(float2*)buf142, *(float2*)buf143);
+    *(float3*)buf144 = clamp(*(float3*)buf145, *(float3*)buf146, *(float3*)buf147);
+    *(float4*)buf148 = clamp(*(float4*)buf149, *(float4*)buf150, *(float4*)buf151);
+    *(float2*)buf152 = clamp(*(float2*)buf153, *(float*)buf154, *(float*)buf155);
+    *(float3*)buf156 = clamp(*(float3*)buf157, *(float*)buf158, *(float*)buf159);
+    *(float4*)buf160 = clamp(*(float4*)buf161, *(float*)buf162, *(float*)buf163);
+    *(char*)buf164 = clamp(*(char*)buf165, *(char*)buf166, *(char*)buf167);
+    *(char2*)buf168 = clamp(*(char2*)buf169, *(char2*)buf170, *(char2*)buf171);
+    *(char3*)buf172 = clamp(*(char3*)buf173, *(char3*)buf174, *(char3*)buf175);
+    *(char4*)buf176 = clamp(*(char4*)buf177, *(char4*)buf178, *(char4*)buf179);
+    *(uchar*)buf180 = clamp(*(uchar*)buf181, *(uchar*)buf182, *(uchar*)buf183);
+    *(uchar2*)buf184 = clamp(*(uchar2*)buf185, *(uchar2*)buf186, *(uchar2*)buf187);
+    *(uchar3*)buf188 = clamp(*(uchar3*)buf189, *(uchar3*)buf190, *(uchar3*)buf191);
+    *(uchar4*)buf192 = clamp(*(uchar4*)buf193, *(uchar4*)buf194, *(uchar4*)buf195);
+    *(short*)buf196 = clamp(*(short*)buf197, *(short*)buf198, *(short*)buf199);
+    *(short2*)buf200 = clamp(*(short2*)buf201, *(short2*)buf202, *(short2*)buf203);
+    *(short3*)buf204 = clamp(*(short3*)buf205, *(short3*)buf206, *(short3*)buf207);
+    *(short4*)buf208 = clamp(*(short4*)buf209, *(short4*)buf210, *(short4*)buf211);
+    *(ushort*)buf212 = clamp(*(ushort*)buf213, *(ushort*)buf214, *(ushort*)buf215);
+    *(ushort2*)buf216 = clamp(*(ushort2*)buf217, *(ushort2*)buf218, *(ushort2*)buf219);
+    *(ushort3*)buf220 = clamp(*(ushort3*)buf221, *(ushort3*)buf222, *(ushort3*)buf223);
+    *(ushort4*)buf224 = clamp(*(ushort4*)buf225, *(ushort4*)buf226, *(ushort4*)buf227);
+    *(int*)buf228 = clamp(*(int*)buf229, *(int*)buf230, *(int*)buf231);
+    *(int2*)buf232 = clamp(*(int2*)buf233, *(int2*)buf234, *(int2*)buf235);
+    *(int3*)buf236 = clamp(*(int3*)buf237, *(int3*)buf238, *(int3*)buf239);
+    *(int4*)buf240 = clamp(*(int4*)buf241, *(int4*)buf242, *(int4*)buf243);
+    *(uint*)buf244 = clamp(*(uint*)buf245, *(uint*)buf246, *(uint*)buf247);
+    *(uint2*)buf248 = clamp(*(uint2*)buf249, *(uint2*)buf250, *(uint2*)buf251);
+    *(uint3*)buf252 = clamp(*(uint3*)buf253, *(uint3*)buf254, *(uint3*)buf255);
+    *(uint4*)buf256 = clamp(*(uint4*)buf257, *(uint4*)buf258, *(uint4*)buf259);
+    *(long*)buf260 = clamp(*(long*)buf261, *(long*)buf262, *(long*)buf263);
+    *(long2*)buf264 = clamp(*(long2*)buf265, *(long2*)buf266, *(long2*)buf267);
+    *(long3*)buf268 = clamp(*(long3*)buf269, *(long3*)buf270, *(long3*)buf271);
+    *(long4*)buf272 = clamp(*(long4*)buf273, *(long4*)buf274, *(long4*)buf275);
+    *(ulong*)buf276 = clamp(*(ulong*)buf277, *(ulong*)buf278, *(ulong*)buf279);
+    *(ulong2*)buf280 = clamp(*(ulong2*)buf281, *(ulong2*)buf282, *(ulong2*)buf283);
+    *(ulong3*)buf284 = clamp(*(ulong3*)buf285, *(ulong3*)buf286, *(ulong3*)buf287);
+    *(ulong4*)buf288 = clamp(*(ulong4*)buf289, *(ulong4*)buf290, *(ulong4*)buf291);
+    *(char2*)buf292 = clamp(*(char2*)buf293, *(char*)buf294, *(char*)buf295);
+    *(char3*)buf296 = clamp(*(char3*)buf297, *(char*)buf298, *(char*)buf299);
+    *(char4*)buf300 = clamp(*(char4*)buf301, *(char*)buf302, *(char*)buf303);
+    *(uchar2*)buf304 = clamp(*(uchar2*)buf305, *(uchar*)buf306, *(uchar*)buf307);
+    *(uchar3*)buf308 = clamp(*(uchar3*)buf309, *(uchar*)buf310, *(uchar*)buf311);
+    *(uchar4*)buf312 = clamp(*(uchar4*)buf313, *(uchar*)buf314, *(uchar*)buf315);
+    *(short2*)buf316 = clamp(*(short2*)buf317, *(short*)buf318, *(short*)buf319);
+    *(short3*)buf320 = clamp(*(short3*)buf321, *(short*)buf322, *(short*)buf323);
+    *(short4*)buf324 = clamp(*(short4*)buf325, *(short*)buf326, *(short*)buf327);
+    *(ushort2*)buf328 = clamp(*(ushort2*)buf329, *(ushort*)buf330, *(ushort*)buf331);
+    *(ushort3*)buf332 = clamp(*(ushort3*)buf333, *(ushort*)buf334, *(ushort*)buf335);
+    *(ushort4*)buf336 = clamp(*(ushort4*)buf337, *(ushort*)buf338, *(ushort*)buf339);
+    *(int2*)buf340 = clamp(*(int2*)buf341, *(int*)buf342, *(int*)buf343);
+    *(int3*)buf344 = clamp(*(int3*)buf345, *(int*)buf346, *(int*)buf347);
+    *(int4*)buf348 = clamp(*(int4*)buf349, *(int*)buf350, *(int*)buf351);
+    *(uint2*)buf352 = clamp(*(uint2*)buf353, *(uint*)buf354, *(uint*)buf355);
+    *(uint3*)buf356 = clamp(*(uint3*)buf357, *(uint*)buf358, *(uint*)buf359);
+    *(uint4*)buf360 = clamp(*(uint4*)buf361, *(uint*)buf362, *(uint*)buf363);
+    *(long2*)buf364 = clamp(*(long2*)buf365, *(long*)buf366, *(long*)buf367);
+    *(long3*)buf368 = clamp(*(long3*)buf369, *(long*)buf370, *(long*)buf371);
+    *(long4*)buf372 = clamp(*(long4*)buf373, *(long*)buf374, *(long*)buf375);
+    *(ulong2*)buf376 = clamp(*(ulong2*)buf377, *(ulong*)buf378, *(ulong*)buf379);
+    *(ulong3*)buf380 = clamp(*(ulong3*)buf381, *(ulong*)buf382, *(ulong*)buf383);
+    *(ulong4*)buf384 = clamp(*(ulong4*)buf385, *(ulong*)buf386, *(ulong*)buf387);
+    *(char*)buf388 = clz(*(char*)buf389);
+    *(char2*)buf390 = clz(*(char2*)buf391);
+    *(char3*)buf392 = clz(*(char3*)buf393);
+    *(char4*)buf394 = clz(*(char4*)buf395);
+    *(uchar*)buf396 = clz(*(uchar*)buf397);
+    *(uchar2*)buf398 = clz(*(uchar2*)buf399);
+    *(uchar3*)buf400 = clz(*(uchar3*)buf401);
+    *(uchar4*)buf402 = clz(*(uchar4*)buf403);
+    *(short*)buf404 = clz(*(short*)buf405);
+    *(short2*)buf406 = clz(*(short2*)buf407);
+    *(short3*)buf408 = clz(*(short3*)buf409);
+    *(short4*)buf410 = clz(*(short4*)buf411);
+    *(ushort*)buf412 = clz(*(ushort*)buf413);
+    *(ushort2*)buf414 = clz(*(ushort2*)buf415);
+    *(ushort3*)buf416 = clz(*(ushort3*)buf417);
+    *(ushort4*)buf418 = clz(*(ushort4*)buf419);
+    *(int*)buf420 = clz(*(int*)buf421);
+    *(int2*)buf422 = clz(*(int2*)buf423);
+    *(int3*)buf424 = clz(*(int3*)buf425);
+    *(int4*)buf426 = clz(*(int4*)buf427);
+    *(uint*)buf428 = clz(*(uint*)buf429);
+    *(uint2*)buf430 = clz(*(uint2*)buf431);
+    *(uint3*)buf432 = clz(*(uint3*)buf433);
+    *(uint4*)buf434 = clz(*(uint4*)buf435);
+    *(float2*)buf436 = convert_float2(*(float2*)buf437);
+    *(float3*)buf438 = convert_float3(*(float3*)buf439);
+    *(float4*)buf440 = convert_float4(*(float4*)buf441);
+    *(float2*)buf442 = convert_float2(*(char2*)buf443);
+    *(float3*)buf444 = convert_float3(*(char3*)buf445);
+    *(float4*)buf446 = convert_float4(*(char4*)buf447);
+    *(float2*)buf448 = convert_float2(*(uchar2*)buf449);
+    *(float3*)buf450 = convert_float3(*(uchar3*)buf451);
+    *(float4*)buf452 = convert_float4(*(uchar4*)buf453);
+    *(float2*)buf454 = convert_float2(*(short2*)buf455);
+    *(float3*)buf456 = convert_float3(*(short3*)buf457);
+    *(float4*)buf458 = convert_float4(*(short4*)buf459);
+    *(float2*)buf460 = convert_float2(*(ushort2*)buf461);
+    *(float3*)buf462 = convert_float3(*(ushort3*)buf463);
+    *(float4*)buf464 = convert_float4(*(ushort4*)buf465);
+    *(float2*)buf466 = convert_float2(*(int2*)buf467);
+    *(float3*)buf468 = convert_float3(*(int3*)buf469);
+    *(float4*)buf470 = convert_float4(*(int4*)buf471);
+    *(float2*)buf472 = convert_float2(*(uint2*)buf473);
+    *(float3*)buf474 = convert_float3(*(uint3*)buf475);
+    *(float4*)buf476 = convert_float4(*(uint4*)buf477);
+    *(char2*)buf478 = convert_char2(*(float2*)buf479);
+    *(char3*)buf480 = convert_char3(*(float3*)buf481);
+    *(char4*)buf482 = convert_char4(*(float4*)buf483);
+    *(char2*)buf484 = convert_char2(*(char2*)buf485);
+    *(char3*)buf486 = convert_char3(*(char3*)buf487);
+    *(char4*)buf488 = convert_char4(*(char4*)buf489);
+    *(char2*)buf490 = convert_char2(*(uchar2*)buf491);
+    *(char3*)buf492 = convert_char3(*(uchar3*)buf493);
+    *(char4*)buf494 = convert_char4(*(uchar4*)buf495);
+    *(char2*)buf496 = convert_char2(*(short2*)buf497);
+    *(char3*)buf498 = convert_char3(*(short3*)buf499);
+    *(char4*)buf500 = convert_char4(*(short4*)buf501);
+    *(char2*)buf502 = convert_char2(*(ushort2*)buf503);
+    *(char3*)buf504 = convert_char3(*(ushort3*)buf505);
+    *(char4*)buf506 = convert_char4(*(ushort4*)buf507);
+    *(char2*)buf508 = convert_char2(*(int2*)buf509);
+    *(char3*)buf510 = convert_char3(*(int3*)buf511);
+    *(char4*)buf512 = convert_char4(*(int4*)buf513);
+    *(char2*)buf514 = convert_char2(*(uint2*)buf515);
+    *(char3*)buf516 = convert_char3(*(uint3*)buf517);
+    *(char4*)buf518 = convert_char4(*(uint4*)buf519);
+    *(uchar2*)buf520 = convert_uchar2(*(float2*)buf521);
+    *(uchar3*)buf522 = convert_uchar3(*(float3*)buf523);
+    *(uchar4*)buf524 = convert_uchar4(*(float4*)buf525);
+    *(uchar2*)buf526 = convert_uchar2(*(char2*)buf527);
+    *(uchar3*)buf528 = convert_uchar3(*(char3*)buf529);
+    *(uchar4*)buf530 = convert_uchar4(*(char4*)buf531);
+    *(uchar2*)buf532 = convert_uchar2(*(uchar2*)buf533);
+    *(uchar3*)buf534 = convert_uchar3(*(uchar3*)buf535);
+    *(uchar4*)buf536 = convert_uchar4(*(uchar4*)buf537);
+    *(uchar2*)buf538 = convert_uchar2(*(short2*)buf539);
+    *(uchar3*)buf540 = convert_uchar3(*(short3*)buf541);
+    *(uchar4*)buf542 = convert_uchar4(*(short4*)buf543);
+    *(uchar2*)buf544 = convert_uchar2(*(ushort2*)buf545);
+    *(uchar3*)buf546 = convert_uchar3(*(ushort3*)buf547);
+    *(uchar4*)buf548 = convert_uchar4(*(ushort4*)buf549);
+    *(uchar2*)buf550 = convert_uchar2(*(int2*)buf551);
+    *(uchar3*)buf552 = convert_uchar3(*(int3*)buf553);
+    *(uchar4*)buf554 = convert_uchar4(*(int4*)buf555);
+    *(uchar2*)buf556 = convert_uchar2(*(uint2*)buf557);
+    *(uchar3*)buf558 = convert_uchar3(*(uint3*)buf559);
+    *(uchar4*)buf560 = convert_uchar4(*(uint4*)buf561);
+    *(short2*)buf562 = convert_short2(*(float2*)buf563);
+    *(short3*)buf564 = convert_short3(*(float3*)buf565);
+    *(short4*)buf566 = convert_short4(*(float4*)buf567);
+    *(short2*)buf568 = convert_short2(*(char2*)buf569);
+    *(short3*)buf570 = convert_short3(*(char3*)buf571);
+    *(short4*)buf572 = convert_short4(*(char4*)buf573);
+    *(short2*)buf574 = convert_short2(*(uchar2*)buf575);
+    *(short3*)buf576 = convert_short3(*(uchar3*)buf577);
+    *(short4*)buf578 = convert_short4(*(uchar4*)buf579);
+    *(short2*)buf580 = convert_short2(*(short2*)buf581);
+    *(short3*)buf582 = convert_short3(*(short3*)buf583);
+    *(short4*)buf584 = convert_short4(*(short4*)buf585);
+    *(short2*)buf586 = convert_short2(*(ushort2*)buf587);
+    *(short3*)buf588 = convert_short3(*(ushort3*)buf589);
+    *(short4*)buf590 = convert_short4(*(ushort4*)buf591);
+    *(short2*)buf592 = convert_short2(*(int2*)buf593);
+    *(short3*)buf594 = convert_short3(*(int3*)buf595);
+    *(short4*)buf596 = convert_short4(*(int4*)buf597);
+    *(short2*)buf598 = convert_short2(*(uint2*)buf599);
+    *(short3*)buf600 = convert_short3(*(uint3*)buf601);
+    *(short4*)buf602 = convert_short4(*(uint4*)buf603);
+    *(ushort2*)buf604 = convert_ushort2(*(float2*)buf605);
+    *(ushort3*)buf606 = convert_ushort3(*(float3*)buf607);
+    *(ushort4*)buf608 = convert_ushort4(*(float4*)buf609);
+    *(ushort2*)buf610 = convert_ushort2(*(char2*)buf611);
+    *(ushort3*)buf612 = convert_ushort3(*(char3*)buf613);
+    *(ushort4*)buf614 = convert_ushort4(*(char4*)buf615);
+    *(ushort2*)buf616 = convert_ushort2(*(uchar2*)buf617);
+    *(ushort3*)buf618 = convert_ushort3(*(uchar3*)buf619);
+    *(ushort4*)buf620 = convert_ushort4(*(uchar4*)buf621);
+    *(ushort2*)buf622 = convert_ushort2(*(short2*)buf623);
+    *(ushort3*)buf624 = convert_ushort3(*(short3*)buf625);
+    *(ushort4*)buf626 = convert_ushort4(*(short4*)buf627);
+    *(ushort2*)buf628 = convert_ushort2(*(ushort2*)buf629);
+    *(ushort3*)buf630 = convert_ushort3(*(ushort3*)buf631);
+    *(ushort4*)buf632 = convert_ushort4(*(ushort4*)buf633);
+    *(ushort2*)buf634 = convert_ushort2(*(int2*)buf635);
+    *(ushort3*)buf636 = convert_ushort3(*(int3*)buf637);
+    *(ushort4*)buf638 = convert_ushort4(*(int4*)buf639);
+    *(ushort2*)buf640 = convert_ushort2(*(uint2*)buf641);
+    *(ushort3*)buf642 = convert_ushort3(*(uint3*)buf643);
+    *(ushort4*)buf644 = convert_ushort4(*(uint4*)buf645);
+    *(int2*)buf646 = convert_int2(*(float2*)buf647);
+    *(int3*)buf648 = convert_int3(*(float3*)buf649);
+    *(int4*)buf650 = convert_int4(*(float4*)buf651);
+    *(int2*)buf652 = convert_int2(*(char2*)buf653);
+    *(int3*)buf654 = convert_int3(*(char3*)buf655);
+    *(int4*)buf656 = convert_int4(*(char4*)buf657);
+    *(int2*)buf658 = convert_int2(*(uchar2*)buf659);
+    *(int3*)buf660 = convert_int3(*(uchar3*)buf661);
+    *(int4*)buf662 = convert_int4(*(uchar4*)buf663);
+    *(int2*)buf664 = convert_int2(*(short2*)buf665);
+    *(int3*)buf666 = convert_int3(*(short3*)buf667);
+    *(int4*)buf668 = convert_int4(*(short4*)buf669);
+    *(int2*)buf670 = convert_int2(*(ushort2*)buf671);
+    *(int3*)buf672 = convert_int3(*(ushort3*)buf673);
+    *(int4*)buf674 = convert_int4(*(ushort4*)buf675);
+    *(int2*)buf676 = convert_int2(*(int2*)buf677);
+    *(int3*)buf678 = convert_int3(*(int3*)buf679);
+    *(int4*)buf680 = convert_int4(*(int4*)buf681);
+    *(int2*)buf682 = convert_int2(*(uint2*)buf683);
+    *(int3*)buf684 = convert_int3(*(uint3*)buf685);
+    *(int4*)buf686 = convert_int4(*(uint4*)buf687);
+    *(uint2*)buf688 = convert_uint2(*(float2*)buf689);
+    *(uint3*)buf690 = convert_uint3(*(float3*)buf691);
+    *(uint4*)buf692 = convert_uint4(*(float4*)buf693);
+    *(uint2*)buf694 = convert_uint2(*(char2*)buf695);
+    *(uint3*)buf696 = convert_uint3(*(char3*)buf697);
+    *(uint4*)buf698 = convert_uint4(*(char4*)buf699);
+    *(uint2*)buf700 = convert_uint2(*(uchar2*)buf701);
+    *(uint3*)buf702 = convert_uint3(*(uchar3*)buf703);
+    *(uint4*)buf704 = convert_uint4(*(uchar4*)buf705);
+    *(uint2*)buf706 = convert_uint2(*(short2*)buf707);
+    *(uint3*)buf708 = convert_uint3(*(short3*)buf709);
+    *(uint4*)buf710 = convert_uint4(*(short4*)buf711);
+    *(uint2*)buf712 = convert_uint2(*(ushort2*)buf713);
+    *(uint3*)buf714 = convert_uint3(*(ushort3*)buf715);
+    *(uint4*)buf716 = convert_uint4(*(ushort4*)buf717);
+    *(uint2*)buf718 = convert_uint2(*(int2*)buf719);
+    *(uint3*)buf720 = convert_uint3(*(int3*)buf721);
+    *(uint4*)buf722 = convert_uint4(*(int4*)buf723);
+    *(uint2*)buf724 = convert_uint2(*(uint2*)buf725);
+    *(uint3*)buf726 = convert_uint3(*(uint3*)buf727);
+    *(uint4*)buf728 = convert_uint4(*(uint4*)buf729);
+    *(float*)buf730 = copysign(*(float*)buf731, *(float*)buf732);
+    *(float2*)buf733 = copysign(*(float2*)buf734, *(float2*)buf735);
+    *(float3*)buf736 = copysign(*(float3*)buf737, *(float3*)buf738);
+    *(float4*)buf739 = copysign(*(float4*)buf740, *(float4*)buf741);
+    *(float*)buf742 = cos(*(float*)buf743);
+    *(float2*)buf744 = cos(*(float2*)buf745);
+    *(float3*)buf746 = cos(*(float3*)buf747);
+    *(float4*)buf748 = cos(*(float4*)buf749);
+    *(float*)buf750 = cosh(*(float*)buf751);
+    *(float2*)buf752 = cosh(*(float2*)buf753);
+    *(float3*)buf754 = cosh(*(float3*)buf755);
+    *(float4*)buf756 = cosh(*(float4*)buf757);
+    *(float*)buf758 = cospi(*(float*)buf759);
+    *(float2*)buf760 = cospi(*(float2*)buf761);
+    *(float3*)buf762 = cospi(*(float3*)buf763);
+    *(float4*)buf764 = cospi(*(float4*)buf765);
+    *(float3*)buf766 = cross(*(float3*)buf767, *(float3*)buf768);
+    *(float4*)buf769 = cross(*(float4*)buf770, *(float4*)buf771);
+    *(float*)buf772 = degrees(*(float*)buf773);
+    *(float2*)buf774 = degrees(*(float2*)buf775);
+    *(float3*)buf776 = degrees(*(float3*)buf777);
+    *(float4*)buf778 = degrees(*(float4*)buf779);
+    *(float*)buf780 = distance(*(float*)buf781, *(float*)buf782);
+    *(float*)buf783 = distance(*(float2*)buf784, *(float2*)buf785);
+    *(float*)buf786 = distance(*(float3*)buf787, *(float3*)buf788);
+    *(float*)buf789 = distance(*(float4*)buf790, *(float4*)buf791);
+    *(float*)buf792 = dot(*(float*)buf793, *(float*)buf794);
+    *(float*)buf795 = dot(*(float2*)buf796, *(float2*)buf797);
+    *(float*)buf798 = dot(*(float3*)buf799, *(float3*)buf800);
+    *(float*)buf801 = dot(*(float4*)buf802, *(float4*)buf803);
+    *(float*)buf804 = erf(*(float*)buf805);
+    *(float2*)buf806 = erf(*(float2*)buf807);
+    *(float3*)buf808 = erf(*(float3*)buf809);
+    *(float4*)buf810 = erf(*(float4*)buf811);
+    *(float*)buf812 = erfc(*(float*)buf813);
+    *(float2*)buf814 = erfc(*(float2*)buf815);
+    *(float3*)buf816 = erfc(*(float3*)buf817);
+    *(float4*)buf818 = erfc(*(float4*)buf819);
+    *(float*)buf820 = exp(*(float*)buf821);
+    *(float2*)buf822 = exp(*(float2*)buf823);
+    *(float3*)buf824 = exp(*(float3*)buf825);
+    *(float4*)buf826 = exp(*(float4*)buf827);
+    *(float*)buf828 = exp10(*(float*)buf829);
+    *(float2*)buf830 = exp10(*(float2*)buf831);
+    *(float3*)buf832 = exp10(*(float3*)buf833);
+    *(float4*)buf834 = exp10(*(float4*)buf835);
+    *(float*)buf836 = exp2(*(float*)buf837);
+    *(float2*)buf838 = exp2(*(float2*)buf839);
+    *(float3*)buf840 = exp2(*(float3*)buf841);
+    *(float4*)buf842 = exp2(*(float4*)buf843);
+    *(float*)buf844 = expm1(*(float*)buf845);
+    *(float2*)buf846 = expm1(*(float2*)buf847);
+    *(float3*)buf848 = expm1(*(float3*)buf849);
+    *(float4*)buf850 = expm1(*(float4*)buf851);
+    *(float*)buf852 = fabs(*(float*)buf853);
+    *(float2*)buf854 = fabs(*(float2*)buf855);
+    *(float3*)buf856 = fabs(*(float3*)buf857);
+    *(float4*)buf858 = fabs(*(float4*)buf859);
+    *(float*)buf860 = fast_distance(*(float*)buf861, *(float*)buf862);
+    *(float*)buf863 = fast_distance(*(float2*)buf864, *(float2*)buf865);
+    *(float*)buf866 = fast_distance(*(float3*)buf867, *(float3*)buf868);
+    *(float*)buf869 = fast_distance(*(float4*)buf870, *(float4*)buf871);
+    *(float*)buf872 = fast_length(*(float*)buf873);
+    *(float*)buf874 = fast_length(*(float2*)buf875);
+    *(float*)buf876 = fast_length(*(float3*)buf877);
+    *(float*)buf878 = fast_length(*(float4*)buf879);
+    *(float*)buf880 = fast_normalize(*(float*)buf881);
+    *(float2*)buf882 = fast_normalize(*(float2*)buf883);
+    *(float3*)buf884 = fast_normalize(*(float3*)buf885);
+    *(float4*)buf886 = fast_normalize(*(float4*)buf887);
+    *(float*)buf888 = fdim(*(float*)buf889, *(float*)buf890);
+    *(float2*)buf891 = fdim(*(float2*)buf892, *(float2*)buf893);
+    *(float3*)buf894 = fdim(*(float3*)buf895, *(float3*)buf896);
+    *(float4*)buf897 = fdim(*(float4*)buf898, *(float4*)buf899);
+    *(float*)buf900 = floor(*(float*)buf901);
+    *(float2*)buf902 = floor(*(float2*)buf903);
+    *(float3*)buf904 = floor(*(float3*)buf905);
+    *(float4*)buf906 = floor(*(float4*)buf907);
+    *(float*)buf908 = fma(*(float*)buf909, *(float*)buf910, *(float*)buf911);
+    *(float2*)buf912 = fma(*(float2*)buf913, *(float2*)buf914, *(float2*)buf915);
+    *(float3*)buf916 = fma(*(float3*)buf917, *(float3*)buf918, *(float3*)buf919);
+    *(float4*)buf920 = fma(*(float4*)buf921, *(float4*)buf922, *(float4*)buf923);
+    *(float*)buf924 = fmax(*(float*)buf925, *(float*)buf926);
+    *(float2*)buf927 = fmax(*(float2*)buf928, *(float2*)buf929);
+    *(float3*)buf930 = fmax(*(float3*)buf931, *(float3*)buf932);
+    *(float4*)buf933 = fmax(*(float4*)buf934, *(float4*)buf935);
+    *(float2*)buf936 = fmax(*(float2*)buf937, *(float*)buf938);
+    *(float3*)buf939 = fmax(*(float3*)buf940, *(float*)buf941);
+    *(float4*)buf942 = fmax(*(float4*)buf943, *(float*)buf944);
+    *(float*)buf945 = fmin(*(float*)buf946, *(float*)buf947);
+    *(float2*)buf948 = fmin(*(float2*)buf949, *(float2*)buf950);
+    *(float3*)buf951 = fmin(*(float3*)buf952, *(float3*)buf953);
+    *(float4*)buf954 = fmin(*(float4*)buf955, *(float4*)buf956);
+    *(float2*)buf957 = fmin(*(float2*)buf958, *(float*)buf959);
+    *(float3*)buf960 = fmin(*(float3*)buf961, *(float*)buf962);
+    *(float4*)buf963 = fmin(*(float4*)buf964, *(float*)buf965);
+    *(float*)buf966 = fmod(*(float*)buf967, *(float*)buf968);
+    *(float2*)buf969 = fmod(*(float2*)buf970, *(float2*)buf971);
+    *(float3*)buf972 = fmod(*(float3*)buf973, *(float3*)buf974);
+    *(float4*)buf975 = fmod(*(float4*)buf976, *(float4*)buf977);
+    *(float*)buf978 = fract(*(float*)buf979, (float*) buf980);
+    *(float2*)buf981 = fract(*(float2*)buf982, (float2*) buf983);
+    *(float3*)buf984 = fract(*(float3*)buf985, (float3*) buf986);
+    *(float4*)buf987 = fract(*(float4*)buf988, (float4*) buf989);
+    *(float*)buf990 = fract(*(float*)buf991);
+    *(float2*)buf992 = fract(*(float2*)buf993);
+    *(float3*)buf994 = fract(*(float3*)buf995);
+    *(float4*)buf996 = fract(*(float4*)buf997);
+    *(float*)buf998 = frexp(*(float*)buf999, (int*) buf1000);
+    *(float2*)buf1001 = frexp(*(float2*)buf1002, (int2*) buf1003);
+    *(float3*)buf1004 = frexp(*(float3*)buf1005, (int3*) buf1006);
+    *(float4*)buf1007 = frexp(*(float4*)buf1008, (int4*) buf1009);
+    *(float*)buf1010 = half_recip(*(float*)buf1011);
+    *(float2*)buf1012 = half_recip(*(float2*)buf1013);
+    *(float3*)buf1014 = half_recip(*(float3*)buf1015);
+    *(float4*)buf1016 = half_recip(*(float4*)buf1017);
+    *(float*)buf1018 = half_rsqrt(*(float*)buf1019);
+    *(float2*)buf1020 = half_rsqrt(*(float2*)buf1021);
+    *(float3*)buf1022 = half_rsqrt(*(float3*)buf1023);
+    *(float4*)buf1024 = half_rsqrt(*(float4*)buf1025);
+    *(float*)buf1026 = half_sqrt(*(float*)buf1027);
+    *(float2*)buf1028 = half_sqrt(*(float2*)buf1029);
+    *(float3*)buf1030 = half_sqrt(*(float3*)buf1031);
+    *(float4*)buf1032 = half_sqrt(*(float4*)buf1033);
+    *(float*)buf1034 = hypot(*(float*)buf1035, *(float*)buf1036);
+    *(float2*)buf1037 = hypot(*(float2*)buf1038, *(float2*)buf1039);
+    *(float3*)buf1040 = hypot(*(float3*)buf1041, *(float3*)buf1042);
+    *(float4*)buf1043 = hypot(*(float4*)buf1044, *(float4*)buf1045);
+    *(int*)buf1046 = ilogb(*(float*)buf1047);
+    *(int2*)buf1048 = ilogb(*(float2*)buf1049);
+    *(int3*)buf1050 = ilogb(*(float3*)buf1051);
+    *(int4*)buf1052 = ilogb(*(float4*)buf1053);
+    *(float*)buf1054 = ldexp(*(float*)buf1055, *(int*)buf1056);
+    *(float2*)buf1057 = ldexp(*(float2*)buf1058, *(int2*)buf1059);
+    *(float3*)buf1060 = ldexp(*(float3*)buf1061, *(int3*)buf1062);
+    *(float4*)buf1063 = ldexp(*(float4*)buf1064, *(int4*)buf1065);
+    *(float2*)buf1066 = ldexp(*(float2*)buf1067, *(int*)buf1068);
+    *(float3*)buf1069 = ldexp(*(float3*)buf1070, *(int*)buf1071);
+    *(float4*)buf1072 = ldexp(*(float4*)buf1073, *(int*)buf1074);
+    *(float*)buf1075 = length(*(float*)buf1076);
+    *(float*)buf1077 = length(*(float2*)buf1078);
+    *(float*)buf1079 = length(*(float3*)buf1080);
+    *(float*)buf1081 = length(*(float4*)buf1082);
+    *(float*)buf1083 = lgamma(*(float*)buf1084);
+    *(float2*)buf1085 = lgamma(*(float2*)buf1086);
+    *(float3*)buf1087 = lgamma(*(float3*)buf1088);
+    *(float4*)buf1089 = lgamma(*(float4*)buf1090);
+    *(float*)buf1091 = lgamma(*(float*)buf1092, (int*) buf1093);
+    *(float2*)buf1094 = lgamma(*(float2*)buf1095, (int2*) buf1096);
+    *(float3*)buf1097 = lgamma(*(float3*)buf1098, (int3*) buf1099);
+    *(float4*)buf1100 = lgamma(*(float4*)buf1101, (int4*) buf1102);
+    *(float*)buf1103 = log(*(float*)buf1104);
+    *(float2*)buf1105 = log(*(float2*)buf1106);
+    *(float3*)buf1107 = log(*(float3*)buf1108);
+    *(float4*)buf1109 = log(*(float4*)buf1110);
+    *(float*)buf1111 = log10(*(float*)buf1112);
+    *(float2*)buf1113 = log10(*(float2*)buf1114);
+    *(float3*)buf1115 = log10(*(float3*)buf1116);
+    *(float4*)buf1117 = log10(*(float4*)buf1118);
+    *(float*)buf1119 = log1p(*(float*)buf1120);
+    *(float2*)buf1121 = log1p(*(float2*)buf1122);
+    *(float3*)buf1123 = log1p(*(float3*)buf1124);
+    *(float4*)buf1125 = log1p(*(float4*)buf1126);
+    *(float*)buf1127 = log2(*(float*)buf1128);
+    *(float2*)buf1129 = log2(*(float2*)buf1130);
+    *(float3*)buf1131 = log2(*(float3*)buf1132);
+    *(float4*)buf1133 = log2(*(float4*)buf1134);
+    *(float*)buf1135 = logb(*(float*)buf1136);
+    *(float2*)buf1137 = logb(*(float2*)buf1138);
+    *(float3*)buf1139 = logb(*(float3*)buf1140);
+    *(float4*)buf1141 = logb(*(float4*)buf1142);
+    *(float*)buf1143 = mad(*(float*)buf1144, *(float*)buf1145, *(float*)buf1146);
+    *(float2*)buf1147 = mad(*(float2*)buf1148, *(float2*)buf1149, *(float2*)buf1150);
+    *(float3*)buf1151 = mad(*(float3*)buf1152, *(float3*)buf1153, *(float3*)buf1154);
+    *(float4*)buf1155 = mad(*(float4*)buf1156, *(float4*)buf1157, *(float4*)buf1158);
+    *(float*)buf1159 = max(*(float*)buf1160, *(float*)buf1161);
+    *(float2*)buf1162 = max(*(float2*)buf1163, *(float2*)buf1164);
+    *(float3*)buf1165 = max(*(float3*)buf1166, *(float3*)buf1167);
+    *(float4*)buf1168 = max(*(float4*)buf1169, *(float4*)buf1170);
+    *(float2*)buf1171 = max(*(float2*)buf1172, *(float*)buf1173);
+    *(float3*)buf1174 = max(*(float3*)buf1175, *(float*)buf1176);
+    *(float4*)buf1177 = max(*(float4*)buf1178, *(float*)buf1179);
+    *(char*)buf1180 = max(*(char*)buf1181, *(char*)buf1182);
+    *(uchar*)buf1183 = max(*(uchar*)buf1184, *(uchar*)buf1185);
+    *(short*)buf1186 = max(*(short*)buf1187, *(short*)buf1188);
+    *(ushort*)buf1189 = max(*(ushort*)buf1190, *(ushort*)buf1191);
+    *(int*)buf1192 = max(*(int*)buf1193, *(int*)buf1194);
+    *(uint*)buf1195 = max(*(uint*)buf1196, *(uint*)buf1197);
+    *(char2*)buf1198 = max(*(char2*)buf1199, *(char2*)buf1200);
+    *(uchar2*)buf1201 = max(*(uchar2*)buf1202, *(uchar2*)buf1203);
+    *(short2*)buf1204 = max(*(short2*)buf1205, *(short2*)buf1206);
+    *(ushort2*)buf1207 = max(*(ushort2*)buf1208, *(ushort2*)buf1209);
+    *(int2*)buf1210 = max(*(int2*)buf1211, *(int2*)buf1212);
+    *(uint2*)buf1213 = max(*(uint2*)buf1214, *(uint2*)buf1215);
+    *(char3*)buf1216 = max(*(char3*)buf1217, *(char3*)buf1218);
+    *(uchar3*)buf1219 = max(*(uchar3*)buf1220, *(uchar3*)buf1221);
+    *(short3*)buf1222 = max(*(short3*)buf1223, *(short3*)buf1224);
+    *(ushort3*)buf1225 = max(*(ushort3*)buf1226, *(ushort3*)buf1227);
+    *(int3*)buf1228 = max(*(int3*)buf1229, *(int3*)buf1230);
+    *(uint3*)buf1231 = max(*(uint3*)buf1232, *(uint3*)buf1233);
+    *(char4*)buf1234 = max(*(char4*)buf1235, *(char4*)buf1236);
+    *(uchar4*)buf1237 = max(*(uchar4*)buf1238, *(uchar4*)buf1239);
+    *(short4*)buf1240 = max(*(short4*)buf1241, *(short4*)buf1242);
+    *(ushort4*)buf1243 = max(*(ushort4*)buf1244, *(ushort4*)buf1245);
+    *(int4*)buf1246 = max(*(int4*)buf1247, *(int4*)buf1248);
+    *(uint4*)buf1249 = max(*(uint4*)buf1250, *(uint4*)buf1251);
+    *(float*)buf1252 = min(*(float*)buf1253, *(float*)buf1254);
+    *(float2*)buf1255 = min(*(float2*)buf1256, *(float2*)buf1257);
+    *(float3*)buf1258 = min(*(float3*)buf1259, *(float3*)buf1260);
+    *(float4*)buf1261 = min(*(float4*)buf1262, *(float4*)buf1263);
+    *(float2*)buf1264 = min(*(float2*)buf1265, *(float*)buf1266);
+    *(float3*)buf1267 = min(*(float3*)buf1268, *(float*)buf1269);
+    *(float4*)buf1270 = min(*(float4*)buf1271, *(float*)buf1272);
+    *(char*)buf1273 = min(*(char*)buf1274, *(char*)buf1275);
+    *(uchar*)buf1276 = min(*(uchar*)buf1277, *(uchar*)buf1278);
+    *(short*)buf1279 = min(*(short*)buf1280, *(short*)buf1281);
+    *(ushort*)buf1282 = min(*(ushort*)buf1283, *(ushort*)buf1284);
+    *(int*)buf1285 = min(*(int*)buf1286, *(int*)buf1287);
+    *(uint*)buf1288 = min(*(uint*)buf1289, *(uint*)buf1290);
+    *(char2*)buf1291 = min(*(char2*)buf1292, *(char2*)buf1293);
+    *(uchar2*)buf1294 = min(*(uchar2*)buf1295, *(uchar2*)buf1296);
+    *(short2*)buf1297 = min(*(short2*)buf1298, *(short2*)buf1299);
+    *(ushort2*)buf1300 = min(*(ushort2*)buf1301, *(ushort2*)buf1302);
+    *(int2*)buf1303 = min(*(int2*)buf1304, *(int2*)buf1305);
+    *(uint2*)buf1306 = min(*(uint2*)buf1307, *(uint2*)buf1308);
+    *(char3*)buf1309 = min(*(char3*)buf1310, *(char3*)buf1311);
+    *(uchar3*)buf1312 = min(*(uchar3*)buf1313, *(uchar3*)buf1314);
+    *(short3*)buf1315 = min(*(short3*)buf1316, *(short3*)buf1317);
+    *(ushort3*)buf1318 = min(*(ushort3*)buf1319, *(ushort3*)buf1320);
+    *(int3*)buf1321 = min(*(int3*)buf1322, *(int3*)buf1323);
+    *(uint3*)buf1324 = min(*(uint3*)buf1325, *(uint3*)buf1326);
+    *(char4*)buf1327 = min(*(char4*)buf1328, *(char4*)buf1329);
+    *(uchar4*)buf1330 = min(*(uchar4*)buf1331, *(uchar4*)buf1332);
+    *(short4*)buf1333 = min(*(short4*)buf1334, *(short4*)buf1335);
+    *(ushort4*)buf1336 = min(*(ushort4*)buf1337, *(ushort4*)buf1338);
+    *(int4*)buf1339 = min(*(int4*)buf1340, *(int4*)buf1341);
+    *(uint4*)buf1342 = min(*(uint4*)buf1343, *(uint4*)buf1344);
+    *(float*)buf1345 = mix(*(float*)buf1346, *(float*)buf1347, *(float*)buf1348);
+    *(float2*)buf1349 = mix(*(float2*)buf1350, *(float2*)buf1351, *(float2*)buf1352);
+    *(float3*)buf1353 = mix(*(float3*)buf1354, *(float3*)buf1355, *(float3*)buf1356);
+    *(float4*)buf1357 = mix(*(float4*)buf1358, *(float4*)buf1359, *(float4*)buf1360);
+    *(float2*)buf1361 = mix(*(float2*)buf1362, *(float2*)buf1363, *(float*)buf1364);
+    *(float3*)buf1365 = mix(*(float3*)buf1366, *(float3*)buf1367, *(float*)buf1368);
+    *(float4*)buf1369 = mix(*(float4*)buf1370, *(float4*)buf1371, *(float*)buf1372);
+    *(float*)buf1373 = modf(*(float*)buf1374, (float*) buf1375);
+    *(float2*)buf1376 = modf(*(float2*)buf1377, (float2*) buf1378);
+    *(float3*)buf1379 = modf(*(float3*)buf1380, (float3*) buf1381);
+    *(float4*)buf1382 = modf(*(float4*)buf1383, (float4*) buf1384);
+    *(float*)buf1385 = nan(*(uint*)buf1386);
+    *(float*)buf1387 = native_exp(*(float*)buf1388);
+    *(float2*)buf1389 = native_exp(*(float2*)buf1390);
+    *(float3*)buf1391 = native_exp(*(float3*)buf1392);
+    *(float4*)buf1393 = native_exp(*(float4*)buf1394);
+    *(float*)buf1395 = native_exp10(*(float*)buf1396);
+    *(float2*)buf1397 = native_exp10(*(float2*)buf1398);
+    *(float3*)buf1399 = native_exp10(*(float3*)buf1400);
+    *(float4*)buf1401 = native_exp10(*(float4*)buf1402);
+    *(float*)buf1403 = native_exp2(*(float*)buf1404);
+    *(float2*)buf1405 = native_exp2(*(float2*)buf1406);
+    *(float3*)buf1407 = native_exp2(*(float3*)buf1408);
+    *(float4*)buf1409 = native_exp2(*(float4*)buf1410);
+    *(float*)buf1411 = native_log(*(float*)buf1412);
+    *(float2*)buf1413 = native_log(*(float2*)buf1414);
+    *(float3*)buf1415 = native_log(*(float3*)buf1416);
+    *(float4*)buf1417 = native_log(*(float4*)buf1418);
+    *(float*)buf1419 = native_log10(*(float*)buf1420);
+    *(float2*)buf1421 = native_log10(*(float2*)buf1422);
+    *(float3*)buf1423 = native_log10(*(float3*)buf1424);
+    *(float4*)buf1425 = native_log10(*(float4*)buf1426);
+    *(float*)buf1427 = native_log2(*(float*)buf1428);
+    *(float2*)buf1429 = native_log2(*(float2*)buf1430);
+    *(float3*)buf1431 = native_log2(*(float3*)buf1432);
+    *(float4*)buf1433 = native_log2(*(float4*)buf1434);
+    *(float*)buf1435 = native_powr(*(float*)buf1436, *(float*)buf1437);
+    *(float2*)buf1438 = native_powr(*(float2*)buf1439, *(float2*)buf1440);
+    *(float3*)buf1441 = native_powr(*(float3*)buf1442, *(float3*)buf1443);
+    *(float4*)buf1444 = native_powr(*(float4*)buf1445, *(float4*)buf1446);
+    *(float*)buf1447 = nextafter(*(float*)buf1448, *(float*)buf1449);
+    *(float2*)buf1450 = nextafter(*(float2*)buf1451, *(float2*)buf1452);
+    *(float3*)buf1453 = nextafter(*(float3*)buf1454, *(float3*)buf1455);
+    *(float4*)buf1456 = nextafter(*(float4*)buf1457, *(float4*)buf1458);
+    *(float*)buf1459 = normalize(*(float*)buf1460);
+    *(float2*)buf1461 = normalize(*(float2*)buf1462);
+    *(float3*)buf1463 = normalize(*(float3*)buf1464);
+    *(float4*)buf1465 = normalize(*(float4*)buf1466);
+    *(float*)buf1467 = pow(*(float*)buf1468, *(float*)buf1469);
+    *(float2*)buf1470 = pow(*(float2*)buf1471, *(float2*)buf1472);
+    *(float3*)buf1473 = pow(*(float3*)buf1474, *(float3*)buf1475);
+    *(float4*)buf1476 = pow(*(float4*)buf1477, *(float4*)buf1478);
+    *(float*)buf1479 = pown(*(float*)buf1480, *(int*)buf1481);
+    *(float2*)buf1482 = pown(*(float2*)buf1483, *(int2*)buf1484);
+    *(float3*)buf1485 = pown(*(float3*)buf1486, *(int3*)buf1487);
+    *(float4*)buf1488 = pown(*(float4*)buf1489, *(int4*)buf1490);
+    *(float*)buf1491 = powr(*(float*)buf1492, *(float*)buf1493);
+    *(float2*)buf1494 = powr(*(float2*)buf1495, *(float2*)buf1496);
+    *(float3*)buf1497 = powr(*(float3*)buf1498, *(float3*)buf1499);
+    *(float4*)buf1500 = powr(*(float4*)buf1501, *(float4*)buf1502);
+    *(float*)buf1503 = radians(*(float*)buf1504);
+    *(float2*)buf1505 = radians(*(float2*)buf1506);
+    *(float3*)buf1507 = radians(*(float3*)buf1508);
+    *(float4*)buf1509 = radians(*(float4*)buf1510);
+    *(float*)buf1511 = remainder(*(float*)buf1512, *(float*)buf1513);
+    *(float2*)buf1514 = remainder(*(float2*)buf1515, *(float2*)buf1516);
+    *(float3*)buf1517 = remainder(*(float3*)buf1518, *(float3*)buf1519);
+    *(float4*)buf1520 = remainder(*(float4*)buf1521, *(float4*)buf1522);
+    *(float*)buf1523 = remquo(*(float*)buf1524, *(float*)buf1525, (int*) buf1526);
+    *(float2*)buf1527 = remquo(*(float2*)buf1528, *(float2*)buf1529, (int2*) buf1530);
+    *(float3*)buf1531 = remquo(*(float3*)buf1532, *(float3*)buf1533, (int3*) buf1534);
+    *(float4*)buf1535 = remquo(*(float4*)buf1536, *(float4*)buf1537, (int4*) buf1538);
+    *(float*)buf1539 = rint(*(float*)buf1540);
+    *(float2*)buf1541 = rint(*(float2*)buf1542);
+    *(float3*)buf1543 = rint(*(float3*)buf1544);
+    *(float4*)buf1545 = rint(*(float4*)buf1546);
+    *(float*)buf1547 = rootn(*(float*)buf1548, *(int*)buf1549);
+    *(float2*)buf1550 = rootn(*(float2*)buf1551, *(int2*)buf1552);
+    *(float3*)buf1553 = rootn(*(float3*)buf1554, *(int3*)buf1555);
+    *(float4*)buf1556 = rootn(*(float4*)buf1557, *(int4*)buf1558);
+    *(float*)buf1559 = round(*(float*)buf1560);
+    *(float2*)buf1561 = round(*(float2*)buf1562);
+    *(float3*)buf1563 = round(*(float3*)buf1564);
+    *(float4*)buf1565 = round(*(float4*)buf1566);
+    rsAllocationCopy1DRange(*(rs_allocation*)buf1567, *(uint32_t*)buf1568, *(uint32_t*)buf1569, *(uint32_t*)buf1570, *(rs_allocation*)buf1571, *(uint32_t*)buf1572, *(uint32_t*)buf1573);
+    rsAllocationCopy2DRange(*(rs_allocation*)buf1574, *(uint32_t*)buf1575, *(uint32_t*)buf1576, *(uint32_t*)buf1577, *(rs_allocation_cubemap_face*)buf1578, *(uint32_t*)buf1579, *(uint32_t*)buf1580, *(rs_allocation*)buf1581, *(uint32_t*)buf1582, *(uint32_t*)buf1583, *(uint32_t*)buf1584, *(rs_allocation_cubemap_face*)buf1585);
+    *(uint32_t*)buf1586 = rsAllocationGetDimFaces(*(rs_allocation*)buf1587);
+    *(uint32_t*)buf1588 = rsAllocationGetDimLOD(*(rs_allocation*)buf1589);
+    *(uint32_t*)buf1590 = rsAllocationGetDimX(*(rs_allocation*)buf1591);
+    *(uint32_t*)buf1592 = rsAllocationGetDimY(*(rs_allocation*)buf1593);
+    *(uint32_t*)buf1594 = rsAllocationGetDimZ(*(rs_allocation*)buf1595);
+    *(rs_element*)buf1596 = rsAllocationGetElement(*(rs_allocation*)buf1597);
+    rsAllocationIoReceive(*(rs_allocation*)buf1598);
+    rsAllocationIoSend(*(rs_allocation*)buf1599);
+    *(int32_t*)buf1600 = rsAtomicAdd((volatile int32_t*) buf1601, *(int32_t*)buf1602);
+    *(int32_t*)buf1603 = rsAtomicAnd((volatile int32_t*) buf1604, *(int32_t*)buf1605);
+    *(int32_t*)buf1606 = rsAtomicCas((volatile int32_t*) buf1607, *(int32_t*)buf1608, *(int32_t*)buf1609);
+    *(uint32_t*)buf1610 = rsAtomicCas((volatile uint32_t*) buf1611, *(uint32_t*)buf1612, *(uint32_t*)buf1613);
+    *(int32_t*)buf1614 = rsAtomicDec((volatile int32_t*) buf1615);
+    *(int32_t*)buf1616 = rsAtomicInc((volatile int32_t*) buf1617);
+    *(uint32_t*)buf1618 = rsAtomicMax((volatile uint32_t*) buf1619, *(uint32_t*)buf1620);
+    *(int32_t*)buf1621 = rsAtomicMax((volatile int32_t*) buf1622, *(int32_t*)buf1623);
+    *(uint32_t*)buf1624 = rsAtomicMin((volatile uint32_t*) buf1625, *(uint32_t*)buf1626);
+    *(int32_t*)buf1627 = rsAtomicMin((volatile int32_t*) buf1628, *(int32_t*)buf1629);
+    *(int32_t*)buf1630 = rsAtomicOr((volatile int32_t*) buf1631, *(int32_t*)buf1632);
+    *(int32_t*)buf1633 = rsAtomicSub((volatile int32_t*) buf1634, *(int32_t*)buf1635);
+    *(int32_t*)buf1636 = rsAtomicXor((volatile int32_t*) buf1637, *(int32_t*)buf1638);
+    *(char*)buf1639 = rsClamp(*(char*)buf1640, *(char*)buf1641, *(char*)buf1642);
+    *(uchar*)buf1643 = rsClamp(*(uchar*)buf1644, *(uchar*)buf1645, *(uchar*)buf1646);
+    *(short*)buf1647 = rsClamp(*(short*)buf1648, *(short*)buf1649, *(short*)buf1650);
+    *(ushort*)buf1651 = rsClamp(*(ushort*)buf1652, *(ushort*)buf1653, *(ushort*)buf1654);
+    *(int*)buf1655 = rsClamp(*(int*)buf1656, *(int*)buf1657, *(int*)buf1658);
+    *(uint*)buf1659 = rsClamp(*(uint*)buf1660, *(uint*)buf1661, *(uint*)buf1662);
+    rsClearObject((rs_element*) buf1663);
+    rsClearObject((rs_type*) buf1664);
+    rsClearObject((rs_allocation*) buf1665);
+    rsClearObject((rs_sampler*) buf1666);
+    rsClearObject((rs_script*) buf1667);
+#ifndef __LP64__
+    rsClearObject((rs_mesh*) buf1668);
+    rsClearObject((rs_program_fragment*) buf1669);
+    rsClearObject((rs_program_vertex*) buf1670);
+    rsClearObject((rs_program_raster*) buf1671);
+    rsClearObject((rs_program_store*) buf1672);
+    rsClearObject((rs_font*) buf1673);
+#endif
+    rsDebug((const char*) buf1674, *(double*)buf1675);
+    rsDebug((const char*) buf1676, *(int*)buf1677);
+    rsDebug((const char*) buf1678, *(uint*)buf1679);
+    rsDebug((const char*) buf1680, *(long*)buf1681);
+    rsDebug((const char*) buf1682, *(ulong*)buf1683);
+    rsDebug((const char*) buf1684, *(int2*)buf1685);
+    rsDebug((const char*) buf1686, *(int3*)buf1687);
+    rsDebug((const char*) buf1688, *(int4*)buf1689);
+    rsDebug((const char*) buf1690, *(uint2*)buf1691);
+    rsDebug((const char*) buf1692, *(uint3*)buf1693);
+    rsDebug((const char*) buf1694, *(uint4*)buf1695);
+    rsDebug((const char*) buf1696, *(long2*)buf1697);
+    rsDebug((const char*) buf1698, *(long3*)buf1699);
+    rsDebug((const char*) buf1700, *(long4*)buf1701);
+    rsDebug((const char*) buf1702, *(ulong2*)buf1703);
+    rsDebug((const char*) buf1704, *(ulong3*)buf1705);
+    rsDebug((const char*) buf1706, *(ulong4*)buf1707);
+    rsDebug((const char*) buf1708, *(float*)buf1709);
+    rsDebug((const char*) buf1710, *(float2*)buf1711);
+    rsDebug((const char*) buf1712, *(float3*)buf1713);
+    rsDebug((const char*) buf1714, *(float4*)buf1715);
+    rsDebug((const char*) buf1716, *(char*)buf1717);
+    rsDebug((const char*) buf1718, *(char2*)buf1719);
+    rsDebug((const char*) buf1720, *(char3*)buf1721);
+    rsDebug((const char*) buf1722, *(char4*)buf1723);
+    rsDebug((const char*) buf1724, *(uchar*)buf1725);
+    rsDebug((const char*) buf1726, *(uchar2*)buf1727);
+    rsDebug((const char*) buf1728, *(uchar3*)buf1729);
+    rsDebug((const char*) buf1730, *(uchar4*)buf1731);
+    rsDebug((const char*) buf1732, *(short*)buf1733);
+    rsDebug((const char*) buf1734, *(short2*)buf1735);
+    rsDebug((const char*) buf1736, *(short3*)buf1737);
+    rsDebug((const char*) buf1738, *(short4*)buf1739);
+    rsDebug((const char*) buf1740, *(ushort*)buf1741);
+    rsDebug((const char*) buf1742, *(ushort2*)buf1743);
+    rsDebug((const char*) buf1744, *(ushort3*)buf1745);
+    rsDebug((const char*) buf1746, *(ushort4*)buf1747);
+    rsDebug((const char*) buf1748, *(float*)buf1749, *(float*)buf1750);
+    rsDebug((const char*) buf1751, *(float*)buf1752, *(float*)buf1753, *(float*)buf1754);
+    rsDebug((const char*) buf1755, *(float*)buf1756, *(float*)buf1757, *(float*)buf1758, *(float*)buf1759);
+    rsDebug((const char*) buf1760, *(long long*)buf1761);
+    rsDebug((const char*) buf1762, *(unsigned long long*)buf1763);
+    rsDebug((const char*) buf1764, (const void*) buf1765);
+    rsDebug((const char*) buf1766, (const rs_matrix4x4*) buf1767);
+    rsDebug((const char*) buf1768, (const rs_matrix3x3*) buf1769);
+    rsDebug((const char*) buf1770, (const rs_matrix2x2*) buf1771);
+    *(uint32_t*)buf1772 = rsElementGetBytesSize(*(rs_element*)buf1773);
+    *(rs_data_kind*)buf1774 = rsElementGetDataKind(*(rs_element*)buf1775);
+    *(rs_data_type*)buf1776 = rsElementGetDataType(*(rs_element*)buf1777);
+    *(rs_element*)buf1778 = rsElementGetSubElement(*(rs_element*)buf1779, *(uint32_t*)buf1780);
+    *(uint32_t*)buf1781 = rsElementGetSubElementArraySize(*(rs_element*)buf1782, *(uint32_t*)buf1783);
+    *(uint32_t*)buf1784 = rsElementGetSubElementCount(*(rs_element*)buf1785);
+    *(uint32_t*)buf1786 = rsElementGetSubElementName(*(rs_element*)buf1787, *(uint32_t*)buf1788, (char*) buf1789, *(uint32_t*)buf1790);
+    *(uint32_t*)buf1791 = rsElementGetSubElementNameLength(*(rs_element*)buf1792, *(uint32_t*)buf1793);
+    *(uint32_t*)buf1794 = rsElementGetSubElementOffsetBytes(*(rs_element*)buf1795, *(uint32_t*)buf1796);
+    *(uint32_t*)buf1797 = rsElementGetVectorSize(*(rs_element*)buf1798);
+    rsExtractFrustumPlanes((const rs_matrix4x4*) buf1799, (float4*) buf1800, (float4*) buf1801, (float4*) buf1802, (float4*) buf1803, (float4*) buf1804, (float4*) buf1805);
+    rsForEach(*(rs_script*)buf1806, *(rs_allocation*)buf1807, *(rs_allocation*)buf1808, (const void*) buf1809, *(size_t*)buf1810, (const rs_script_call_t*) buf1811);
+    rsForEach(*(rs_script*)buf1812, *(rs_allocation*)buf1813, *(rs_allocation*)buf1814, (const void*) buf1815, *(size_t*)buf1816);
+    rsForEach(*(rs_script*)buf1817, *(rs_allocation*)buf1818, *(rs_allocation*)buf1819);
+    *(float*)buf1820 = rsFrac(*(float*)buf1821);
+    *(rs_allocation*)buf1822 = rsGetAllocation((const void*) buf1823);
+    *(float*)buf1824 = rsGetDt();
+    *(const void**)buf1825 = rsGetElementAt(*(rs_allocation*)buf1826, *(uint32_t*)buf1827);
+    *(const void**)buf1828 = rsGetElementAt(*(rs_allocation*)buf1829, *(uint32_t*)buf1830, *(uint32_t*)buf1831);
+    *(const void**)buf1832 = rsGetElementAt(*(rs_allocation*)buf1833, *(uint32_t*)buf1834, *(uint32_t*)buf1835, *(uint32_t*)buf1836);
+    *(float*)buf1837 = rsGetElementAt_float(*(rs_allocation*)buf1838, *(uint32_t*)buf1839);
+    *(float2*)buf1840 = rsGetElementAt_float2(*(rs_allocation*)buf1841, *(uint32_t*)buf1842);
+    *(float3*)buf1843 = rsGetElementAt_float3(*(rs_allocation*)buf1844, *(uint32_t*)buf1845);
+    *(float4*)buf1846 = rsGetElementAt_float4(*(rs_allocation*)buf1847, *(uint32_t*)buf1848);
+    *(double*)buf1849 = rsGetElementAt_double(*(rs_allocation*)buf1850, *(uint32_t*)buf1851);
+    *(double2*)buf1852 = rsGetElementAt_double2(*(rs_allocation*)buf1853, *(uint32_t*)buf1854);
+    *(double3*)buf1855 = rsGetElementAt_double3(*(rs_allocation*)buf1856, *(uint32_t*)buf1857);
+    *(double4*)buf1858 = rsGetElementAt_double4(*(rs_allocation*)buf1859, *(uint32_t*)buf1860);
+    *(char*)buf1861 = rsGetElementAt_char(*(rs_allocation*)buf1862, *(uint32_t*)buf1863);
+    *(char2*)buf1864 = rsGetElementAt_char2(*(rs_allocation*)buf1865, *(uint32_t*)buf1866);
+    *(char3*)buf1867 = rsGetElementAt_char3(*(rs_allocation*)buf1868, *(uint32_t*)buf1869);
+    *(char4*)buf1870 = rsGetElementAt_char4(*(rs_allocation*)buf1871, *(uint32_t*)buf1872);
+    *(uchar*)buf1873 = rsGetElementAt_uchar(*(rs_allocation*)buf1874, *(uint32_t*)buf1875);
+    *(uchar2*)buf1876 = rsGetElementAt_uchar2(*(rs_allocation*)buf1877, *(uint32_t*)buf1878);
+    *(uchar3*)buf1879 = rsGetElementAt_uchar3(*(rs_allocation*)buf1880, *(uint32_t*)buf1881);
+    *(uchar4*)buf1882 = rsGetElementAt_uchar4(*(rs_allocation*)buf1883, *(uint32_t*)buf1884);
+    *(short*)buf1885 = rsGetElementAt_short(*(rs_allocation*)buf1886, *(uint32_t*)buf1887);
+    *(short2*)buf1888 = rsGetElementAt_short2(*(rs_allocation*)buf1889, *(uint32_t*)buf1890);
+    *(short3*)buf1891 = rsGetElementAt_short3(*(rs_allocation*)buf1892, *(uint32_t*)buf1893);
+    *(short4*)buf1894 = rsGetElementAt_short4(*(rs_allocation*)buf1895, *(uint32_t*)buf1896);
+    *(ushort*)buf1897 = rsGetElementAt_ushort(*(rs_allocation*)buf1898, *(uint32_t*)buf1899);
+    *(ushort2*)buf1900 = rsGetElementAt_ushort2(*(rs_allocation*)buf1901, *(uint32_t*)buf1902);
+    *(ushort3*)buf1903 = rsGetElementAt_ushort3(*(rs_allocation*)buf1904, *(uint32_t*)buf1905);
+    *(ushort4*)buf1906 = rsGetElementAt_ushort4(*(rs_allocation*)buf1907, *(uint32_t*)buf1908);
+    *(int*)buf1909 = rsGetElementAt_int(*(rs_allocation*)buf1910, *(uint32_t*)buf1911);
+    *(int2*)buf1912 = rsGetElementAt_int2(*(rs_allocation*)buf1913, *(uint32_t*)buf1914);
+    *(int3*)buf1915 = rsGetElementAt_int3(*(rs_allocation*)buf1916, *(uint32_t*)buf1917);
+    *(int4*)buf1918 = rsGetElementAt_int4(*(rs_allocation*)buf1919, *(uint32_t*)buf1920);
+    *(uint*)buf1921 = rsGetElementAt_uint(*(rs_allocation*)buf1922, *(uint32_t*)buf1923);
+    *(uint2*)buf1924 = rsGetElementAt_uint2(*(rs_allocation*)buf1925, *(uint32_t*)buf1926);
+    *(uint3*)buf1927 = rsGetElementAt_uint3(*(rs_allocation*)buf1928, *(uint32_t*)buf1929);
+    *(uint4*)buf1930 = rsGetElementAt_uint4(*(rs_allocation*)buf1931, *(uint32_t*)buf1932);
+    *(long*)buf1933 = rsGetElementAt_long(*(rs_allocation*)buf1934, *(uint32_t*)buf1935);
+    *(long2*)buf1936 = rsGetElementAt_long2(*(rs_allocation*)buf1937, *(uint32_t*)buf1938);
+    *(long3*)buf1939 = rsGetElementAt_long3(*(rs_allocation*)buf1940, *(uint32_t*)buf1941);
+    *(long4*)buf1942 = rsGetElementAt_long4(*(rs_allocation*)buf1943, *(uint32_t*)buf1944);
+    *(ulong*)buf1945 = rsGetElementAt_ulong(*(rs_allocation*)buf1946, *(uint32_t*)buf1947);
+    *(ulong2*)buf1948 = rsGetElementAt_ulong2(*(rs_allocation*)buf1949, *(uint32_t*)buf1950);
+    *(ulong3*)buf1951 = rsGetElementAt_ulong3(*(rs_allocation*)buf1952, *(uint32_t*)buf1953);
+    *(ulong4*)buf1954 = rsGetElementAt_ulong4(*(rs_allocation*)buf1955, *(uint32_t*)buf1956);
+    *(float*)buf1957 = rsGetElementAt_float(*(rs_allocation*)buf1958, *(uint32_t*)buf1959, *(uint32_t*)buf1960);
+    *(float2*)buf1961 = rsGetElementAt_float2(*(rs_allocation*)buf1962, *(uint32_t*)buf1963, *(uint32_t*)buf1964);
+    *(float3*)buf1965 = rsGetElementAt_float3(*(rs_allocation*)buf1966, *(uint32_t*)buf1967, *(uint32_t*)buf1968);
+    *(float4*)buf1969 = rsGetElementAt_float4(*(rs_allocation*)buf1970, *(uint32_t*)buf1971, *(uint32_t*)buf1972);
+    *(double*)buf1973 = rsGetElementAt_double(*(rs_allocation*)buf1974, *(uint32_t*)buf1975, *(uint32_t*)buf1976);
+    *(double2*)buf1977 = rsGetElementAt_double2(*(rs_allocation*)buf1978, *(uint32_t*)buf1979, *(uint32_t*)buf1980);
+    *(double3*)buf1981 = rsGetElementAt_double3(*(rs_allocation*)buf1982, *(uint32_t*)buf1983, *(uint32_t*)buf1984);
+    *(double4*)buf1985 = rsGetElementAt_double4(*(rs_allocation*)buf1986, *(uint32_t*)buf1987, *(uint32_t*)buf1988);
+    *(char*)buf1989 = rsGetElementAt_char(*(rs_allocation*)buf1990, *(uint32_t*)buf1991, *(uint32_t*)buf1992);
+    *(char2*)buf1993 = rsGetElementAt_char2(*(rs_allocation*)buf1994, *(uint32_t*)buf1995, *(uint32_t*)buf1996);
+    *(char3*)buf1997 = rsGetElementAt_char3(*(rs_allocation*)buf1998, *(uint32_t*)buf1999, *(uint32_t*)buf2000);
+    *(char4*)buf2001 = rsGetElementAt_char4(*(rs_allocation*)buf2002, *(uint32_t*)buf2003, *(uint32_t*)buf2004);
+    *(uchar*)buf2005 = rsGetElementAt_uchar(*(rs_allocation*)buf2006, *(uint32_t*)buf2007, *(uint32_t*)buf2008);
+    *(uchar2*)buf2009 = rsGetElementAt_uchar2(*(rs_allocation*)buf2010, *(uint32_t*)buf2011, *(uint32_t*)buf2012);
+    *(uchar3*)buf2013 = rsGetElementAt_uchar3(*(rs_allocation*)buf2014, *(uint32_t*)buf2015, *(uint32_t*)buf2016);
+    *(uchar4*)buf2017 = rsGetElementAt_uchar4(*(rs_allocation*)buf2018, *(uint32_t*)buf2019, *(uint32_t*)buf2020);
+    *(short*)buf2021 = rsGetElementAt_short(*(rs_allocation*)buf2022, *(uint32_t*)buf2023, *(uint32_t*)buf2024);
+    *(short2*)buf2025 = rsGetElementAt_short2(*(rs_allocation*)buf2026, *(uint32_t*)buf2027, *(uint32_t*)buf2028);
+    *(short3*)buf2029 = rsGetElementAt_short3(*(rs_allocation*)buf2030, *(uint32_t*)buf2031, *(uint32_t*)buf2032);
+    *(short4*)buf2033 = rsGetElementAt_short4(*(rs_allocation*)buf2034, *(uint32_t*)buf2035, *(uint32_t*)buf2036);
+    *(ushort*)buf2037 = rsGetElementAt_ushort(*(rs_allocation*)buf2038, *(uint32_t*)buf2039, *(uint32_t*)buf2040);
+    *(ushort2*)buf2041 = rsGetElementAt_ushort2(*(rs_allocation*)buf2042, *(uint32_t*)buf2043, *(uint32_t*)buf2044);
+    *(ushort3*)buf2045 = rsGetElementAt_ushort3(*(rs_allocation*)buf2046, *(uint32_t*)buf2047, *(uint32_t*)buf2048);
+    *(ushort4*)buf2049 = rsGetElementAt_ushort4(*(rs_allocation*)buf2050, *(uint32_t*)buf2051, *(uint32_t*)buf2052);
+    *(int*)buf2053 = rsGetElementAt_int(*(rs_allocation*)buf2054, *(uint32_t*)buf2055, *(uint32_t*)buf2056);
+    *(int2*)buf2057 = rsGetElementAt_int2(*(rs_allocation*)buf2058, *(uint32_t*)buf2059, *(uint32_t*)buf2060);
+    *(int3*)buf2061 = rsGetElementAt_int3(*(rs_allocation*)buf2062, *(uint32_t*)buf2063, *(uint32_t*)buf2064);
+    *(int4*)buf2065 = rsGetElementAt_int4(*(rs_allocation*)buf2066, *(uint32_t*)buf2067, *(uint32_t*)buf2068);
+    *(uint*)buf2069 = rsGetElementAt_uint(*(rs_allocation*)buf2070, *(uint32_t*)buf2071, *(uint32_t*)buf2072);
+    *(uint2*)buf2073 = rsGetElementAt_uint2(*(rs_allocation*)buf2074, *(uint32_t*)buf2075, *(uint32_t*)buf2076);
+    *(uint3*)buf2077 = rsGetElementAt_uint3(*(rs_allocation*)buf2078, *(uint32_t*)buf2079, *(uint32_t*)buf2080);
+    *(uint4*)buf2081 = rsGetElementAt_uint4(*(rs_allocation*)buf2082, *(uint32_t*)buf2083, *(uint32_t*)buf2084);
+    *(long*)buf2085 = rsGetElementAt_long(*(rs_allocation*)buf2086, *(uint32_t*)buf2087, *(uint32_t*)buf2088);
+    *(long2*)buf2089 = rsGetElementAt_long2(*(rs_allocation*)buf2090, *(uint32_t*)buf2091, *(uint32_t*)buf2092);
+    *(long3*)buf2093 = rsGetElementAt_long3(*(rs_allocation*)buf2094, *(uint32_t*)buf2095, *(uint32_t*)buf2096);
+    *(long4*)buf2097 = rsGetElementAt_long4(*(rs_allocation*)buf2098, *(uint32_t*)buf2099, *(uint32_t*)buf2100);
+    *(ulong*)buf2101 = rsGetElementAt_ulong(*(rs_allocation*)buf2102, *(uint32_t*)buf2103, *(uint32_t*)buf2104);
+    *(ulong2*)buf2105 = rsGetElementAt_ulong2(*(rs_allocation*)buf2106, *(uint32_t*)buf2107, *(uint32_t*)buf2108);
+    *(ulong3*)buf2109 = rsGetElementAt_ulong3(*(rs_allocation*)buf2110, *(uint32_t*)buf2111, *(uint32_t*)buf2112);
+    *(ulong4*)buf2113 = rsGetElementAt_ulong4(*(rs_allocation*)buf2114, *(uint32_t*)buf2115, *(uint32_t*)buf2116);
+    *(float*)buf2117 = rsGetElementAt_float(*(rs_allocation*)buf2118, *(uint32_t*)buf2119, *(uint32_t*)buf2120, *(uint32_t*)buf2121);
+    *(float2*)buf2122 = rsGetElementAt_float2(*(rs_allocation*)buf2123, *(uint32_t*)buf2124, *(uint32_t*)buf2125, *(uint32_t*)buf2126);
+    *(float3*)buf2127 = rsGetElementAt_float3(*(rs_allocation*)buf2128, *(uint32_t*)buf2129, *(uint32_t*)buf2130, *(uint32_t*)buf2131);
+    *(float4*)buf2132 = rsGetElementAt_float4(*(rs_allocation*)buf2133, *(uint32_t*)buf2134, *(uint32_t*)buf2135, *(uint32_t*)buf2136);
+    *(double*)buf2137 = rsGetElementAt_double(*(rs_allocation*)buf2138, *(uint32_t*)buf2139, *(uint32_t*)buf2140, *(uint32_t*)buf2141);
+    *(double2*)buf2142 = rsGetElementAt_double2(*(rs_allocation*)buf2143, *(uint32_t*)buf2144, *(uint32_t*)buf2145, *(uint32_t*)buf2146);
+    *(double3*)buf2147 = rsGetElementAt_double3(*(rs_allocation*)buf2148, *(uint32_t*)buf2149, *(uint32_t*)buf2150, *(uint32_t*)buf2151);
+    *(double4*)buf2152 = rsGetElementAt_double4(*(rs_allocation*)buf2153, *(uint32_t*)buf2154, *(uint32_t*)buf2155, *(uint32_t*)buf2156);
+    *(char*)buf2157 = rsGetElementAt_char(*(rs_allocation*)buf2158, *(uint32_t*)buf2159, *(uint32_t*)buf2160, *(uint32_t*)buf2161);
+    *(char2*)buf2162 = rsGetElementAt_char2(*(rs_allocation*)buf2163, *(uint32_t*)buf2164, *(uint32_t*)buf2165, *(uint32_t*)buf2166);
+    *(char3*)buf2167 = rsGetElementAt_char3(*(rs_allocation*)buf2168, *(uint32_t*)buf2169, *(uint32_t*)buf2170, *(uint32_t*)buf2171);
+    *(char4*)buf2172 = rsGetElementAt_char4(*(rs_allocation*)buf2173, *(uint32_t*)buf2174, *(uint32_t*)buf2175, *(uint32_t*)buf2176);
+    *(uchar*)buf2177 = rsGetElementAt_uchar(*(rs_allocation*)buf2178, *(uint32_t*)buf2179, *(uint32_t*)buf2180, *(uint32_t*)buf2181);
+    *(uchar2*)buf2182 = rsGetElementAt_uchar2(*(rs_allocation*)buf2183, *(uint32_t*)buf2184, *(uint32_t*)buf2185, *(uint32_t*)buf2186);
+    *(uchar3*)buf2187 = rsGetElementAt_uchar3(*(rs_allocation*)buf2188, *(uint32_t*)buf2189, *(uint32_t*)buf2190, *(uint32_t*)buf2191);
+    *(uchar4*)buf2192 = rsGetElementAt_uchar4(*(rs_allocation*)buf2193, *(uint32_t*)buf2194, *(uint32_t*)buf2195, *(uint32_t*)buf2196);
+    *(short*)buf2197 = rsGetElementAt_short(*(rs_allocation*)buf2198, *(uint32_t*)buf2199, *(uint32_t*)buf2200, *(uint32_t*)buf2201);
+    *(short2*)buf2202 = rsGetElementAt_short2(*(rs_allocation*)buf2203, *(uint32_t*)buf2204, *(uint32_t*)buf2205, *(uint32_t*)buf2206);
+    *(short3*)buf2207 = rsGetElementAt_short3(*(rs_allocation*)buf2208, *(uint32_t*)buf2209, *(uint32_t*)buf2210, *(uint32_t*)buf2211);
+    *(short4*)buf2212 = rsGetElementAt_short4(*(rs_allocation*)buf2213, *(uint32_t*)buf2214, *(uint32_t*)buf2215, *(uint32_t*)buf2216);
+    *(ushort*)buf2217 = rsGetElementAt_ushort(*(rs_allocation*)buf2218, *(uint32_t*)buf2219, *(uint32_t*)buf2220, *(uint32_t*)buf2221);
+    *(ushort2*)buf2222 = rsGetElementAt_ushort2(*(rs_allocation*)buf2223, *(uint32_t*)buf2224, *(uint32_t*)buf2225, *(uint32_t*)buf2226);
+    *(ushort3*)buf2227 = rsGetElementAt_ushort3(*(rs_allocation*)buf2228, *(uint32_t*)buf2229, *(uint32_t*)buf2230, *(uint32_t*)buf2231);
+    *(ushort4*)buf2232 = rsGetElementAt_ushort4(*(rs_allocation*)buf2233, *(uint32_t*)buf2234, *(uint32_t*)buf2235, *(uint32_t*)buf2236);
+    *(int*)buf2237 = rsGetElementAt_int(*(rs_allocation*)buf2238, *(uint32_t*)buf2239, *(uint32_t*)buf2240, *(uint32_t*)buf2241);
+    *(int2*)buf2242 = rsGetElementAt_int2(*(rs_allocation*)buf2243, *(uint32_t*)buf2244, *(uint32_t*)buf2245, *(uint32_t*)buf2246);
+    *(int3*)buf2247 = rsGetElementAt_int3(*(rs_allocation*)buf2248, *(uint32_t*)buf2249, *(uint32_t*)buf2250, *(uint32_t*)buf2251);
+    *(int4*)buf2252 = rsGetElementAt_int4(*(rs_allocation*)buf2253, *(uint32_t*)buf2254, *(uint32_t*)buf2255, *(uint32_t*)buf2256);
+    *(uint*)buf2257 = rsGetElementAt_uint(*(rs_allocation*)buf2258, *(uint32_t*)buf2259, *(uint32_t*)buf2260, *(uint32_t*)buf2261);
+    *(uint2*)buf2262 = rsGetElementAt_uint2(*(rs_allocation*)buf2263, *(uint32_t*)buf2264, *(uint32_t*)buf2265, *(uint32_t*)buf2266);
+    *(uint3*)buf2267 = rsGetElementAt_uint3(*(rs_allocation*)buf2268, *(uint32_t*)buf2269, *(uint32_t*)buf2270, *(uint32_t*)buf2271);
+    *(uint4*)buf2272 = rsGetElementAt_uint4(*(rs_allocation*)buf2273, *(uint32_t*)buf2274, *(uint32_t*)buf2275, *(uint32_t*)buf2276);
+    *(long*)buf2277 = rsGetElementAt_long(*(rs_allocation*)buf2278, *(uint32_t*)buf2279, *(uint32_t*)buf2280, *(uint32_t*)buf2281);
+    *(long2*)buf2282 = rsGetElementAt_long2(*(rs_allocation*)buf2283, *(uint32_t*)buf2284, *(uint32_t*)buf2285, *(uint32_t*)buf2286);
+    *(long3*)buf2287 = rsGetElementAt_long3(*(rs_allocation*)buf2288, *(uint32_t*)buf2289, *(uint32_t*)buf2290, *(uint32_t*)buf2291);
+    *(long4*)buf2292 = rsGetElementAt_long4(*(rs_allocation*)buf2293, *(uint32_t*)buf2294, *(uint32_t*)buf2295, *(uint32_t*)buf2296);
+    *(ulong*)buf2297 = rsGetElementAt_ulong(*(rs_allocation*)buf2298, *(uint32_t*)buf2299, *(uint32_t*)buf2300, *(uint32_t*)buf2301);
+    *(ulong2*)buf2302 = rsGetElementAt_ulong2(*(rs_allocation*)buf2303, *(uint32_t*)buf2304, *(uint32_t*)buf2305, *(uint32_t*)buf2306);
+    *(ulong3*)buf2307 = rsGetElementAt_ulong3(*(rs_allocation*)buf2308, *(uint32_t*)buf2309, *(uint32_t*)buf2310, *(uint32_t*)buf2311);
+    *(ulong4*)buf2312 = rsGetElementAt_ulong4(*(rs_allocation*)buf2313, *(uint32_t*)buf2314, *(uint32_t*)buf2315, *(uint32_t*)buf2316);
+    *(uchar*)buf2317 = rsGetElementAtYuv_uchar_U(*(rs_allocation*)buf2318, *(uint32_t*)buf2319, *(uint32_t*)buf2320);
+    *(uchar*)buf2321 = rsGetElementAtYuv_uchar_V(*(rs_allocation*)buf2322, *(uint32_t*)buf2323, *(uint32_t*)buf2324);
+    *(uchar*)buf2325 = rsGetElementAtYuv_uchar_Y(*(rs_allocation*)buf2326, *(uint32_t*)buf2327, *(uint32_t*)buf2328);
+    *(bool*)buf2329 = rsIsObject(*(rs_element*)buf2330);
+    *(bool*)buf2331 = rsIsObject(*(rs_type*)buf2332);
+    *(bool*)buf2333 = rsIsObject(*(rs_allocation*)buf2334);
+    *(bool*)buf2335 = rsIsObject(*(rs_sampler*)buf2336);
+    *(bool*)buf2337 = rsIsObject(*(rs_script*)buf2338);
+#ifndef __LP64__
+    *(bool*)buf2339 = rsIsObject(*(rs_mesh*)buf2340);
+    *(bool*)buf2341 = rsIsObject(*(rs_program_fragment*)buf2342);
+    *(bool*)buf2343 = rsIsObject(*(rs_program_vertex*)buf2344);
+    *(bool*)buf2345 = rsIsObject(*(rs_program_raster*)buf2346);
+    *(bool*)buf2347 = rsIsObject(*(rs_program_store*)buf2348);
+    *(bool*)buf2349 = rsIsObject(*(rs_font*)buf2350);
+#endif
+    *(bool*)buf2351 = rsIsSphereInFrustum((float4*) buf2352, (float4*) buf2353, (float4*) buf2354, (float4*) buf2355, (float4*) buf2356, (float4*) buf2357, (float4*) buf2358);
+    *(rs_tm**)buf2359 = rsLocaltime((rs_tm*) buf2360, (const rs_time_t*) buf2361);
+    *(float*)buf2362 = rsMatrixGet((const rs_matrix4x4*) buf2363, *(uint32_t*)buf2364, *(uint32_t*)buf2365);
+    *(float*)buf2366 = rsMatrixGet((const rs_matrix3x3*) buf2367, *(uint32_t*)buf2368, *(uint32_t*)buf2369);
+    *(float*)buf2370 = rsMatrixGet((const rs_matrix2x2*) buf2371, *(uint32_t*)buf2372, *(uint32_t*)buf2373);
+    *(bool*)buf2374 = rsMatrixInverse((rs_matrix4x4*) buf2375);
+    *(bool*)buf2376 = rsMatrixInverseTranspose((rs_matrix4x4*) buf2377);
+    rsMatrixLoad((rs_matrix4x4*) buf2378, (const float*) buf2379);
+    rsMatrixLoad((rs_matrix3x3*) buf2380, (const float*) buf2381);
+    rsMatrixLoad((rs_matrix2x2*) buf2382, (const float*) buf2383);
+    rsMatrixLoad((rs_matrix4x4*) buf2384, (const rs_matrix4x4*) buf2385);
+    rsMatrixLoad((rs_matrix3x3*) buf2386, (const rs_matrix3x3*) buf2387);
+    rsMatrixLoad((rs_matrix2x2*) buf2388, (const rs_matrix2x2*) buf2389);
+    rsMatrixLoad((rs_matrix4x4*) buf2390, (const rs_matrix3x3*) buf2391);
+    rsMatrixLoad((rs_matrix4x4*) buf2392, (const rs_matrix2x2*) buf2393);
+    rsMatrixLoadFrustum((rs_matrix4x4*) buf2394, *(float*)buf2395, *(float*)buf2396, *(float*)buf2397, *(float*)buf2398, *(float*)buf2399, *(float*)buf2400);
+    rsMatrixLoadIdentity((rs_matrix4x4*) buf2401);
+    rsMatrixLoadIdentity((rs_matrix3x3*) buf2402);
+    rsMatrixLoadIdentity((rs_matrix2x2*) buf2403);
+    rsMatrixLoadMultiply((rs_matrix4x4*) buf2404, (const rs_matrix4x4*) buf2405, (const rs_matrix4x4*) buf2406);
+    rsMatrixLoadMultiply((rs_matrix3x3*) buf2407, (const rs_matrix3x3*) buf2408, (const rs_matrix3x3*) buf2409);
+    rsMatrixLoadMultiply((rs_matrix2x2*) buf2410, (const rs_matrix2x2*) buf2411, (const rs_matrix2x2*) buf2412);
+    rsMatrixLoadOrtho((rs_matrix4x4*) buf2413, *(float*)buf2414, *(float*)buf2415, *(float*)buf2416, *(float*)buf2417, *(float*)buf2418, *(float*)buf2419);
+    rsMatrixLoadPerspective((rs_matrix4x4*) buf2420, *(float*)buf2421, *(float*)buf2422, *(float*)buf2423, *(float*)buf2424);
+    rsMatrixLoadRotate((rs_matrix4x4*) buf2425, *(float*)buf2426, *(float*)buf2427, *(float*)buf2428, *(float*)buf2429);
+    rsMatrixLoadScale((rs_matrix4x4*) buf2430, *(float*)buf2431, *(float*)buf2432, *(float*)buf2433);
+    rsMatrixLoadTranslate((rs_matrix4x4*) buf2434, *(float*)buf2435, *(float*)buf2436, *(float*)buf2437);
+    rsMatrixMultiply((rs_matrix4x4*) buf2438, (const rs_matrix4x4*) buf2439);
+    rsMatrixMultiply((rs_matrix3x3*) buf2440, (const rs_matrix3x3*) buf2441);
+    rsMatrixMultiply((rs_matrix2x2*) buf2442, (const rs_matrix2x2*) buf2443);
+    *(float4*)buf2444 = rsMatrixMultiply((const rs_matrix4x4*) buf2445, *(float4*)buf2446);
+    *(float4*)buf2447 = rsMatrixMultiply((const rs_matrix4x4*) buf2448, *(float3*)buf2449);
+    *(float4*)buf2450 = rsMatrixMultiply((const rs_matrix4x4*) buf2451, *(float2*)buf2452);
+    *(float3*)buf2453 = rsMatrixMultiply((const rs_matrix3x3*) buf2454, *(float3*)buf2455);
+    *(float3*)buf2456 = rsMatrixMultiply((const rs_matrix3x3*) buf2457, *(float2*)buf2458);
+    *(float2*)buf2459 = rsMatrixMultiply((const rs_matrix2x2*) buf2460, *(float2*)buf2461);
+    rsMatrixRotate((rs_matrix4x4*) buf2462, *(float*)buf2463, *(float*)buf2464, *(float*)buf2465, *(float*)buf2466);
+    rsMatrixScale((rs_matrix4x4*) buf2467, *(float*)buf2468, *(float*)buf2469, *(float*)buf2470);
+    rsMatrixSet((rs_matrix4x4*) buf2471, *(uint32_t*)buf2472, *(uint32_t*)buf2473, *(float*)buf2474);
+    rsMatrixSet((rs_matrix3x3*) buf2475, *(uint32_t*)buf2476, *(uint32_t*)buf2477, *(float*)buf2478);
+    rsMatrixSet((rs_matrix2x2*) buf2479, *(uint32_t*)buf2480, *(uint32_t*)buf2481, *(float*)buf2482);
+    rsMatrixTranslate((rs_matrix4x4*) buf2483, *(float*)buf2484, *(float*)buf2485, *(float*)buf2486);
+    rsMatrixTranspose((rs_matrix4x4*) buf2487);
+    rsMatrixTranspose((rs_matrix3x3*) buf2488);
+    rsMatrixTranspose((rs_matrix2x2*) buf2489);
+    *(uchar4*)buf2490 = rsPackColorTo8888(*(float*)buf2491, *(float*)buf2492, *(float*)buf2493);
+    *(uchar4*)buf2494 = rsPackColorTo8888(*(float*)buf2495, *(float*)buf2496, *(float*)buf2497, *(float*)buf2498);
+    *(uchar4*)buf2499 = rsPackColorTo8888(*(float3*)buf2500);
+    *(uchar4*)buf2501 = rsPackColorTo8888(*(float4*)buf2502);
+    rsQuaternionAdd((rs_quaternion*) buf2503, (const rs_quaternion*) buf2504);
+    rsQuaternionConjugate((rs_quaternion*) buf2505);
+    *(float*)buf2506 = rsQuaternionDot((const rs_quaternion*) buf2507, (const rs_quaternion*) buf2508);
+    rsQuaternionGetMatrixUnit((rs_matrix4x4*) buf2509, (const rs_quaternion*) buf2510);
+    rsQuaternionLoadRotate((rs_quaternion*) buf2511, *(float*)buf2512, *(float*)buf2513, *(float*)buf2514, *(float*)buf2515);
+    rsQuaternionLoadRotateUnit((rs_quaternion*) buf2516, *(float*)buf2517, *(float*)buf2518, *(float*)buf2519, *(float*)buf2520);
+    rsQuaternionMultiply((rs_quaternion*) buf2521, *(float*)buf2522);
+    rsQuaternionMultiply((rs_quaternion*) buf2523, (const rs_quaternion*) buf2524);
+    rsQuaternionNormalize((rs_quaternion*) buf2525);
+    rsQuaternionSet((rs_quaternion*) buf2526, *(float*)buf2527, *(float*)buf2528, *(float*)buf2529, *(float*)buf2530);
+    rsQuaternionSet((rs_quaternion*) buf2531, (const rs_quaternion*) buf2532);
+    rsQuaternionSlerp((rs_quaternion*) buf2533, (const rs_quaternion*) buf2534, (const rs_quaternion*) buf2535, *(float*)buf2536);
+    *(int*)buf2537 = rsRand(*(int*)buf2538);
+    *(int*)buf2539 = rsRand(*(int*)buf2540, *(int*)buf2541);
+    *(float*)buf2542 = rsRand(*(float*)buf2543);
+    *(float*)buf2544 = rsRand(*(float*)buf2545, *(float*)buf2546);
+    *(float4*)buf2547 = rsSample(*(rs_allocation*)buf2548, *(rs_sampler*)buf2549, *(float*)buf2550);
+    *(float4*)buf2551 = rsSample(*(rs_allocation*)buf2552, *(rs_sampler*)buf2553, *(float*)buf2554, *(float*)buf2555);
+    *(float4*)buf2556 = rsSample(*(rs_allocation*)buf2557, *(rs_sampler*)buf2558, *(float2*)buf2559);
+    *(float4*)buf2560 = rsSample(*(rs_allocation*)buf2561, *(rs_sampler*)buf2562, *(float2*)buf2563, *(float*)buf2564);
+    *(float*)buf2565 = rsSamplerGetAnisotropy(*(rs_sampler*)buf2566);
+    *(rs_sampler_value*)buf2567 = rsSamplerGetMagnification(*(rs_sampler*)buf2568);
+    *(rs_sampler_value*)buf2569 = rsSamplerGetMinification(*(rs_sampler*)buf2570);
+    *(rs_sampler_value*)buf2571 = rsSamplerGetWrapS(*(rs_sampler*)buf2572);
+    *(rs_sampler_value*)buf2573 = rsSamplerGetWrapT(*(rs_sampler*)buf2574);
+    *(bool*)buf2575 = rsSendToClient(*(int*)buf2576);
+    *(bool*)buf2577 = rsSendToClient(*(int*)buf2578, (const void*) buf2579, *(uint*)buf2580);
+    rsSendToClientBlocking(*(int*)buf2581);
+    rsSendToClientBlocking(*(int*)buf2582, (const void*) buf2583, *(uint*)buf2584);
+    rsSetElementAt(*(rs_allocation*)buf2585, (void*) buf2586, *(uint32_t*)buf2587);
+    rsSetElementAt(*(rs_allocation*)buf2588, (void*) buf2589, *(uint32_t*)buf2590, *(uint32_t*)buf2591);
+    rsSetElementAt_float(*(rs_allocation*)buf2592, *(float*)buf2593, *(uint32_t*)buf2594);
+    rsSetElementAt_float2(*(rs_allocation*)buf2595, *(float2*)buf2596, *(uint32_t*)buf2597);
+    rsSetElementAt_float3(*(rs_allocation*)buf2598, *(float3*)buf2599, *(uint32_t*)buf2600);
+    rsSetElementAt_float4(*(rs_allocation*)buf2601, *(float4*)buf2602, *(uint32_t*)buf2603);
+    rsSetElementAt_double(*(rs_allocation*)buf2604, *(double*)buf2605, *(uint32_t*)buf2606);
+    rsSetElementAt_double2(*(rs_allocation*)buf2607, *(double2*)buf2608, *(uint32_t*)buf2609);
+    rsSetElementAt_double3(*(rs_allocation*)buf2610, *(double3*)buf2611, *(uint32_t*)buf2612);
+    rsSetElementAt_double4(*(rs_allocation*)buf2613, *(double4*)buf2614, *(uint32_t*)buf2615);
+    rsSetElementAt_char(*(rs_allocation*)buf2616, *(char*)buf2617, *(uint32_t*)buf2618);
+    rsSetElementAt_char2(*(rs_allocation*)buf2619, *(char2*)buf2620, *(uint32_t*)buf2621);
+    rsSetElementAt_char3(*(rs_allocation*)buf2622, *(char3*)buf2623, *(uint32_t*)buf2624);
+    rsSetElementAt_char4(*(rs_allocation*)buf2625, *(char4*)buf2626, *(uint32_t*)buf2627);
+    rsSetElementAt_uchar(*(rs_allocation*)buf2628, *(uchar*)buf2629, *(uint32_t*)buf2630);
+    rsSetElementAt_uchar2(*(rs_allocation*)buf2631, *(uchar2*)buf2632, *(uint32_t*)buf2633);
+    rsSetElementAt_uchar3(*(rs_allocation*)buf2634, *(uchar3*)buf2635, *(uint32_t*)buf2636);
+    rsSetElementAt_uchar4(*(rs_allocation*)buf2637, *(uchar4*)buf2638, *(uint32_t*)buf2639);
+    rsSetElementAt_short(*(rs_allocation*)buf2640, *(short*)buf2641, *(uint32_t*)buf2642);
+    rsSetElementAt_short2(*(rs_allocation*)buf2643, *(short2*)buf2644, *(uint32_t*)buf2645);
+    rsSetElementAt_short3(*(rs_allocation*)buf2646, *(short3*)buf2647, *(uint32_t*)buf2648);
+    rsSetElementAt_short4(*(rs_allocation*)buf2649, *(short4*)buf2650, *(uint32_t*)buf2651);
+    rsSetElementAt_ushort(*(rs_allocation*)buf2652, *(ushort*)buf2653, *(uint32_t*)buf2654);
+    rsSetElementAt_ushort2(*(rs_allocation*)buf2655, *(ushort2*)buf2656, *(uint32_t*)buf2657);
+    rsSetElementAt_ushort3(*(rs_allocation*)buf2658, *(ushort3*)buf2659, *(uint32_t*)buf2660);
+    rsSetElementAt_ushort4(*(rs_allocation*)buf2661, *(ushort4*)buf2662, *(uint32_t*)buf2663);
+    rsSetElementAt_int(*(rs_allocation*)buf2664, *(int*)buf2665, *(uint32_t*)buf2666);
+    rsSetElementAt_int2(*(rs_allocation*)buf2667, *(int2*)buf2668, *(uint32_t*)buf2669);
+    rsSetElementAt_int3(*(rs_allocation*)buf2670, *(int3*)buf2671, *(uint32_t*)buf2672);
+    rsSetElementAt_int4(*(rs_allocation*)buf2673, *(int4*)buf2674, *(uint32_t*)buf2675);
+    rsSetElementAt_uint(*(rs_allocation*)buf2676, *(uint*)buf2677, *(uint32_t*)buf2678);
+    rsSetElementAt_uint2(*(rs_allocation*)buf2679, *(uint2*)buf2680, *(uint32_t*)buf2681);
+    rsSetElementAt_uint3(*(rs_allocation*)buf2682, *(uint3*)buf2683, *(uint32_t*)buf2684);
+    rsSetElementAt_uint4(*(rs_allocation*)buf2685, *(uint4*)buf2686, *(uint32_t*)buf2687);
+    rsSetElementAt_long(*(rs_allocation*)buf2688, *(long*)buf2689, *(uint32_t*)buf2690);
+    rsSetElementAt_long2(*(rs_allocation*)buf2691, *(long2*)buf2692, *(uint32_t*)buf2693);
+    rsSetElementAt_long3(*(rs_allocation*)buf2694, *(long3*)buf2695, *(uint32_t*)buf2696);
+    rsSetElementAt_long4(*(rs_allocation*)buf2697, *(long4*)buf2698, *(uint32_t*)buf2699);
+    rsSetElementAt_ulong(*(rs_allocation*)buf2700, *(ulong*)buf2701, *(uint32_t*)buf2702);
+    rsSetElementAt_ulong2(*(rs_allocation*)buf2703, *(ulong2*)buf2704, *(uint32_t*)buf2705);
+    rsSetElementAt_ulong3(*(rs_allocation*)buf2706, *(ulong3*)buf2707, *(uint32_t*)buf2708);
+    rsSetElementAt_ulong4(*(rs_allocation*)buf2709, *(ulong4*)buf2710, *(uint32_t*)buf2711);
+    rsSetElementAt_float(*(rs_allocation*)buf2712, *(float*)buf2713, *(uint32_t*)buf2714, *(uint32_t*)buf2715);
+    rsSetElementAt_float2(*(rs_allocation*)buf2716, *(float2*)buf2717, *(uint32_t*)buf2718, *(uint32_t*)buf2719);
+    rsSetElementAt_float3(*(rs_allocation*)buf2720, *(float3*)buf2721, *(uint32_t*)buf2722, *(uint32_t*)buf2723);
+    rsSetElementAt_float4(*(rs_allocation*)buf2724, *(float4*)buf2725, *(uint32_t*)buf2726, *(uint32_t*)buf2727);
+    rsSetElementAt_double(*(rs_allocation*)buf2728, *(double*)buf2729, *(uint32_t*)buf2730, *(uint32_t*)buf2731);
+    rsSetElementAt_double2(*(rs_allocation*)buf2732, *(double2*)buf2733, *(uint32_t*)buf2734, *(uint32_t*)buf2735);
+    rsSetElementAt_double3(*(rs_allocation*)buf2736, *(double3*)buf2737, *(uint32_t*)buf2738, *(uint32_t*)buf2739);
+    rsSetElementAt_double4(*(rs_allocation*)buf2740, *(double4*)buf2741, *(uint32_t*)buf2742, *(uint32_t*)buf2743);
+    rsSetElementAt_char(*(rs_allocation*)buf2744, *(char*)buf2745, *(uint32_t*)buf2746, *(uint32_t*)buf2747);
+    rsSetElementAt_char2(*(rs_allocation*)buf2748, *(char2*)buf2749, *(uint32_t*)buf2750, *(uint32_t*)buf2751);
+    rsSetElementAt_char3(*(rs_allocation*)buf2752, *(char3*)buf2753, *(uint32_t*)buf2754, *(uint32_t*)buf2755);
+    rsSetElementAt_char4(*(rs_allocation*)buf2756, *(char4*)buf2757, *(uint32_t*)buf2758, *(uint32_t*)buf2759);
+    rsSetElementAt_uchar(*(rs_allocation*)buf2760, *(uchar*)buf2761, *(uint32_t*)buf2762, *(uint32_t*)buf2763);
+    rsSetElementAt_uchar2(*(rs_allocation*)buf2764, *(uchar2*)buf2765, *(uint32_t*)buf2766, *(uint32_t*)buf2767);
+    rsSetElementAt_uchar3(*(rs_allocation*)buf2768, *(uchar3*)buf2769, *(uint32_t*)buf2770, *(uint32_t*)buf2771);
+    rsSetElementAt_uchar4(*(rs_allocation*)buf2772, *(uchar4*)buf2773, *(uint32_t*)buf2774, *(uint32_t*)buf2775);
+    rsSetElementAt_short(*(rs_allocation*)buf2776, *(short*)buf2777, *(uint32_t*)buf2778, *(uint32_t*)buf2779);
+    rsSetElementAt_short2(*(rs_allocation*)buf2780, *(short2*)buf2781, *(uint32_t*)buf2782, *(uint32_t*)buf2783);
+    rsSetElementAt_short3(*(rs_allocation*)buf2784, *(short3*)buf2785, *(uint32_t*)buf2786, *(uint32_t*)buf2787);
+    rsSetElementAt_short4(*(rs_allocation*)buf2788, *(short4*)buf2789, *(uint32_t*)buf2790, *(uint32_t*)buf2791);
+    rsSetElementAt_ushort(*(rs_allocation*)buf2792, *(ushort*)buf2793, *(uint32_t*)buf2794, *(uint32_t*)buf2795);
+    rsSetElementAt_ushort2(*(rs_allocation*)buf2796, *(ushort2*)buf2797, *(uint32_t*)buf2798, *(uint32_t*)buf2799);
+    rsSetElementAt_ushort3(*(rs_allocation*)buf2800, *(ushort3*)buf2801, *(uint32_t*)buf2802, *(uint32_t*)buf2803);
+    rsSetElementAt_ushort4(*(rs_allocation*)buf2804, *(ushort4*)buf2805, *(uint32_t*)buf2806, *(uint32_t*)buf2807);
+    rsSetElementAt_int(*(rs_allocation*)buf2808, *(int*)buf2809, *(uint32_t*)buf2810, *(uint32_t*)buf2811);
+    rsSetElementAt_int2(*(rs_allocation*)buf2812, *(int2*)buf2813, *(uint32_t*)buf2814, *(uint32_t*)buf2815);
+    rsSetElementAt_int3(*(rs_allocation*)buf2816, *(int3*)buf2817, *(uint32_t*)buf2818, *(uint32_t*)buf2819);
+    rsSetElementAt_int4(*(rs_allocation*)buf2820, *(int4*)buf2821, *(uint32_t*)buf2822, *(uint32_t*)buf2823);
+    rsSetElementAt_uint(*(rs_allocation*)buf2824, *(uint*)buf2825, *(uint32_t*)buf2826, *(uint32_t*)buf2827);
+    rsSetElementAt_uint2(*(rs_allocation*)buf2828, *(uint2*)buf2829, *(uint32_t*)buf2830, *(uint32_t*)buf2831);
+    rsSetElementAt_uint3(*(rs_allocation*)buf2832, *(uint3*)buf2833, *(uint32_t*)buf2834, *(uint32_t*)buf2835);
+    rsSetElementAt_uint4(*(rs_allocation*)buf2836, *(uint4*)buf2837, *(uint32_t*)buf2838, *(uint32_t*)buf2839);
+    rsSetElementAt_long(*(rs_allocation*)buf2840, *(long*)buf2841, *(uint32_t*)buf2842, *(uint32_t*)buf2843);
+    rsSetElementAt_long2(*(rs_allocation*)buf2844, *(long2*)buf2845, *(uint32_t*)buf2846, *(uint32_t*)buf2847);
+    rsSetElementAt_long3(*(rs_allocation*)buf2848, *(long3*)buf2849, *(uint32_t*)buf2850, *(uint32_t*)buf2851);
+    rsSetElementAt_long4(*(rs_allocation*)buf2852, *(long4*)buf2853, *(uint32_t*)buf2854, *(uint32_t*)buf2855);
+    rsSetElementAt_ulong(*(rs_allocation*)buf2856, *(ulong*)buf2857, *(uint32_t*)buf2858, *(uint32_t*)buf2859);
+    rsSetElementAt_ulong2(*(rs_allocation*)buf2860, *(ulong2*)buf2861, *(uint32_t*)buf2862, *(uint32_t*)buf2863);
+    rsSetElementAt_ulong3(*(rs_allocation*)buf2864, *(ulong3*)buf2865, *(uint32_t*)buf2866, *(uint32_t*)buf2867);
+    rsSetElementAt_ulong4(*(rs_allocation*)buf2868, *(ulong4*)buf2869, *(uint32_t*)buf2870, *(uint32_t*)buf2871);
+    rsSetElementAt_float(*(rs_allocation*)buf2872, *(float*)buf2873, *(uint32_t*)buf2874, *(uint32_t*)buf2875, *(uint32_t*)buf2876);
+    rsSetElementAt_float2(*(rs_allocation*)buf2877, *(float2*)buf2878, *(uint32_t*)buf2879, *(uint32_t*)buf2880, *(uint32_t*)buf2881);
+    rsSetElementAt_float3(*(rs_allocation*)buf2882, *(float3*)buf2883, *(uint32_t*)buf2884, *(uint32_t*)buf2885, *(uint32_t*)buf2886);
+    rsSetElementAt_float4(*(rs_allocation*)buf2887, *(float4*)buf2888, *(uint32_t*)buf2889, *(uint32_t*)buf2890, *(uint32_t*)buf2891);
+    rsSetElementAt_double(*(rs_allocation*)buf2892, *(double*)buf2893, *(uint32_t*)buf2894, *(uint32_t*)buf2895, *(uint32_t*)buf2896);
+    rsSetElementAt_double2(*(rs_allocation*)buf2897, *(double2*)buf2898, *(uint32_t*)buf2899, *(uint32_t*)buf2900, *(uint32_t*)buf2901);
+    rsSetElementAt_double3(*(rs_allocation*)buf2902, *(double3*)buf2903, *(uint32_t*)buf2904, *(uint32_t*)buf2905, *(uint32_t*)buf2906);
+    rsSetElementAt_double4(*(rs_allocation*)buf2907, *(double4*)buf2908, *(uint32_t*)buf2909, *(uint32_t*)buf2910, *(uint32_t*)buf2911);
+    rsSetElementAt_char(*(rs_allocation*)buf2912, *(char*)buf2913, *(uint32_t*)buf2914, *(uint32_t*)buf2915, *(uint32_t*)buf2916);
+    rsSetElementAt_char2(*(rs_allocation*)buf2917, *(char2*)buf2918, *(uint32_t*)buf2919, *(uint32_t*)buf2920, *(uint32_t*)buf2921);
+    rsSetElementAt_char3(*(rs_allocation*)buf2922, *(char3*)buf2923, *(uint32_t*)buf2924, *(uint32_t*)buf2925, *(uint32_t*)buf2926);
+    rsSetElementAt_char4(*(rs_allocation*)buf2927, *(char4*)buf2928, *(uint32_t*)buf2929, *(uint32_t*)buf2930, *(uint32_t*)buf2931);
+    rsSetElementAt_uchar(*(rs_allocation*)buf2932, *(uchar*)buf2933, *(uint32_t*)buf2934, *(uint32_t*)buf2935, *(uint32_t*)buf2936);
+    rsSetElementAt_uchar2(*(rs_allocation*)buf2937, *(uchar2*)buf2938, *(uint32_t*)buf2939, *(uint32_t*)buf2940, *(uint32_t*)buf2941);
+    rsSetElementAt_uchar3(*(rs_allocation*)buf2942, *(uchar3*)buf2943, *(uint32_t*)buf2944, *(uint32_t*)buf2945, *(uint32_t*)buf2946);
+    rsSetElementAt_uchar4(*(rs_allocation*)buf2947, *(uchar4*)buf2948, *(uint32_t*)buf2949, *(uint32_t*)buf2950, *(uint32_t*)buf2951);
+    rsSetElementAt_short(*(rs_allocation*)buf2952, *(short*)buf2953, *(uint32_t*)buf2954, *(uint32_t*)buf2955, *(uint32_t*)buf2956);
+    rsSetElementAt_short2(*(rs_allocation*)buf2957, *(short2*)buf2958, *(uint32_t*)buf2959, *(uint32_t*)buf2960, *(uint32_t*)buf2961);
+    rsSetElementAt_short3(*(rs_allocation*)buf2962, *(short3*)buf2963, *(uint32_t*)buf2964, *(uint32_t*)buf2965, *(uint32_t*)buf2966);
+    rsSetElementAt_short4(*(rs_allocation*)buf2967, *(short4*)buf2968, *(uint32_t*)buf2969, *(uint32_t*)buf2970, *(uint32_t*)buf2971);
+    rsSetElementAt_ushort(*(rs_allocation*)buf2972, *(ushort*)buf2973, *(uint32_t*)buf2974, *(uint32_t*)buf2975, *(uint32_t*)buf2976);
+    rsSetElementAt_ushort2(*(rs_allocation*)buf2977, *(ushort2*)buf2978, *(uint32_t*)buf2979, *(uint32_t*)buf2980, *(uint32_t*)buf2981);
+    rsSetElementAt_ushort3(*(rs_allocation*)buf2982, *(ushort3*)buf2983, *(uint32_t*)buf2984, *(uint32_t*)buf2985, *(uint32_t*)buf2986);
+    rsSetElementAt_ushort4(*(rs_allocation*)buf2987, *(ushort4*)buf2988, *(uint32_t*)buf2989, *(uint32_t*)buf2990, *(uint32_t*)buf2991);
+    rsSetElementAt_int(*(rs_allocation*)buf2992, *(int*)buf2993, *(uint32_t*)buf2994, *(uint32_t*)buf2995, *(uint32_t*)buf2996);
+    rsSetElementAt_int2(*(rs_allocation*)buf2997, *(int2*)buf2998, *(uint32_t*)buf2999, *(uint32_t*)buf3000, *(uint32_t*)buf3001);
+    rsSetElementAt_int3(*(rs_allocation*)buf3002, *(int3*)buf3003, *(uint32_t*)buf3004, *(uint32_t*)buf3005, *(uint32_t*)buf3006);
+    rsSetElementAt_int4(*(rs_allocation*)buf3007, *(int4*)buf3008, *(uint32_t*)buf3009, *(uint32_t*)buf3010, *(uint32_t*)buf3011);
+    rsSetElementAt_uint(*(rs_allocation*)buf3012, *(uint*)buf3013, *(uint32_t*)buf3014, *(uint32_t*)buf3015, *(uint32_t*)buf3016);
+    rsSetElementAt_uint2(*(rs_allocation*)buf3017, *(uint2*)buf3018, *(uint32_t*)buf3019, *(uint32_t*)buf3020, *(uint32_t*)buf3021);
+    rsSetElementAt_uint3(*(rs_allocation*)buf3022, *(uint3*)buf3023, *(uint32_t*)buf3024, *(uint32_t*)buf3025, *(uint32_t*)buf3026);
+    rsSetElementAt_uint4(*(rs_allocation*)buf3027, *(uint4*)buf3028, *(uint32_t*)buf3029, *(uint32_t*)buf3030, *(uint32_t*)buf3031);
+    rsSetElementAt_long(*(rs_allocation*)buf3032, *(long*)buf3033, *(uint32_t*)buf3034, *(uint32_t*)buf3035, *(uint32_t*)buf3036);
+    rsSetElementAt_long2(*(rs_allocation*)buf3037, *(long2*)buf3038, *(uint32_t*)buf3039, *(uint32_t*)buf3040, *(uint32_t*)buf3041);
+    rsSetElementAt_long3(*(rs_allocation*)buf3042, *(long3*)buf3043, *(uint32_t*)buf3044, *(uint32_t*)buf3045, *(uint32_t*)buf3046);
+    rsSetElementAt_long4(*(rs_allocation*)buf3047, *(long4*)buf3048, *(uint32_t*)buf3049, *(uint32_t*)buf3050, *(uint32_t*)buf3051);
+    rsSetElementAt_ulong(*(rs_allocation*)buf3052, *(ulong*)buf3053, *(uint32_t*)buf3054, *(uint32_t*)buf3055, *(uint32_t*)buf3056);
+    rsSetElementAt_ulong2(*(rs_allocation*)buf3057, *(ulong2*)buf3058, *(uint32_t*)buf3059, *(uint32_t*)buf3060, *(uint32_t*)buf3061);
+    rsSetElementAt_ulong3(*(rs_allocation*)buf3062, *(ulong3*)buf3063, *(uint32_t*)buf3064, *(uint32_t*)buf3065, *(uint32_t*)buf3066);
+    rsSetElementAt_ulong4(*(rs_allocation*)buf3067, *(ulong4*)buf3068, *(uint32_t*)buf3069, *(uint32_t*)buf3070, *(uint32_t*)buf3071);
+    rsSetObject((rs_element*) buf3072, *(rs_element*)buf3073);
+    rsSetObject((rs_type*) buf3074, *(rs_type*)buf3075);
+    rsSetObject((rs_allocation*) buf3076, *(rs_allocation*)buf3077);
+    rsSetObject((rs_sampler*) buf3078, *(rs_sampler*)buf3079);
+    rsSetObject((rs_script*) buf3080, *(rs_script*)buf3081);
+#ifndef __LP64__
+    rsSetObject((rs_mesh*) buf3082, *(rs_mesh*)buf3083);
+    rsSetObject((rs_program_fragment*) buf3084, *(rs_program_fragment*)buf3085);
+    rsSetObject((rs_program_vertex*) buf3086, *(rs_program_vertex*)buf3087);
+    rsSetObject((rs_program_raster*) buf3088, *(rs_program_raster*)buf3089);
+    rsSetObject((rs_program_store*) buf3090, *(rs_program_store*)buf3091);
+    rsSetObject((rs_font*) buf3092, *(rs_font*)buf3093);
+#endif
+    *(rs_time_t*)buf3094 = rsTime((rs_time_t*) buf3095);
+    *(float4*)buf3096 = rsUnpackColor8888(*(uchar4*)buf3097);
+    *(int64_t*)buf3098 = rsUptimeMillis();
+    *(int64_t*)buf3099 = rsUptimeNanos();
+    *(float4*)buf3100 = rsYuvToRGBA_float4(*(uchar*)buf3101, *(uchar*)buf3102, *(uchar*)buf3103);
+    *(uchar4*)buf3104 = rsYuvToRGBA_uchar4(*(uchar*)buf3105, *(uchar*)buf3106, *(uchar*)buf3107);
+#ifndef __LP64__
+    rsgAllocationSyncAll(*(rs_allocation*)buf3108);
+#endif
+#ifndef __LP64__
+    rsgAllocationSyncAll(*(rs_allocation*)buf3109, *(rs_allocation_usage_type*)buf3110);
+#endif
+#ifndef __LP64__
+    rsgBindColorTarget(*(rs_allocation*)buf3111, *(uint*)buf3112);
+#endif
+#ifndef __LP64__
+    rsgBindConstant(*(rs_program_fragment*)buf3113, *(uint*)buf3114, *(rs_allocation*)buf3115);
+#endif
+#ifndef __LP64__
+    rsgBindConstant(*(rs_program_vertex*)buf3116, *(uint*)buf3117, *(rs_allocation*)buf3118);
+#endif
+#ifndef __LP64__
+    rsgBindDepthTarget(*(rs_allocation*)buf3119);
+#endif
+#ifndef __LP64__
+    rsgBindFont(*(rs_font*)buf3120);
+#endif
+#ifndef __LP64__
+    rsgBindProgramFragment(*(rs_program_fragment*)buf3121);
+#endif
+#ifndef __LP64__
+    rsgBindProgramRaster(*(rs_program_raster*)buf3122);
+#endif
+#ifndef __LP64__
+    rsgBindProgramStore(*(rs_program_store*)buf3123);
+#endif
+#ifndef __LP64__
+    rsgBindProgramVertex(*(rs_program_vertex*)buf3124);
+#endif
+#ifndef __LP64__
+    rsgBindSampler(*(rs_program_fragment*)buf3125, *(uint*)buf3126, *(rs_sampler*)buf3127);
+#endif
+#ifndef __LP64__
+    rsgBindTexture(*(rs_program_fragment*)buf3128, *(uint*)buf3129, *(rs_allocation*)buf3130);
+#endif
+#ifndef __LP64__
+    rsgClearAllRenderTargets();
+#endif
+#ifndef __LP64__
+    rsgClearColor(*(float*)buf3131, *(float*)buf3132, *(float*)buf3133, *(float*)buf3134);
+#endif
+#ifndef __LP64__
+    rsgClearColorTarget(*(uint*)buf3135);
+#endif
+#ifndef __LP64__
+    rsgClearDepth(*(float*)buf3136);
+#endif
+#ifndef __LP64__
+    rsgClearDepthTarget();
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf3137);
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf3138, *(uint*)buf3139);
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf3140, *(uint*)buf3141, *(uint*)buf3142, *(uint*)buf3143);
+#endif
+#ifndef __LP64__
+    rsgDrawQuad(*(float*)buf3144, *(float*)buf3145, *(float*)buf3146, *(float*)buf3147, *(float*)buf3148, *(float*)buf3149, *(float*)buf3150, *(float*)buf3151, *(float*)buf3152, *(float*)buf3153, *(float*)buf3154, *(float*)buf3155);
+#endif
+#ifndef __LP64__
+    rsgDrawQuadTexCoords(*(float*)buf3156, *(float*)buf3157, *(float*)buf3158, *(float*)buf3159, *(float*)buf3160, *(float*)buf3161, *(float*)buf3162, *(float*)buf3163, *(float*)buf3164, *(float*)buf3165, *(float*)buf3166, *(float*)buf3167, *(float*)buf3168, *(float*)buf3169, *(float*)buf3170, *(float*)buf3171, *(float*)buf3172, *(float*)buf3173, *(float*)buf3174, *(float*)buf3175);
+#endif
+#ifndef __LP64__
+    rsgDrawRect(*(float*)buf3176, *(float*)buf3177, *(float*)buf3178, *(float*)buf3179, *(float*)buf3180);
+#endif
+#ifndef __LP64__
+    rsgDrawSpriteScreenspace(*(float*)buf3181, *(float*)buf3182, *(float*)buf3183, *(float*)buf3184, *(float*)buf3185);
+#endif
+#ifndef __LP64__
+    rsgDrawText((const char*) buf3186, *(int*)buf3187, *(int*)buf3188);
+#endif
+#ifndef __LP64__
+    rsgDrawText(*(rs_allocation*)buf3189, *(int*)buf3190, *(int*)buf3191);
+#endif
+#ifndef __LP64__
+    *(uint*)buf3192 = rsgFinish();
+#endif
+#ifndef __LP64__
+    rsgFontColor(*(float*)buf3193, *(float*)buf3194, *(float*)buf3195, *(float*)buf3196);
+#endif
+#ifndef __LP64__
+    *(uint*)buf3197 = rsgGetHeight();
+#endif
+#ifndef __LP64__
+    *(uint*)buf3198 = rsgGetWidth();
+#endif
+#ifndef __LP64__
+    rsgMeasureText((const char*) buf3199, (int*) buf3200, (int*) buf3201, (int*) buf3202, (int*) buf3203);
+#endif
+#ifndef __LP64__
+    rsgMeasureText(*(rs_allocation*)buf3204, (int*) buf3205, (int*) buf3206, (int*) buf3207, (int*) buf3208);
+#endif
+#ifndef __LP64__
+    rsgMeshComputeBoundingBox(*(rs_mesh*)buf3209, (float*) buf3210, (float*) buf3211, (float*) buf3212, (float*) buf3213, (float*) buf3214, (float*) buf3215);
+#endif
+#ifndef __LP64__
+    rsgMeshComputeBoundingBox(*(rs_mesh*)buf3216, (float3*) buf3217, (float3*) buf3218);
+#endif
+#ifndef __LP64__
+    *(rs_allocation*)buf3219 = rsgMeshGetIndexAllocation(*(rs_mesh*)buf3220, *(uint32_t*)buf3221);
+#endif
+#ifndef __LP64__
+    *(rs_primitive*)buf3222 = rsgMeshGetPrimitive(*(rs_mesh*)buf3223, *(uint32_t*)buf3224);
+#endif
+#ifndef __LP64__
+    *(uint32_t*)buf3225 = rsgMeshGetPrimitiveCount(*(rs_mesh*)buf3226);
+#endif
+#ifndef __LP64__
+    *(rs_allocation*)buf3227 = rsgMeshGetVertexAllocation(*(rs_mesh*)buf3228, *(uint32_t*)buf3229);
+#endif
+#ifndef __LP64__
+    *(uint32_t*)buf3230 = rsgMeshGetVertexAllocationCount(*(rs_mesh*)buf3231);
+#endif
+#ifndef __LP64__
+    rsgProgramFragmentConstantColor(*(rs_program_fragment*)buf3232, *(float*)buf3233, *(float*)buf3234, *(float*)buf3235, *(float*)buf3236);
+#endif
+#ifndef __LP64__
+    *(rs_cull_mode*)buf3237 = rsgProgramRasterGetCullMode(*(rs_program_raster*)buf3238);
+#endif
+#ifndef __LP64__
+    *(bool*)buf3239 = rsgProgramRasterIsPointSpriteEnabled(*(rs_program_raster*)buf3240);
+#endif
+#ifndef __LP64__
+    *(rs_blend_dst_func*)buf3241 = rsgProgramStoreGetBlendDstFunc(*(rs_program_store*)buf3242);
+#endif
+#ifndef __LP64__
+    *(rs_blend_src_func*)buf3243 = rsgProgramStoreGetBlendSrcFunc(*(rs_program_store*)buf3244);
+#endif
+#ifndef __LP64__
+    *(rs_depth_func*)buf3245 = rsgProgramStoreGetDepthFunc(*(rs_program_store*)buf3246);
+#endif
+#ifndef __LP64__
+    *(bool*)buf3247 = rsgProgramStoreIsColorMaskAlphaEnabled(*(rs_program_store*)buf3248);
+#endif
+#ifndef __LP64__
+    *(bool*)buf3249 = rsgProgramStoreIsColorMaskBlueEnabled(*(rs_program_store*)buf3250);
+#endif
+#ifndef __LP64__
+    *(bool*)buf3251 = rsgProgramStoreIsColorMaskGreenEnabled(*(rs_program_store*)buf3252);
+#endif
+#ifndef __LP64__
+    *(bool*)buf3253 = rsgProgramStoreIsColorMaskRedEnabled(*(rs_program_store*)buf3254);
+#endif
+#ifndef __LP64__
+    *(bool*)buf3255 = rsgProgramStoreIsDepthMaskEnabled(*(rs_program_store*)buf3256);
+#endif
+#ifndef __LP64__
+    *(bool*)buf3257 = rsgProgramStoreIsDitherEnabled(*(rs_program_store*)buf3258);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexGetProjectionMatrix((rs_matrix4x4*) buf3259);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadModelMatrix((const rs_matrix4x4*) buf3260);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadProjectionMatrix((const rs_matrix4x4*) buf3261);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadTextureMatrix((const rs_matrix4x4*) buf3262);
+#endif
+    *(float*)buf3263 = rsqrt(*(float*)buf3264);
+    *(float2*)buf3265 = rsqrt(*(float2*)buf3266);
+    *(float3*)buf3267 = rsqrt(*(float3*)buf3268);
+    *(float4*)buf3269 = rsqrt(*(float4*)buf3270);
+    *(float*)buf3271 = sign(*(float*)buf3272);
+    *(float2*)buf3273 = sign(*(float2*)buf3274);
+    *(float3*)buf3275 = sign(*(float3*)buf3276);
+    *(float4*)buf3277 = sign(*(float4*)buf3278);
+    *(float*)buf3279 = sin(*(float*)buf3280);
+    *(float2*)buf3281 = sin(*(float2*)buf3282);
+    *(float3*)buf3283 = sin(*(float3*)buf3284);
+    *(float4*)buf3285 = sin(*(float4*)buf3286);
+    *(float*)buf3287 = sincos(*(float*)buf3288, (float*) buf3289);
+    *(float2*)buf3290 = sincos(*(float2*)buf3291, (float2*) buf3292);
+    *(float3*)buf3293 = sincos(*(float3*)buf3294, (float3*) buf3295);
+    *(float4*)buf3296 = sincos(*(float4*)buf3297, (float4*) buf3298);
+    *(float*)buf3299 = sinh(*(float*)buf3300);
+    *(float2*)buf3301 = sinh(*(float2*)buf3302);
+    *(float3*)buf3303 = sinh(*(float3*)buf3304);
+    *(float4*)buf3305 = sinh(*(float4*)buf3306);
+    *(float*)buf3307 = sinpi(*(float*)buf3308);
+    *(float2*)buf3309 = sinpi(*(float2*)buf3310);
+    *(float3*)buf3311 = sinpi(*(float3*)buf3312);
+    *(float4*)buf3313 = sinpi(*(float4*)buf3314);
+    *(float*)buf3315 = sqrt(*(float*)buf3316);
+    *(float2*)buf3317 = sqrt(*(float2*)buf3318);
+    *(float3*)buf3319 = sqrt(*(float3*)buf3320);
+    *(float4*)buf3321 = sqrt(*(float4*)buf3322);
+    *(float*)buf3323 = step(*(float*)buf3324, *(float*)buf3325);
+    *(float2*)buf3326 = step(*(float2*)buf3327, *(float2*)buf3328);
+    *(float3*)buf3329 = step(*(float3*)buf3330, *(float3*)buf3331);
+    *(float4*)buf3332 = step(*(float4*)buf3333, *(float4*)buf3334);
+    *(float2*)buf3335 = step(*(float2*)buf3336, *(float*)buf3337);
+    *(float3*)buf3338 = step(*(float3*)buf3339, *(float*)buf3340);
+    *(float4*)buf3341 = step(*(float4*)buf3342, *(float*)buf3343);
+    *(float*)buf3344 = tan(*(float*)buf3345);
+    *(float2*)buf3346 = tan(*(float2*)buf3347);
+    *(float3*)buf3348 = tan(*(float3*)buf3349);
+    *(float4*)buf3350 = tan(*(float4*)buf3351);
+    *(float*)buf3352 = tanh(*(float*)buf3353);
+    *(float2*)buf3354 = tanh(*(float2*)buf3355);
+    *(float3*)buf3356 = tanh(*(float3*)buf3357);
+    *(float4*)buf3358 = tanh(*(float4*)buf3359);
+    *(float*)buf3360 = tanpi(*(float*)buf3361);
+    *(float2*)buf3362 = tanpi(*(float2*)buf3363);
+    *(float3*)buf3364 = tanpi(*(float3*)buf3365);
+    *(float4*)buf3366 = tanpi(*(float4*)buf3367);
+    *(float*)buf3368 = tgamma(*(float*)buf3369);
+    *(float2*)buf3370 = tgamma(*(float2*)buf3371);
+    *(float3*)buf3372 = tgamma(*(float3*)buf3373);
+    *(float4*)buf3374 = tgamma(*(float4*)buf3375);
+    *(float*)buf3376 = trunc(*(float*)buf3377);
+    *(float2*)buf3378 = trunc(*(float2*)buf3379);
+    *(float3*)buf3380 = trunc(*(float3*)buf3381);
+    *(float4*)buf3382 = trunc(*(float4*)buf3383);
+}
diff --git a/slang/tests/P_all_api_19/stderr.txt.expect b/slang/tests/P_all_api_19/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_all_api_19/stderr.txt.expect
diff --git a/slang/tests/P_all_api_19/stdout.txt.expect b/slang/tests/P_all_api_19/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_all_api_19/stdout.txt.expect
diff --git a/slang/tests/P_all_api_20/all20.rs b/slang/tests/P_all_api_20/all20.rs
new file mode 100644
index 0000000..d3a53e4
--- /dev/null
+++ b/slang/tests/P_all_api_20/all20.rs
@@ -0,0 +1,4742 @@
+// -target-api 20 -Wno-deprecated-declarations
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Don't edit this file!  It is auto-generated by frameworks/rs/api/generate.sh.
+
+#pragma version(1)
+#pragma rs java_package_name(com.example.renderscript.testallapi)
+
+#include "rs_graphics.rsh"
+
+char buf0[200];
+char buf1[200];
+char buf2[200];
+char buf3[200];
+char buf4[200];
+char buf5[200];
+char buf6[200];
+char buf7[200];
+char buf8[200];
+char buf9[200];
+char buf10[200];
+char buf11[200];
+char buf12[200];
+char buf13[200];
+char buf14[200];
+char buf15[200];
+char buf16[200];
+char buf17[200];
+char buf18[200];
+char buf19[200];
+char buf20[200];
+char buf21[200];
+char buf22[200];
+char buf23[200];
+char buf24[200];
+char buf25[200];
+char buf26[200];
+char buf27[200];
+char buf28[200];
+char buf29[200];
+char buf30[200];
+char buf31[200];
+char buf32[200];
+char buf33[200];
+char buf34[200];
+char buf35[200];
+char buf36[200];
+char buf37[200];
+char buf38[200];
+char buf39[200];
+char buf40[200];
+char buf41[200];
+char buf42[200];
+char buf43[200];
+char buf44[200];
+char buf45[200];
+char buf46[200];
+char buf47[200];
+char buf48[200];
+char buf49[200];
+char buf50[200];
+char buf51[200];
+char buf52[200];
+char buf53[200];
+char buf54[200];
+char buf55[200];
+char buf56[200];
+char buf57[200];
+char buf58[200];
+char buf59[200];
+char buf60[200];
+char buf61[200];
+char buf62[200];
+char buf63[200];
+char buf64[200];
+char buf65[200];
+char buf66[200];
+char buf67[200];
+char buf68[200];
+char buf69[200];
+char buf70[200];
+char buf71[200];
+char buf72[200];
+char buf73[200];
+char buf74[200];
+char buf75[200];
+char buf76[200];
+char buf77[200];
+char buf78[200];
+char buf79[200];
+char buf80[200];
+char buf81[200];
+char buf82[200];
+char buf83[200];
+char buf84[200];
+char buf85[200];
+char buf86[200];
+char buf87[200];
+char buf88[200];
+char buf89[200];
+char buf90[200];
+char buf91[200];
+char buf92[200];
+char buf93[200];
+char buf94[200];
+char buf95[200];
+char buf96[200];
+char buf97[200];
+char buf98[200];
+char buf99[200];
+char buf100[200];
+char buf101[200];
+char buf102[200];
+char buf103[200];
+char buf104[200];
+char buf105[200];
+char buf106[200];
+char buf107[200];
+char buf108[200];
+char buf109[200];
+char buf110[200];
+char buf111[200];
+char buf112[200];
+char buf113[200];
+char buf114[200];
+char buf115[200];
+char buf116[200];
+char buf117[200];
+char buf118[200];
+char buf119[200];
+char buf120[200];
+char buf121[200];
+char buf122[200];
+char buf123[200];
+char buf124[200];
+char buf125[200];
+char buf126[200];
+char buf127[200];
+char buf128[200];
+char buf129[200];
+char buf130[200];
+char buf131[200];
+char buf132[200];
+char buf133[200];
+char buf134[200];
+char buf135[200];
+char buf136[200];
+char buf137[200];
+char buf138[200];
+char buf139[200];
+char buf140[200];
+char buf141[200];
+char buf142[200];
+char buf143[200];
+char buf144[200];
+char buf145[200];
+char buf146[200];
+char buf147[200];
+char buf148[200];
+char buf149[200];
+char buf150[200];
+char buf151[200];
+char buf152[200];
+char buf153[200];
+char buf154[200];
+char buf155[200];
+char buf156[200];
+char buf157[200];
+char buf158[200];
+char buf159[200];
+char buf160[200];
+char buf161[200];
+char buf162[200];
+char buf163[200];
+char buf164[200];
+char buf165[200];
+char buf166[200];
+char buf167[200];
+char buf168[200];
+char buf169[200];
+char buf170[200];
+char buf171[200];
+char buf172[200];
+char buf173[200];
+char buf174[200];
+char buf175[200];
+char buf176[200];
+char buf177[200];
+char buf178[200];
+char buf179[200];
+char buf180[200];
+char buf181[200];
+char buf182[200];
+char buf183[200];
+char buf184[200];
+char buf185[200];
+char buf186[200];
+char buf187[200];
+char buf188[200];
+char buf189[200];
+char buf190[200];
+char buf191[200];
+char buf192[200];
+char buf193[200];
+char buf194[200];
+char buf195[200];
+char buf196[200];
+char buf197[200];
+char buf198[200];
+char buf199[200];
+char buf200[200];
+char buf201[200];
+char buf202[200];
+char buf203[200];
+char buf204[200];
+char buf205[200];
+char buf206[200];
+char buf207[200];
+char buf208[200];
+char buf209[200];
+char buf210[200];
+char buf211[200];
+char buf212[200];
+char buf213[200];
+char buf214[200];
+char buf215[200];
+char buf216[200];
+char buf217[200];
+char buf218[200];
+char buf219[200];
+char buf220[200];
+char buf221[200];
+char buf222[200];
+char buf223[200];
+char buf224[200];
+char buf225[200];
+char buf226[200];
+char buf227[200];
+char buf228[200];
+char buf229[200];
+char buf230[200];
+char buf231[200];
+char buf232[200];
+char buf233[200];
+char buf234[200];
+char buf235[200];
+char buf236[200];
+char buf237[200];
+char buf238[200];
+char buf239[200];
+char buf240[200];
+char buf241[200];
+char buf242[200];
+char buf243[200];
+char buf244[200];
+char buf245[200];
+char buf246[200];
+char buf247[200];
+char buf248[200];
+char buf249[200];
+char buf250[200];
+char buf251[200];
+char buf252[200];
+char buf253[200];
+char buf254[200];
+char buf255[200];
+char buf256[200];
+char buf257[200];
+char buf258[200];
+char buf259[200];
+char buf260[200];
+char buf261[200];
+char buf262[200];
+char buf263[200];
+char buf264[200];
+char buf265[200];
+char buf266[200];
+char buf267[200];
+char buf268[200];
+char buf269[200];
+char buf270[200];
+char buf271[200];
+char buf272[200];
+char buf273[200];
+char buf274[200];
+char buf275[200];
+char buf276[200];
+char buf277[200];
+char buf278[200];
+char buf279[200];
+char buf280[200];
+char buf281[200];
+char buf282[200];
+char buf283[200];
+char buf284[200];
+char buf285[200];
+char buf286[200];
+char buf287[200];
+char buf288[200];
+char buf289[200];
+char buf290[200];
+char buf291[200];
+char buf292[200];
+char buf293[200];
+char buf294[200];
+char buf295[200];
+char buf296[200];
+char buf297[200];
+char buf298[200];
+char buf299[200];
+char buf300[200];
+char buf301[200];
+char buf302[200];
+char buf303[200];
+char buf304[200];
+char buf305[200];
+char buf306[200];
+char buf307[200];
+char buf308[200];
+char buf309[200];
+char buf310[200];
+char buf311[200];
+char buf312[200];
+char buf313[200];
+char buf314[200];
+char buf315[200];
+char buf316[200];
+char buf317[200];
+char buf318[200];
+char buf319[200];
+char buf320[200];
+char buf321[200];
+char buf322[200];
+char buf323[200];
+char buf324[200];
+char buf325[200];
+char buf326[200];
+char buf327[200];
+char buf328[200];
+char buf329[200];
+char buf330[200];
+char buf331[200];
+char buf332[200];
+char buf333[200];
+char buf334[200];
+char buf335[200];
+char buf336[200];
+char buf337[200];
+char buf338[200];
+char buf339[200];
+char buf340[200];
+char buf341[200];
+char buf342[200];
+char buf343[200];
+char buf344[200];
+char buf345[200];
+char buf346[200];
+char buf347[200];
+char buf348[200];
+char buf349[200];
+char buf350[200];
+char buf351[200];
+char buf352[200];
+char buf353[200];
+char buf354[200];
+char buf355[200];
+char buf356[200];
+char buf357[200];
+char buf358[200];
+char buf359[200];
+char buf360[200];
+char buf361[200];
+char buf362[200];
+char buf363[200];
+char buf364[200];
+char buf365[200];
+char buf366[200];
+char buf367[200];
+char buf368[200];
+char buf369[200];
+char buf370[200];
+char buf371[200];
+char buf372[200];
+char buf373[200];
+char buf374[200];
+char buf375[200];
+char buf376[200];
+char buf377[200];
+char buf378[200];
+char buf379[200];
+char buf380[200];
+char buf381[200];
+char buf382[200];
+char buf383[200];
+char buf384[200];
+char buf385[200];
+char buf386[200];
+char buf387[200];
+char buf388[200];
+char buf389[200];
+char buf390[200];
+char buf391[200];
+char buf392[200];
+char buf393[200];
+char buf394[200];
+char buf395[200];
+char buf396[200];
+char buf397[200];
+char buf398[200];
+char buf399[200];
+char buf400[200];
+char buf401[200];
+char buf402[200];
+char buf403[200];
+char buf404[200];
+char buf405[200];
+char buf406[200];
+char buf407[200];
+char buf408[200];
+char buf409[200];
+char buf410[200];
+char buf411[200];
+char buf412[200];
+char buf413[200];
+char buf414[200];
+char buf415[200];
+char buf416[200];
+char buf417[200];
+char buf418[200];
+char buf419[200];
+char buf420[200];
+char buf421[200];
+char buf422[200];
+char buf423[200];
+char buf424[200];
+char buf425[200];
+char buf426[200];
+char buf427[200];
+char buf428[200];
+char buf429[200];
+char buf430[200];
+char buf431[200];
+char buf432[200];
+char buf433[200];
+char buf434[200];
+char buf435[200];
+char buf436[200];
+char buf437[200];
+char buf438[200];
+char buf439[200];
+char buf440[200];
+char buf441[200];
+char buf442[200];
+char buf443[200];
+char buf444[200];
+char buf445[200];
+char buf446[200];
+char buf447[200];
+char buf448[200];
+char buf449[200];
+char buf450[200];
+char buf451[200];
+char buf452[200];
+char buf453[200];
+char buf454[200];
+char buf455[200];
+char buf456[200];
+char buf457[200];
+char buf458[200];
+char buf459[200];
+char buf460[200];
+char buf461[200];
+char buf462[200];
+char buf463[200];
+char buf464[200];
+char buf465[200];
+char buf466[200];
+char buf467[200];
+char buf468[200];
+char buf469[200];
+char buf470[200];
+char buf471[200];
+char buf472[200];
+char buf473[200];
+char buf474[200];
+char buf475[200];
+char buf476[200];
+char buf477[200];
+char buf478[200];
+char buf479[200];
+char buf480[200];
+char buf481[200];
+char buf482[200];
+char buf483[200];
+char buf484[200];
+char buf485[200];
+char buf486[200];
+char buf487[200];
+char buf488[200];
+char buf489[200];
+char buf490[200];
+char buf491[200];
+char buf492[200];
+char buf493[200];
+char buf494[200];
+char buf495[200];
+char buf496[200];
+char buf497[200];
+char buf498[200];
+char buf499[200];
+char buf500[200];
+char buf501[200];
+char buf502[200];
+char buf503[200];
+char buf504[200];
+char buf505[200];
+char buf506[200];
+char buf507[200];
+char buf508[200];
+char buf509[200];
+char buf510[200];
+char buf511[200];
+char buf512[200];
+char buf513[200];
+char buf514[200];
+char buf515[200];
+char buf516[200];
+char buf517[200];
+char buf518[200];
+char buf519[200];
+char buf520[200];
+char buf521[200];
+char buf522[200];
+char buf523[200];
+char buf524[200];
+char buf525[200];
+char buf526[200];
+char buf527[200];
+char buf528[200];
+char buf529[200];
+char buf530[200];
+char buf531[200];
+char buf532[200];
+char buf533[200];
+char buf534[200];
+char buf535[200];
+char buf536[200];
+char buf537[200];
+char buf538[200];
+char buf539[200];
+char buf540[200];
+char buf541[200];
+char buf542[200];
+char buf543[200];
+char buf544[200];
+char buf545[200];
+char buf546[200];
+char buf547[200];
+char buf548[200];
+char buf549[200];
+char buf550[200];
+char buf551[200];
+char buf552[200];
+char buf553[200];
+char buf554[200];
+char buf555[200];
+char buf556[200];
+char buf557[200];
+char buf558[200];
+char buf559[200];
+char buf560[200];
+char buf561[200];
+char buf562[200];
+char buf563[200];
+char buf564[200];
+char buf565[200];
+char buf566[200];
+char buf567[200];
+char buf568[200];
+char buf569[200];
+char buf570[200];
+char buf571[200];
+char buf572[200];
+char buf573[200];
+char buf574[200];
+char buf575[200];
+char buf576[200];
+char buf577[200];
+char buf578[200];
+char buf579[200];
+char buf580[200];
+char buf581[200];
+char buf582[200];
+char buf583[200];
+char buf584[200];
+char buf585[200];
+char buf586[200];
+char buf587[200];
+char buf588[200];
+char buf589[200];
+char buf590[200];
+char buf591[200];
+char buf592[200];
+char buf593[200];
+char buf594[200];
+char buf595[200];
+char buf596[200];
+char buf597[200];
+char buf598[200];
+char buf599[200];
+char buf600[200];
+char buf601[200];
+char buf602[200];
+char buf603[200];
+char buf604[200];
+char buf605[200];
+char buf606[200];
+char buf607[200];
+char buf608[200];
+char buf609[200];
+char buf610[200];
+char buf611[200];
+char buf612[200];
+char buf613[200];
+char buf614[200];
+char buf615[200];
+char buf616[200];
+char buf617[200];
+char buf618[200];
+char buf619[200];
+char buf620[200];
+char buf621[200];
+char buf622[200];
+char buf623[200];
+char buf624[200];
+char buf625[200];
+char buf626[200];
+char buf627[200];
+char buf628[200];
+char buf629[200];
+char buf630[200];
+char buf631[200];
+char buf632[200];
+char buf633[200];
+char buf634[200];
+char buf635[200];
+char buf636[200];
+char buf637[200];
+char buf638[200];
+char buf639[200];
+char buf640[200];
+char buf641[200];
+char buf642[200];
+char buf643[200];
+char buf644[200];
+char buf645[200];
+char buf646[200];
+char buf647[200];
+char buf648[200];
+char buf649[200];
+char buf650[200];
+char buf651[200];
+char buf652[200];
+char buf653[200];
+char buf654[200];
+char buf655[200];
+char buf656[200];
+char buf657[200];
+char buf658[200];
+char buf659[200];
+char buf660[200];
+char buf661[200];
+char buf662[200];
+char buf663[200];
+char buf664[200];
+char buf665[200];
+char buf666[200];
+char buf667[200];
+char buf668[200];
+char buf669[200];
+char buf670[200];
+char buf671[200];
+char buf672[200];
+char buf673[200];
+char buf674[200];
+char buf675[200];
+char buf676[200];
+char buf677[200];
+char buf678[200];
+char buf679[200];
+char buf680[200];
+char buf681[200];
+char buf682[200];
+char buf683[200];
+char buf684[200];
+char buf685[200];
+char buf686[200];
+char buf687[200];
+char buf688[200];
+char buf689[200];
+char buf690[200];
+char buf691[200];
+char buf692[200];
+char buf693[200];
+char buf694[200];
+char buf695[200];
+char buf696[200];
+char buf697[200];
+char buf698[200];
+char buf699[200];
+char buf700[200];
+char buf701[200];
+char buf702[200];
+char buf703[200];
+char buf704[200];
+char buf705[200];
+char buf706[200];
+char buf707[200];
+char buf708[200];
+char buf709[200];
+char buf710[200];
+char buf711[200];
+char buf712[200];
+char buf713[200];
+char buf714[200];
+char buf715[200];
+char buf716[200];
+char buf717[200];
+char buf718[200];
+char buf719[200];
+char buf720[200];
+char buf721[200];
+char buf722[200];
+char buf723[200];
+char buf724[200];
+char buf725[200];
+char buf726[200];
+char buf727[200];
+char buf728[200];
+char buf729[200];
+char buf730[200];
+char buf731[200];
+char buf732[200];
+char buf733[200];
+char buf734[200];
+char buf735[200];
+char buf736[200];
+char buf737[200];
+char buf738[200];
+char buf739[200];
+char buf740[200];
+char buf741[200];
+char buf742[200];
+char buf743[200];
+char buf744[200];
+char buf745[200];
+char buf746[200];
+char buf747[200];
+char buf748[200];
+char buf749[200];
+char buf750[200];
+char buf751[200];
+char buf752[200];
+char buf753[200];
+char buf754[200];
+char buf755[200];
+char buf756[200];
+char buf757[200];
+char buf758[200];
+char buf759[200];
+char buf760[200];
+char buf761[200];
+char buf762[200];
+char buf763[200];
+char buf764[200];
+char buf765[200];
+char buf766[200];
+char buf767[200];
+char buf768[200];
+char buf769[200];
+char buf770[200];
+char buf771[200];
+char buf772[200];
+char buf773[200];
+char buf774[200];
+char buf775[200];
+char buf776[200];
+char buf777[200];
+char buf778[200];
+char buf779[200];
+char buf780[200];
+char buf781[200];
+char buf782[200];
+char buf783[200];
+char buf784[200];
+char buf785[200];
+char buf786[200];
+char buf787[200];
+char buf788[200];
+char buf789[200];
+char buf790[200];
+char buf791[200];
+char buf792[200];
+char buf793[200];
+char buf794[200];
+char buf795[200];
+char buf796[200];
+char buf797[200];
+char buf798[200];
+char buf799[200];
+char buf800[200];
+char buf801[200];
+char buf802[200];
+char buf803[200];
+char buf804[200];
+char buf805[200];
+char buf806[200];
+char buf807[200];
+char buf808[200];
+char buf809[200];
+char buf810[200];
+char buf811[200];
+char buf812[200];
+char buf813[200];
+char buf814[200];
+char buf815[200];
+char buf816[200];
+char buf817[200];
+char buf818[200];
+char buf819[200];
+char buf820[200];
+char buf821[200];
+char buf822[200];
+char buf823[200];
+char buf824[200];
+char buf825[200];
+char buf826[200];
+char buf827[200];
+char buf828[200];
+char buf829[200];
+char buf830[200];
+char buf831[200];
+char buf832[200];
+char buf833[200];
+char buf834[200];
+char buf835[200];
+char buf836[200];
+char buf837[200];
+char buf838[200];
+char buf839[200];
+char buf840[200];
+char buf841[200];
+char buf842[200];
+char buf843[200];
+char buf844[200];
+char buf845[200];
+char buf846[200];
+char buf847[200];
+char buf848[200];
+char buf849[200];
+char buf850[200];
+char buf851[200];
+char buf852[200];
+char buf853[200];
+char buf854[200];
+char buf855[200];
+char buf856[200];
+char buf857[200];
+char buf858[200];
+char buf859[200];
+char buf860[200];
+char buf861[200];
+char buf862[200];
+char buf863[200];
+char buf864[200];
+char buf865[200];
+char buf866[200];
+char buf867[200];
+char buf868[200];
+char buf869[200];
+char buf870[200];
+char buf871[200];
+char buf872[200];
+char buf873[200];
+char buf874[200];
+char buf875[200];
+char buf876[200];
+char buf877[200];
+char buf878[200];
+char buf879[200];
+char buf880[200];
+char buf881[200];
+char buf882[200];
+char buf883[200];
+char buf884[200];
+char buf885[200];
+char buf886[200];
+char buf887[200];
+char buf888[200];
+char buf889[200];
+char buf890[200];
+char buf891[200];
+char buf892[200];
+char buf893[200];
+char buf894[200];
+char buf895[200];
+char buf896[200];
+char buf897[200];
+char buf898[200];
+char buf899[200];
+char buf900[200];
+char buf901[200];
+char buf902[200];
+char buf903[200];
+char buf904[200];
+char buf905[200];
+char buf906[200];
+char buf907[200];
+char buf908[200];
+char buf909[200];
+char buf910[200];
+char buf911[200];
+char buf912[200];
+char buf913[200];
+char buf914[200];
+char buf915[200];
+char buf916[200];
+char buf917[200];
+char buf918[200];
+char buf919[200];
+char buf920[200];
+char buf921[200];
+char buf922[200];
+char buf923[200];
+char buf924[200];
+char buf925[200];
+char buf926[200];
+char buf927[200];
+char buf928[200];
+char buf929[200];
+char buf930[200];
+char buf931[200];
+char buf932[200];
+char buf933[200];
+char buf934[200];
+char buf935[200];
+char buf936[200];
+char buf937[200];
+char buf938[200];
+char buf939[200];
+char buf940[200];
+char buf941[200];
+char buf942[200];
+char buf943[200];
+char buf944[200];
+char buf945[200];
+char buf946[200];
+char buf947[200];
+char buf948[200];
+char buf949[200];
+char buf950[200];
+char buf951[200];
+char buf952[200];
+char buf953[200];
+char buf954[200];
+char buf955[200];
+char buf956[200];
+char buf957[200];
+char buf958[200];
+char buf959[200];
+char buf960[200];
+char buf961[200];
+char buf962[200];
+char buf963[200];
+char buf964[200];
+char buf965[200];
+char buf966[200];
+char buf967[200];
+char buf968[200];
+char buf969[200];
+char buf970[200];
+char buf971[200];
+char buf972[200];
+char buf973[200];
+char buf974[200];
+char buf975[200];
+char buf976[200];
+char buf977[200];
+char buf978[200];
+char buf979[200];
+char buf980[200];
+char buf981[200];
+char buf982[200];
+char buf983[200];
+char buf984[200];
+char buf985[200];
+char buf986[200];
+char buf987[200];
+char buf988[200];
+char buf989[200];
+char buf990[200];
+char buf991[200];
+char buf992[200];
+char buf993[200];
+char buf994[200];
+char buf995[200];
+char buf996[200];
+char buf997[200];
+char buf998[200];
+char buf999[200];
+char buf1000[200];
+char buf1001[200];
+char buf1002[200];
+char buf1003[200];
+char buf1004[200];
+char buf1005[200];
+char buf1006[200];
+char buf1007[200];
+char buf1008[200];
+char buf1009[200];
+char buf1010[200];
+char buf1011[200];
+char buf1012[200];
+char buf1013[200];
+char buf1014[200];
+char buf1015[200];
+char buf1016[200];
+char buf1017[200];
+char buf1018[200];
+char buf1019[200];
+char buf1020[200];
+char buf1021[200];
+char buf1022[200];
+char buf1023[200];
+char buf1024[200];
+char buf1025[200];
+char buf1026[200];
+char buf1027[200];
+char buf1028[200];
+char buf1029[200];
+char buf1030[200];
+char buf1031[200];
+char buf1032[200];
+char buf1033[200];
+char buf1034[200];
+char buf1035[200];
+char buf1036[200];
+char buf1037[200];
+char buf1038[200];
+char buf1039[200];
+char buf1040[200];
+char buf1041[200];
+char buf1042[200];
+char buf1043[200];
+char buf1044[200];
+char buf1045[200];
+char buf1046[200];
+char buf1047[200];
+char buf1048[200];
+char buf1049[200];
+char buf1050[200];
+char buf1051[200];
+char buf1052[200];
+char buf1053[200];
+char buf1054[200];
+char buf1055[200];
+char buf1056[200];
+char buf1057[200];
+char buf1058[200];
+char buf1059[200];
+char buf1060[200];
+char buf1061[200];
+char buf1062[200];
+char buf1063[200];
+char buf1064[200];
+char buf1065[200];
+char buf1066[200];
+char buf1067[200];
+char buf1068[200];
+char buf1069[200];
+char buf1070[200];
+char buf1071[200];
+char buf1072[200];
+char buf1073[200];
+char buf1074[200];
+char buf1075[200];
+char buf1076[200];
+char buf1077[200];
+char buf1078[200];
+char buf1079[200];
+char buf1080[200];
+char buf1081[200];
+char buf1082[200];
+char buf1083[200];
+char buf1084[200];
+char buf1085[200];
+char buf1086[200];
+char buf1087[200];
+char buf1088[200];
+char buf1089[200];
+char buf1090[200];
+char buf1091[200];
+char buf1092[200];
+char buf1093[200];
+char buf1094[200];
+char buf1095[200];
+char buf1096[200];
+char buf1097[200];
+char buf1098[200];
+char buf1099[200];
+char buf1100[200];
+char buf1101[200];
+char buf1102[200];
+char buf1103[200];
+char buf1104[200];
+char buf1105[200];
+char buf1106[200];
+char buf1107[200];
+char buf1108[200];
+char buf1109[200];
+char buf1110[200];
+char buf1111[200];
+char buf1112[200];
+char buf1113[200];
+char buf1114[200];
+char buf1115[200];
+char buf1116[200];
+char buf1117[200];
+char buf1118[200];
+char buf1119[200];
+char buf1120[200];
+char buf1121[200];
+char buf1122[200];
+char buf1123[200];
+char buf1124[200];
+char buf1125[200];
+char buf1126[200];
+char buf1127[200];
+char buf1128[200];
+char buf1129[200];
+char buf1130[200];
+char buf1131[200];
+char buf1132[200];
+char buf1133[200];
+char buf1134[200];
+char buf1135[200];
+char buf1136[200];
+char buf1137[200];
+char buf1138[200];
+char buf1139[200];
+char buf1140[200];
+char buf1141[200];
+char buf1142[200];
+char buf1143[200];
+char buf1144[200];
+char buf1145[200];
+char buf1146[200];
+char buf1147[200];
+char buf1148[200];
+char buf1149[200];
+char buf1150[200];
+char buf1151[200];
+char buf1152[200];
+char buf1153[200];
+char buf1154[200];
+char buf1155[200];
+char buf1156[200];
+char buf1157[200];
+char buf1158[200];
+char buf1159[200];
+char buf1160[200];
+char buf1161[200];
+char buf1162[200];
+char buf1163[200];
+char buf1164[200];
+char buf1165[200];
+char buf1166[200];
+char buf1167[200];
+char buf1168[200];
+char buf1169[200];
+char buf1170[200];
+char buf1171[200];
+char buf1172[200];
+char buf1173[200];
+char buf1174[200];
+char buf1175[200];
+char buf1176[200];
+char buf1177[200];
+char buf1178[200];
+char buf1179[200];
+char buf1180[200];
+char buf1181[200];
+char buf1182[200];
+char buf1183[200];
+char buf1184[200];
+char buf1185[200];
+char buf1186[200];
+char buf1187[200];
+char buf1188[200];
+char buf1189[200];
+char buf1190[200];
+char buf1191[200];
+char buf1192[200];
+char buf1193[200];
+char buf1194[200];
+char buf1195[200];
+char buf1196[200];
+char buf1197[200];
+char buf1198[200];
+char buf1199[200];
+char buf1200[200];
+char buf1201[200];
+char buf1202[200];
+char buf1203[200];
+char buf1204[200];
+char buf1205[200];
+char buf1206[200];
+char buf1207[200];
+char buf1208[200];
+char buf1209[200];
+char buf1210[200];
+char buf1211[200];
+char buf1212[200];
+char buf1213[200];
+char buf1214[200];
+char buf1215[200];
+char buf1216[200];
+char buf1217[200];
+char buf1218[200];
+char buf1219[200];
+char buf1220[200];
+char buf1221[200];
+char buf1222[200];
+char buf1223[200];
+char buf1224[200];
+char buf1225[200];
+char buf1226[200];
+char buf1227[200];
+char buf1228[200];
+char buf1229[200];
+char buf1230[200];
+char buf1231[200];
+char buf1232[200];
+char buf1233[200];
+char buf1234[200];
+char buf1235[200];
+char buf1236[200];
+char buf1237[200];
+char buf1238[200];
+char buf1239[200];
+char buf1240[200];
+char buf1241[200];
+char buf1242[200];
+char buf1243[200];
+char buf1244[200];
+char buf1245[200];
+char buf1246[200];
+char buf1247[200];
+char buf1248[200];
+char buf1249[200];
+char buf1250[200];
+char buf1251[200];
+char buf1252[200];
+char buf1253[200];
+char buf1254[200];
+char buf1255[200];
+char buf1256[200];
+char buf1257[200];
+char buf1258[200];
+char buf1259[200];
+char buf1260[200];
+char buf1261[200];
+char buf1262[200];
+char buf1263[200];
+char buf1264[200];
+char buf1265[200];
+char buf1266[200];
+char buf1267[200];
+char buf1268[200];
+char buf1269[200];
+char buf1270[200];
+char buf1271[200];
+char buf1272[200];
+char buf1273[200];
+char buf1274[200];
+char buf1275[200];
+char buf1276[200];
+char buf1277[200];
+char buf1278[200];
+char buf1279[200];
+char buf1280[200];
+char buf1281[200];
+char buf1282[200];
+char buf1283[200];
+char buf1284[200];
+char buf1285[200];
+char buf1286[200];
+char buf1287[200];
+char buf1288[200];
+char buf1289[200];
+char buf1290[200];
+char buf1291[200];
+char buf1292[200];
+char buf1293[200];
+char buf1294[200];
+char buf1295[200];
+char buf1296[200];
+char buf1297[200];
+char buf1298[200];
+char buf1299[200];
+char buf1300[200];
+char buf1301[200];
+char buf1302[200];
+char buf1303[200];
+char buf1304[200];
+char buf1305[200];
+char buf1306[200];
+char buf1307[200];
+char buf1308[200];
+char buf1309[200];
+char buf1310[200];
+char buf1311[200];
+char buf1312[200];
+char buf1313[200];
+char buf1314[200];
+char buf1315[200];
+char buf1316[200];
+char buf1317[200];
+char buf1318[200];
+char buf1319[200];
+char buf1320[200];
+char buf1321[200];
+char buf1322[200];
+char buf1323[200];
+char buf1324[200];
+char buf1325[200];
+char buf1326[200];
+char buf1327[200];
+char buf1328[200];
+char buf1329[200];
+char buf1330[200];
+char buf1331[200];
+char buf1332[200];
+char buf1333[200];
+char buf1334[200];
+char buf1335[200];
+char buf1336[200];
+char buf1337[200];
+char buf1338[200];
+char buf1339[200];
+char buf1340[200];
+char buf1341[200];
+char buf1342[200];
+char buf1343[200];
+char buf1344[200];
+char buf1345[200];
+char buf1346[200];
+char buf1347[200];
+char buf1348[200];
+char buf1349[200];
+char buf1350[200];
+char buf1351[200];
+char buf1352[200];
+char buf1353[200];
+char buf1354[200];
+char buf1355[200];
+char buf1356[200];
+char buf1357[200];
+char buf1358[200];
+char buf1359[200];
+char buf1360[200];
+char buf1361[200];
+char buf1362[200];
+char buf1363[200];
+char buf1364[200];
+char buf1365[200];
+char buf1366[200];
+char buf1367[200];
+char buf1368[200];
+char buf1369[200];
+char buf1370[200];
+char buf1371[200];
+char buf1372[200];
+char buf1373[200];
+char buf1374[200];
+char buf1375[200];
+char buf1376[200];
+char buf1377[200];
+char buf1378[200];
+char buf1379[200];
+char buf1380[200];
+char buf1381[200];
+char buf1382[200];
+char buf1383[200];
+char buf1384[200];
+char buf1385[200];
+char buf1386[200];
+char buf1387[200];
+char buf1388[200];
+char buf1389[200];
+char buf1390[200];
+char buf1391[200];
+char buf1392[200];
+char buf1393[200];
+char buf1394[200];
+char buf1395[200];
+char buf1396[200];
+char buf1397[200];
+char buf1398[200];
+char buf1399[200];
+char buf1400[200];
+char buf1401[200];
+char buf1402[200];
+char buf1403[200];
+char buf1404[200];
+char buf1405[200];
+char buf1406[200];
+char buf1407[200];
+char buf1408[200];
+char buf1409[200];
+char buf1410[200];
+char buf1411[200];
+char buf1412[200];
+char buf1413[200];
+char buf1414[200];
+char buf1415[200];
+char buf1416[200];
+char buf1417[200];
+char buf1418[200];
+char buf1419[200];
+char buf1420[200];
+char buf1421[200];
+char buf1422[200];
+char buf1423[200];
+char buf1424[200];
+char buf1425[200];
+char buf1426[200];
+char buf1427[200];
+char buf1428[200];
+char buf1429[200];
+char buf1430[200];
+char buf1431[200];
+char buf1432[200];
+char buf1433[200];
+char buf1434[200];
+char buf1435[200];
+char buf1436[200];
+char buf1437[200];
+char buf1438[200];
+char buf1439[200];
+char buf1440[200];
+char buf1441[200];
+char buf1442[200];
+char buf1443[200];
+char buf1444[200];
+char buf1445[200];
+char buf1446[200];
+char buf1447[200];
+char buf1448[200];
+char buf1449[200];
+char buf1450[200];
+char buf1451[200];
+char buf1452[200];
+char buf1453[200];
+char buf1454[200];
+char buf1455[200];
+char buf1456[200];
+char buf1457[200];
+char buf1458[200];
+char buf1459[200];
+char buf1460[200];
+char buf1461[200];
+char buf1462[200];
+char buf1463[200];
+char buf1464[200];
+char buf1465[200];
+char buf1466[200];
+char buf1467[200];
+char buf1468[200];
+char buf1469[200];
+char buf1470[200];
+char buf1471[200];
+char buf1472[200];
+char buf1473[200];
+char buf1474[200];
+char buf1475[200];
+char buf1476[200];
+char buf1477[200];
+char buf1478[200];
+char buf1479[200];
+char buf1480[200];
+char buf1481[200];
+char buf1482[200];
+char buf1483[200];
+char buf1484[200];
+char buf1485[200];
+char buf1486[200];
+char buf1487[200];
+char buf1488[200];
+char buf1489[200];
+char buf1490[200];
+char buf1491[200];
+char buf1492[200];
+char buf1493[200];
+char buf1494[200];
+char buf1495[200];
+char buf1496[200];
+char buf1497[200];
+char buf1498[200];
+char buf1499[200];
+char buf1500[200];
+char buf1501[200];
+char buf1502[200];
+char buf1503[200];
+char buf1504[200];
+char buf1505[200];
+char buf1506[200];
+char buf1507[200];
+char buf1508[200];
+char buf1509[200];
+char buf1510[200];
+char buf1511[200];
+char buf1512[200];
+char buf1513[200];
+char buf1514[200];
+char buf1515[200];
+char buf1516[200];
+char buf1517[200];
+char buf1518[200];
+char buf1519[200];
+char buf1520[200];
+char buf1521[200];
+char buf1522[200];
+char buf1523[200];
+char buf1524[200];
+char buf1525[200];
+char buf1526[200];
+char buf1527[200];
+char buf1528[200];
+char buf1529[200];
+char buf1530[200];
+char buf1531[200];
+char buf1532[200];
+char buf1533[200];
+char buf1534[200];
+char buf1535[200];
+char buf1536[200];
+char buf1537[200];
+char buf1538[200];
+char buf1539[200];
+char buf1540[200];
+char buf1541[200];
+char buf1542[200];
+char buf1543[200];
+char buf1544[200];
+char buf1545[200];
+char buf1546[200];
+char buf1547[200];
+char buf1548[200];
+char buf1549[200];
+char buf1550[200];
+char buf1551[200];
+char buf1552[200];
+char buf1553[200];
+char buf1554[200];
+char buf1555[200];
+char buf1556[200];
+char buf1557[200];
+char buf1558[200];
+char buf1559[200];
+char buf1560[200];
+char buf1561[200];
+char buf1562[200];
+char buf1563[200];
+char buf1564[200];
+char buf1565[200];
+char buf1566[200];
+char buf1567[200];
+char buf1568[200];
+char buf1569[200];
+char buf1570[200];
+char buf1571[200];
+char buf1572[200];
+char buf1573[200];
+char buf1574[200];
+char buf1575[200];
+char buf1576[200];
+char buf1577[200];
+char buf1578[200];
+char buf1579[200];
+char buf1580[200];
+char buf1581[200];
+char buf1582[200];
+char buf1583[200];
+char buf1584[200];
+char buf1585[200];
+char buf1586[200];
+char buf1587[200];
+char buf1588[200];
+char buf1589[200];
+char buf1590[200];
+char buf1591[200];
+char buf1592[200];
+char buf1593[200];
+char buf1594[200];
+char buf1595[200];
+char buf1596[200];
+char buf1597[200];
+char buf1598[200];
+char buf1599[200];
+char buf1600[200];
+char buf1601[200];
+char buf1602[200];
+char buf1603[200];
+char buf1604[200];
+char buf1605[200];
+char buf1606[200];
+char buf1607[200];
+char buf1608[200];
+char buf1609[200];
+char buf1610[200];
+char buf1611[200];
+char buf1612[200];
+char buf1613[200];
+char buf1614[200];
+char buf1615[200];
+char buf1616[200];
+char buf1617[200];
+char buf1618[200];
+char buf1619[200];
+char buf1620[200];
+char buf1621[200];
+char buf1622[200];
+char buf1623[200];
+char buf1624[200];
+char buf1625[200];
+char buf1626[200];
+char buf1627[200];
+char buf1628[200];
+char buf1629[200];
+char buf1630[200];
+char buf1631[200];
+char buf1632[200];
+char buf1633[200];
+char buf1634[200];
+char buf1635[200];
+char buf1636[200];
+char buf1637[200];
+char buf1638[200];
+char buf1639[200];
+char buf1640[200];
+char buf1641[200];
+char buf1642[200];
+char buf1643[200];
+char buf1644[200];
+char buf1645[200];
+char buf1646[200];
+char buf1647[200];
+char buf1648[200];
+char buf1649[200];
+char buf1650[200];
+char buf1651[200];
+char buf1652[200];
+char buf1653[200];
+char buf1654[200];
+char buf1655[200];
+char buf1656[200];
+char buf1657[200];
+char buf1658[200];
+char buf1659[200];
+char buf1660[200];
+char buf1661[200];
+char buf1662[200];
+char buf1663[200];
+char buf1664[200];
+char buf1665[200];
+char buf1666[200];
+char buf1667[200];
+char buf1668[200];
+char buf1669[200];
+char buf1670[200];
+char buf1671[200];
+char buf1672[200];
+char buf1673[200];
+char buf1674[200];
+char buf1675[200];
+char buf1676[200];
+char buf1677[200];
+char buf1678[200];
+char buf1679[200];
+char buf1680[200];
+char buf1681[200];
+char buf1682[200];
+char buf1683[200];
+char buf1684[200];
+char buf1685[200];
+char buf1686[200];
+char buf1687[200];
+char buf1688[200];
+char buf1689[200];
+char buf1690[200];
+char buf1691[200];
+char buf1692[200];
+char buf1693[200];
+char buf1694[200];
+char buf1695[200];
+char buf1696[200];
+char buf1697[200];
+char buf1698[200];
+char buf1699[200];
+char buf1700[200];
+char buf1701[200];
+char buf1702[200];
+char buf1703[200];
+char buf1704[200];
+char buf1705[200];
+char buf1706[200];
+char buf1707[200];
+char buf1708[200];
+char buf1709[200];
+char buf1710[200];
+char buf1711[200];
+char buf1712[200];
+char buf1713[200];
+char buf1714[200];
+char buf1715[200];
+char buf1716[200];
+char buf1717[200];
+char buf1718[200];
+char buf1719[200];
+char buf1720[200];
+char buf1721[200];
+char buf1722[200];
+char buf1723[200];
+char buf1724[200];
+char buf1725[200];
+char buf1726[200];
+char buf1727[200];
+char buf1728[200];
+char buf1729[200];
+char buf1730[200];
+char buf1731[200];
+char buf1732[200];
+char buf1733[200];
+char buf1734[200];
+char buf1735[200];
+char buf1736[200];
+char buf1737[200];
+char buf1738[200];
+char buf1739[200];
+char buf1740[200];
+char buf1741[200];
+char buf1742[200];
+char buf1743[200];
+char buf1744[200];
+char buf1745[200];
+char buf1746[200];
+char buf1747[200];
+char buf1748[200];
+char buf1749[200];
+char buf1750[200];
+char buf1751[200];
+char buf1752[200];
+char buf1753[200];
+char buf1754[200];
+char buf1755[200];
+char buf1756[200];
+char buf1757[200];
+char buf1758[200];
+char buf1759[200];
+char buf1760[200];
+char buf1761[200];
+char buf1762[200];
+char buf1763[200];
+char buf1764[200];
+char buf1765[200];
+char buf1766[200];
+char buf1767[200];
+char buf1768[200];
+char buf1769[200];
+char buf1770[200];
+char buf1771[200];
+char buf1772[200];
+char buf1773[200];
+char buf1774[200];
+char buf1775[200];
+char buf1776[200];
+char buf1777[200];
+char buf1778[200];
+char buf1779[200];
+char buf1780[200];
+char buf1781[200];
+char buf1782[200];
+char buf1783[200];
+char buf1784[200];
+char buf1785[200];
+char buf1786[200];
+char buf1787[200];
+char buf1788[200];
+char buf1789[200];
+char buf1790[200];
+char buf1791[200];
+char buf1792[200];
+char buf1793[200];
+char buf1794[200];
+char buf1795[200];
+char buf1796[200];
+char buf1797[200];
+char buf1798[200];
+char buf1799[200];
+char buf1800[200];
+char buf1801[200];
+char buf1802[200];
+char buf1803[200];
+char buf1804[200];
+char buf1805[200];
+char buf1806[200];
+char buf1807[200];
+char buf1808[200];
+char buf1809[200];
+char buf1810[200];
+char buf1811[200];
+char buf1812[200];
+char buf1813[200];
+char buf1814[200];
+char buf1815[200];
+char buf1816[200];
+char buf1817[200];
+char buf1818[200];
+char buf1819[200];
+char buf1820[200];
+char buf1821[200];
+char buf1822[200];
+char buf1823[200];
+char buf1824[200];
+char buf1825[200];
+char buf1826[200];
+char buf1827[200];
+char buf1828[200];
+char buf1829[200];
+char buf1830[200];
+char buf1831[200];
+char buf1832[200];
+char buf1833[200];
+char buf1834[200];
+char buf1835[200];
+char buf1836[200];
+char buf1837[200];
+char buf1838[200];
+char buf1839[200];
+char buf1840[200];
+char buf1841[200];
+char buf1842[200];
+char buf1843[200];
+char buf1844[200];
+char buf1845[200];
+char buf1846[200];
+char buf1847[200];
+char buf1848[200];
+char buf1849[200];
+char buf1850[200];
+char buf1851[200];
+char buf1852[200];
+char buf1853[200];
+char buf1854[200];
+char buf1855[200];
+char buf1856[200];
+char buf1857[200];
+char buf1858[200];
+char buf1859[200];
+char buf1860[200];
+char buf1861[200];
+char buf1862[200];
+char buf1863[200];
+char buf1864[200];
+char buf1865[200];
+char buf1866[200];
+char buf1867[200];
+char buf1868[200];
+char buf1869[200];
+char buf1870[200];
+char buf1871[200];
+char buf1872[200];
+char buf1873[200];
+char buf1874[200];
+char buf1875[200];
+char buf1876[200];
+char buf1877[200];
+char buf1878[200];
+char buf1879[200];
+char buf1880[200];
+char buf1881[200];
+char buf1882[200];
+char buf1883[200];
+char buf1884[200];
+char buf1885[200];
+char buf1886[200];
+char buf1887[200];
+char buf1888[200];
+char buf1889[200];
+char buf1890[200];
+char buf1891[200];
+char buf1892[200];
+char buf1893[200];
+char buf1894[200];
+char buf1895[200];
+char buf1896[200];
+char buf1897[200];
+char buf1898[200];
+char buf1899[200];
+char buf1900[200];
+char buf1901[200];
+char buf1902[200];
+char buf1903[200];
+char buf1904[200];
+char buf1905[200];
+char buf1906[200];
+char buf1907[200];
+char buf1908[200];
+char buf1909[200];
+char buf1910[200];
+char buf1911[200];
+char buf1912[200];
+char buf1913[200];
+char buf1914[200];
+char buf1915[200];
+char buf1916[200];
+char buf1917[200];
+char buf1918[200];
+char buf1919[200];
+char buf1920[200];
+char buf1921[200];
+char buf1922[200];
+char buf1923[200];
+char buf1924[200];
+char buf1925[200];
+char buf1926[200];
+char buf1927[200];
+char buf1928[200];
+char buf1929[200];
+char buf1930[200];
+char buf1931[200];
+char buf1932[200];
+char buf1933[200];
+char buf1934[200];
+char buf1935[200];
+char buf1936[200];
+char buf1937[200];
+char buf1938[200];
+char buf1939[200];
+char buf1940[200];
+char buf1941[200];
+char buf1942[200];
+char buf1943[200];
+char buf1944[200];
+char buf1945[200];
+char buf1946[200];
+char buf1947[200];
+char buf1948[200];
+char buf1949[200];
+char buf1950[200];
+char buf1951[200];
+char buf1952[200];
+char buf1953[200];
+char buf1954[200];
+char buf1955[200];
+char buf1956[200];
+char buf1957[200];
+char buf1958[200];
+char buf1959[200];
+char buf1960[200];
+char buf1961[200];
+char buf1962[200];
+char buf1963[200];
+char buf1964[200];
+char buf1965[200];
+char buf1966[200];
+char buf1967[200];
+char buf1968[200];
+char buf1969[200];
+char buf1970[200];
+char buf1971[200];
+char buf1972[200];
+char buf1973[200];
+char buf1974[200];
+char buf1975[200];
+char buf1976[200];
+char buf1977[200];
+char buf1978[200];
+char buf1979[200];
+char buf1980[200];
+char buf1981[200];
+char buf1982[200];
+char buf1983[200];
+char buf1984[200];
+char buf1985[200];
+char buf1986[200];
+char buf1987[200];
+char buf1988[200];
+char buf1989[200];
+char buf1990[200];
+char buf1991[200];
+char buf1992[200];
+char buf1993[200];
+char buf1994[200];
+char buf1995[200];
+char buf1996[200];
+char buf1997[200];
+char buf1998[200];
+char buf1999[200];
+char buf2000[200];
+char buf2001[200];
+char buf2002[200];
+char buf2003[200];
+char buf2004[200];
+char buf2005[200];
+char buf2006[200];
+char buf2007[200];
+char buf2008[200];
+char buf2009[200];
+char buf2010[200];
+char buf2011[200];
+char buf2012[200];
+char buf2013[200];
+char buf2014[200];
+char buf2015[200];
+char buf2016[200];
+char buf2017[200];
+char buf2018[200];
+char buf2019[200];
+char buf2020[200];
+char buf2021[200];
+char buf2022[200];
+char buf2023[200];
+char buf2024[200];
+char buf2025[200];
+char buf2026[200];
+char buf2027[200];
+char buf2028[200];
+char buf2029[200];
+char buf2030[200];
+char buf2031[200];
+char buf2032[200];
+char buf2033[200];
+char buf2034[200];
+char buf2035[200];
+char buf2036[200];
+char buf2037[200];
+char buf2038[200];
+char buf2039[200];
+char buf2040[200];
+char buf2041[200];
+char buf2042[200];
+char buf2043[200];
+char buf2044[200];
+char buf2045[200];
+char buf2046[200];
+char buf2047[200];
+char buf2048[200];
+char buf2049[200];
+char buf2050[200];
+char buf2051[200];
+char buf2052[200];
+char buf2053[200];
+char buf2054[200];
+char buf2055[200];
+char buf2056[200];
+char buf2057[200];
+char buf2058[200];
+char buf2059[200];
+char buf2060[200];
+char buf2061[200];
+char buf2062[200];
+char buf2063[200];
+char buf2064[200];
+char buf2065[200];
+char buf2066[200];
+char buf2067[200];
+char buf2068[200];
+char buf2069[200];
+char buf2070[200];
+char buf2071[200];
+char buf2072[200];
+char buf2073[200];
+char buf2074[200];
+char buf2075[200];
+char buf2076[200];
+char buf2077[200];
+char buf2078[200];
+char buf2079[200];
+char buf2080[200];
+char buf2081[200];
+char buf2082[200];
+char buf2083[200];
+char buf2084[200];
+char buf2085[200];
+char buf2086[200];
+char buf2087[200];
+char buf2088[200];
+char buf2089[200];
+char buf2090[200];
+char buf2091[200];
+char buf2092[200];
+char buf2093[200];
+char buf2094[200];
+char buf2095[200];
+char buf2096[200];
+char buf2097[200];
+char buf2098[200];
+char buf2099[200];
+char buf2100[200];
+char buf2101[200];
+char buf2102[200];
+char buf2103[200];
+char buf2104[200];
+char buf2105[200];
+char buf2106[200];
+char buf2107[200];
+char buf2108[200];
+char buf2109[200];
+char buf2110[200];
+char buf2111[200];
+char buf2112[200];
+char buf2113[200];
+char buf2114[200];
+char buf2115[200];
+char buf2116[200];
+char buf2117[200];
+char buf2118[200];
+char buf2119[200];
+char buf2120[200];
+char buf2121[200];
+char buf2122[200];
+char buf2123[200];
+char buf2124[200];
+char buf2125[200];
+char buf2126[200];
+char buf2127[200];
+char buf2128[200];
+char buf2129[200];
+char buf2130[200];
+char buf2131[200];
+char buf2132[200];
+char buf2133[200];
+char buf2134[200];
+char buf2135[200];
+char buf2136[200];
+char buf2137[200];
+char buf2138[200];
+char buf2139[200];
+char buf2140[200];
+char buf2141[200];
+char buf2142[200];
+char buf2143[200];
+char buf2144[200];
+char buf2145[200];
+char buf2146[200];
+char buf2147[200];
+char buf2148[200];
+char buf2149[200];
+char buf2150[200];
+char buf2151[200];
+char buf2152[200];
+char buf2153[200];
+char buf2154[200];
+char buf2155[200];
+char buf2156[200];
+char buf2157[200];
+char buf2158[200];
+char buf2159[200];
+char buf2160[200];
+char buf2161[200];
+char buf2162[200];
+char buf2163[200];
+char buf2164[200];
+char buf2165[200];
+char buf2166[200];
+char buf2167[200];
+char buf2168[200];
+char buf2169[200];
+char buf2170[200];
+char buf2171[200];
+char buf2172[200];
+char buf2173[200];
+char buf2174[200];
+char buf2175[200];
+char buf2176[200];
+char buf2177[200];
+char buf2178[200];
+char buf2179[200];
+char buf2180[200];
+char buf2181[200];
+char buf2182[200];
+char buf2183[200];
+char buf2184[200];
+char buf2185[200];
+char buf2186[200];
+char buf2187[200];
+char buf2188[200];
+char buf2189[200];
+char buf2190[200];
+char buf2191[200];
+char buf2192[200];
+char buf2193[200];
+char buf2194[200];
+char buf2195[200];
+char buf2196[200];
+char buf2197[200];
+char buf2198[200];
+char buf2199[200];
+char buf2200[200];
+char buf2201[200];
+char buf2202[200];
+char buf2203[200];
+char buf2204[200];
+char buf2205[200];
+char buf2206[200];
+char buf2207[200];
+char buf2208[200];
+char buf2209[200];
+char buf2210[200];
+char buf2211[200];
+char buf2212[200];
+char buf2213[200];
+char buf2214[200];
+char buf2215[200];
+char buf2216[200];
+char buf2217[200];
+char buf2218[200];
+char buf2219[200];
+char buf2220[200];
+char buf2221[200];
+char buf2222[200];
+char buf2223[200];
+char buf2224[200];
+char buf2225[200];
+char buf2226[200];
+char buf2227[200];
+char buf2228[200];
+char buf2229[200];
+char buf2230[200];
+char buf2231[200];
+char buf2232[200];
+char buf2233[200];
+char buf2234[200];
+char buf2235[200];
+char buf2236[200];
+char buf2237[200];
+char buf2238[200];
+char buf2239[200];
+char buf2240[200];
+char buf2241[200];
+char buf2242[200];
+char buf2243[200];
+char buf2244[200];
+char buf2245[200];
+char buf2246[200];
+char buf2247[200];
+char buf2248[200];
+char buf2249[200];
+char buf2250[200];
+char buf2251[200];
+char buf2252[200];
+char buf2253[200];
+char buf2254[200];
+char buf2255[200];
+char buf2256[200];
+char buf2257[200];
+char buf2258[200];
+char buf2259[200];
+char buf2260[200];
+char buf2261[200];
+char buf2262[200];
+char buf2263[200];
+char buf2264[200];
+char buf2265[200];
+char buf2266[200];
+char buf2267[200];
+char buf2268[200];
+char buf2269[200];
+char buf2270[200];
+char buf2271[200];
+char buf2272[200];
+char buf2273[200];
+char buf2274[200];
+char buf2275[200];
+char buf2276[200];
+char buf2277[200];
+char buf2278[200];
+char buf2279[200];
+char buf2280[200];
+char buf2281[200];
+char buf2282[200];
+char buf2283[200];
+char buf2284[200];
+char buf2285[200];
+char buf2286[200];
+char buf2287[200];
+char buf2288[200];
+char buf2289[200];
+char buf2290[200];
+char buf2291[200];
+char buf2292[200];
+char buf2293[200];
+char buf2294[200];
+char buf2295[200];
+char buf2296[200];
+char buf2297[200];
+char buf2298[200];
+char buf2299[200];
+char buf2300[200];
+char buf2301[200];
+char buf2302[200];
+char buf2303[200];
+char buf2304[200];
+char buf2305[200];
+char buf2306[200];
+char buf2307[200];
+char buf2308[200];
+char buf2309[200];
+char buf2310[200];
+char buf2311[200];
+char buf2312[200];
+char buf2313[200];
+char buf2314[200];
+char buf2315[200];
+char buf2316[200];
+char buf2317[200];
+char buf2318[200];
+char buf2319[200];
+char buf2320[200];
+char buf2321[200];
+char buf2322[200];
+char buf2323[200];
+char buf2324[200];
+char buf2325[200];
+char buf2326[200];
+char buf2327[200];
+char buf2328[200];
+char buf2329[200];
+char buf2330[200];
+char buf2331[200];
+char buf2332[200];
+char buf2333[200];
+char buf2334[200];
+char buf2335[200];
+char buf2336[200];
+char buf2337[200];
+char buf2338[200];
+char buf2339[200];
+char buf2340[200];
+char buf2341[200];
+char buf2342[200];
+char buf2343[200];
+char buf2344[200];
+char buf2345[200];
+char buf2346[200];
+char buf2347[200];
+char buf2348[200];
+char buf2349[200];
+char buf2350[200];
+char buf2351[200];
+char buf2352[200];
+char buf2353[200];
+char buf2354[200];
+char buf2355[200];
+char buf2356[200];
+char buf2357[200];
+char buf2358[200];
+char buf2359[200];
+char buf2360[200];
+char buf2361[200];
+char buf2362[200];
+char buf2363[200];
+char buf2364[200];
+char buf2365[200];
+char buf2366[200];
+char buf2367[200];
+char buf2368[200];
+char buf2369[200];
+char buf2370[200];
+char buf2371[200];
+char buf2372[200];
+char buf2373[200];
+char buf2374[200];
+char buf2375[200];
+char buf2376[200];
+char buf2377[200];
+char buf2378[200];
+char buf2379[200];
+char buf2380[200];
+char buf2381[200];
+char buf2382[200];
+char buf2383[200];
+char buf2384[200];
+char buf2385[200];
+char buf2386[200];
+char buf2387[200];
+char buf2388[200];
+char buf2389[200];
+char buf2390[200];
+char buf2391[200];
+char buf2392[200];
+char buf2393[200];
+char buf2394[200];
+char buf2395[200];
+char buf2396[200];
+char buf2397[200];
+char buf2398[200];
+char buf2399[200];
+char buf2400[200];
+char buf2401[200];
+char buf2402[200];
+char buf2403[200];
+char buf2404[200];
+char buf2405[200];
+char buf2406[200];
+char buf2407[200];
+char buf2408[200];
+char buf2409[200];
+char buf2410[200];
+char buf2411[200];
+char buf2412[200];
+char buf2413[200];
+char buf2414[200];
+char buf2415[200];
+char buf2416[200];
+char buf2417[200];
+char buf2418[200];
+char buf2419[200];
+char buf2420[200];
+char buf2421[200];
+char buf2422[200];
+char buf2423[200];
+char buf2424[200];
+char buf2425[200];
+char buf2426[200];
+char buf2427[200];
+char buf2428[200];
+char buf2429[200];
+char buf2430[200];
+char buf2431[200];
+char buf2432[200];
+char buf2433[200];
+char buf2434[200];
+char buf2435[200];
+char buf2436[200];
+char buf2437[200];
+char buf2438[200];
+char buf2439[200];
+char buf2440[200];
+char buf2441[200];
+char buf2442[200];
+char buf2443[200];
+char buf2444[200];
+char buf2445[200];
+char buf2446[200];
+char buf2447[200];
+char buf2448[200];
+char buf2449[200];
+char buf2450[200];
+char buf2451[200];
+char buf2452[200];
+char buf2453[200];
+char buf2454[200];
+char buf2455[200];
+char buf2456[200];
+char buf2457[200];
+char buf2458[200];
+char buf2459[200];
+char buf2460[200];
+char buf2461[200];
+char buf2462[200];
+char buf2463[200];
+char buf2464[200];
+char buf2465[200];
+char buf2466[200];
+char buf2467[200];
+char buf2468[200];
+char buf2469[200];
+char buf2470[200];
+char buf2471[200];
+char buf2472[200];
+char buf2473[200];
+char buf2474[200];
+char buf2475[200];
+char buf2476[200];
+char buf2477[200];
+char buf2478[200];
+char buf2479[200];
+char buf2480[200];
+char buf2481[200];
+char buf2482[200];
+char buf2483[200];
+char buf2484[200];
+char buf2485[200];
+char buf2486[200];
+char buf2487[200];
+char buf2488[200];
+char buf2489[200];
+char buf2490[200];
+char buf2491[200];
+char buf2492[200];
+char buf2493[200];
+char buf2494[200];
+char buf2495[200];
+char buf2496[200];
+char buf2497[200];
+char buf2498[200];
+char buf2499[200];
+char buf2500[200];
+char buf2501[200];
+char buf2502[200];
+char buf2503[200];
+char buf2504[200];
+char buf2505[200];
+char buf2506[200];
+char buf2507[200];
+char buf2508[200];
+char buf2509[200];
+char buf2510[200];
+char buf2511[200];
+char buf2512[200];
+char buf2513[200];
+char buf2514[200];
+char buf2515[200];
+char buf2516[200];
+char buf2517[200];
+char buf2518[200];
+char buf2519[200];
+char buf2520[200];
+char buf2521[200];
+char buf2522[200];
+char buf2523[200];
+char buf2524[200];
+char buf2525[200];
+char buf2526[200];
+char buf2527[200];
+char buf2528[200];
+char buf2529[200];
+char buf2530[200];
+char buf2531[200];
+char buf2532[200];
+char buf2533[200];
+char buf2534[200];
+char buf2535[200];
+char buf2536[200];
+char buf2537[200];
+char buf2538[200];
+char buf2539[200];
+char buf2540[200];
+char buf2541[200];
+char buf2542[200];
+char buf2543[200];
+char buf2544[200];
+char buf2545[200];
+char buf2546[200];
+char buf2547[200];
+char buf2548[200];
+char buf2549[200];
+char buf2550[200];
+char buf2551[200];
+char buf2552[200];
+char buf2553[200];
+char buf2554[200];
+char buf2555[200];
+char buf2556[200];
+char buf2557[200];
+char buf2558[200];
+char buf2559[200];
+char buf2560[200];
+char buf2561[200];
+char buf2562[200];
+char buf2563[200];
+char buf2564[200];
+char buf2565[200];
+char buf2566[200];
+char buf2567[200];
+char buf2568[200];
+char buf2569[200];
+char buf2570[200];
+char buf2571[200];
+char buf2572[200];
+char buf2573[200];
+char buf2574[200];
+char buf2575[200];
+char buf2576[200];
+char buf2577[200];
+char buf2578[200];
+char buf2579[200];
+char buf2580[200];
+char buf2581[200];
+char buf2582[200];
+char buf2583[200];
+char buf2584[200];
+char buf2585[200];
+char buf2586[200];
+char buf2587[200];
+char buf2588[200];
+char buf2589[200];
+char buf2590[200];
+char buf2591[200];
+char buf2592[200];
+char buf2593[200];
+char buf2594[200];
+char buf2595[200];
+char buf2596[200];
+char buf2597[200];
+char buf2598[200];
+char buf2599[200];
+char buf2600[200];
+char buf2601[200];
+char buf2602[200];
+char buf2603[200];
+char buf2604[200];
+char buf2605[200];
+char buf2606[200];
+char buf2607[200];
+char buf2608[200];
+char buf2609[200];
+char buf2610[200];
+char buf2611[200];
+char buf2612[200];
+char buf2613[200];
+char buf2614[200];
+char buf2615[200];
+char buf2616[200];
+char buf2617[200];
+char buf2618[200];
+char buf2619[200];
+char buf2620[200];
+char buf2621[200];
+char buf2622[200];
+char buf2623[200];
+char buf2624[200];
+char buf2625[200];
+char buf2626[200];
+char buf2627[200];
+char buf2628[200];
+char buf2629[200];
+char buf2630[200];
+char buf2631[200];
+char buf2632[200];
+char buf2633[200];
+char buf2634[200];
+char buf2635[200];
+char buf2636[200];
+char buf2637[200];
+char buf2638[200];
+char buf2639[200];
+char buf2640[200];
+char buf2641[200];
+char buf2642[200];
+char buf2643[200];
+char buf2644[200];
+char buf2645[200];
+char buf2646[200];
+char buf2647[200];
+char buf2648[200];
+char buf2649[200];
+char buf2650[200];
+char buf2651[200];
+char buf2652[200];
+char buf2653[200];
+char buf2654[200];
+char buf2655[200];
+char buf2656[200];
+char buf2657[200];
+char buf2658[200];
+char buf2659[200];
+char buf2660[200];
+char buf2661[200];
+char buf2662[200];
+char buf2663[200];
+char buf2664[200];
+char buf2665[200];
+char buf2666[200];
+char buf2667[200];
+char buf2668[200];
+char buf2669[200];
+char buf2670[200];
+char buf2671[200];
+char buf2672[200];
+char buf2673[200];
+char buf2674[200];
+char buf2675[200];
+char buf2676[200];
+char buf2677[200];
+char buf2678[200];
+char buf2679[200];
+char buf2680[200];
+char buf2681[200];
+char buf2682[200];
+char buf2683[200];
+char buf2684[200];
+char buf2685[200];
+char buf2686[200];
+char buf2687[200];
+char buf2688[200];
+char buf2689[200];
+char buf2690[200];
+char buf2691[200];
+char buf2692[200];
+char buf2693[200];
+char buf2694[200];
+char buf2695[200];
+char buf2696[200];
+char buf2697[200];
+char buf2698[200];
+char buf2699[200];
+char buf2700[200];
+char buf2701[200];
+char buf2702[200];
+char buf2703[200];
+char buf2704[200];
+char buf2705[200];
+char buf2706[200];
+char buf2707[200];
+char buf2708[200];
+char buf2709[200];
+char buf2710[200];
+char buf2711[200];
+char buf2712[200];
+char buf2713[200];
+char buf2714[200];
+char buf2715[200];
+char buf2716[200];
+char buf2717[200];
+char buf2718[200];
+char buf2719[200];
+char buf2720[200];
+char buf2721[200];
+char buf2722[200];
+char buf2723[200];
+char buf2724[200];
+char buf2725[200];
+char buf2726[200];
+char buf2727[200];
+char buf2728[200];
+char buf2729[200];
+char buf2730[200];
+char buf2731[200];
+char buf2732[200];
+char buf2733[200];
+char buf2734[200];
+char buf2735[200];
+char buf2736[200];
+char buf2737[200];
+char buf2738[200];
+char buf2739[200];
+char buf2740[200];
+char buf2741[200];
+char buf2742[200];
+char buf2743[200];
+char buf2744[200];
+char buf2745[200];
+char buf2746[200];
+char buf2747[200];
+char buf2748[200];
+char buf2749[200];
+char buf2750[200];
+char buf2751[200];
+char buf2752[200];
+char buf2753[200];
+char buf2754[200];
+char buf2755[200];
+char buf2756[200];
+char buf2757[200];
+char buf2758[200];
+char buf2759[200];
+char buf2760[200];
+char buf2761[200];
+char buf2762[200];
+char buf2763[200];
+char buf2764[200];
+char buf2765[200];
+char buf2766[200];
+char buf2767[200];
+char buf2768[200];
+char buf2769[200];
+char buf2770[200];
+char buf2771[200];
+char buf2772[200];
+char buf2773[200];
+char buf2774[200];
+char buf2775[200];
+char buf2776[200];
+char buf2777[200];
+char buf2778[200];
+char buf2779[200];
+char buf2780[200];
+char buf2781[200];
+char buf2782[200];
+char buf2783[200];
+char buf2784[200];
+char buf2785[200];
+char buf2786[200];
+char buf2787[200];
+char buf2788[200];
+char buf2789[200];
+char buf2790[200];
+char buf2791[200];
+char buf2792[200];
+char buf2793[200];
+char buf2794[200];
+char buf2795[200];
+char buf2796[200];
+char buf2797[200];
+char buf2798[200];
+char buf2799[200];
+char buf2800[200];
+char buf2801[200];
+char buf2802[200];
+char buf2803[200];
+char buf2804[200];
+char buf2805[200];
+char buf2806[200];
+char buf2807[200];
+char buf2808[200];
+char buf2809[200];
+char buf2810[200];
+char buf2811[200];
+char buf2812[200];
+char buf2813[200];
+char buf2814[200];
+char buf2815[200];
+char buf2816[200];
+char buf2817[200];
+char buf2818[200];
+char buf2819[200];
+char buf2820[200];
+char buf2821[200];
+char buf2822[200];
+char buf2823[200];
+char buf2824[200];
+char buf2825[200];
+char buf2826[200];
+char buf2827[200];
+char buf2828[200];
+char buf2829[200];
+char buf2830[200];
+char buf2831[200];
+char buf2832[200];
+char buf2833[200];
+char buf2834[200];
+char buf2835[200];
+char buf2836[200];
+char buf2837[200];
+char buf2838[200];
+char buf2839[200];
+char buf2840[200];
+char buf2841[200];
+char buf2842[200];
+char buf2843[200];
+char buf2844[200];
+char buf2845[200];
+char buf2846[200];
+char buf2847[200];
+char buf2848[200];
+char buf2849[200];
+char buf2850[200];
+char buf2851[200];
+char buf2852[200];
+char buf2853[200];
+char buf2854[200];
+char buf2855[200];
+char buf2856[200];
+char buf2857[200];
+char buf2858[200];
+char buf2859[200];
+char buf2860[200];
+char buf2861[200];
+char buf2862[200];
+char buf2863[200];
+char buf2864[200];
+char buf2865[200];
+char buf2866[200];
+char buf2867[200];
+char buf2868[200];
+char buf2869[200];
+char buf2870[200];
+char buf2871[200];
+char buf2872[200];
+char buf2873[200];
+char buf2874[200];
+char buf2875[200];
+char buf2876[200];
+char buf2877[200];
+char buf2878[200];
+char buf2879[200];
+char buf2880[200];
+char buf2881[200];
+char buf2882[200];
+char buf2883[200];
+char buf2884[200];
+char buf2885[200];
+char buf2886[200];
+char buf2887[200];
+char buf2888[200];
+char buf2889[200];
+char buf2890[200];
+char buf2891[200];
+char buf2892[200];
+char buf2893[200];
+char buf2894[200];
+char buf2895[200];
+char buf2896[200];
+char buf2897[200];
+char buf2898[200];
+char buf2899[200];
+char buf2900[200];
+char buf2901[200];
+char buf2902[200];
+char buf2903[200];
+char buf2904[200];
+char buf2905[200];
+char buf2906[200];
+char buf2907[200];
+char buf2908[200];
+char buf2909[200];
+char buf2910[200];
+char buf2911[200];
+char buf2912[200];
+char buf2913[200];
+char buf2914[200];
+char buf2915[200];
+char buf2916[200];
+char buf2917[200];
+char buf2918[200];
+char buf2919[200];
+char buf2920[200];
+char buf2921[200];
+char buf2922[200];
+char buf2923[200];
+char buf2924[200];
+char buf2925[200];
+char buf2926[200];
+char buf2927[200];
+char buf2928[200];
+char buf2929[200];
+char buf2930[200];
+char buf2931[200];
+char buf2932[200];
+char buf2933[200];
+char buf2934[200];
+char buf2935[200];
+char buf2936[200];
+char buf2937[200];
+char buf2938[200];
+char buf2939[200];
+char buf2940[200];
+char buf2941[200];
+char buf2942[200];
+char buf2943[200];
+char buf2944[200];
+char buf2945[200];
+char buf2946[200];
+char buf2947[200];
+char buf2948[200];
+char buf2949[200];
+char buf2950[200];
+char buf2951[200];
+char buf2952[200];
+char buf2953[200];
+char buf2954[200];
+char buf2955[200];
+char buf2956[200];
+char buf2957[200];
+char buf2958[200];
+char buf2959[200];
+char buf2960[200];
+char buf2961[200];
+char buf2962[200];
+char buf2963[200];
+char buf2964[200];
+char buf2965[200];
+char buf2966[200];
+char buf2967[200];
+char buf2968[200];
+char buf2969[200];
+char buf2970[200];
+char buf2971[200];
+char buf2972[200];
+char buf2973[200];
+char buf2974[200];
+char buf2975[200];
+char buf2976[200];
+char buf2977[200];
+char buf2978[200];
+char buf2979[200];
+char buf2980[200];
+char buf2981[200];
+char buf2982[200];
+char buf2983[200];
+char buf2984[200];
+char buf2985[200];
+char buf2986[200];
+char buf2987[200];
+char buf2988[200];
+char buf2989[200];
+char buf2990[200];
+char buf2991[200];
+char buf2992[200];
+char buf2993[200];
+char buf2994[200];
+char buf2995[200];
+char buf2996[200];
+char buf2997[200];
+char buf2998[200];
+char buf2999[200];
+char buf3000[200];
+char buf3001[200];
+char buf3002[200];
+char buf3003[200];
+char buf3004[200];
+char buf3005[200];
+char buf3006[200];
+char buf3007[200];
+char buf3008[200];
+char buf3009[200];
+char buf3010[200];
+char buf3011[200];
+char buf3012[200];
+char buf3013[200];
+char buf3014[200];
+char buf3015[200];
+char buf3016[200];
+char buf3017[200];
+char buf3018[200];
+char buf3019[200];
+char buf3020[200];
+char buf3021[200];
+char buf3022[200];
+char buf3023[200];
+char buf3024[200];
+char buf3025[200];
+char buf3026[200];
+char buf3027[200];
+char buf3028[200];
+char buf3029[200];
+char buf3030[200];
+char buf3031[200];
+char buf3032[200];
+char buf3033[200];
+char buf3034[200];
+char buf3035[200];
+char buf3036[200];
+char buf3037[200];
+char buf3038[200];
+char buf3039[200];
+char buf3040[200];
+char buf3041[200];
+char buf3042[200];
+char buf3043[200];
+char buf3044[200];
+char buf3045[200];
+char buf3046[200];
+char buf3047[200];
+char buf3048[200];
+char buf3049[200];
+char buf3050[200];
+char buf3051[200];
+char buf3052[200];
+char buf3053[200];
+char buf3054[200];
+char buf3055[200];
+char buf3056[200];
+char buf3057[200];
+char buf3058[200];
+char buf3059[200];
+char buf3060[200];
+char buf3061[200];
+char buf3062[200];
+char buf3063[200];
+char buf3064[200];
+char buf3065[200];
+char buf3066[200];
+char buf3067[200];
+char buf3068[200];
+char buf3069[200];
+char buf3070[200];
+char buf3071[200];
+char buf3072[200];
+char buf3073[200];
+char buf3074[200];
+char buf3075[200];
+char buf3076[200];
+char buf3077[200];
+char buf3078[200];
+char buf3079[200];
+char buf3080[200];
+char buf3081[200];
+char buf3082[200];
+char buf3083[200];
+char buf3084[200];
+char buf3085[200];
+char buf3086[200];
+char buf3087[200];
+char buf3088[200];
+char buf3089[200];
+char buf3090[200];
+char buf3091[200];
+char buf3092[200];
+char buf3093[200];
+char buf3094[200];
+char buf3095[200];
+char buf3096[200];
+char buf3097[200];
+char buf3098[200];
+char buf3099[200];
+char buf3100[200];
+char buf3101[200];
+char buf3102[200];
+char buf3103[200];
+char buf3104[200];
+char buf3105[200];
+char buf3106[200];
+char buf3107[200];
+char buf3108[200];
+char buf3109[200];
+char buf3110[200];
+char buf3111[200];
+char buf3112[200];
+char buf3113[200];
+char buf3114[200];
+char buf3115[200];
+char buf3116[200];
+char buf3117[200];
+char buf3118[200];
+char buf3119[200];
+char buf3120[200];
+char buf3121[200];
+char buf3122[200];
+char buf3123[200];
+char buf3124[200];
+char buf3125[200];
+char buf3126[200];
+char buf3127[200];
+char buf3128[200];
+char buf3129[200];
+char buf3130[200];
+char buf3131[200];
+char buf3132[200];
+char buf3133[200];
+char buf3134[200];
+char buf3135[200];
+char buf3136[200];
+char buf3137[200];
+char buf3138[200];
+char buf3139[200];
+char buf3140[200];
+char buf3141[200];
+char buf3142[200];
+char buf3143[200];
+char buf3144[200];
+char buf3145[200];
+char buf3146[200];
+char buf3147[200];
+char buf3148[200];
+char buf3149[200];
+char buf3150[200];
+char buf3151[200];
+char buf3152[200];
+char buf3153[200];
+char buf3154[200];
+char buf3155[200];
+char buf3156[200];
+char buf3157[200];
+char buf3158[200];
+char buf3159[200];
+char buf3160[200];
+char buf3161[200];
+char buf3162[200];
+char buf3163[200];
+char buf3164[200];
+char buf3165[200];
+char buf3166[200];
+char buf3167[200];
+char buf3168[200];
+char buf3169[200];
+char buf3170[200];
+char buf3171[200];
+char buf3172[200];
+char buf3173[200];
+char buf3174[200];
+char buf3175[200];
+char buf3176[200];
+char buf3177[200];
+char buf3178[200];
+char buf3179[200];
+char buf3180[200];
+char buf3181[200];
+char buf3182[200];
+char buf3183[200];
+char buf3184[200];
+char buf3185[200];
+char buf3186[200];
+char buf3187[200];
+char buf3188[200];
+char buf3189[200];
+char buf3190[200];
+char buf3191[200];
+char buf3192[200];
+char buf3193[200];
+char buf3194[200];
+char buf3195[200];
+char buf3196[200];
+char buf3197[200];
+char buf3198[200];
+char buf3199[200];
+char buf3200[200];
+char buf3201[200];
+char buf3202[200];
+char buf3203[200];
+char buf3204[200];
+char buf3205[200];
+char buf3206[200];
+char buf3207[200];
+char buf3208[200];
+char buf3209[200];
+char buf3210[200];
+char buf3211[200];
+char buf3212[200];
+char buf3213[200];
+char buf3214[200];
+char buf3215[200];
+char buf3216[200];
+char buf3217[200];
+char buf3218[200];
+char buf3219[200];
+char buf3220[200];
+char buf3221[200];
+char buf3222[200];
+char buf3223[200];
+char buf3224[200];
+char buf3225[200];
+char buf3226[200];
+char buf3227[200];
+char buf3228[200];
+char buf3229[200];
+char buf3230[200];
+char buf3231[200];
+char buf3232[200];
+char buf3233[200];
+char buf3234[200];
+char buf3235[200];
+char buf3236[200];
+char buf3237[200];
+char buf3238[200];
+char buf3239[200];
+char buf3240[200];
+char buf3241[200];
+char buf3242[200];
+char buf3243[200];
+char buf3244[200];
+char buf3245[200];
+char buf3246[200];
+char buf3247[200];
+char buf3248[200];
+char buf3249[200];
+char buf3250[200];
+char buf3251[200];
+char buf3252[200];
+char buf3253[200];
+char buf3254[200];
+char buf3255[200];
+char buf3256[200];
+char buf3257[200];
+char buf3258[200];
+char buf3259[200];
+char buf3260[200];
+char buf3261[200];
+char buf3262[200];
+char buf3263[200];
+char buf3264[200];
+char buf3265[200];
+char buf3266[200];
+char buf3267[200];
+char buf3268[200];
+char buf3269[200];
+char buf3270[200];
+char buf3271[200];
+char buf3272[200];
+char buf3273[200];
+char buf3274[200];
+char buf3275[200];
+char buf3276[200];
+char buf3277[200];
+char buf3278[200];
+char buf3279[200];
+char buf3280[200];
+char buf3281[200];
+char buf3282[200];
+char buf3283[200];
+char buf3284[200];
+char buf3285[200];
+char buf3286[200];
+char buf3287[200];
+char buf3288[200];
+char buf3289[200];
+char buf3290[200];
+char buf3291[200];
+char buf3292[200];
+char buf3293[200];
+char buf3294[200];
+char buf3295[200];
+char buf3296[200];
+char buf3297[200];
+char buf3298[200];
+char buf3299[200];
+char buf3300[200];
+char buf3301[200];
+char buf3302[200];
+char buf3303[200];
+char buf3304[200];
+char buf3305[200];
+char buf3306[200];
+char buf3307[200];
+char buf3308[200];
+char buf3309[200];
+char buf3310[200];
+char buf3311[200];
+char buf3312[200];
+char buf3313[200];
+char buf3314[200];
+char buf3315[200];
+char buf3316[200];
+char buf3317[200];
+char buf3318[200];
+char buf3319[200];
+char buf3320[200];
+char buf3321[200];
+char buf3322[200];
+char buf3323[200];
+char buf3324[200];
+char buf3325[200];
+char buf3326[200];
+char buf3327[200];
+char buf3328[200];
+char buf3329[200];
+char buf3330[200];
+char buf3331[200];
+char buf3332[200];
+char buf3333[200];
+char buf3334[200];
+char buf3335[200];
+char buf3336[200];
+char buf3337[200];
+char buf3338[200];
+char buf3339[200];
+char buf3340[200];
+char buf3341[200];
+char buf3342[200];
+char buf3343[200];
+char buf3344[200];
+char buf3345[200];
+char buf3346[200];
+char buf3347[200];
+char buf3348[200];
+char buf3349[200];
+char buf3350[200];
+char buf3351[200];
+char buf3352[200];
+char buf3353[200];
+char buf3354[200];
+char buf3355[200];
+char buf3356[200];
+char buf3357[200];
+char buf3358[200];
+char buf3359[200];
+char buf3360[200];
+char buf3361[200];
+char buf3362[200];
+char buf3363[200];
+char buf3364[200];
+char buf3365[200];
+char buf3366[200];
+char buf3367[200];
+char buf3368[200];
+char buf3369[200];
+char buf3370[200];
+char buf3371[200];
+char buf3372[200];
+char buf3373[200];
+char buf3374[200];
+char buf3375[200];
+char buf3376[200];
+char buf3377[200];
+char buf3378[200];
+char buf3379[200];
+char buf3380[200];
+char buf3381[200];
+char buf3382[200];
+char buf3383[200];
+char buf3384[200];
+char buf3385[200];
+char buf3386[200];
+char buf3387[200];
+char buf3388[200];
+char buf3389[200];
+char buf3390[200];
+char buf3391[200];
+char buf3392[200];
+char buf3393[200];
+char buf3394[200];
+char buf3395[200];
+char buf3396[200];
+char buf3397[200];
+char buf3398[200];
+char buf3399[200];
+char buf3400[200];
+char buf3401[200];
+char buf3402[200];
+
+void RS_KERNEL test(int in) {
+    *(uchar*)buf0 = abs(*(char*)buf1);
+    *(uchar2*)buf2 = abs(*(char2*)buf3);
+    *(uchar3*)buf4 = abs(*(char3*)buf5);
+    *(uchar4*)buf6 = abs(*(char4*)buf7);
+    *(ushort*)buf8 = abs(*(short*)buf9);
+    *(ushort2*)buf10 = abs(*(short2*)buf11);
+    *(ushort3*)buf12 = abs(*(short3*)buf13);
+    *(ushort4*)buf14 = abs(*(short4*)buf15);
+    *(uint*)buf16 = abs(*(int*)buf17);
+    *(uint2*)buf18 = abs(*(int2*)buf19);
+    *(uint3*)buf20 = abs(*(int3*)buf21);
+    *(uint4*)buf22 = abs(*(int4*)buf23);
+    *(float*)buf24 = acos(*(float*)buf25);
+    *(float2*)buf26 = acos(*(float2*)buf27);
+    *(float3*)buf28 = acos(*(float3*)buf29);
+    *(float4*)buf30 = acos(*(float4*)buf31);
+    *(float*)buf32 = acosh(*(float*)buf33);
+    *(float2*)buf34 = acosh(*(float2*)buf35);
+    *(float3*)buf36 = acosh(*(float3*)buf37);
+    *(float4*)buf38 = acosh(*(float4*)buf39);
+    *(float*)buf40 = acospi(*(float*)buf41);
+    *(float2*)buf42 = acospi(*(float2*)buf43);
+    *(float3*)buf44 = acospi(*(float3*)buf45);
+    *(float4*)buf46 = acospi(*(float4*)buf47);
+    *(float*)buf48 = asin(*(float*)buf49);
+    *(float2*)buf50 = asin(*(float2*)buf51);
+    *(float3*)buf52 = asin(*(float3*)buf53);
+    *(float4*)buf54 = asin(*(float4*)buf55);
+    *(float*)buf56 = asinh(*(float*)buf57);
+    *(float2*)buf58 = asinh(*(float2*)buf59);
+    *(float3*)buf60 = asinh(*(float3*)buf61);
+    *(float4*)buf62 = asinh(*(float4*)buf63);
+    *(float*)buf64 = asinpi(*(float*)buf65);
+    *(float2*)buf66 = asinpi(*(float2*)buf67);
+    *(float3*)buf68 = asinpi(*(float3*)buf69);
+    *(float4*)buf70 = asinpi(*(float4*)buf71);
+    *(float*)buf72 = atan(*(float*)buf73);
+    *(float2*)buf74 = atan(*(float2*)buf75);
+    *(float3*)buf76 = atan(*(float3*)buf77);
+    *(float4*)buf78 = atan(*(float4*)buf79);
+    *(float*)buf80 = atan2(*(float*)buf81, *(float*)buf82);
+    *(float2*)buf83 = atan2(*(float2*)buf84, *(float2*)buf85);
+    *(float3*)buf86 = atan2(*(float3*)buf87, *(float3*)buf88);
+    *(float4*)buf89 = atan2(*(float4*)buf90, *(float4*)buf91);
+    *(float*)buf92 = atan2pi(*(float*)buf93, *(float*)buf94);
+    *(float2*)buf95 = atan2pi(*(float2*)buf96, *(float2*)buf97);
+    *(float3*)buf98 = atan2pi(*(float3*)buf99, *(float3*)buf100);
+    *(float4*)buf101 = atan2pi(*(float4*)buf102, *(float4*)buf103);
+    *(float*)buf104 = atanh(*(float*)buf105);
+    *(float2*)buf106 = atanh(*(float2*)buf107);
+    *(float3*)buf108 = atanh(*(float3*)buf109);
+    *(float4*)buf110 = atanh(*(float4*)buf111);
+    *(float*)buf112 = atanpi(*(float*)buf113);
+    *(float2*)buf114 = atanpi(*(float2*)buf115);
+    *(float3*)buf116 = atanpi(*(float3*)buf117);
+    *(float4*)buf118 = atanpi(*(float4*)buf119);
+    *(float*)buf120 = cbrt(*(float*)buf121);
+    *(float2*)buf122 = cbrt(*(float2*)buf123);
+    *(float3*)buf124 = cbrt(*(float3*)buf125);
+    *(float4*)buf126 = cbrt(*(float4*)buf127);
+    *(float*)buf128 = ceil(*(float*)buf129);
+    *(float2*)buf130 = ceil(*(float2*)buf131);
+    *(float3*)buf132 = ceil(*(float3*)buf133);
+    *(float4*)buf134 = ceil(*(float4*)buf135);
+    *(float*)buf136 = clamp(*(float*)buf137, *(float*)buf138, *(float*)buf139);
+    *(float2*)buf140 = clamp(*(float2*)buf141, *(float2*)buf142, *(float2*)buf143);
+    *(float3*)buf144 = clamp(*(float3*)buf145, *(float3*)buf146, *(float3*)buf147);
+    *(float4*)buf148 = clamp(*(float4*)buf149, *(float4*)buf150, *(float4*)buf151);
+    *(float2*)buf152 = clamp(*(float2*)buf153, *(float*)buf154, *(float*)buf155);
+    *(float3*)buf156 = clamp(*(float3*)buf157, *(float*)buf158, *(float*)buf159);
+    *(float4*)buf160 = clamp(*(float4*)buf161, *(float*)buf162, *(float*)buf163);
+    *(char*)buf164 = clamp(*(char*)buf165, *(char*)buf166, *(char*)buf167);
+    *(char2*)buf168 = clamp(*(char2*)buf169, *(char2*)buf170, *(char2*)buf171);
+    *(char3*)buf172 = clamp(*(char3*)buf173, *(char3*)buf174, *(char3*)buf175);
+    *(char4*)buf176 = clamp(*(char4*)buf177, *(char4*)buf178, *(char4*)buf179);
+    *(uchar*)buf180 = clamp(*(uchar*)buf181, *(uchar*)buf182, *(uchar*)buf183);
+    *(uchar2*)buf184 = clamp(*(uchar2*)buf185, *(uchar2*)buf186, *(uchar2*)buf187);
+    *(uchar3*)buf188 = clamp(*(uchar3*)buf189, *(uchar3*)buf190, *(uchar3*)buf191);
+    *(uchar4*)buf192 = clamp(*(uchar4*)buf193, *(uchar4*)buf194, *(uchar4*)buf195);
+    *(short*)buf196 = clamp(*(short*)buf197, *(short*)buf198, *(short*)buf199);
+    *(short2*)buf200 = clamp(*(short2*)buf201, *(short2*)buf202, *(short2*)buf203);
+    *(short3*)buf204 = clamp(*(short3*)buf205, *(short3*)buf206, *(short3*)buf207);
+    *(short4*)buf208 = clamp(*(short4*)buf209, *(short4*)buf210, *(short4*)buf211);
+    *(ushort*)buf212 = clamp(*(ushort*)buf213, *(ushort*)buf214, *(ushort*)buf215);
+    *(ushort2*)buf216 = clamp(*(ushort2*)buf217, *(ushort2*)buf218, *(ushort2*)buf219);
+    *(ushort3*)buf220 = clamp(*(ushort3*)buf221, *(ushort3*)buf222, *(ushort3*)buf223);
+    *(ushort4*)buf224 = clamp(*(ushort4*)buf225, *(ushort4*)buf226, *(ushort4*)buf227);
+    *(int*)buf228 = clamp(*(int*)buf229, *(int*)buf230, *(int*)buf231);
+    *(int2*)buf232 = clamp(*(int2*)buf233, *(int2*)buf234, *(int2*)buf235);
+    *(int3*)buf236 = clamp(*(int3*)buf237, *(int3*)buf238, *(int3*)buf239);
+    *(int4*)buf240 = clamp(*(int4*)buf241, *(int4*)buf242, *(int4*)buf243);
+    *(uint*)buf244 = clamp(*(uint*)buf245, *(uint*)buf246, *(uint*)buf247);
+    *(uint2*)buf248 = clamp(*(uint2*)buf249, *(uint2*)buf250, *(uint2*)buf251);
+    *(uint3*)buf252 = clamp(*(uint3*)buf253, *(uint3*)buf254, *(uint3*)buf255);
+    *(uint4*)buf256 = clamp(*(uint4*)buf257, *(uint4*)buf258, *(uint4*)buf259);
+    *(long*)buf260 = clamp(*(long*)buf261, *(long*)buf262, *(long*)buf263);
+    *(long2*)buf264 = clamp(*(long2*)buf265, *(long2*)buf266, *(long2*)buf267);
+    *(long3*)buf268 = clamp(*(long3*)buf269, *(long3*)buf270, *(long3*)buf271);
+    *(long4*)buf272 = clamp(*(long4*)buf273, *(long4*)buf274, *(long4*)buf275);
+    *(ulong*)buf276 = clamp(*(ulong*)buf277, *(ulong*)buf278, *(ulong*)buf279);
+    *(ulong2*)buf280 = clamp(*(ulong2*)buf281, *(ulong2*)buf282, *(ulong2*)buf283);
+    *(ulong3*)buf284 = clamp(*(ulong3*)buf285, *(ulong3*)buf286, *(ulong3*)buf287);
+    *(ulong4*)buf288 = clamp(*(ulong4*)buf289, *(ulong4*)buf290, *(ulong4*)buf291);
+    *(char2*)buf292 = clamp(*(char2*)buf293, *(char*)buf294, *(char*)buf295);
+    *(char3*)buf296 = clamp(*(char3*)buf297, *(char*)buf298, *(char*)buf299);
+    *(char4*)buf300 = clamp(*(char4*)buf301, *(char*)buf302, *(char*)buf303);
+    *(uchar2*)buf304 = clamp(*(uchar2*)buf305, *(uchar*)buf306, *(uchar*)buf307);
+    *(uchar3*)buf308 = clamp(*(uchar3*)buf309, *(uchar*)buf310, *(uchar*)buf311);
+    *(uchar4*)buf312 = clamp(*(uchar4*)buf313, *(uchar*)buf314, *(uchar*)buf315);
+    *(short2*)buf316 = clamp(*(short2*)buf317, *(short*)buf318, *(short*)buf319);
+    *(short3*)buf320 = clamp(*(short3*)buf321, *(short*)buf322, *(short*)buf323);
+    *(short4*)buf324 = clamp(*(short4*)buf325, *(short*)buf326, *(short*)buf327);
+    *(ushort2*)buf328 = clamp(*(ushort2*)buf329, *(ushort*)buf330, *(ushort*)buf331);
+    *(ushort3*)buf332 = clamp(*(ushort3*)buf333, *(ushort*)buf334, *(ushort*)buf335);
+    *(ushort4*)buf336 = clamp(*(ushort4*)buf337, *(ushort*)buf338, *(ushort*)buf339);
+    *(int2*)buf340 = clamp(*(int2*)buf341, *(int*)buf342, *(int*)buf343);
+    *(int3*)buf344 = clamp(*(int3*)buf345, *(int*)buf346, *(int*)buf347);
+    *(int4*)buf348 = clamp(*(int4*)buf349, *(int*)buf350, *(int*)buf351);
+    *(uint2*)buf352 = clamp(*(uint2*)buf353, *(uint*)buf354, *(uint*)buf355);
+    *(uint3*)buf356 = clamp(*(uint3*)buf357, *(uint*)buf358, *(uint*)buf359);
+    *(uint4*)buf360 = clamp(*(uint4*)buf361, *(uint*)buf362, *(uint*)buf363);
+    *(long2*)buf364 = clamp(*(long2*)buf365, *(long*)buf366, *(long*)buf367);
+    *(long3*)buf368 = clamp(*(long3*)buf369, *(long*)buf370, *(long*)buf371);
+    *(long4*)buf372 = clamp(*(long4*)buf373, *(long*)buf374, *(long*)buf375);
+    *(ulong2*)buf376 = clamp(*(ulong2*)buf377, *(ulong*)buf378, *(ulong*)buf379);
+    *(ulong3*)buf380 = clamp(*(ulong3*)buf381, *(ulong*)buf382, *(ulong*)buf383);
+    *(ulong4*)buf384 = clamp(*(ulong4*)buf385, *(ulong*)buf386, *(ulong*)buf387);
+    *(char*)buf388 = clz(*(char*)buf389);
+    *(char2*)buf390 = clz(*(char2*)buf391);
+    *(char3*)buf392 = clz(*(char3*)buf393);
+    *(char4*)buf394 = clz(*(char4*)buf395);
+    *(uchar*)buf396 = clz(*(uchar*)buf397);
+    *(uchar2*)buf398 = clz(*(uchar2*)buf399);
+    *(uchar3*)buf400 = clz(*(uchar3*)buf401);
+    *(uchar4*)buf402 = clz(*(uchar4*)buf403);
+    *(short*)buf404 = clz(*(short*)buf405);
+    *(short2*)buf406 = clz(*(short2*)buf407);
+    *(short3*)buf408 = clz(*(short3*)buf409);
+    *(short4*)buf410 = clz(*(short4*)buf411);
+    *(ushort*)buf412 = clz(*(ushort*)buf413);
+    *(ushort2*)buf414 = clz(*(ushort2*)buf415);
+    *(ushort3*)buf416 = clz(*(ushort3*)buf417);
+    *(ushort4*)buf418 = clz(*(ushort4*)buf419);
+    *(int*)buf420 = clz(*(int*)buf421);
+    *(int2*)buf422 = clz(*(int2*)buf423);
+    *(int3*)buf424 = clz(*(int3*)buf425);
+    *(int4*)buf426 = clz(*(int4*)buf427);
+    *(uint*)buf428 = clz(*(uint*)buf429);
+    *(uint2*)buf430 = clz(*(uint2*)buf431);
+    *(uint3*)buf432 = clz(*(uint3*)buf433);
+    *(uint4*)buf434 = clz(*(uint4*)buf435);
+    *(float2*)buf436 = convert_float2(*(float2*)buf437);
+    *(float3*)buf438 = convert_float3(*(float3*)buf439);
+    *(float4*)buf440 = convert_float4(*(float4*)buf441);
+    *(float2*)buf442 = convert_float2(*(char2*)buf443);
+    *(float3*)buf444 = convert_float3(*(char3*)buf445);
+    *(float4*)buf446 = convert_float4(*(char4*)buf447);
+    *(float2*)buf448 = convert_float2(*(uchar2*)buf449);
+    *(float3*)buf450 = convert_float3(*(uchar3*)buf451);
+    *(float4*)buf452 = convert_float4(*(uchar4*)buf453);
+    *(float2*)buf454 = convert_float2(*(short2*)buf455);
+    *(float3*)buf456 = convert_float3(*(short3*)buf457);
+    *(float4*)buf458 = convert_float4(*(short4*)buf459);
+    *(float2*)buf460 = convert_float2(*(ushort2*)buf461);
+    *(float3*)buf462 = convert_float3(*(ushort3*)buf463);
+    *(float4*)buf464 = convert_float4(*(ushort4*)buf465);
+    *(float2*)buf466 = convert_float2(*(int2*)buf467);
+    *(float3*)buf468 = convert_float3(*(int3*)buf469);
+    *(float4*)buf470 = convert_float4(*(int4*)buf471);
+    *(float2*)buf472 = convert_float2(*(uint2*)buf473);
+    *(float3*)buf474 = convert_float3(*(uint3*)buf475);
+    *(float4*)buf476 = convert_float4(*(uint4*)buf477);
+    *(char2*)buf478 = convert_char2(*(float2*)buf479);
+    *(char3*)buf480 = convert_char3(*(float3*)buf481);
+    *(char4*)buf482 = convert_char4(*(float4*)buf483);
+    *(char2*)buf484 = convert_char2(*(char2*)buf485);
+    *(char3*)buf486 = convert_char3(*(char3*)buf487);
+    *(char4*)buf488 = convert_char4(*(char4*)buf489);
+    *(char2*)buf490 = convert_char2(*(uchar2*)buf491);
+    *(char3*)buf492 = convert_char3(*(uchar3*)buf493);
+    *(char4*)buf494 = convert_char4(*(uchar4*)buf495);
+    *(char2*)buf496 = convert_char2(*(short2*)buf497);
+    *(char3*)buf498 = convert_char3(*(short3*)buf499);
+    *(char4*)buf500 = convert_char4(*(short4*)buf501);
+    *(char2*)buf502 = convert_char2(*(ushort2*)buf503);
+    *(char3*)buf504 = convert_char3(*(ushort3*)buf505);
+    *(char4*)buf506 = convert_char4(*(ushort4*)buf507);
+    *(char2*)buf508 = convert_char2(*(int2*)buf509);
+    *(char3*)buf510 = convert_char3(*(int3*)buf511);
+    *(char4*)buf512 = convert_char4(*(int4*)buf513);
+    *(char2*)buf514 = convert_char2(*(uint2*)buf515);
+    *(char3*)buf516 = convert_char3(*(uint3*)buf517);
+    *(char4*)buf518 = convert_char4(*(uint4*)buf519);
+    *(uchar2*)buf520 = convert_uchar2(*(float2*)buf521);
+    *(uchar3*)buf522 = convert_uchar3(*(float3*)buf523);
+    *(uchar4*)buf524 = convert_uchar4(*(float4*)buf525);
+    *(uchar2*)buf526 = convert_uchar2(*(char2*)buf527);
+    *(uchar3*)buf528 = convert_uchar3(*(char3*)buf529);
+    *(uchar4*)buf530 = convert_uchar4(*(char4*)buf531);
+    *(uchar2*)buf532 = convert_uchar2(*(uchar2*)buf533);
+    *(uchar3*)buf534 = convert_uchar3(*(uchar3*)buf535);
+    *(uchar4*)buf536 = convert_uchar4(*(uchar4*)buf537);
+    *(uchar2*)buf538 = convert_uchar2(*(short2*)buf539);
+    *(uchar3*)buf540 = convert_uchar3(*(short3*)buf541);
+    *(uchar4*)buf542 = convert_uchar4(*(short4*)buf543);
+    *(uchar2*)buf544 = convert_uchar2(*(ushort2*)buf545);
+    *(uchar3*)buf546 = convert_uchar3(*(ushort3*)buf547);
+    *(uchar4*)buf548 = convert_uchar4(*(ushort4*)buf549);
+    *(uchar2*)buf550 = convert_uchar2(*(int2*)buf551);
+    *(uchar3*)buf552 = convert_uchar3(*(int3*)buf553);
+    *(uchar4*)buf554 = convert_uchar4(*(int4*)buf555);
+    *(uchar2*)buf556 = convert_uchar2(*(uint2*)buf557);
+    *(uchar3*)buf558 = convert_uchar3(*(uint3*)buf559);
+    *(uchar4*)buf560 = convert_uchar4(*(uint4*)buf561);
+    *(short2*)buf562 = convert_short2(*(float2*)buf563);
+    *(short3*)buf564 = convert_short3(*(float3*)buf565);
+    *(short4*)buf566 = convert_short4(*(float4*)buf567);
+    *(short2*)buf568 = convert_short2(*(char2*)buf569);
+    *(short3*)buf570 = convert_short3(*(char3*)buf571);
+    *(short4*)buf572 = convert_short4(*(char4*)buf573);
+    *(short2*)buf574 = convert_short2(*(uchar2*)buf575);
+    *(short3*)buf576 = convert_short3(*(uchar3*)buf577);
+    *(short4*)buf578 = convert_short4(*(uchar4*)buf579);
+    *(short2*)buf580 = convert_short2(*(short2*)buf581);
+    *(short3*)buf582 = convert_short3(*(short3*)buf583);
+    *(short4*)buf584 = convert_short4(*(short4*)buf585);
+    *(short2*)buf586 = convert_short2(*(ushort2*)buf587);
+    *(short3*)buf588 = convert_short3(*(ushort3*)buf589);
+    *(short4*)buf590 = convert_short4(*(ushort4*)buf591);
+    *(short2*)buf592 = convert_short2(*(int2*)buf593);
+    *(short3*)buf594 = convert_short3(*(int3*)buf595);
+    *(short4*)buf596 = convert_short4(*(int4*)buf597);
+    *(short2*)buf598 = convert_short2(*(uint2*)buf599);
+    *(short3*)buf600 = convert_short3(*(uint3*)buf601);
+    *(short4*)buf602 = convert_short4(*(uint4*)buf603);
+    *(ushort2*)buf604 = convert_ushort2(*(float2*)buf605);
+    *(ushort3*)buf606 = convert_ushort3(*(float3*)buf607);
+    *(ushort4*)buf608 = convert_ushort4(*(float4*)buf609);
+    *(ushort2*)buf610 = convert_ushort2(*(char2*)buf611);
+    *(ushort3*)buf612 = convert_ushort3(*(char3*)buf613);
+    *(ushort4*)buf614 = convert_ushort4(*(char4*)buf615);
+    *(ushort2*)buf616 = convert_ushort2(*(uchar2*)buf617);
+    *(ushort3*)buf618 = convert_ushort3(*(uchar3*)buf619);
+    *(ushort4*)buf620 = convert_ushort4(*(uchar4*)buf621);
+    *(ushort2*)buf622 = convert_ushort2(*(short2*)buf623);
+    *(ushort3*)buf624 = convert_ushort3(*(short3*)buf625);
+    *(ushort4*)buf626 = convert_ushort4(*(short4*)buf627);
+    *(ushort2*)buf628 = convert_ushort2(*(ushort2*)buf629);
+    *(ushort3*)buf630 = convert_ushort3(*(ushort3*)buf631);
+    *(ushort4*)buf632 = convert_ushort4(*(ushort4*)buf633);
+    *(ushort2*)buf634 = convert_ushort2(*(int2*)buf635);
+    *(ushort3*)buf636 = convert_ushort3(*(int3*)buf637);
+    *(ushort4*)buf638 = convert_ushort4(*(int4*)buf639);
+    *(ushort2*)buf640 = convert_ushort2(*(uint2*)buf641);
+    *(ushort3*)buf642 = convert_ushort3(*(uint3*)buf643);
+    *(ushort4*)buf644 = convert_ushort4(*(uint4*)buf645);
+    *(int2*)buf646 = convert_int2(*(float2*)buf647);
+    *(int3*)buf648 = convert_int3(*(float3*)buf649);
+    *(int4*)buf650 = convert_int4(*(float4*)buf651);
+    *(int2*)buf652 = convert_int2(*(char2*)buf653);
+    *(int3*)buf654 = convert_int3(*(char3*)buf655);
+    *(int4*)buf656 = convert_int4(*(char4*)buf657);
+    *(int2*)buf658 = convert_int2(*(uchar2*)buf659);
+    *(int3*)buf660 = convert_int3(*(uchar3*)buf661);
+    *(int4*)buf662 = convert_int4(*(uchar4*)buf663);
+    *(int2*)buf664 = convert_int2(*(short2*)buf665);
+    *(int3*)buf666 = convert_int3(*(short3*)buf667);
+    *(int4*)buf668 = convert_int4(*(short4*)buf669);
+    *(int2*)buf670 = convert_int2(*(ushort2*)buf671);
+    *(int3*)buf672 = convert_int3(*(ushort3*)buf673);
+    *(int4*)buf674 = convert_int4(*(ushort4*)buf675);
+    *(int2*)buf676 = convert_int2(*(int2*)buf677);
+    *(int3*)buf678 = convert_int3(*(int3*)buf679);
+    *(int4*)buf680 = convert_int4(*(int4*)buf681);
+    *(int2*)buf682 = convert_int2(*(uint2*)buf683);
+    *(int3*)buf684 = convert_int3(*(uint3*)buf685);
+    *(int4*)buf686 = convert_int4(*(uint4*)buf687);
+    *(uint2*)buf688 = convert_uint2(*(float2*)buf689);
+    *(uint3*)buf690 = convert_uint3(*(float3*)buf691);
+    *(uint4*)buf692 = convert_uint4(*(float4*)buf693);
+    *(uint2*)buf694 = convert_uint2(*(char2*)buf695);
+    *(uint3*)buf696 = convert_uint3(*(char3*)buf697);
+    *(uint4*)buf698 = convert_uint4(*(char4*)buf699);
+    *(uint2*)buf700 = convert_uint2(*(uchar2*)buf701);
+    *(uint3*)buf702 = convert_uint3(*(uchar3*)buf703);
+    *(uint4*)buf704 = convert_uint4(*(uchar4*)buf705);
+    *(uint2*)buf706 = convert_uint2(*(short2*)buf707);
+    *(uint3*)buf708 = convert_uint3(*(short3*)buf709);
+    *(uint4*)buf710 = convert_uint4(*(short4*)buf711);
+    *(uint2*)buf712 = convert_uint2(*(ushort2*)buf713);
+    *(uint3*)buf714 = convert_uint3(*(ushort3*)buf715);
+    *(uint4*)buf716 = convert_uint4(*(ushort4*)buf717);
+    *(uint2*)buf718 = convert_uint2(*(int2*)buf719);
+    *(uint3*)buf720 = convert_uint3(*(int3*)buf721);
+    *(uint4*)buf722 = convert_uint4(*(int4*)buf723);
+    *(uint2*)buf724 = convert_uint2(*(uint2*)buf725);
+    *(uint3*)buf726 = convert_uint3(*(uint3*)buf727);
+    *(uint4*)buf728 = convert_uint4(*(uint4*)buf729);
+    *(float*)buf730 = copysign(*(float*)buf731, *(float*)buf732);
+    *(float2*)buf733 = copysign(*(float2*)buf734, *(float2*)buf735);
+    *(float3*)buf736 = copysign(*(float3*)buf737, *(float3*)buf738);
+    *(float4*)buf739 = copysign(*(float4*)buf740, *(float4*)buf741);
+    *(float*)buf742 = cos(*(float*)buf743);
+    *(float2*)buf744 = cos(*(float2*)buf745);
+    *(float3*)buf746 = cos(*(float3*)buf747);
+    *(float4*)buf748 = cos(*(float4*)buf749);
+    *(float*)buf750 = cosh(*(float*)buf751);
+    *(float2*)buf752 = cosh(*(float2*)buf753);
+    *(float3*)buf754 = cosh(*(float3*)buf755);
+    *(float4*)buf756 = cosh(*(float4*)buf757);
+    *(float*)buf758 = cospi(*(float*)buf759);
+    *(float2*)buf760 = cospi(*(float2*)buf761);
+    *(float3*)buf762 = cospi(*(float3*)buf763);
+    *(float4*)buf764 = cospi(*(float4*)buf765);
+    *(float3*)buf766 = cross(*(float3*)buf767, *(float3*)buf768);
+    *(float4*)buf769 = cross(*(float4*)buf770, *(float4*)buf771);
+    *(float*)buf772 = degrees(*(float*)buf773);
+    *(float2*)buf774 = degrees(*(float2*)buf775);
+    *(float3*)buf776 = degrees(*(float3*)buf777);
+    *(float4*)buf778 = degrees(*(float4*)buf779);
+    *(float*)buf780 = distance(*(float*)buf781, *(float*)buf782);
+    *(float*)buf783 = distance(*(float2*)buf784, *(float2*)buf785);
+    *(float*)buf786 = distance(*(float3*)buf787, *(float3*)buf788);
+    *(float*)buf789 = distance(*(float4*)buf790, *(float4*)buf791);
+    *(float*)buf792 = dot(*(float*)buf793, *(float*)buf794);
+    *(float*)buf795 = dot(*(float2*)buf796, *(float2*)buf797);
+    *(float*)buf798 = dot(*(float3*)buf799, *(float3*)buf800);
+    *(float*)buf801 = dot(*(float4*)buf802, *(float4*)buf803);
+    *(float*)buf804 = erf(*(float*)buf805);
+    *(float2*)buf806 = erf(*(float2*)buf807);
+    *(float3*)buf808 = erf(*(float3*)buf809);
+    *(float4*)buf810 = erf(*(float4*)buf811);
+    *(float*)buf812 = erfc(*(float*)buf813);
+    *(float2*)buf814 = erfc(*(float2*)buf815);
+    *(float3*)buf816 = erfc(*(float3*)buf817);
+    *(float4*)buf818 = erfc(*(float4*)buf819);
+    *(float*)buf820 = exp(*(float*)buf821);
+    *(float2*)buf822 = exp(*(float2*)buf823);
+    *(float3*)buf824 = exp(*(float3*)buf825);
+    *(float4*)buf826 = exp(*(float4*)buf827);
+    *(float*)buf828 = exp10(*(float*)buf829);
+    *(float2*)buf830 = exp10(*(float2*)buf831);
+    *(float3*)buf832 = exp10(*(float3*)buf833);
+    *(float4*)buf834 = exp10(*(float4*)buf835);
+    *(float*)buf836 = exp2(*(float*)buf837);
+    *(float2*)buf838 = exp2(*(float2*)buf839);
+    *(float3*)buf840 = exp2(*(float3*)buf841);
+    *(float4*)buf842 = exp2(*(float4*)buf843);
+    *(float*)buf844 = expm1(*(float*)buf845);
+    *(float2*)buf846 = expm1(*(float2*)buf847);
+    *(float3*)buf848 = expm1(*(float3*)buf849);
+    *(float4*)buf850 = expm1(*(float4*)buf851);
+    *(float*)buf852 = fabs(*(float*)buf853);
+    *(float2*)buf854 = fabs(*(float2*)buf855);
+    *(float3*)buf856 = fabs(*(float3*)buf857);
+    *(float4*)buf858 = fabs(*(float4*)buf859);
+    *(float*)buf860 = fast_distance(*(float*)buf861, *(float*)buf862);
+    *(float*)buf863 = fast_distance(*(float2*)buf864, *(float2*)buf865);
+    *(float*)buf866 = fast_distance(*(float3*)buf867, *(float3*)buf868);
+    *(float*)buf869 = fast_distance(*(float4*)buf870, *(float4*)buf871);
+    *(float*)buf872 = fast_length(*(float*)buf873);
+    *(float*)buf874 = fast_length(*(float2*)buf875);
+    *(float*)buf876 = fast_length(*(float3*)buf877);
+    *(float*)buf878 = fast_length(*(float4*)buf879);
+    *(float*)buf880 = fast_normalize(*(float*)buf881);
+    *(float2*)buf882 = fast_normalize(*(float2*)buf883);
+    *(float3*)buf884 = fast_normalize(*(float3*)buf885);
+    *(float4*)buf886 = fast_normalize(*(float4*)buf887);
+    *(float*)buf888 = fdim(*(float*)buf889, *(float*)buf890);
+    *(float2*)buf891 = fdim(*(float2*)buf892, *(float2*)buf893);
+    *(float3*)buf894 = fdim(*(float3*)buf895, *(float3*)buf896);
+    *(float4*)buf897 = fdim(*(float4*)buf898, *(float4*)buf899);
+    *(float*)buf900 = floor(*(float*)buf901);
+    *(float2*)buf902 = floor(*(float2*)buf903);
+    *(float3*)buf904 = floor(*(float3*)buf905);
+    *(float4*)buf906 = floor(*(float4*)buf907);
+    *(float*)buf908 = fma(*(float*)buf909, *(float*)buf910, *(float*)buf911);
+    *(float2*)buf912 = fma(*(float2*)buf913, *(float2*)buf914, *(float2*)buf915);
+    *(float3*)buf916 = fma(*(float3*)buf917, *(float3*)buf918, *(float3*)buf919);
+    *(float4*)buf920 = fma(*(float4*)buf921, *(float4*)buf922, *(float4*)buf923);
+    *(float*)buf924 = fmax(*(float*)buf925, *(float*)buf926);
+    *(float2*)buf927 = fmax(*(float2*)buf928, *(float2*)buf929);
+    *(float3*)buf930 = fmax(*(float3*)buf931, *(float3*)buf932);
+    *(float4*)buf933 = fmax(*(float4*)buf934, *(float4*)buf935);
+    *(float2*)buf936 = fmax(*(float2*)buf937, *(float*)buf938);
+    *(float3*)buf939 = fmax(*(float3*)buf940, *(float*)buf941);
+    *(float4*)buf942 = fmax(*(float4*)buf943, *(float*)buf944);
+    *(float*)buf945 = fmin(*(float*)buf946, *(float*)buf947);
+    *(float2*)buf948 = fmin(*(float2*)buf949, *(float2*)buf950);
+    *(float3*)buf951 = fmin(*(float3*)buf952, *(float3*)buf953);
+    *(float4*)buf954 = fmin(*(float4*)buf955, *(float4*)buf956);
+    *(float2*)buf957 = fmin(*(float2*)buf958, *(float*)buf959);
+    *(float3*)buf960 = fmin(*(float3*)buf961, *(float*)buf962);
+    *(float4*)buf963 = fmin(*(float4*)buf964, *(float*)buf965);
+    *(float*)buf966 = fmod(*(float*)buf967, *(float*)buf968);
+    *(float2*)buf969 = fmod(*(float2*)buf970, *(float2*)buf971);
+    *(float3*)buf972 = fmod(*(float3*)buf973, *(float3*)buf974);
+    *(float4*)buf975 = fmod(*(float4*)buf976, *(float4*)buf977);
+    *(float*)buf978 = fract(*(float*)buf979, (float*) buf980);
+    *(float2*)buf981 = fract(*(float2*)buf982, (float2*) buf983);
+    *(float3*)buf984 = fract(*(float3*)buf985, (float3*) buf986);
+    *(float4*)buf987 = fract(*(float4*)buf988, (float4*) buf989);
+    *(float*)buf990 = fract(*(float*)buf991);
+    *(float2*)buf992 = fract(*(float2*)buf993);
+    *(float3*)buf994 = fract(*(float3*)buf995);
+    *(float4*)buf996 = fract(*(float4*)buf997);
+    *(float*)buf998 = frexp(*(float*)buf999, (int*) buf1000);
+    *(float2*)buf1001 = frexp(*(float2*)buf1002, (int2*) buf1003);
+    *(float3*)buf1004 = frexp(*(float3*)buf1005, (int3*) buf1006);
+    *(float4*)buf1007 = frexp(*(float4*)buf1008, (int4*) buf1009);
+    *(float*)buf1010 = half_recip(*(float*)buf1011);
+    *(float2*)buf1012 = half_recip(*(float2*)buf1013);
+    *(float3*)buf1014 = half_recip(*(float3*)buf1015);
+    *(float4*)buf1016 = half_recip(*(float4*)buf1017);
+    *(float*)buf1018 = half_rsqrt(*(float*)buf1019);
+    *(float2*)buf1020 = half_rsqrt(*(float2*)buf1021);
+    *(float3*)buf1022 = half_rsqrt(*(float3*)buf1023);
+    *(float4*)buf1024 = half_rsqrt(*(float4*)buf1025);
+    *(float*)buf1026 = half_sqrt(*(float*)buf1027);
+    *(float2*)buf1028 = half_sqrt(*(float2*)buf1029);
+    *(float3*)buf1030 = half_sqrt(*(float3*)buf1031);
+    *(float4*)buf1032 = half_sqrt(*(float4*)buf1033);
+    *(float*)buf1034 = hypot(*(float*)buf1035, *(float*)buf1036);
+    *(float2*)buf1037 = hypot(*(float2*)buf1038, *(float2*)buf1039);
+    *(float3*)buf1040 = hypot(*(float3*)buf1041, *(float3*)buf1042);
+    *(float4*)buf1043 = hypot(*(float4*)buf1044, *(float4*)buf1045);
+    *(int*)buf1046 = ilogb(*(float*)buf1047);
+    *(int2*)buf1048 = ilogb(*(float2*)buf1049);
+    *(int3*)buf1050 = ilogb(*(float3*)buf1051);
+    *(int4*)buf1052 = ilogb(*(float4*)buf1053);
+    *(float*)buf1054 = ldexp(*(float*)buf1055, *(int*)buf1056);
+    *(float2*)buf1057 = ldexp(*(float2*)buf1058, *(int2*)buf1059);
+    *(float3*)buf1060 = ldexp(*(float3*)buf1061, *(int3*)buf1062);
+    *(float4*)buf1063 = ldexp(*(float4*)buf1064, *(int4*)buf1065);
+    *(float2*)buf1066 = ldexp(*(float2*)buf1067, *(int*)buf1068);
+    *(float3*)buf1069 = ldexp(*(float3*)buf1070, *(int*)buf1071);
+    *(float4*)buf1072 = ldexp(*(float4*)buf1073, *(int*)buf1074);
+    *(float*)buf1075 = length(*(float*)buf1076);
+    *(float*)buf1077 = length(*(float2*)buf1078);
+    *(float*)buf1079 = length(*(float3*)buf1080);
+    *(float*)buf1081 = length(*(float4*)buf1082);
+    *(float*)buf1083 = lgamma(*(float*)buf1084);
+    *(float2*)buf1085 = lgamma(*(float2*)buf1086);
+    *(float3*)buf1087 = lgamma(*(float3*)buf1088);
+    *(float4*)buf1089 = lgamma(*(float4*)buf1090);
+    *(float*)buf1091 = lgamma(*(float*)buf1092, (int*) buf1093);
+    *(float2*)buf1094 = lgamma(*(float2*)buf1095, (int2*) buf1096);
+    *(float3*)buf1097 = lgamma(*(float3*)buf1098, (int3*) buf1099);
+    *(float4*)buf1100 = lgamma(*(float4*)buf1101, (int4*) buf1102);
+    *(float*)buf1103 = log(*(float*)buf1104);
+    *(float2*)buf1105 = log(*(float2*)buf1106);
+    *(float3*)buf1107 = log(*(float3*)buf1108);
+    *(float4*)buf1109 = log(*(float4*)buf1110);
+    *(float*)buf1111 = log10(*(float*)buf1112);
+    *(float2*)buf1113 = log10(*(float2*)buf1114);
+    *(float3*)buf1115 = log10(*(float3*)buf1116);
+    *(float4*)buf1117 = log10(*(float4*)buf1118);
+    *(float*)buf1119 = log1p(*(float*)buf1120);
+    *(float2*)buf1121 = log1p(*(float2*)buf1122);
+    *(float3*)buf1123 = log1p(*(float3*)buf1124);
+    *(float4*)buf1125 = log1p(*(float4*)buf1126);
+    *(float*)buf1127 = log2(*(float*)buf1128);
+    *(float2*)buf1129 = log2(*(float2*)buf1130);
+    *(float3*)buf1131 = log2(*(float3*)buf1132);
+    *(float4*)buf1133 = log2(*(float4*)buf1134);
+    *(float*)buf1135 = logb(*(float*)buf1136);
+    *(float2*)buf1137 = logb(*(float2*)buf1138);
+    *(float3*)buf1139 = logb(*(float3*)buf1140);
+    *(float4*)buf1141 = logb(*(float4*)buf1142);
+    *(float*)buf1143 = mad(*(float*)buf1144, *(float*)buf1145, *(float*)buf1146);
+    *(float2*)buf1147 = mad(*(float2*)buf1148, *(float2*)buf1149, *(float2*)buf1150);
+    *(float3*)buf1151 = mad(*(float3*)buf1152, *(float3*)buf1153, *(float3*)buf1154);
+    *(float4*)buf1155 = mad(*(float4*)buf1156, *(float4*)buf1157, *(float4*)buf1158);
+    *(float*)buf1159 = max(*(float*)buf1160, *(float*)buf1161);
+    *(float2*)buf1162 = max(*(float2*)buf1163, *(float2*)buf1164);
+    *(float3*)buf1165 = max(*(float3*)buf1166, *(float3*)buf1167);
+    *(float4*)buf1168 = max(*(float4*)buf1169, *(float4*)buf1170);
+    *(float2*)buf1171 = max(*(float2*)buf1172, *(float*)buf1173);
+    *(float3*)buf1174 = max(*(float3*)buf1175, *(float*)buf1176);
+    *(float4*)buf1177 = max(*(float4*)buf1178, *(float*)buf1179);
+    *(char*)buf1180 = max(*(char*)buf1181, *(char*)buf1182);
+    *(uchar*)buf1183 = max(*(uchar*)buf1184, *(uchar*)buf1185);
+    *(short*)buf1186 = max(*(short*)buf1187, *(short*)buf1188);
+    *(ushort*)buf1189 = max(*(ushort*)buf1190, *(ushort*)buf1191);
+    *(int*)buf1192 = max(*(int*)buf1193, *(int*)buf1194);
+    *(uint*)buf1195 = max(*(uint*)buf1196, *(uint*)buf1197);
+    *(char2*)buf1198 = max(*(char2*)buf1199, *(char2*)buf1200);
+    *(uchar2*)buf1201 = max(*(uchar2*)buf1202, *(uchar2*)buf1203);
+    *(short2*)buf1204 = max(*(short2*)buf1205, *(short2*)buf1206);
+    *(ushort2*)buf1207 = max(*(ushort2*)buf1208, *(ushort2*)buf1209);
+    *(int2*)buf1210 = max(*(int2*)buf1211, *(int2*)buf1212);
+    *(uint2*)buf1213 = max(*(uint2*)buf1214, *(uint2*)buf1215);
+    *(char3*)buf1216 = max(*(char3*)buf1217, *(char3*)buf1218);
+    *(uchar3*)buf1219 = max(*(uchar3*)buf1220, *(uchar3*)buf1221);
+    *(short3*)buf1222 = max(*(short3*)buf1223, *(short3*)buf1224);
+    *(ushort3*)buf1225 = max(*(ushort3*)buf1226, *(ushort3*)buf1227);
+    *(int3*)buf1228 = max(*(int3*)buf1229, *(int3*)buf1230);
+    *(uint3*)buf1231 = max(*(uint3*)buf1232, *(uint3*)buf1233);
+    *(char4*)buf1234 = max(*(char4*)buf1235, *(char4*)buf1236);
+    *(uchar4*)buf1237 = max(*(uchar4*)buf1238, *(uchar4*)buf1239);
+    *(short4*)buf1240 = max(*(short4*)buf1241, *(short4*)buf1242);
+    *(ushort4*)buf1243 = max(*(ushort4*)buf1244, *(ushort4*)buf1245);
+    *(int4*)buf1246 = max(*(int4*)buf1247, *(int4*)buf1248);
+    *(uint4*)buf1249 = max(*(uint4*)buf1250, *(uint4*)buf1251);
+    *(float*)buf1252 = min(*(float*)buf1253, *(float*)buf1254);
+    *(float2*)buf1255 = min(*(float2*)buf1256, *(float2*)buf1257);
+    *(float3*)buf1258 = min(*(float3*)buf1259, *(float3*)buf1260);
+    *(float4*)buf1261 = min(*(float4*)buf1262, *(float4*)buf1263);
+    *(float2*)buf1264 = min(*(float2*)buf1265, *(float*)buf1266);
+    *(float3*)buf1267 = min(*(float3*)buf1268, *(float*)buf1269);
+    *(float4*)buf1270 = min(*(float4*)buf1271, *(float*)buf1272);
+    *(char*)buf1273 = min(*(char*)buf1274, *(char*)buf1275);
+    *(uchar*)buf1276 = min(*(uchar*)buf1277, *(uchar*)buf1278);
+    *(short*)buf1279 = min(*(short*)buf1280, *(short*)buf1281);
+    *(ushort*)buf1282 = min(*(ushort*)buf1283, *(ushort*)buf1284);
+    *(int*)buf1285 = min(*(int*)buf1286, *(int*)buf1287);
+    *(uint*)buf1288 = min(*(uint*)buf1289, *(uint*)buf1290);
+    *(char2*)buf1291 = min(*(char2*)buf1292, *(char2*)buf1293);
+    *(uchar2*)buf1294 = min(*(uchar2*)buf1295, *(uchar2*)buf1296);
+    *(short2*)buf1297 = min(*(short2*)buf1298, *(short2*)buf1299);
+    *(ushort2*)buf1300 = min(*(ushort2*)buf1301, *(ushort2*)buf1302);
+    *(int2*)buf1303 = min(*(int2*)buf1304, *(int2*)buf1305);
+    *(uint2*)buf1306 = min(*(uint2*)buf1307, *(uint2*)buf1308);
+    *(char3*)buf1309 = min(*(char3*)buf1310, *(char3*)buf1311);
+    *(uchar3*)buf1312 = min(*(uchar3*)buf1313, *(uchar3*)buf1314);
+    *(short3*)buf1315 = min(*(short3*)buf1316, *(short3*)buf1317);
+    *(ushort3*)buf1318 = min(*(ushort3*)buf1319, *(ushort3*)buf1320);
+    *(int3*)buf1321 = min(*(int3*)buf1322, *(int3*)buf1323);
+    *(uint3*)buf1324 = min(*(uint3*)buf1325, *(uint3*)buf1326);
+    *(char4*)buf1327 = min(*(char4*)buf1328, *(char4*)buf1329);
+    *(uchar4*)buf1330 = min(*(uchar4*)buf1331, *(uchar4*)buf1332);
+    *(short4*)buf1333 = min(*(short4*)buf1334, *(short4*)buf1335);
+    *(ushort4*)buf1336 = min(*(ushort4*)buf1337, *(ushort4*)buf1338);
+    *(int4*)buf1339 = min(*(int4*)buf1340, *(int4*)buf1341);
+    *(uint4*)buf1342 = min(*(uint4*)buf1343, *(uint4*)buf1344);
+    *(float*)buf1345 = mix(*(float*)buf1346, *(float*)buf1347, *(float*)buf1348);
+    *(float2*)buf1349 = mix(*(float2*)buf1350, *(float2*)buf1351, *(float2*)buf1352);
+    *(float3*)buf1353 = mix(*(float3*)buf1354, *(float3*)buf1355, *(float3*)buf1356);
+    *(float4*)buf1357 = mix(*(float4*)buf1358, *(float4*)buf1359, *(float4*)buf1360);
+    *(float2*)buf1361 = mix(*(float2*)buf1362, *(float2*)buf1363, *(float*)buf1364);
+    *(float3*)buf1365 = mix(*(float3*)buf1366, *(float3*)buf1367, *(float*)buf1368);
+    *(float4*)buf1369 = mix(*(float4*)buf1370, *(float4*)buf1371, *(float*)buf1372);
+    *(float*)buf1373 = modf(*(float*)buf1374, (float*) buf1375);
+    *(float2*)buf1376 = modf(*(float2*)buf1377, (float2*) buf1378);
+    *(float3*)buf1379 = modf(*(float3*)buf1380, (float3*) buf1381);
+    *(float4*)buf1382 = modf(*(float4*)buf1383, (float4*) buf1384);
+    *(float*)buf1385 = nan(*(uint*)buf1386);
+    *(float*)buf1387 = native_exp(*(float*)buf1388);
+    *(float2*)buf1389 = native_exp(*(float2*)buf1390);
+    *(float3*)buf1391 = native_exp(*(float3*)buf1392);
+    *(float4*)buf1393 = native_exp(*(float4*)buf1394);
+    *(float*)buf1395 = native_exp10(*(float*)buf1396);
+    *(float2*)buf1397 = native_exp10(*(float2*)buf1398);
+    *(float3*)buf1399 = native_exp10(*(float3*)buf1400);
+    *(float4*)buf1401 = native_exp10(*(float4*)buf1402);
+    *(float*)buf1403 = native_exp2(*(float*)buf1404);
+    *(float2*)buf1405 = native_exp2(*(float2*)buf1406);
+    *(float3*)buf1407 = native_exp2(*(float3*)buf1408);
+    *(float4*)buf1409 = native_exp2(*(float4*)buf1410);
+    *(float*)buf1411 = native_log(*(float*)buf1412);
+    *(float2*)buf1413 = native_log(*(float2*)buf1414);
+    *(float3*)buf1415 = native_log(*(float3*)buf1416);
+    *(float4*)buf1417 = native_log(*(float4*)buf1418);
+    *(float*)buf1419 = native_log10(*(float*)buf1420);
+    *(float2*)buf1421 = native_log10(*(float2*)buf1422);
+    *(float3*)buf1423 = native_log10(*(float3*)buf1424);
+    *(float4*)buf1425 = native_log10(*(float4*)buf1426);
+    *(float*)buf1427 = native_log2(*(float*)buf1428);
+    *(float2*)buf1429 = native_log2(*(float2*)buf1430);
+    *(float3*)buf1431 = native_log2(*(float3*)buf1432);
+    *(float4*)buf1433 = native_log2(*(float4*)buf1434);
+    *(float*)buf1435 = native_powr(*(float*)buf1436, *(float*)buf1437);
+    *(float2*)buf1438 = native_powr(*(float2*)buf1439, *(float2*)buf1440);
+    *(float3*)buf1441 = native_powr(*(float3*)buf1442, *(float3*)buf1443);
+    *(float4*)buf1444 = native_powr(*(float4*)buf1445, *(float4*)buf1446);
+    *(float*)buf1447 = nextafter(*(float*)buf1448, *(float*)buf1449);
+    *(float2*)buf1450 = nextafter(*(float2*)buf1451, *(float2*)buf1452);
+    *(float3*)buf1453 = nextafter(*(float3*)buf1454, *(float3*)buf1455);
+    *(float4*)buf1456 = nextafter(*(float4*)buf1457, *(float4*)buf1458);
+    *(float*)buf1459 = normalize(*(float*)buf1460);
+    *(float2*)buf1461 = normalize(*(float2*)buf1462);
+    *(float3*)buf1463 = normalize(*(float3*)buf1464);
+    *(float4*)buf1465 = normalize(*(float4*)buf1466);
+    *(float*)buf1467 = pow(*(float*)buf1468, *(float*)buf1469);
+    *(float2*)buf1470 = pow(*(float2*)buf1471, *(float2*)buf1472);
+    *(float3*)buf1473 = pow(*(float3*)buf1474, *(float3*)buf1475);
+    *(float4*)buf1476 = pow(*(float4*)buf1477, *(float4*)buf1478);
+    *(float*)buf1479 = pown(*(float*)buf1480, *(int*)buf1481);
+    *(float2*)buf1482 = pown(*(float2*)buf1483, *(int2*)buf1484);
+    *(float3*)buf1485 = pown(*(float3*)buf1486, *(int3*)buf1487);
+    *(float4*)buf1488 = pown(*(float4*)buf1489, *(int4*)buf1490);
+    *(float*)buf1491 = powr(*(float*)buf1492, *(float*)buf1493);
+    *(float2*)buf1494 = powr(*(float2*)buf1495, *(float2*)buf1496);
+    *(float3*)buf1497 = powr(*(float3*)buf1498, *(float3*)buf1499);
+    *(float4*)buf1500 = powr(*(float4*)buf1501, *(float4*)buf1502);
+    *(float*)buf1503 = radians(*(float*)buf1504);
+    *(float2*)buf1505 = radians(*(float2*)buf1506);
+    *(float3*)buf1507 = radians(*(float3*)buf1508);
+    *(float4*)buf1509 = radians(*(float4*)buf1510);
+    *(float*)buf1511 = remainder(*(float*)buf1512, *(float*)buf1513);
+    *(float2*)buf1514 = remainder(*(float2*)buf1515, *(float2*)buf1516);
+    *(float3*)buf1517 = remainder(*(float3*)buf1518, *(float3*)buf1519);
+    *(float4*)buf1520 = remainder(*(float4*)buf1521, *(float4*)buf1522);
+    *(float*)buf1523 = remquo(*(float*)buf1524, *(float*)buf1525, (int*) buf1526);
+    *(float2*)buf1527 = remquo(*(float2*)buf1528, *(float2*)buf1529, (int2*) buf1530);
+    *(float3*)buf1531 = remquo(*(float3*)buf1532, *(float3*)buf1533, (int3*) buf1534);
+    *(float4*)buf1535 = remquo(*(float4*)buf1536, *(float4*)buf1537, (int4*) buf1538);
+    *(float*)buf1539 = rint(*(float*)buf1540);
+    *(float2*)buf1541 = rint(*(float2*)buf1542);
+    *(float3*)buf1543 = rint(*(float3*)buf1544);
+    *(float4*)buf1545 = rint(*(float4*)buf1546);
+    *(float*)buf1547 = rootn(*(float*)buf1548, *(int*)buf1549);
+    *(float2*)buf1550 = rootn(*(float2*)buf1551, *(int2*)buf1552);
+    *(float3*)buf1553 = rootn(*(float3*)buf1554, *(int3*)buf1555);
+    *(float4*)buf1556 = rootn(*(float4*)buf1557, *(int4*)buf1558);
+    *(float*)buf1559 = round(*(float*)buf1560);
+    *(float2*)buf1561 = round(*(float2*)buf1562);
+    *(float3*)buf1563 = round(*(float3*)buf1564);
+    *(float4*)buf1565 = round(*(float4*)buf1566);
+    rsAllocationCopy1DRange(*(rs_allocation*)buf1567, *(uint32_t*)buf1568, *(uint32_t*)buf1569, *(uint32_t*)buf1570, *(rs_allocation*)buf1571, *(uint32_t*)buf1572, *(uint32_t*)buf1573);
+    rsAllocationCopy2DRange(*(rs_allocation*)buf1574, *(uint32_t*)buf1575, *(uint32_t*)buf1576, *(uint32_t*)buf1577, *(rs_allocation_cubemap_face*)buf1578, *(uint32_t*)buf1579, *(uint32_t*)buf1580, *(rs_allocation*)buf1581, *(uint32_t*)buf1582, *(uint32_t*)buf1583, *(uint32_t*)buf1584, *(rs_allocation_cubemap_face*)buf1585);
+    *(uint32_t*)buf1586 = rsAllocationGetDimFaces(*(rs_allocation*)buf1587);
+    *(uint32_t*)buf1588 = rsAllocationGetDimLOD(*(rs_allocation*)buf1589);
+    *(uint32_t*)buf1590 = rsAllocationGetDimX(*(rs_allocation*)buf1591);
+    *(uint32_t*)buf1592 = rsAllocationGetDimY(*(rs_allocation*)buf1593);
+    *(uint32_t*)buf1594 = rsAllocationGetDimZ(*(rs_allocation*)buf1595);
+    *(rs_element*)buf1596 = rsAllocationGetElement(*(rs_allocation*)buf1597);
+    rsAllocationIoReceive(*(rs_allocation*)buf1598);
+    rsAllocationIoSend(*(rs_allocation*)buf1599);
+    *(int32_t*)buf1600 = rsAtomicAdd((volatile int32_t*) buf1601, *(int32_t*)buf1602);
+    *(int32_t*)buf1603 = rsAtomicAdd((volatile uint32_t*) buf1604, *(uint32_t*)buf1605);
+    *(int32_t*)buf1606 = rsAtomicAnd((volatile int32_t*) buf1607, *(int32_t*)buf1608);
+    *(int32_t*)buf1609 = rsAtomicAnd((volatile uint32_t*) buf1610, *(uint32_t*)buf1611);
+    *(int32_t*)buf1612 = rsAtomicCas((volatile int32_t*) buf1613, *(int32_t*)buf1614, *(int32_t*)buf1615);
+    *(uint32_t*)buf1616 = rsAtomicCas((volatile uint32_t*) buf1617, *(uint32_t*)buf1618, *(uint32_t*)buf1619);
+    *(int32_t*)buf1620 = rsAtomicDec((volatile int32_t*) buf1621);
+    *(int32_t*)buf1622 = rsAtomicDec((volatile uint32_t*) buf1623);
+    *(int32_t*)buf1624 = rsAtomicInc((volatile int32_t*) buf1625);
+    *(int32_t*)buf1626 = rsAtomicInc((volatile uint32_t*) buf1627);
+    *(uint32_t*)buf1628 = rsAtomicMax((volatile uint32_t*) buf1629, *(uint32_t*)buf1630);
+    *(int32_t*)buf1631 = rsAtomicMax((volatile int32_t*) buf1632, *(int32_t*)buf1633);
+    *(uint32_t*)buf1634 = rsAtomicMin((volatile uint32_t*) buf1635, *(uint32_t*)buf1636);
+    *(int32_t*)buf1637 = rsAtomicMin((volatile int32_t*) buf1638, *(int32_t*)buf1639);
+    *(int32_t*)buf1640 = rsAtomicOr((volatile int32_t*) buf1641, *(int32_t*)buf1642);
+    *(int32_t*)buf1643 = rsAtomicOr((volatile uint32_t*) buf1644, *(uint32_t*)buf1645);
+    *(int32_t*)buf1646 = rsAtomicSub((volatile int32_t*) buf1647, *(int32_t*)buf1648);
+    *(int32_t*)buf1649 = rsAtomicSub((volatile uint32_t*) buf1650, *(uint32_t*)buf1651);
+    *(int32_t*)buf1652 = rsAtomicXor((volatile int32_t*) buf1653, *(int32_t*)buf1654);
+    *(int32_t*)buf1655 = rsAtomicXor((volatile uint32_t*) buf1656, *(uint32_t*)buf1657);
+    *(char*)buf1658 = rsClamp(*(char*)buf1659, *(char*)buf1660, *(char*)buf1661);
+    *(uchar*)buf1662 = rsClamp(*(uchar*)buf1663, *(uchar*)buf1664, *(uchar*)buf1665);
+    *(short*)buf1666 = rsClamp(*(short*)buf1667, *(short*)buf1668, *(short*)buf1669);
+    *(ushort*)buf1670 = rsClamp(*(ushort*)buf1671, *(ushort*)buf1672, *(ushort*)buf1673);
+    *(int*)buf1674 = rsClamp(*(int*)buf1675, *(int*)buf1676, *(int*)buf1677);
+    *(uint*)buf1678 = rsClamp(*(uint*)buf1679, *(uint*)buf1680, *(uint*)buf1681);
+    rsClearObject((rs_element*) buf1682);
+    rsClearObject((rs_type*) buf1683);
+    rsClearObject((rs_allocation*) buf1684);
+    rsClearObject((rs_sampler*) buf1685);
+    rsClearObject((rs_script*) buf1686);
+#ifndef __LP64__
+    rsClearObject((rs_mesh*) buf1687);
+    rsClearObject((rs_program_fragment*) buf1688);
+    rsClearObject((rs_program_vertex*) buf1689);
+    rsClearObject((rs_program_raster*) buf1690);
+    rsClearObject((rs_program_store*) buf1691);
+    rsClearObject((rs_font*) buf1692);
+#endif
+    rsDebug((const char*) buf1693, *(double*)buf1694);
+    rsDebug((const char*) buf1695, *(int*)buf1696);
+    rsDebug((const char*) buf1697, *(uint*)buf1698);
+    rsDebug((const char*) buf1699, *(long*)buf1700);
+    rsDebug((const char*) buf1701, *(ulong*)buf1702);
+    rsDebug((const char*) buf1703, *(int2*)buf1704);
+    rsDebug((const char*) buf1705, *(int3*)buf1706);
+    rsDebug((const char*) buf1707, *(int4*)buf1708);
+    rsDebug((const char*) buf1709, *(uint2*)buf1710);
+    rsDebug((const char*) buf1711, *(uint3*)buf1712);
+    rsDebug((const char*) buf1713, *(uint4*)buf1714);
+    rsDebug((const char*) buf1715, *(long2*)buf1716);
+    rsDebug((const char*) buf1717, *(long3*)buf1718);
+    rsDebug((const char*) buf1719, *(long4*)buf1720);
+    rsDebug((const char*) buf1721, *(ulong2*)buf1722);
+    rsDebug((const char*) buf1723, *(ulong3*)buf1724);
+    rsDebug((const char*) buf1725, *(ulong4*)buf1726);
+    rsDebug((const char*) buf1727, *(float*)buf1728);
+    rsDebug((const char*) buf1729, *(float2*)buf1730);
+    rsDebug((const char*) buf1731, *(float3*)buf1732);
+    rsDebug((const char*) buf1733, *(float4*)buf1734);
+    rsDebug((const char*) buf1735, *(char*)buf1736);
+    rsDebug((const char*) buf1737, *(char2*)buf1738);
+    rsDebug((const char*) buf1739, *(char3*)buf1740);
+    rsDebug((const char*) buf1741, *(char4*)buf1742);
+    rsDebug((const char*) buf1743, *(uchar*)buf1744);
+    rsDebug((const char*) buf1745, *(uchar2*)buf1746);
+    rsDebug((const char*) buf1747, *(uchar3*)buf1748);
+    rsDebug((const char*) buf1749, *(uchar4*)buf1750);
+    rsDebug((const char*) buf1751, *(short*)buf1752);
+    rsDebug((const char*) buf1753, *(short2*)buf1754);
+    rsDebug((const char*) buf1755, *(short3*)buf1756);
+    rsDebug((const char*) buf1757, *(short4*)buf1758);
+    rsDebug((const char*) buf1759, *(ushort*)buf1760);
+    rsDebug((const char*) buf1761, *(ushort2*)buf1762);
+    rsDebug((const char*) buf1763, *(ushort3*)buf1764);
+    rsDebug((const char*) buf1765, *(ushort4*)buf1766);
+    rsDebug((const char*) buf1767, *(float*)buf1768, *(float*)buf1769);
+    rsDebug((const char*) buf1770, *(float*)buf1771, *(float*)buf1772, *(float*)buf1773);
+    rsDebug((const char*) buf1774, *(float*)buf1775, *(float*)buf1776, *(float*)buf1777, *(float*)buf1778);
+    rsDebug((const char*) buf1779, *(long long*)buf1780);
+    rsDebug((const char*) buf1781, *(unsigned long long*)buf1782);
+    rsDebug((const char*) buf1783, (const void*) buf1784);
+    rsDebug((const char*) buf1785, (const rs_matrix4x4*) buf1786);
+    rsDebug((const char*) buf1787, (const rs_matrix3x3*) buf1788);
+    rsDebug((const char*) buf1789, (const rs_matrix2x2*) buf1790);
+    *(uint32_t*)buf1791 = rsElementGetBytesSize(*(rs_element*)buf1792);
+    *(rs_data_kind*)buf1793 = rsElementGetDataKind(*(rs_element*)buf1794);
+    *(rs_data_type*)buf1795 = rsElementGetDataType(*(rs_element*)buf1796);
+    *(rs_element*)buf1797 = rsElementGetSubElement(*(rs_element*)buf1798, *(uint32_t*)buf1799);
+    *(uint32_t*)buf1800 = rsElementGetSubElementArraySize(*(rs_element*)buf1801, *(uint32_t*)buf1802);
+    *(uint32_t*)buf1803 = rsElementGetSubElementCount(*(rs_element*)buf1804);
+    *(uint32_t*)buf1805 = rsElementGetSubElementName(*(rs_element*)buf1806, *(uint32_t*)buf1807, (char*) buf1808, *(uint32_t*)buf1809);
+    *(uint32_t*)buf1810 = rsElementGetSubElementNameLength(*(rs_element*)buf1811, *(uint32_t*)buf1812);
+    *(uint32_t*)buf1813 = rsElementGetSubElementOffsetBytes(*(rs_element*)buf1814, *(uint32_t*)buf1815);
+    *(uint32_t*)buf1816 = rsElementGetVectorSize(*(rs_element*)buf1817);
+    rsExtractFrustumPlanes((const rs_matrix4x4*) buf1818, (float4*) buf1819, (float4*) buf1820, (float4*) buf1821, (float4*) buf1822, (float4*) buf1823, (float4*) buf1824);
+    rsForEach(*(rs_script*)buf1825, *(rs_allocation*)buf1826, *(rs_allocation*)buf1827, (const void*) buf1828, *(size_t*)buf1829, (const rs_script_call_t*) buf1830);
+    rsForEach(*(rs_script*)buf1831, *(rs_allocation*)buf1832, *(rs_allocation*)buf1833, (const void*) buf1834, *(size_t*)buf1835);
+    rsForEach(*(rs_script*)buf1836, *(rs_allocation*)buf1837, *(rs_allocation*)buf1838);
+    *(float*)buf1839 = rsFrac(*(float*)buf1840);
+    *(rs_allocation*)buf1841 = rsGetAllocation((const void*) buf1842);
+    *(float*)buf1843 = rsGetDt();
+    *(const void**)buf1844 = rsGetElementAt(*(rs_allocation*)buf1845, *(uint32_t*)buf1846);
+    *(const void**)buf1847 = rsGetElementAt(*(rs_allocation*)buf1848, *(uint32_t*)buf1849, *(uint32_t*)buf1850);
+    *(const void**)buf1851 = rsGetElementAt(*(rs_allocation*)buf1852, *(uint32_t*)buf1853, *(uint32_t*)buf1854, *(uint32_t*)buf1855);
+    *(float*)buf1856 = rsGetElementAt_float(*(rs_allocation*)buf1857, *(uint32_t*)buf1858);
+    *(float2*)buf1859 = rsGetElementAt_float2(*(rs_allocation*)buf1860, *(uint32_t*)buf1861);
+    *(float3*)buf1862 = rsGetElementAt_float3(*(rs_allocation*)buf1863, *(uint32_t*)buf1864);
+    *(float4*)buf1865 = rsGetElementAt_float4(*(rs_allocation*)buf1866, *(uint32_t*)buf1867);
+    *(double*)buf1868 = rsGetElementAt_double(*(rs_allocation*)buf1869, *(uint32_t*)buf1870);
+    *(double2*)buf1871 = rsGetElementAt_double2(*(rs_allocation*)buf1872, *(uint32_t*)buf1873);
+    *(double3*)buf1874 = rsGetElementAt_double3(*(rs_allocation*)buf1875, *(uint32_t*)buf1876);
+    *(double4*)buf1877 = rsGetElementAt_double4(*(rs_allocation*)buf1878, *(uint32_t*)buf1879);
+    *(char*)buf1880 = rsGetElementAt_char(*(rs_allocation*)buf1881, *(uint32_t*)buf1882);
+    *(char2*)buf1883 = rsGetElementAt_char2(*(rs_allocation*)buf1884, *(uint32_t*)buf1885);
+    *(char3*)buf1886 = rsGetElementAt_char3(*(rs_allocation*)buf1887, *(uint32_t*)buf1888);
+    *(char4*)buf1889 = rsGetElementAt_char4(*(rs_allocation*)buf1890, *(uint32_t*)buf1891);
+    *(uchar*)buf1892 = rsGetElementAt_uchar(*(rs_allocation*)buf1893, *(uint32_t*)buf1894);
+    *(uchar2*)buf1895 = rsGetElementAt_uchar2(*(rs_allocation*)buf1896, *(uint32_t*)buf1897);
+    *(uchar3*)buf1898 = rsGetElementAt_uchar3(*(rs_allocation*)buf1899, *(uint32_t*)buf1900);
+    *(uchar4*)buf1901 = rsGetElementAt_uchar4(*(rs_allocation*)buf1902, *(uint32_t*)buf1903);
+    *(short*)buf1904 = rsGetElementAt_short(*(rs_allocation*)buf1905, *(uint32_t*)buf1906);
+    *(short2*)buf1907 = rsGetElementAt_short2(*(rs_allocation*)buf1908, *(uint32_t*)buf1909);
+    *(short3*)buf1910 = rsGetElementAt_short3(*(rs_allocation*)buf1911, *(uint32_t*)buf1912);
+    *(short4*)buf1913 = rsGetElementAt_short4(*(rs_allocation*)buf1914, *(uint32_t*)buf1915);
+    *(ushort*)buf1916 = rsGetElementAt_ushort(*(rs_allocation*)buf1917, *(uint32_t*)buf1918);
+    *(ushort2*)buf1919 = rsGetElementAt_ushort2(*(rs_allocation*)buf1920, *(uint32_t*)buf1921);
+    *(ushort3*)buf1922 = rsGetElementAt_ushort3(*(rs_allocation*)buf1923, *(uint32_t*)buf1924);
+    *(ushort4*)buf1925 = rsGetElementAt_ushort4(*(rs_allocation*)buf1926, *(uint32_t*)buf1927);
+    *(int*)buf1928 = rsGetElementAt_int(*(rs_allocation*)buf1929, *(uint32_t*)buf1930);
+    *(int2*)buf1931 = rsGetElementAt_int2(*(rs_allocation*)buf1932, *(uint32_t*)buf1933);
+    *(int3*)buf1934 = rsGetElementAt_int3(*(rs_allocation*)buf1935, *(uint32_t*)buf1936);
+    *(int4*)buf1937 = rsGetElementAt_int4(*(rs_allocation*)buf1938, *(uint32_t*)buf1939);
+    *(uint*)buf1940 = rsGetElementAt_uint(*(rs_allocation*)buf1941, *(uint32_t*)buf1942);
+    *(uint2*)buf1943 = rsGetElementAt_uint2(*(rs_allocation*)buf1944, *(uint32_t*)buf1945);
+    *(uint3*)buf1946 = rsGetElementAt_uint3(*(rs_allocation*)buf1947, *(uint32_t*)buf1948);
+    *(uint4*)buf1949 = rsGetElementAt_uint4(*(rs_allocation*)buf1950, *(uint32_t*)buf1951);
+    *(long*)buf1952 = rsGetElementAt_long(*(rs_allocation*)buf1953, *(uint32_t*)buf1954);
+    *(long2*)buf1955 = rsGetElementAt_long2(*(rs_allocation*)buf1956, *(uint32_t*)buf1957);
+    *(long3*)buf1958 = rsGetElementAt_long3(*(rs_allocation*)buf1959, *(uint32_t*)buf1960);
+    *(long4*)buf1961 = rsGetElementAt_long4(*(rs_allocation*)buf1962, *(uint32_t*)buf1963);
+    *(ulong*)buf1964 = rsGetElementAt_ulong(*(rs_allocation*)buf1965, *(uint32_t*)buf1966);
+    *(ulong2*)buf1967 = rsGetElementAt_ulong2(*(rs_allocation*)buf1968, *(uint32_t*)buf1969);
+    *(ulong3*)buf1970 = rsGetElementAt_ulong3(*(rs_allocation*)buf1971, *(uint32_t*)buf1972);
+    *(ulong4*)buf1973 = rsGetElementAt_ulong4(*(rs_allocation*)buf1974, *(uint32_t*)buf1975);
+    *(float*)buf1976 = rsGetElementAt_float(*(rs_allocation*)buf1977, *(uint32_t*)buf1978, *(uint32_t*)buf1979);
+    *(float2*)buf1980 = rsGetElementAt_float2(*(rs_allocation*)buf1981, *(uint32_t*)buf1982, *(uint32_t*)buf1983);
+    *(float3*)buf1984 = rsGetElementAt_float3(*(rs_allocation*)buf1985, *(uint32_t*)buf1986, *(uint32_t*)buf1987);
+    *(float4*)buf1988 = rsGetElementAt_float4(*(rs_allocation*)buf1989, *(uint32_t*)buf1990, *(uint32_t*)buf1991);
+    *(double*)buf1992 = rsGetElementAt_double(*(rs_allocation*)buf1993, *(uint32_t*)buf1994, *(uint32_t*)buf1995);
+    *(double2*)buf1996 = rsGetElementAt_double2(*(rs_allocation*)buf1997, *(uint32_t*)buf1998, *(uint32_t*)buf1999);
+    *(double3*)buf2000 = rsGetElementAt_double3(*(rs_allocation*)buf2001, *(uint32_t*)buf2002, *(uint32_t*)buf2003);
+    *(double4*)buf2004 = rsGetElementAt_double4(*(rs_allocation*)buf2005, *(uint32_t*)buf2006, *(uint32_t*)buf2007);
+    *(char*)buf2008 = rsGetElementAt_char(*(rs_allocation*)buf2009, *(uint32_t*)buf2010, *(uint32_t*)buf2011);
+    *(char2*)buf2012 = rsGetElementAt_char2(*(rs_allocation*)buf2013, *(uint32_t*)buf2014, *(uint32_t*)buf2015);
+    *(char3*)buf2016 = rsGetElementAt_char3(*(rs_allocation*)buf2017, *(uint32_t*)buf2018, *(uint32_t*)buf2019);
+    *(char4*)buf2020 = rsGetElementAt_char4(*(rs_allocation*)buf2021, *(uint32_t*)buf2022, *(uint32_t*)buf2023);
+    *(uchar*)buf2024 = rsGetElementAt_uchar(*(rs_allocation*)buf2025, *(uint32_t*)buf2026, *(uint32_t*)buf2027);
+    *(uchar2*)buf2028 = rsGetElementAt_uchar2(*(rs_allocation*)buf2029, *(uint32_t*)buf2030, *(uint32_t*)buf2031);
+    *(uchar3*)buf2032 = rsGetElementAt_uchar3(*(rs_allocation*)buf2033, *(uint32_t*)buf2034, *(uint32_t*)buf2035);
+    *(uchar4*)buf2036 = rsGetElementAt_uchar4(*(rs_allocation*)buf2037, *(uint32_t*)buf2038, *(uint32_t*)buf2039);
+    *(short*)buf2040 = rsGetElementAt_short(*(rs_allocation*)buf2041, *(uint32_t*)buf2042, *(uint32_t*)buf2043);
+    *(short2*)buf2044 = rsGetElementAt_short2(*(rs_allocation*)buf2045, *(uint32_t*)buf2046, *(uint32_t*)buf2047);
+    *(short3*)buf2048 = rsGetElementAt_short3(*(rs_allocation*)buf2049, *(uint32_t*)buf2050, *(uint32_t*)buf2051);
+    *(short4*)buf2052 = rsGetElementAt_short4(*(rs_allocation*)buf2053, *(uint32_t*)buf2054, *(uint32_t*)buf2055);
+    *(ushort*)buf2056 = rsGetElementAt_ushort(*(rs_allocation*)buf2057, *(uint32_t*)buf2058, *(uint32_t*)buf2059);
+    *(ushort2*)buf2060 = rsGetElementAt_ushort2(*(rs_allocation*)buf2061, *(uint32_t*)buf2062, *(uint32_t*)buf2063);
+    *(ushort3*)buf2064 = rsGetElementAt_ushort3(*(rs_allocation*)buf2065, *(uint32_t*)buf2066, *(uint32_t*)buf2067);
+    *(ushort4*)buf2068 = rsGetElementAt_ushort4(*(rs_allocation*)buf2069, *(uint32_t*)buf2070, *(uint32_t*)buf2071);
+    *(int*)buf2072 = rsGetElementAt_int(*(rs_allocation*)buf2073, *(uint32_t*)buf2074, *(uint32_t*)buf2075);
+    *(int2*)buf2076 = rsGetElementAt_int2(*(rs_allocation*)buf2077, *(uint32_t*)buf2078, *(uint32_t*)buf2079);
+    *(int3*)buf2080 = rsGetElementAt_int3(*(rs_allocation*)buf2081, *(uint32_t*)buf2082, *(uint32_t*)buf2083);
+    *(int4*)buf2084 = rsGetElementAt_int4(*(rs_allocation*)buf2085, *(uint32_t*)buf2086, *(uint32_t*)buf2087);
+    *(uint*)buf2088 = rsGetElementAt_uint(*(rs_allocation*)buf2089, *(uint32_t*)buf2090, *(uint32_t*)buf2091);
+    *(uint2*)buf2092 = rsGetElementAt_uint2(*(rs_allocation*)buf2093, *(uint32_t*)buf2094, *(uint32_t*)buf2095);
+    *(uint3*)buf2096 = rsGetElementAt_uint3(*(rs_allocation*)buf2097, *(uint32_t*)buf2098, *(uint32_t*)buf2099);
+    *(uint4*)buf2100 = rsGetElementAt_uint4(*(rs_allocation*)buf2101, *(uint32_t*)buf2102, *(uint32_t*)buf2103);
+    *(long*)buf2104 = rsGetElementAt_long(*(rs_allocation*)buf2105, *(uint32_t*)buf2106, *(uint32_t*)buf2107);
+    *(long2*)buf2108 = rsGetElementAt_long2(*(rs_allocation*)buf2109, *(uint32_t*)buf2110, *(uint32_t*)buf2111);
+    *(long3*)buf2112 = rsGetElementAt_long3(*(rs_allocation*)buf2113, *(uint32_t*)buf2114, *(uint32_t*)buf2115);
+    *(long4*)buf2116 = rsGetElementAt_long4(*(rs_allocation*)buf2117, *(uint32_t*)buf2118, *(uint32_t*)buf2119);
+    *(ulong*)buf2120 = rsGetElementAt_ulong(*(rs_allocation*)buf2121, *(uint32_t*)buf2122, *(uint32_t*)buf2123);
+    *(ulong2*)buf2124 = rsGetElementAt_ulong2(*(rs_allocation*)buf2125, *(uint32_t*)buf2126, *(uint32_t*)buf2127);
+    *(ulong3*)buf2128 = rsGetElementAt_ulong3(*(rs_allocation*)buf2129, *(uint32_t*)buf2130, *(uint32_t*)buf2131);
+    *(ulong4*)buf2132 = rsGetElementAt_ulong4(*(rs_allocation*)buf2133, *(uint32_t*)buf2134, *(uint32_t*)buf2135);
+    *(float*)buf2136 = rsGetElementAt_float(*(rs_allocation*)buf2137, *(uint32_t*)buf2138, *(uint32_t*)buf2139, *(uint32_t*)buf2140);
+    *(float2*)buf2141 = rsGetElementAt_float2(*(rs_allocation*)buf2142, *(uint32_t*)buf2143, *(uint32_t*)buf2144, *(uint32_t*)buf2145);
+    *(float3*)buf2146 = rsGetElementAt_float3(*(rs_allocation*)buf2147, *(uint32_t*)buf2148, *(uint32_t*)buf2149, *(uint32_t*)buf2150);
+    *(float4*)buf2151 = rsGetElementAt_float4(*(rs_allocation*)buf2152, *(uint32_t*)buf2153, *(uint32_t*)buf2154, *(uint32_t*)buf2155);
+    *(double*)buf2156 = rsGetElementAt_double(*(rs_allocation*)buf2157, *(uint32_t*)buf2158, *(uint32_t*)buf2159, *(uint32_t*)buf2160);
+    *(double2*)buf2161 = rsGetElementAt_double2(*(rs_allocation*)buf2162, *(uint32_t*)buf2163, *(uint32_t*)buf2164, *(uint32_t*)buf2165);
+    *(double3*)buf2166 = rsGetElementAt_double3(*(rs_allocation*)buf2167, *(uint32_t*)buf2168, *(uint32_t*)buf2169, *(uint32_t*)buf2170);
+    *(double4*)buf2171 = rsGetElementAt_double4(*(rs_allocation*)buf2172, *(uint32_t*)buf2173, *(uint32_t*)buf2174, *(uint32_t*)buf2175);
+    *(char*)buf2176 = rsGetElementAt_char(*(rs_allocation*)buf2177, *(uint32_t*)buf2178, *(uint32_t*)buf2179, *(uint32_t*)buf2180);
+    *(char2*)buf2181 = rsGetElementAt_char2(*(rs_allocation*)buf2182, *(uint32_t*)buf2183, *(uint32_t*)buf2184, *(uint32_t*)buf2185);
+    *(char3*)buf2186 = rsGetElementAt_char3(*(rs_allocation*)buf2187, *(uint32_t*)buf2188, *(uint32_t*)buf2189, *(uint32_t*)buf2190);
+    *(char4*)buf2191 = rsGetElementAt_char4(*(rs_allocation*)buf2192, *(uint32_t*)buf2193, *(uint32_t*)buf2194, *(uint32_t*)buf2195);
+    *(uchar*)buf2196 = rsGetElementAt_uchar(*(rs_allocation*)buf2197, *(uint32_t*)buf2198, *(uint32_t*)buf2199, *(uint32_t*)buf2200);
+    *(uchar2*)buf2201 = rsGetElementAt_uchar2(*(rs_allocation*)buf2202, *(uint32_t*)buf2203, *(uint32_t*)buf2204, *(uint32_t*)buf2205);
+    *(uchar3*)buf2206 = rsGetElementAt_uchar3(*(rs_allocation*)buf2207, *(uint32_t*)buf2208, *(uint32_t*)buf2209, *(uint32_t*)buf2210);
+    *(uchar4*)buf2211 = rsGetElementAt_uchar4(*(rs_allocation*)buf2212, *(uint32_t*)buf2213, *(uint32_t*)buf2214, *(uint32_t*)buf2215);
+    *(short*)buf2216 = rsGetElementAt_short(*(rs_allocation*)buf2217, *(uint32_t*)buf2218, *(uint32_t*)buf2219, *(uint32_t*)buf2220);
+    *(short2*)buf2221 = rsGetElementAt_short2(*(rs_allocation*)buf2222, *(uint32_t*)buf2223, *(uint32_t*)buf2224, *(uint32_t*)buf2225);
+    *(short3*)buf2226 = rsGetElementAt_short3(*(rs_allocation*)buf2227, *(uint32_t*)buf2228, *(uint32_t*)buf2229, *(uint32_t*)buf2230);
+    *(short4*)buf2231 = rsGetElementAt_short4(*(rs_allocation*)buf2232, *(uint32_t*)buf2233, *(uint32_t*)buf2234, *(uint32_t*)buf2235);
+    *(ushort*)buf2236 = rsGetElementAt_ushort(*(rs_allocation*)buf2237, *(uint32_t*)buf2238, *(uint32_t*)buf2239, *(uint32_t*)buf2240);
+    *(ushort2*)buf2241 = rsGetElementAt_ushort2(*(rs_allocation*)buf2242, *(uint32_t*)buf2243, *(uint32_t*)buf2244, *(uint32_t*)buf2245);
+    *(ushort3*)buf2246 = rsGetElementAt_ushort3(*(rs_allocation*)buf2247, *(uint32_t*)buf2248, *(uint32_t*)buf2249, *(uint32_t*)buf2250);
+    *(ushort4*)buf2251 = rsGetElementAt_ushort4(*(rs_allocation*)buf2252, *(uint32_t*)buf2253, *(uint32_t*)buf2254, *(uint32_t*)buf2255);
+    *(int*)buf2256 = rsGetElementAt_int(*(rs_allocation*)buf2257, *(uint32_t*)buf2258, *(uint32_t*)buf2259, *(uint32_t*)buf2260);
+    *(int2*)buf2261 = rsGetElementAt_int2(*(rs_allocation*)buf2262, *(uint32_t*)buf2263, *(uint32_t*)buf2264, *(uint32_t*)buf2265);
+    *(int3*)buf2266 = rsGetElementAt_int3(*(rs_allocation*)buf2267, *(uint32_t*)buf2268, *(uint32_t*)buf2269, *(uint32_t*)buf2270);
+    *(int4*)buf2271 = rsGetElementAt_int4(*(rs_allocation*)buf2272, *(uint32_t*)buf2273, *(uint32_t*)buf2274, *(uint32_t*)buf2275);
+    *(uint*)buf2276 = rsGetElementAt_uint(*(rs_allocation*)buf2277, *(uint32_t*)buf2278, *(uint32_t*)buf2279, *(uint32_t*)buf2280);
+    *(uint2*)buf2281 = rsGetElementAt_uint2(*(rs_allocation*)buf2282, *(uint32_t*)buf2283, *(uint32_t*)buf2284, *(uint32_t*)buf2285);
+    *(uint3*)buf2286 = rsGetElementAt_uint3(*(rs_allocation*)buf2287, *(uint32_t*)buf2288, *(uint32_t*)buf2289, *(uint32_t*)buf2290);
+    *(uint4*)buf2291 = rsGetElementAt_uint4(*(rs_allocation*)buf2292, *(uint32_t*)buf2293, *(uint32_t*)buf2294, *(uint32_t*)buf2295);
+    *(long*)buf2296 = rsGetElementAt_long(*(rs_allocation*)buf2297, *(uint32_t*)buf2298, *(uint32_t*)buf2299, *(uint32_t*)buf2300);
+    *(long2*)buf2301 = rsGetElementAt_long2(*(rs_allocation*)buf2302, *(uint32_t*)buf2303, *(uint32_t*)buf2304, *(uint32_t*)buf2305);
+    *(long3*)buf2306 = rsGetElementAt_long3(*(rs_allocation*)buf2307, *(uint32_t*)buf2308, *(uint32_t*)buf2309, *(uint32_t*)buf2310);
+    *(long4*)buf2311 = rsGetElementAt_long4(*(rs_allocation*)buf2312, *(uint32_t*)buf2313, *(uint32_t*)buf2314, *(uint32_t*)buf2315);
+    *(ulong*)buf2316 = rsGetElementAt_ulong(*(rs_allocation*)buf2317, *(uint32_t*)buf2318, *(uint32_t*)buf2319, *(uint32_t*)buf2320);
+    *(ulong2*)buf2321 = rsGetElementAt_ulong2(*(rs_allocation*)buf2322, *(uint32_t*)buf2323, *(uint32_t*)buf2324, *(uint32_t*)buf2325);
+    *(ulong3*)buf2326 = rsGetElementAt_ulong3(*(rs_allocation*)buf2327, *(uint32_t*)buf2328, *(uint32_t*)buf2329, *(uint32_t*)buf2330);
+    *(ulong4*)buf2331 = rsGetElementAt_ulong4(*(rs_allocation*)buf2332, *(uint32_t*)buf2333, *(uint32_t*)buf2334, *(uint32_t*)buf2335);
+    *(uchar*)buf2336 = rsGetElementAtYuv_uchar_U(*(rs_allocation*)buf2337, *(uint32_t*)buf2338, *(uint32_t*)buf2339);
+    *(uchar*)buf2340 = rsGetElementAtYuv_uchar_V(*(rs_allocation*)buf2341, *(uint32_t*)buf2342, *(uint32_t*)buf2343);
+    *(uchar*)buf2344 = rsGetElementAtYuv_uchar_Y(*(rs_allocation*)buf2345, *(uint32_t*)buf2346, *(uint32_t*)buf2347);
+    *(bool*)buf2348 = rsIsObject(*(rs_element*)buf2349);
+    *(bool*)buf2350 = rsIsObject(*(rs_type*)buf2351);
+    *(bool*)buf2352 = rsIsObject(*(rs_allocation*)buf2353);
+    *(bool*)buf2354 = rsIsObject(*(rs_sampler*)buf2355);
+    *(bool*)buf2356 = rsIsObject(*(rs_script*)buf2357);
+#ifndef __LP64__
+    *(bool*)buf2358 = rsIsObject(*(rs_mesh*)buf2359);
+    *(bool*)buf2360 = rsIsObject(*(rs_program_fragment*)buf2361);
+    *(bool*)buf2362 = rsIsObject(*(rs_program_vertex*)buf2363);
+    *(bool*)buf2364 = rsIsObject(*(rs_program_raster*)buf2365);
+    *(bool*)buf2366 = rsIsObject(*(rs_program_store*)buf2367);
+    *(bool*)buf2368 = rsIsObject(*(rs_font*)buf2369);
+#endif
+    *(bool*)buf2370 = rsIsSphereInFrustum((float4*) buf2371, (float4*) buf2372, (float4*) buf2373, (float4*) buf2374, (float4*) buf2375, (float4*) buf2376, (float4*) buf2377);
+    *(rs_tm**)buf2378 = rsLocaltime((rs_tm*) buf2379, (const rs_time_t*) buf2380);
+    *(float*)buf2381 = rsMatrixGet((const rs_matrix4x4*) buf2382, *(uint32_t*)buf2383, *(uint32_t*)buf2384);
+    *(float*)buf2385 = rsMatrixGet((const rs_matrix3x3*) buf2386, *(uint32_t*)buf2387, *(uint32_t*)buf2388);
+    *(float*)buf2389 = rsMatrixGet((const rs_matrix2x2*) buf2390, *(uint32_t*)buf2391, *(uint32_t*)buf2392);
+    *(bool*)buf2393 = rsMatrixInverse((rs_matrix4x4*) buf2394);
+    *(bool*)buf2395 = rsMatrixInverseTranspose((rs_matrix4x4*) buf2396);
+    rsMatrixLoad((rs_matrix4x4*) buf2397, (const float*) buf2398);
+    rsMatrixLoad((rs_matrix3x3*) buf2399, (const float*) buf2400);
+    rsMatrixLoad((rs_matrix2x2*) buf2401, (const float*) buf2402);
+    rsMatrixLoad((rs_matrix4x4*) buf2403, (const rs_matrix4x4*) buf2404);
+    rsMatrixLoad((rs_matrix3x3*) buf2405, (const rs_matrix3x3*) buf2406);
+    rsMatrixLoad((rs_matrix2x2*) buf2407, (const rs_matrix2x2*) buf2408);
+    rsMatrixLoad((rs_matrix4x4*) buf2409, (const rs_matrix3x3*) buf2410);
+    rsMatrixLoad((rs_matrix4x4*) buf2411, (const rs_matrix2x2*) buf2412);
+    rsMatrixLoadFrustum((rs_matrix4x4*) buf2413, *(float*)buf2414, *(float*)buf2415, *(float*)buf2416, *(float*)buf2417, *(float*)buf2418, *(float*)buf2419);
+    rsMatrixLoadIdentity((rs_matrix4x4*) buf2420);
+    rsMatrixLoadIdentity((rs_matrix3x3*) buf2421);
+    rsMatrixLoadIdentity((rs_matrix2x2*) buf2422);
+    rsMatrixLoadMultiply((rs_matrix4x4*) buf2423, (const rs_matrix4x4*) buf2424, (const rs_matrix4x4*) buf2425);
+    rsMatrixLoadMultiply((rs_matrix3x3*) buf2426, (const rs_matrix3x3*) buf2427, (const rs_matrix3x3*) buf2428);
+    rsMatrixLoadMultiply((rs_matrix2x2*) buf2429, (const rs_matrix2x2*) buf2430, (const rs_matrix2x2*) buf2431);
+    rsMatrixLoadOrtho((rs_matrix4x4*) buf2432, *(float*)buf2433, *(float*)buf2434, *(float*)buf2435, *(float*)buf2436, *(float*)buf2437, *(float*)buf2438);
+    rsMatrixLoadPerspective((rs_matrix4x4*) buf2439, *(float*)buf2440, *(float*)buf2441, *(float*)buf2442, *(float*)buf2443);
+    rsMatrixLoadRotate((rs_matrix4x4*) buf2444, *(float*)buf2445, *(float*)buf2446, *(float*)buf2447, *(float*)buf2448);
+    rsMatrixLoadScale((rs_matrix4x4*) buf2449, *(float*)buf2450, *(float*)buf2451, *(float*)buf2452);
+    rsMatrixLoadTranslate((rs_matrix4x4*) buf2453, *(float*)buf2454, *(float*)buf2455, *(float*)buf2456);
+    rsMatrixMultiply((rs_matrix4x4*) buf2457, (const rs_matrix4x4*) buf2458);
+    rsMatrixMultiply((rs_matrix3x3*) buf2459, (const rs_matrix3x3*) buf2460);
+    rsMatrixMultiply((rs_matrix2x2*) buf2461, (const rs_matrix2x2*) buf2462);
+    *(float4*)buf2463 = rsMatrixMultiply((const rs_matrix4x4*) buf2464, *(float4*)buf2465);
+    *(float4*)buf2466 = rsMatrixMultiply((const rs_matrix4x4*) buf2467, *(float3*)buf2468);
+    *(float4*)buf2469 = rsMatrixMultiply((const rs_matrix4x4*) buf2470, *(float2*)buf2471);
+    *(float3*)buf2472 = rsMatrixMultiply((const rs_matrix3x3*) buf2473, *(float3*)buf2474);
+    *(float3*)buf2475 = rsMatrixMultiply((const rs_matrix3x3*) buf2476, *(float2*)buf2477);
+    *(float2*)buf2478 = rsMatrixMultiply((const rs_matrix2x2*) buf2479, *(float2*)buf2480);
+    rsMatrixRotate((rs_matrix4x4*) buf2481, *(float*)buf2482, *(float*)buf2483, *(float*)buf2484, *(float*)buf2485);
+    rsMatrixScale((rs_matrix4x4*) buf2486, *(float*)buf2487, *(float*)buf2488, *(float*)buf2489);
+    rsMatrixSet((rs_matrix4x4*) buf2490, *(uint32_t*)buf2491, *(uint32_t*)buf2492, *(float*)buf2493);
+    rsMatrixSet((rs_matrix3x3*) buf2494, *(uint32_t*)buf2495, *(uint32_t*)buf2496, *(float*)buf2497);
+    rsMatrixSet((rs_matrix2x2*) buf2498, *(uint32_t*)buf2499, *(uint32_t*)buf2500, *(float*)buf2501);
+    rsMatrixTranslate((rs_matrix4x4*) buf2502, *(float*)buf2503, *(float*)buf2504, *(float*)buf2505);
+    rsMatrixTranspose((rs_matrix4x4*) buf2506);
+    rsMatrixTranspose((rs_matrix3x3*) buf2507);
+    rsMatrixTranspose((rs_matrix2x2*) buf2508);
+    *(uchar4*)buf2509 = rsPackColorTo8888(*(float*)buf2510, *(float*)buf2511, *(float*)buf2512);
+    *(uchar4*)buf2513 = rsPackColorTo8888(*(float*)buf2514, *(float*)buf2515, *(float*)buf2516, *(float*)buf2517);
+    *(uchar4*)buf2518 = rsPackColorTo8888(*(float3*)buf2519);
+    *(uchar4*)buf2520 = rsPackColorTo8888(*(float4*)buf2521);
+    rsQuaternionAdd((rs_quaternion*) buf2522, (const rs_quaternion*) buf2523);
+    rsQuaternionConjugate((rs_quaternion*) buf2524);
+    *(float*)buf2525 = rsQuaternionDot((const rs_quaternion*) buf2526, (const rs_quaternion*) buf2527);
+    rsQuaternionGetMatrixUnit((rs_matrix4x4*) buf2528, (const rs_quaternion*) buf2529);
+    rsQuaternionLoadRotate((rs_quaternion*) buf2530, *(float*)buf2531, *(float*)buf2532, *(float*)buf2533, *(float*)buf2534);
+    rsQuaternionLoadRotateUnit((rs_quaternion*) buf2535, *(float*)buf2536, *(float*)buf2537, *(float*)buf2538, *(float*)buf2539);
+    rsQuaternionMultiply((rs_quaternion*) buf2540, *(float*)buf2541);
+    rsQuaternionMultiply((rs_quaternion*) buf2542, (const rs_quaternion*) buf2543);
+    rsQuaternionNormalize((rs_quaternion*) buf2544);
+    rsQuaternionSet((rs_quaternion*) buf2545, *(float*)buf2546, *(float*)buf2547, *(float*)buf2548, *(float*)buf2549);
+    rsQuaternionSet((rs_quaternion*) buf2550, (const rs_quaternion*) buf2551);
+    rsQuaternionSlerp((rs_quaternion*) buf2552, (const rs_quaternion*) buf2553, (const rs_quaternion*) buf2554, *(float*)buf2555);
+    *(int*)buf2556 = rsRand(*(int*)buf2557);
+    *(int*)buf2558 = rsRand(*(int*)buf2559, *(int*)buf2560);
+    *(float*)buf2561 = rsRand(*(float*)buf2562);
+    *(float*)buf2563 = rsRand(*(float*)buf2564, *(float*)buf2565);
+    *(float4*)buf2566 = rsSample(*(rs_allocation*)buf2567, *(rs_sampler*)buf2568, *(float*)buf2569);
+    *(float4*)buf2570 = rsSample(*(rs_allocation*)buf2571, *(rs_sampler*)buf2572, *(float*)buf2573, *(float*)buf2574);
+    *(float4*)buf2575 = rsSample(*(rs_allocation*)buf2576, *(rs_sampler*)buf2577, *(float2*)buf2578);
+    *(float4*)buf2579 = rsSample(*(rs_allocation*)buf2580, *(rs_sampler*)buf2581, *(float2*)buf2582, *(float*)buf2583);
+    *(float*)buf2584 = rsSamplerGetAnisotropy(*(rs_sampler*)buf2585);
+    *(rs_sampler_value*)buf2586 = rsSamplerGetMagnification(*(rs_sampler*)buf2587);
+    *(rs_sampler_value*)buf2588 = rsSamplerGetMinification(*(rs_sampler*)buf2589);
+    *(rs_sampler_value*)buf2590 = rsSamplerGetWrapS(*(rs_sampler*)buf2591);
+    *(rs_sampler_value*)buf2592 = rsSamplerGetWrapT(*(rs_sampler*)buf2593);
+    *(bool*)buf2594 = rsSendToClient(*(int*)buf2595);
+    *(bool*)buf2596 = rsSendToClient(*(int*)buf2597, (const void*) buf2598, *(uint*)buf2599);
+    rsSendToClientBlocking(*(int*)buf2600);
+    rsSendToClientBlocking(*(int*)buf2601, (const void*) buf2602, *(uint*)buf2603);
+    rsSetElementAt(*(rs_allocation*)buf2604, (void*) buf2605, *(uint32_t*)buf2606);
+    rsSetElementAt(*(rs_allocation*)buf2607, (void*) buf2608, *(uint32_t*)buf2609, *(uint32_t*)buf2610);
+    rsSetElementAt_float(*(rs_allocation*)buf2611, *(float*)buf2612, *(uint32_t*)buf2613);
+    rsSetElementAt_float2(*(rs_allocation*)buf2614, *(float2*)buf2615, *(uint32_t*)buf2616);
+    rsSetElementAt_float3(*(rs_allocation*)buf2617, *(float3*)buf2618, *(uint32_t*)buf2619);
+    rsSetElementAt_float4(*(rs_allocation*)buf2620, *(float4*)buf2621, *(uint32_t*)buf2622);
+    rsSetElementAt_double(*(rs_allocation*)buf2623, *(double*)buf2624, *(uint32_t*)buf2625);
+    rsSetElementAt_double2(*(rs_allocation*)buf2626, *(double2*)buf2627, *(uint32_t*)buf2628);
+    rsSetElementAt_double3(*(rs_allocation*)buf2629, *(double3*)buf2630, *(uint32_t*)buf2631);
+    rsSetElementAt_double4(*(rs_allocation*)buf2632, *(double4*)buf2633, *(uint32_t*)buf2634);
+    rsSetElementAt_char(*(rs_allocation*)buf2635, *(char*)buf2636, *(uint32_t*)buf2637);
+    rsSetElementAt_char2(*(rs_allocation*)buf2638, *(char2*)buf2639, *(uint32_t*)buf2640);
+    rsSetElementAt_char3(*(rs_allocation*)buf2641, *(char3*)buf2642, *(uint32_t*)buf2643);
+    rsSetElementAt_char4(*(rs_allocation*)buf2644, *(char4*)buf2645, *(uint32_t*)buf2646);
+    rsSetElementAt_uchar(*(rs_allocation*)buf2647, *(uchar*)buf2648, *(uint32_t*)buf2649);
+    rsSetElementAt_uchar2(*(rs_allocation*)buf2650, *(uchar2*)buf2651, *(uint32_t*)buf2652);
+    rsSetElementAt_uchar3(*(rs_allocation*)buf2653, *(uchar3*)buf2654, *(uint32_t*)buf2655);
+    rsSetElementAt_uchar4(*(rs_allocation*)buf2656, *(uchar4*)buf2657, *(uint32_t*)buf2658);
+    rsSetElementAt_short(*(rs_allocation*)buf2659, *(short*)buf2660, *(uint32_t*)buf2661);
+    rsSetElementAt_short2(*(rs_allocation*)buf2662, *(short2*)buf2663, *(uint32_t*)buf2664);
+    rsSetElementAt_short3(*(rs_allocation*)buf2665, *(short3*)buf2666, *(uint32_t*)buf2667);
+    rsSetElementAt_short4(*(rs_allocation*)buf2668, *(short4*)buf2669, *(uint32_t*)buf2670);
+    rsSetElementAt_ushort(*(rs_allocation*)buf2671, *(ushort*)buf2672, *(uint32_t*)buf2673);
+    rsSetElementAt_ushort2(*(rs_allocation*)buf2674, *(ushort2*)buf2675, *(uint32_t*)buf2676);
+    rsSetElementAt_ushort3(*(rs_allocation*)buf2677, *(ushort3*)buf2678, *(uint32_t*)buf2679);
+    rsSetElementAt_ushort4(*(rs_allocation*)buf2680, *(ushort4*)buf2681, *(uint32_t*)buf2682);
+    rsSetElementAt_int(*(rs_allocation*)buf2683, *(int*)buf2684, *(uint32_t*)buf2685);
+    rsSetElementAt_int2(*(rs_allocation*)buf2686, *(int2*)buf2687, *(uint32_t*)buf2688);
+    rsSetElementAt_int3(*(rs_allocation*)buf2689, *(int3*)buf2690, *(uint32_t*)buf2691);
+    rsSetElementAt_int4(*(rs_allocation*)buf2692, *(int4*)buf2693, *(uint32_t*)buf2694);
+    rsSetElementAt_uint(*(rs_allocation*)buf2695, *(uint*)buf2696, *(uint32_t*)buf2697);
+    rsSetElementAt_uint2(*(rs_allocation*)buf2698, *(uint2*)buf2699, *(uint32_t*)buf2700);
+    rsSetElementAt_uint3(*(rs_allocation*)buf2701, *(uint3*)buf2702, *(uint32_t*)buf2703);
+    rsSetElementAt_uint4(*(rs_allocation*)buf2704, *(uint4*)buf2705, *(uint32_t*)buf2706);
+    rsSetElementAt_long(*(rs_allocation*)buf2707, *(long*)buf2708, *(uint32_t*)buf2709);
+    rsSetElementAt_long2(*(rs_allocation*)buf2710, *(long2*)buf2711, *(uint32_t*)buf2712);
+    rsSetElementAt_long3(*(rs_allocation*)buf2713, *(long3*)buf2714, *(uint32_t*)buf2715);
+    rsSetElementAt_long4(*(rs_allocation*)buf2716, *(long4*)buf2717, *(uint32_t*)buf2718);
+    rsSetElementAt_ulong(*(rs_allocation*)buf2719, *(ulong*)buf2720, *(uint32_t*)buf2721);
+    rsSetElementAt_ulong2(*(rs_allocation*)buf2722, *(ulong2*)buf2723, *(uint32_t*)buf2724);
+    rsSetElementAt_ulong3(*(rs_allocation*)buf2725, *(ulong3*)buf2726, *(uint32_t*)buf2727);
+    rsSetElementAt_ulong4(*(rs_allocation*)buf2728, *(ulong4*)buf2729, *(uint32_t*)buf2730);
+    rsSetElementAt_float(*(rs_allocation*)buf2731, *(float*)buf2732, *(uint32_t*)buf2733, *(uint32_t*)buf2734);
+    rsSetElementAt_float2(*(rs_allocation*)buf2735, *(float2*)buf2736, *(uint32_t*)buf2737, *(uint32_t*)buf2738);
+    rsSetElementAt_float3(*(rs_allocation*)buf2739, *(float3*)buf2740, *(uint32_t*)buf2741, *(uint32_t*)buf2742);
+    rsSetElementAt_float4(*(rs_allocation*)buf2743, *(float4*)buf2744, *(uint32_t*)buf2745, *(uint32_t*)buf2746);
+    rsSetElementAt_double(*(rs_allocation*)buf2747, *(double*)buf2748, *(uint32_t*)buf2749, *(uint32_t*)buf2750);
+    rsSetElementAt_double2(*(rs_allocation*)buf2751, *(double2*)buf2752, *(uint32_t*)buf2753, *(uint32_t*)buf2754);
+    rsSetElementAt_double3(*(rs_allocation*)buf2755, *(double3*)buf2756, *(uint32_t*)buf2757, *(uint32_t*)buf2758);
+    rsSetElementAt_double4(*(rs_allocation*)buf2759, *(double4*)buf2760, *(uint32_t*)buf2761, *(uint32_t*)buf2762);
+    rsSetElementAt_char(*(rs_allocation*)buf2763, *(char*)buf2764, *(uint32_t*)buf2765, *(uint32_t*)buf2766);
+    rsSetElementAt_char2(*(rs_allocation*)buf2767, *(char2*)buf2768, *(uint32_t*)buf2769, *(uint32_t*)buf2770);
+    rsSetElementAt_char3(*(rs_allocation*)buf2771, *(char3*)buf2772, *(uint32_t*)buf2773, *(uint32_t*)buf2774);
+    rsSetElementAt_char4(*(rs_allocation*)buf2775, *(char4*)buf2776, *(uint32_t*)buf2777, *(uint32_t*)buf2778);
+    rsSetElementAt_uchar(*(rs_allocation*)buf2779, *(uchar*)buf2780, *(uint32_t*)buf2781, *(uint32_t*)buf2782);
+    rsSetElementAt_uchar2(*(rs_allocation*)buf2783, *(uchar2*)buf2784, *(uint32_t*)buf2785, *(uint32_t*)buf2786);
+    rsSetElementAt_uchar3(*(rs_allocation*)buf2787, *(uchar3*)buf2788, *(uint32_t*)buf2789, *(uint32_t*)buf2790);
+    rsSetElementAt_uchar4(*(rs_allocation*)buf2791, *(uchar4*)buf2792, *(uint32_t*)buf2793, *(uint32_t*)buf2794);
+    rsSetElementAt_short(*(rs_allocation*)buf2795, *(short*)buf2796, *(uint32_t*)buf2797, *(uint32_t*)buf2798);
+    rsSetElementAt_short2(*(rs_allocation*)buf2799, *(short2*)buf2800, *(uint32_t*)buf2801, *(uint32_t*)buf2802);
+    rsSetElementAt_short3(*(rs_allocation*)buf2803, *(short3*)buf2804, *(uint32_t*)buf2805, *(uint32_t*)buf2806);
+    rsSetElementAt_short4(*(rs_allocation*)buf2807, *(short4*)buf2808, *(uint32_t*)buf2809, *(uint32_t*)buf2810);
+    rsSetElementAt_ushort(*(rs_allocation*)buf2811, *(ushort*)buf2812, *(uint32_t*)buf2813, *(uint32_t*)buf2814);
+    rsSetElementAt_ushort2(*(rs_allocation*)buf2815, *(ushort2*)buf2816, *(uint32_t*)buf2817, *(uint32_t*)buf2818);
+    rsSetElementAt_ushort3(*(rs_allocation*)buf2819, *(ushort3*)buf2820, *(uint32_t*)buf2821, *(uint32_t*)buf2822);
+    rsSetElementAt_ushort4(*(rs_allocation*)buf2823, *(ushort4*)buf2824, *(uint32_t*)buf2825, *(uint32_t*)buf2826);
+    rsSetElementAt_int(*(rs_allocation*)buf2827, *(int*)buf2828, *(uint32_t*)buf2829, *(uint32_t*)buf2830);
+    rsSetElementAt_int2(*(rs_allocation*)buf2831, *(int2*)buf2832, *(uint32_t*)buf2833, *(uint32_t*)buf2834);
+    rsSetElementAt_int3(*(rs_allocation*)buf2835, *(int3*)buf2836, *(uint32_t*)buf2837, *(uint32_t*)buf2838);
+    rsSetElementAt_int4(*(rs_allocation*)buf2839, *(int4*)buf2840, *(uint32_t*)buf2841, *(uint32_t*)buf2842);
+    rsSetElementAt_uint(*(rs_allocation*)buf2843, *(uint*)buf2844, *(uint32_t*)buf2845, *(uint32_t*)buf2846);
+    rsSetElementAt_uint2(*(rs_allocation*)buf2847, *(uint2*)buf2848, *(uint32_t*)buf2849, *(uint32_t*)buf2850);
+    rsSetElementAt_uint3(*(rs_allocation*)buf2851, *(uint3*)buf2852, *(uint32_t*)buf2853, *(uint32_t*)buf2854);
+    rsSetElementAt_uint4(*(rs_allocation*)buf2855, *(uint4*)buf2856, *(uint32_t*)buf2857, *(uint32_t*)buf2858);
+    rsSetElementAt_long(*(rs_allocation*)buf2859, *(long*)buf2860, *(uint32_t*)buf2861, *(uint32_t*)buf2862);
+    rsSetElementAt_long2(*(rs_allocation*)buf2863, *(long2*)buf2864, *(uint32_t*)buf2865, *(uint32_t*)buf2866);
+    rsSetElementAt_long3(*(rs_allocation*)buf2867, *(long3*)buf2868, *(uint32_t*)buf2869, *(uint32_t*)buf2870);
+    rsSetElementAt_long4(*(rs_allocation*)buf2871, *(long4*)buf2872, *(uint32_t*)buf2873, *(uint32_t*)buf2874);
+    rsSetElementAt_ulong(*(rs_allocation*)buf2875, *(ulong*)buf2876, *(uint32_t*)buf2877, *(uint32_t*)buf2878);
+    rsSetElementAt_ulong2(*(rs_allocation*)buf2879, *(ulong2*)buf2880, *(uint32_t*)buf2881, *(uint32_t*)buf2882);
+    rsSetElementAt_ulong3(*(rs_allocation*)buf2883, *(ulong3*)buf2884, *(uint32_t*)buf2885, *(uint32_t*)buf2886);
+    rsSetElementAt_ulong4(*(rs_allocation*)buf2887, *(ulong4*)buf2888, *(uint32_t*)buf2889, *(uint32_t*)buf2890);
+    rsSetElementAt_float(*(rs_allocation*)buf2891, *(float*)buf2892, *(uint32_t*)buf2893, *(uint32_t*)buf2894, *(uint32_t*)buf2895);
+    rsSetElementAt_float2(*(rs_allocation*)buf2896, *(float2*)buf2897, *(uint32_t*)buf2898, *(uint32_t*)buf2899, *(uint32_t*)buf2900);
+    rsSetElementAt_float3(*(rs_allocation*)buf2901, *(float3*)buf2902, *(uint32_t*)buf2903, *(uint32_t*)buf2904, *(uint32_t*)buf2905);
+    rsSetElementAt_float4(*(rs_allocation*)buf2906, *(float4*)buf2907, *(uint32_t*)buf2908, *(uint32_t*)buf2909, *(uint32_t*)buf2910);
+    rsSetElementAt_double(*(rs_allocation*)buf2911, *(double*)buf2912, *(uint32_t*)buf2913, *(uint32_t*)buf2914, *(uint32_t*)buf2915);
+    rsSetElementAt_double2(*(rs_allocation*)buf2916, *(double2*)buf2917, *(uint32_t*)buf2918, *(uint32_t*)buf2919, *(uint32_t*)buf2920);
+    rsSetElementAt_double3(*(rs_allocation*)buf2921, *(double3*)buf2922, *(uint32_t*)buf2923, *(uint32_t*)buf2924, *(uint32_t*)buf2925);
+    rsSetElementAt_double4(*(rs_allocation*)buf2926, *(double4*)buf2927, *(uint32_t*)buf2928, *(uint32_t*)buf2929, *(uint32_t*)buf2930);
+    rsSetElementAt_char(*(rs_allocation*)buf2931, *(char*)buf2932, *(uint32_t*)buf2933, *(uint32_t*)buf2934, *(uint32_t*)buf2935);
+    rsSetElementAt_char2(*(rs_allocation*)buf2936, *(char2*)buf2937, *(uint32_t*)buf2938, *(uint32_t*)buf2939, *(uint32_t*)buf2940);
+    rsSetElementAt_char3(*(rs_allocation*)buf2941, *(char3*)buf2942, *(uint32_t*)buf2943, *(uint32_t*)buf2944, *(uint32_t*)buf2945);
+    rsSetElementAt_char4(*(rs_allocation*)buf2946, *(char4*)buf2947, *(uint32_t*)buf2948, *(uint32_t*)buf2949, *(uint32_t*)buf2950);
+    rsSetElementAt_uchar(*(rs_allocation*)buf2951, *(uchar*)buf2952, *(uint32_t*)buf2953, *(uint32_t*)buf2954, *(uint32_t*)buf2955);
+    rsSetElementAt_uchar2(*(rs_allocation*)buf2956, *(uchar2*)buf2957, *(uint32_t*)buf2958, *(uint32_t*)buf2959, *(uint32_t*)buf2960);
+    rsSetElementAt_uchar3(*(rs_allocation*)buf2961, *(uchar3*)buf2962, *(uint32_t*)buf2963, *(uint32_t*)buf2964, *(uint32_t*)buf2965);
+    rsSetElementAt_uchar4(*(rs_allocation*)buf2966, *(uchar4*)buf2967, *(uint32_t*)buf2968, *(uint32_t*)buf2969, *(uint32_t*)buf2970);
+    rsSetElementAt_short(*(rs_allocation*)buf2971, *(short*)buf2972, *(uint32_t*)buf2973, *(uint32_t*)buf2974, *(uint32_t*)buf2975);
+    rsSetElementAt_short2(*(rs_allocation*)buf2976, *(short2*)buf2977, *(uint32_t*)buf2978, *(uint32_t*)buf2979, *(uint32_t*)buf2980);
+    rsSetElementAt_short3(*(rs_allocation*)buf2981, *(short3*)buf2982, *(uint32_t*)buf2983, *(uint32_t*)buf2984, *(uint32_t*)buf2985);
+    rsSetElementAt_short4(*(rs_allocation*)buf2986, *(short4*)buf2987, *(uint32_t*)buf2988, *(uint32_t*)buf2989, *(uint32_t*)buf2990);
+    rsSetElementAt_ushort(*(rs_allocation*)buf2991, *(ushort*)buf2992, *(uint32_t*)buf2993, *(uint32_t*)buf2994, *(uint32_t*)buf2995);
+    rsSetElementAt_ushort2(*(rs_allocation*)buf2996, *(ushort2*)buf2997, *(uint32_t*)buf2998, *(uint32_t*)buf2999, *(uint32_t*)buf3000);
+    rsSetElementAt_ushort3(*(rs_allocation*)buf3001, *(ushort3*)buf3002, *(uint32_t*)buf3003, *(uint32_t*)buf3004, *(uint32_t*)buf3005);
+    rsSetElementAt_ushort4(*(rs_allocation*)buf3006, *(ushort4*)buf3007, *(uint32_t*)buf3008, *(uint32_t*)buf3009, *(uint32_t*)buf3010);
+    rsSetElementAt_int(*(rs_allocation*)buf3011, *(int*)buf3012, *(uint32_t*)buf3013, *(uint32_t*)buf3014, *(uint32_t*)buf3015);
+    rsSetElementAt_int2(*(rs_allocation*)buf3016, *(int2*)buf3017, *(uint32_t*)buf3018, *(uint32_t*)buf3019, *(uint32_t*)buf3020);
+    rsSetElementAt_int3(*(rs_allocation*)buf3021, *(int3*)buf3022, *(uint32_t*)buf3023, *(uint32_t*)buf3024, *(uint32_t*)buf3025);
+    rsSetElementAt_int4(*(rs_allocation*)buf3026, *(int4*)buf3027, *(uint32_t*)buf3028, *(uint32_t*)buf3029, *(uint32_t*)buf3030);
+    rsSetElementAt_uint(*(rs_allocation*)buf3031, *(uint*)buf3032, *(uint32_t*)buf3033, *(uint32_t*)buf3034, *(uint32_t*)buf3035);
+    rsSetElementAt_uint2(*(rs_allocation*)buf3036, *(uint2*)buf3037, *(uint32_t*)buf3038, *(uint32_t*)buf3039, *(uint32_t*)buf3040);
+    rsSetElementAt_uint3(*(rs_allocation*)buf3041, *(uint3*)buf3042, *(uint32_t*)buf3043, *(uint32_t*)buf3044, *(uint32_t*)buf3045);
+    rsSetElementAt_uint4(*(rs_allocation*)buf3046, *(uint4*)buf3047, *(uint32_t*)buf3048, *(uint32_t*)buf3049, *(uint32_t*)buf3050);
+    rsSetElementAt_long(*(rs_allocation*)buf3051, *(long*)buf3052, *(uint32_t*)buf3053, *(uint32_t*)buf3054, *(uint32_t*)buf3055);
+    rsSetElementAt_long2(*(rs_allocation*)buf3056, *(long2*)buf3057, *(uint32_t*)buf3058, *(uint32_t*)buf3059, *(uint32_t*)buf3060);
+    rsSetElementAt_long3(*(rs_allocation*)buf3061, *(long3*)buf3062, *(uint32_t*)buf3063, *(uint32_t*)buf3064, *(uint32_t*)buf3065);
+    rsSetElementAt_long4(*(rs_allocation*)buf3066, *(long4*)buf3067, *(uint32_t*)buf3068, *(uint32_t*)buf3069, *(uint32_t*)buf3070);
+    rsSetElementAt_ulong(*(rs_allocation*)buf3071, *(ulong*)buf3072, *(uint32_t*)buf3073, *(uint32_t*)buf3074, *(uint32_t*)buf3075);
+    rsSetElementAt_ulong2(*(rs_allocation*)buf3076, *(ulong2*)buf3077, *(uint32_t*)buf3078, *(uint32_t*)buf3079, *(uint32_t*)buf3080);
+    rsSetElementAt_ulong3(*(rs_allocation*)buf3081, *(ulong3*)buf3082, *(uint32_t*)buf3083, *(uint32_t*)buf3084, *(uint32_t*)buf3085);
+    rsSetElementAt_ulong4(*(rs_allocation*)buf3086, *(ulong4*)buf3087, *(uint32_t*)buf3088, *(uint32_t*)buf3089, *(uint32_t*)buf3090);
+    rsSetObject((rs_element*) buf3091, *(rs_element*)buf3092);
+    rsSetObject((rs_type*) buf3093, *(rs_type*)buf3094);
+    rsSetObject((rs_allocation*) buf3095, *(rs_allocation*)buf3096);
+    rsSetObject((rs_sampler*) buf3097, *(rs_sampler*)buf3098);
+    rsSetObject((rs_script*) buf3099, *(rs_script*)buf3100);
+#ifndef __LP64__
+    rsSetObject((rs_mesh*) buf3101, *(rs_mesh*)buf3102);
+    rsSetObject((rs_program_fragment*) buf3103, *(rs_program_fragment*)buf3104);
+    rsSetObject((rs_program_vertex*) buf3105, *(rs_program_vertex*)buf3106);
+    rsSetObject((rs_program_raster*) buf3107, *(rs_program_raster*)buf3108);
+    rsSetObject((rs_program_store*) buf3109, *(rs_program_store*)buf3110);
+    rsSetObject((rs_font*) buf3111, *(rs_font*)buf3112);
+#endif
+    *(rs_time_t*)buf3113 = rsTime((rs_time_t*) buf3114);
+    *(float4*)buf3115 = rsUnpackColor8888(*(uchar4*)buf3116);
+    *(int64_t*)buf3117 = rsUptimeMillis();
+    *(int64_t*)buf3118 = rsUptimeNanos();
+    *(float4*)buf3119 = rsYuvToRGBA_float4(*(uchar*)buf3120, *(uchar*)buf3121, *(uchar*)buf3122);
+    *(uchar4*)buf3123 = rsYuvToRGBA_uchar4(*(uchar*)buf3124, *(uchar*)buf3125, *(uchar*)buf3126);
+#ifndef __LP64__
+    rsgAllocationSyncAll(*(rs_allocation*)buf3127);
+#endif
+#ifndef __LP64__
+    rsgAllocationSyncAll(*(rs_allocation*)buf3128, *(rs_allocation_usage_type*)buf3129);
+#endif
+#ifndef __LP64__
+    rsgBindColorTarget(*(rs_allocation*)buf3130, *(uint*)buf3131);
+#endif
+#ifndef __LP64__
+    rsgBindConstant(*(rs_program_fragment*)buf3132, *(uint*)buf3133, *(rs_allocation*)buf3134);
+#endif
+#ifndef __LP64__
+    rsgBindConstant(*(rs_program_vertex*)buf3135, *(uint*)buf3136, *(rs_allocation*)buf3137);
+#endif
+#ifndef __LP64__
+    rsgBindDepthTarget(*(rs_allocation*)buf3138);
+#endif
+#ifndef __LP64__
+    rsgBindFont(*(rs_font*)buf3139);
+#endif
+#ifndef __LP64__
+    rsgBindProgramFragment(*(rs_program_fragment*)buf3140);
+#endif
+#ifndef __LP64__
+    rsgBindProgramRaster(*(rs_program_raster*)buf3141);
+#endif
+#ifndef __LP64__
+    rsgBindProgramStore(*(rs_program_store*)buf3142);
+#endif
+#ifndef __LP64__
+    rsgBindProgramVertex(*(rs_program_vertex*)buf3143);
+#endif
+#ifndef __LP64__
+    rsgBindSampler(*(rs_program_fragment*)buf3144, *(uint*)buf3145, *(rs_sampler*)buf3146);
+#endif
+#ifndef __LP64__
+    rsgBindTexture(*(rs_program_fragment*)buf3147, *(uint*)buf3148, *(rs_allocation*)buf3149);
+#endif
+#ifndef __LP64__
+    rsgClearAllRenderTargets();
+#endif
+#ifndef __LP64__
+    rsgClearColor(*(float*)buf3150, *(float*)buf3151, *(float*)buf3152, *(float*)buf3153);
+#endif
+#ifndef __LP64__
+    rsgClearColorTarget(*(uint*)buf3154);
+#endif
+#ifndef __LP64__
+    rsgClearDepth(*(float*)buf3155);
+#endif
+#ifndef __LP64__
+    rsgClearDepthTarget();
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf3156);
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf3157, *(uint*)buf3158);
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf3159, *(uint*)buf3160, *(uint*)buf3161, *(uint*)buf3162);
+#endif
+#ifndef __LP64__
+    rsgDrawQuad(*(float*)buf3163, *(float*)buf3164, *(float*)buf3165, *(float*)buf3166, *(float*)buf3167, *(float*)buf3168, *(float*)buf3169, *(float*)buf3170, *(float*)buf3171, *(float*)buf3172, *(float*)buf3173, *(float*)buf3174);
+#endif
+#ifndef __LP64__
+    rsgDrawQuadTexCoords(*(float*)buf3175, *(float*)buf3176, *(float*)buf3177, *(float*)buf3178, *(float*)buf3179, *(float*)buf3180, *(float*)buf3181, *(float*)buf3182, *(float*)buf3183, *(float*)buf3184, *(float*)buf3185, *(float*)buf3186, *(float*)buf3187, *(float*)buf3188, *(float*)buf3189, *(float*)buf3190, *(float*)buf3191, *(float*)buf3192, *(float*)buf3193, *(float*)buf3194);
+#endif
+#ifndef __LP64__
+    rsgDrawRect(*(float*)buf3195, *(float*)buf3196, *(float*)buf3197, *(float*)buf3198, *(float*)buf3199);
+#endif
+#ifndef __LP64__
+    rsgDrawSpriteScreenspace(*(float*)buf3200, *(float*)buf3201, *(float*)buf3202, *(float*)buf3203, *(float*)buf3204);
+#endif
+#ifndef __LP64__
+    rsgDrawText((const char*) buf3205, *(int*)buf3206, *(int*)buf3207);
+#endif
+#ifndef __LP64__
+    rsgDrawText(*(rs_allocation*)buf3208, *(int*)buf3209, *(int*)buf3210);
+#endif
+#ifndef __LP64__
+    *(uint*)buf3211 = rsgFinish();
+#endif
+#ifndef __LP64__
+    rsgFontColor(*(float*)buf3212, *(float*)buf3213, *(float*)buf3214, *(float*)buf3215);
+#endif
+#ifndef __LP64__
+    *(uint*)buf3216 = rsgGetHeight();
+#endif
+#ifndef __LP64__
+    *(uint*)buf3217 = rsgGetWidth();
+#endif
+#ifndef __LP64__
+    rsgMeasureText((const char*) buf3218, (int*) buf3219, (int*) buf3220, (int*) buf3221, (int*) buf3222);
+#endif
+#ifndef __LP64__
+    rsgMeasureText(*(rs_allocation*)buf3223, (int*) buf3224, (int*) buf3225, (int*) buf3226, (int*) buf3227);
+#endif
+#ifndef __LP64__
+    rsgMeshComputeBoundingBox(*(rs_mesh*)buf3228, (float*) buf3229, (float*) buf3230, (float*) buf3231, (float*) buf3232, (float*) buf3233, (float*) buf3234);
+#endif
+#ifndef __LP64__
+    rsgMeshComputeBoundingBox(*(rs_mesh*)buf3235, (float3*) buf3236, (float3*) buf3237);
+#endif
+#ifndef __LP64__
+    *(rs_allocation*)buf3238 = rsgMeshGetIndexAllocation(*(rs_mesh*)buf3239, *(uint32_t*)buf3240);
+#endif
+#ifndef __LP64__
+    *(rs_primitive*)buf3241 = rsgMeshGetPrimitive(*(rs_mesh*)buf3242, *(uint32_t*)buf3243);
+#endif
+#ifndef __LP64__
+    *(uint32_t*)buf3244 = rsgMeshGetPrimitiveCount(*(rs_mesh*)buf3245);
+#endif
+#ifndef __LP64__
+    *(rs_allocation*)buf3246 = rsgMeshGetVertexAllocation(*(rs_mesh*)buf3247, *(uint32_t*)buf3248);
+#endif
+#ifndef __LP64__
+    *(uint32_t*)buf3249 = rsgMeshGetVertexAllocationCount(*(rs_mesh*)buf3250);
+#endif
+#ifndef __LP64__
+    rsgProgramFragmentConstantColor(*(rs_program_fragment*)buf3251, *(float*)buf3252, *(float*)buf3253, *(float*)buf3254, *(float*)buf3255);
+#endif
+#ifndef __LP64__
+    *(rs_cull_mode*)buf3256 = rsgProgramRasterGetCullMode(*(rs_program_raster*)buf3257);
+#endif
+#ifndef __LP64__
+    *(bool*)buf3258 = rsgProgramRasterIsPointSpriteEnabled(*(rs_program_raster*)buf3259);
+#endif
+#ifndef __LP64__
+    *(rs_blend_dst_func*)buf3260 = rsgProgramStoreGetBlendDstFunc(*(rs_program_store*)buf3261);
+#endif
+#ifndef __LP64__
+    *(rs_blend_src_func*)buf3262 = rsgProgramStoreGetBlendSrcFunc(*(rs_program_store*)buf3263);
+#endif
+#ifndef __LP64__
+    *(rs_depth_func*)buf3264 = rsgProgramStoreGetDepthFunc(*(rs_program_store*)buf3265);
+#endif
+#ifndef __LP64__
+    *(bool*)buf3266 = rsgProgramStoreIsColorMaskAlphaEnabled(*(rs_program_store*)buf3267);
+#endif
+#ifndef __LP64__
+    *(bool*)buf3268 = rsgProgramStoreIsColorMaskBlueEnabled(*(rs_program_store*)buf3269);
+#endif
+#ifndef __LP64__
+    *(bool*)buf3270 = rsgProgramStoreIsColorMaskGreenEnabled(*(rs_program_store*)buf3271);
+#endif
+#ifndef __LP64__
+    *(bool*)buf3272 = rsgProgramStoreIsColorMaskRedEnabled(*(rs_program_store*)buf3273);
+#endif
+#ifndef __LP64__
+    *(bool*)buf3274 = rsgProgramStoreIsDepthMaskEnabled(*(rs_program_store*)buf3275);
+#endif
+#ifndef __LP64__
+    *(bool*)buf3276 = rsgProgramStoreIsDitherEnabled(*(rs_program_store*)buf3277);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexGetProjectionMatrix((rs_matrix4x4*) buf3278);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadModelMatrix((const rs_matrix4x4*) buf3279);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadProjectionMatrix((const rs_matrix4x4*) buf3280);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadTextureMatrix((const rs_matrix4x4*) buf3281);
+#endif
+    *(float*)buf3282 = rsqrt(*(float*)buf3283);
+    *(float2*)buf3284 = rsqrt(*(float2*)buf3285);
+    *(float3*)buf3286 = rsqrt(*(float3*)buf3287);
+    *(float4*)buf3288 = rsqrt(*(float4*)buf3289);
+    *(float*)buf3290 = sign(*(float*)buf3291);
+    *(float2*)buf3292 = sign(*(float2*)buf3293);
+    *(float3*)buf3294 = sign(*(float3*)buf3295);
+    *(float4*)buf3296 = sign(*(float4*)buf3297);
+    *(float*)buf3298 = sin(*(float*)buf3299);
+    *(float2*)buf3300 = sin(*(float2*)buf3301);
+    *(float3*)buf3302 = sin(*(float3*)buf3303);
+    *(float4*)buf3304 = sin(*(float4*)buf3305);
+    *(float*)buf3306 = sincos(*(float*)buf3307, (float*) buf3308);
+    *(float2*)buf3309 = sincos(*(float2*)buf3310, (float2*) buf3311);
+    *(float3*)buf3312 = sincos(*(float3*)buf3313, (float3*) buf3314);
+    *(float4*)buf3315 = sincos(*(float4*)buf3316, (float4*) buf3317);
+    *(float*)buf3318 = sinh(*(float*)buf3319);
+    *(float2*)buf3320 = sinh(*(float2*)buf3321);
+    *(float3*)buf3322 = sinh(*(float3*)buf3323);
+    *(float4*)buf3324 = sinh(*(float4*)buf3325);
+    *(float*)buf3326 = sinpi(*(float*)buf3327);
+    *(float2*)buf3328 = sinpi(*(float2*)buf3329);
+    *(float3*)buf3330 = sinpi(*(float3*)buf3331);
+    *(float4*)buf3332 = sinpi(*(float4*)buf3333);
+    *(float*)buf3334 = sqrt(*(float*)buf3335);
+    *(float2*)buf3336 = sqrt(*(float2*)buf3337);
+    *(float3*)buf3338 = sqrt(*(float3*)buf3339);
+    *(float4*)buf3340 = sqrt(*(float4*)buf3341);
+    *(float*)buf3342 = step(*(float*)buf3343, *(float*)buf3344);
+    *(float2*)buf3345 = step(*(float2*)buf3346, *(float2*)buf3347);
+    *(float3*)buf3348 = step(*(float3*)buf3349, *(float3*)buf3350);
+    *(float4*)buf3351 = step(*(float4*)buf3352, *(float4*)buf3353);
+    *(float2*)buf3354 = step(*(float2*)buf3355, *(float*)buf3356);
+    *(float3*)buf3357 = step(*(float3*)buf3358, *(float*)buf3359);
+    *(float4*)buf3360 = step(*(float4*)buf3361, *(float*)buf3362);
+    *(float*)buf3363 = tan(*(float*)buf3364);
+    *(float2*)buf3365 = tan(*(float2*)buf3366);
+    *(float3*)buf3367 = tan(*(float3*)buf3368);
+    *(float4*)buf3369 = tan(*(float4*)buf3370);
+    *(float*)buf3371 = tanh(*(float*)buf3372);
+    *(float2*)buf3373 = tanh(*(float2*)buf3374);
+    *(float3*)buf3375 = tanh(*(float3*)buf3376);
+    *(float4*)buf3377 = tanh(*(float4*)buf3378);
+    *(float*)buf3379 = tanpi(*(float*)buf3380);
+    *(float2*)buf3381 = tanpi(*(float2*)buf3382);
+    *(float3*)buf3383 = tanpi(*(float3*)buf3384);
+    *(float4*)buf3385 = tanpi(*(float4*)buf3386);
+    *(float*)buf3387 = tgamma(*(float*)buf3388);
+    *(float2*)buf3389 = tgamma(*(float2*)buf3390);
+    *(float3*)buf3391 = tgamma(*(float3*)buf3392);
+    *(float4*)buf3393 = tgamma(*(float4*)buf3394);
+    *(float*)buf3395 = trunc(*(float*)buf3396);
+    *(float2*)buf3397 = trunc(*(float2*)buf3398);
+    *(float3*)buf3399 = trunc(*(float3*)buf3400);
+    *(float4*)buf3401 = trunc(*(float4*)buf3402);
+}
diff --git a/slang/tests/P_all_api_20/stderr.txt.expect b/slang/tests/P_all_api_20/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_all_api_20/stderr.txt.expect
diff --git a/slang/tests/P_all_api_20/stdout.txt.expect b/slang/tests/P_all_api_20/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_all_api_20/stdout.txt.expect
diff --git a/slang/tests/P_all_api_21/all21.rs b/slang/tests/P_all_api_21/all21.rs
new file mode 100644
index 0000000..cd0b0c8
--- /dev/null
+++ b/slang/tests/P_all_api_21/all21.rs
@@ -0,0 +1,5688 @@
+// -target-api 21 -Wno-deprecated-declarations
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Don't edit this file!  It is auto-generated by frameworks/rs/api/generate.sh.
+
+#pragma version(1)
+#pragma rs java_package_name(com.example.renderscript.testallapi)
+
+#include "rs_graphics.rsh"
+
+char buf0[200];
+char buf1[200];
+char buf2[200];
+char buf3[200];
+char buf4[200];
+char buf5[200];
+char buf6[200];
+char buf7[200];
+char buf8[200];
+char buf9[200];
+char buf10[200];
+char buf11[200];
+char buf12[200];
+char buf13[200];
+char buf14[200];
+char buf15[200];
+char buf16[200];
+char buf17[200];
+char buf18[200];
+char buf19[200];
+char buf20[200];
+char buf21[200];
+char buf22[200];
+char buf23[200];
+char buf24[200];
+char buf25[200];
+char buf26[200];
+char buf27[200];
+char buf28[200];
+char buf29[200];
+char buf30[200];
+char buf31[200];
+char buf32[200];
+char buf33[200];
+char buf34[200];
+char buf35[200];
+char buf36[200];
+char buf37[200];
+char buf38[200];
+char buf39[200];
+char buf40[200];
+char buf41[200];
+char buf42[200];
+char buf43[200];
+char buf44[200];
+char buf45[200];
+char buf46[200];
+char buf47[200];
+char buf48[200];
+char buf49[200];
+char buf50[200];
+char buf51[200];
+char buf52[200];
+char buf53[200];
+char buf54[200];
+char buf55[200];
+char buf56[200];
+char buf57[200];
+char buf58[200];
+char buf59[200];
+char buf60[200];
+char buf61[200];
+char buf62[200];
+char buf63[200];
+char buf64[200];
+char buf65[200];
+char buf66[200];
+char buf67[200];
+char buf68[200];
+char buf69[200];
+char buf70[200];
+char buf71[200];
+char buf72[200];
+char buf73[200];
+char buf74[200];
+char buf75[200];
+char buf76[200];
+char buf77[200];
+char buf78[200];
+char buf79[200];
+char buf80[200];
+char buf81[200];
+char buf82[200];
+char buf83[200];
+char buf84[200];
+char buf85[200];
+char buf86[200];
+char buf87[200];
+char buf88[200];
+char buf89[200];
+char buf90[200];
+char buf91[200];
+char buf92[200];
+char buf93[200];
+char buf94[200];
+char buf95[200];
+char buf96[200];
+char buf97[200];
+char buf98[200];
+char buf99[200];
+char buf100[200];
+char buf101[200];
+char buf102[200];
+char buf103[200];
+char buf104[200];
+char buf105[200];
+char buf106[200];
+char buf107[200];
+char buf108[200];
+char buf109[200];
+char buf110[200];
+char buf111[200];
+char buf112[200];
+char buf113[200];
+char buf114[200];
+char buf115[200];
+char buf116[200];
+char buf117[200];
+char buf118[200];
+char buf119[200];
+char buf120[200];
+char buf121[200];
+char buf122[200];
+char buf123[200];
+char buf124[200];
+char buf125[200];
+char buf126[200];
+char buf127[200];
+char buf128[200];
+char buf129[200];
+char buf130[200];
+char buf131[200];
+char buf132[200];
+char buf133[200];
+char buf134[200];
+char buf135[200];
+char buf136[200];
+char buf137[200];
+char buf138[200];
+char buf139[200];
+char buf140[200];
+char buf141[200];
+char buf142[200];
+char buf143[200];
+char buf144[200];
+char buf145[200];
+char buf146[200];
+char buf147[200];
+char buf148[200];
+char buf149[200];
+char buf150[200];
+char buf151[200];
+char buf152[200];
+char buf153[200];
+char buf154[200];
+char buf155[200];
+char buf156[200];
+char buf157[200];
+char buf158[200];
+char buf159[200];
+char buf160[200];
+char buf161[200];
+char buf162[200];
+char buf163[200];
+char buf164[200];
+char buf165[200];
+char buf166[200];
+char buf167[200];
+char buf168[200];
+char buf169[200];
+char buf170[200];
+char buf171[200];
+char buf172[200];
+char buf173[200];
+char buf174[200];
+char buf175[200];
+char buf176[200];
+char buf177[200];
+char buf178[200];
+char buf179[200];
+char buf180[200];
+char buf181[200];
+char buf182[200];
+char buf183[200];
+char buf184[200];
+char buf185[200];
+char buf186[200];
+char buf187[200];
+char buf188[200];
+char buf189[200];
+char buf190[200];
+char buf191[200];
+char buf192[200];
+char buf193[200];
+char buf194[200];
+char buf195[200];
+char buf196[200];
+char buf197[200];
+char buf198[200];
+char buf199[200];
+char buf200[200];
+char buf201[200];
+char buf202[200];
+char buf203[200];
+char buf204[200];
+char buf205[200];
+char buf206[200];
+char buf207[200];
+char buf208[200];
+char buf209[200];
+char buf210[200];
+char buf211[200];
+char buf212[200];
+char buf213[200];
+char buf214[200];
+char buf215[200];
+char buf216[200];
+char buf217[200];
+char buf218[200];
+char buf219[200];
+char buf220[200];
+char buf221[200];
+char buf222[200];
+char buf223[200];
+char buf224[200];
+char buf225[200];
+char buf226[200];
+char buf227[200];
+char buf228[200];
+char buf229[200];
+char buf230[200];
+char buf231[200];
+char buf232[200];
+char buf233[200];
+char buf234[200];
+char buf235[200];
+char buf236[200];
+char buf237[200];
+char buf238[200];
+char buf239[200];
+char buf240[200];
+char buf241[200];
+char buf242[200];
+char buf243[200];
+char buf244[200];
+char buf245[200];
+char buf246[200];
+char buf247[200];
+char buf248[200];
+char buf249[200];
+char buf250[200];
+char buf251[200];
+char buf252[200];
+char buf253[200];
+char buf254[200];
+char buf255[200];
+char buf256[200];
+char buf257[200];
+char buf258[200];
+char buf259[200];
+char buf260[200];
+char buf261[200];
+char buf262[200];
+char buf263[200];
+char buf264[200];
+char buf265[200];
+char buf266[200];
+char buf267[200];
+char buf268[200];
+char buf269[200];
+char buf270[200];
+char buf271[200];
+char buf272[200];
+char buf273[200];
+char buf274[200];
+char buf275[200];
+char buf276[200];
+char buf277[200];
+char buf278[200];
+char buf279[200];
+char buf280[200];
+char buf281[200];
+char buf282[200];
+char buf283[200];
+char buf284[200];
+char buf285[200];
+char buf286[200];
+char buf287[200];
+char buf288[200];
+char buf289[200];
+char buf290[200];
+char buf291[200];
+char buf292[200];
+char buf293[200];
+char buf294[200];
+char buf295[200];
+char buf296[200];
+char buf297[200];
+char buf298[200];
+char buf299[200];
+char buf300[200];
+char buf301[200];
+char buf302[200];
+char buf303[200];
+char buf304[200];
+char buf305[200];
+char buf306[200];
+char buf307[200];
+char buf308[200];
+char buf309[200];
+char buf310[200];
+char buf311[200];
+char buf312[200];
+char buf313[200];
+char buf314[200];
+char buf315[200];
+char buf316[200];
+char buf317[200];
+char buf318[200];
+char buf319[200];
+char buf320[200];
+char buf321[200];
+char buf322[200];
+char buf323[200];
+char buf324[200];
+char buf325[200];
+char buf326[200];
+char buf327[200];
+char buf328[200];
+char buf329[200];
+char buf330[200];
+char buf331[200];
+char buf332[200];
+char buf333[200];
+char buf334[200];
+char buf335[200];
+char buf336[200];
+char buf337[200];
+char buf338[200];
+char buf339[200];
+char buf340[200];
+char buf341[200];
+char buf342[200];
+char buf343[200];
+char buf344[200];
+char buf345[200];
+char buf346[200];
+char buf347[200];
+char buf348[200];
+char buf349[200];
+char buf350[200];
+char buf351[200];
+char buf352[200];
+char buf353[200];
+char buf354[200];
+char buf355[200];
+char buf356[200];
+char buf357[200];
+char buf358[200];
+char buf359[200];
+char buf360[200];
+char buf361[200];
+char buf362[200];
+char buf363[200];
+char buf364[200];
+char buf365[200];
+char buf366[200];
+char buf367[200];
+char buf368[200];
+char buf369[200];
+char buf370[200];
+char buf371[200];
+char buf372[200];
+char buf373[200];
+char buf374[200];
+char buf375[200];
+char buf376[200];
+char buf377[200];
+char buf378[200];
+char buf379[200];
+char buf380[200];
+char buf381[200];
+char buf382[200];
+char buf383[200];
+char buf384[200];
+char buf385[200];
+char buf386[200];
+char buf387[200];
+char buf388[200];
+char buf389[200];
+char buf390[200];
+char buf391[200];
+char buf392[200];
+char buf393[200];
+char buf394[200];
+char buf395[200];
+char buf396[200];
+char buf397[200];
+char buf398[200];
+char buf399[200];
+char buf400[200];
+char buf401[200];
+char buf402[200];
+char buf403[200];
+char buf404[200];
+char buf405[200];
+char buf406[200];
+char buf407[200];
+char buf408[200];
+char buf409[200];
+char buf410[200];
+char buf411[200];
+char buf412[200];
+char buf413[200];
+char buf414[200];
+char buf415[200];
+char buf416[200];
+char buf417[200];
+char buf418[200];
+char buf419[200];
+char buf420[200];
+char buf421[200];
+char buf422[200];
+char buf423[200];
+char buf424[200];
+char buf425[200];
+char buf426[200];
+char buf427[200];
+char buf428[200];
+char buf429[200];
+char buf430[200];
+char buf431[200];
+char buf432[200];
+char buf433[200];
+char buf434[200];
+char buf435[200];
+char buf436[200];
+char buf437[200];
+char buf438[200];
+char buf439[200];
+char buf440[200];
+char buf441[200];
+char buf442[200];
+char buf443[200];
+char buf444[200];
+char buf445[200];
+char buf446[200];
+char buf447[200];
+char buf448[200];
+char buf449[200];
+char buf450[200];
+char buf451[200];
+char buf452[200];
+char buf453[200];
+char buf454[200];
+char buf455[200];
+char buf456[200];
+char buf457[200];
+char buf458[200];
+char buf459[200];
+char buf460[200];
+char buf461[200];
+char buf462[200];
+char buf463[200];
+char buf464[200];
+char buf465[200];
+char buf466[200];
+char buf467[200];
+char buf468[200];
+char buf469[200];
+char buf470[200];
+char buf471[200];
+char buf472[200];
+char buf473[200];
+char buf474[200];
+char buf475[200];
+char buf476[200];
+char buf477[200];
+char buf478[200];
+char buf479[200];
+char buf480[200];
+char buf481[200];
+char buf482[200];
+char buf483[200];
+char buf484[200];
+char buf485[200];
+char buf486[200];
+char buf487[200];
+char buf488[200];
+char buf489[200];
+char buf490[200];
+char buf491[200];
+char buf492[200];
+char buf493[200];
+char buf494[200];
+char buf495[200];
+char buf496[200];
+char buf497[200];
+char buf498[200];
+char buf499[200];
+char buf500[200];
+char buf501[200];
+char buf502[200];
+char buf503[200];
+char buf504[200];
+char buf505[200];
+char buf506[200];
+char buf507[200];
+char buf508[200];
+char buf509[200];
+char buf510[200];
+char buf511[200];
+char buf512[200];
+char buf513[200];
+char buf514[200];
+char buf515[200];
+char buf516[200];
+char buf517[200];
+char buf518[200];
+char buf519[200];
+char buf520[200];
+char buf521[200];
+char buf522[200];
+char buf523[200];
+char buf524[200];
+char buf525[200];
+char buf526[200];
+char buf527[200];
+char buf528[200];
+char buf529[200];
+char buf530[200];
+char buf531[200];
+char buf532[200];
+char buf533[200];
+char buf534[200];
+char buf535[200];
+char buf536[200];
+char buf537[200];
+char buf538[200];
+char buf539[200];
+char buf540[200];
+char buf541[200];
+char buf542[200];
+char buf543[200];
+char buf544[200];
+char buf545[200];
+char buf546[200];
+char buf547[200];
+char buf548[200];
+char buf549[200];
+char buf550[200];
+char buf551[200];
+char buf552[200];
+char buf553[200];
+char buf554[200];
+char buf555[200];
+char buf556[200];
+char buf557[200];
+char buf558[200];
+char buf559[200];
+char buf560[200];
+char buf561[200];
+char buf562[200];
+char buf563[200];
+char buf564[200];
+char buf565[200];
+char buf566[200];
+char buf567[200];
+char buf568[200];
+char buf569[200];
+char buf570[200];
+char buf571[200];
+char buf572[200];
+char buf573[200];
+char buf574[200];
+char buf575[200];
+char buf576[200];
+char buf577[200];
+char buf578[200];
+char buf579[200];
+char buf580[200];
+char buf581[200];
+char buf582[200];
+char buf583[200];
+char buf584[200];
+char buf585[200];
+char buf586[200];
+char buf587[200];
+char buf588[200];
+char buf589[200];
+char buf590[200];
+char buf591[200];
+char buf592[200];
+char buf593[200];
+char buf594[200];
+char buf595[200];
+char buf596[200];
+char buf597[200];
+char buf598[200];
+char buf599[200];
+char buf600[200];
+char buf601[200];
+char buf602[200];
+char buf603[200];
+char buf604[200];
+char buf605[200];
+char buf606[200];
+char buf607[200];
+char buf608[200];
+char buf609[200];
+char buf610[200];
+char buf611[200];
+char buf612[200];
+char buf613[200];
+char buf614[200];
+char buf615[200];
+char buf616[200];
+char buf617[200];
+char buf618[200];
+char buf619[200];
+char buf620[200];
+char buf621[200];
+char buf622[200];
+char buf623[200];
+char buf624[200];
+char buf625[200];
+char buf626[200];
+char buf627[200];
+char buf628[200];
+char buf629[200];
+char buf630[200];
+char buf631[200];
+char buf632[200];
+char buf633[200];
+char buf634[200];
+char buf635[200];
+char buf636[200];
+char buf637[200];
+char buf638[200];
+char buf639[200];
+char buf640[200];
+char buf641[200];
+char buf642[200];
+char buf643[200];
+char buf644[200];
+char buf645[200];
+char buf646[200];
+char buf647[200];
+char buf648[200];
+char buf649[200];
+char buf650[200];
+char buf651[200];
+char buf652[200];
+char buf653[200];
+char buf654[200];
+char buf655[200];
+char buf656[200];
+char buf657[200];
+char buf658[200];
+char buf659[200];
+char buf660[200];
+char buf661[200];
+char buf662[200];
+char buf663[200];
+char buf664[200];
+char buf665[200];
+char buf666[200];
+char buf667[200];
+char buf668[200];
+char buf669[200];
+char buf670[200];
+char buf671[200];
+char buf672[200];
+char buf673[200];
+char buf674[200];
+char buf675[200];
+char buf676[200];
+char buf677[200];
+char buf678[200];
+char buf679[200];
+char buf680[200];
+char buf681[200];
+char buf682[200];
+char buf683[200];
+char buf684[200];
+char buf685[200];
+char buf686[200];
+char buf687[200];
+char buf688[200];
+char buf689[200];
+char buf690[200];
+char buf691[200];
+char buf692[200];
+char buf693[200];
+char buf694[200];
+char buf695[200];
+char buf696[200];
+char buf697[200];
+char buf698[200];
+char buf699[200];
+char buf700[200];
+char buf701[200];
+char buf702[200];
+char buf703[200];
+char buf704[200];
+char buf705[200];
+char buf706[200];
+char buf707[200];
+char buf708[200];
+char buf709[200];
+char buf710[200];
+char buf711[200];
+char buf712[200];
+char buf713[200];
+char buf714[200];
+char buf715[200];
+char buf716[200];
+char buf717[200];
+char buf718[200];
+char buf719[200];
+char buf720[200];
+char buf721[200];
+char buf722[200];
+char buf723[200];
+char buf724[200];
+char buf725[200];
+char buf726[200];
+char buf727[200];
+char buf728[200];
+char buf729[200];
+char buf730[200];
+char buf731[200];
+char buf732[200];
+char buf733[200];
+char buf734[200];
+char buf735[200];
+char buf736[200];
+char buf737[200];
+char buf738[200];
+char buf739[200];
+char buf740[200];
+char buf741[200];
+char buf742[200];
+char buf743[200];
+char buf744[200];
+char buf745[200];
+char buf746[200];
+char buf747[200];
+char buf748[200];
+char buf749[200];
+char buf750[200];
+char buf751[200];
+char buf752[200];
+char buf753[200];
+char buf754[200];
+char buf755[200];
+char buf756[200];
+char buf757[200];
+char buf758[200];
+char buf759[200];
+char buf760[200];
+char buf761[200];
+char buf762[200];
+char buf763[200];
+char buf764[200];
+char buf765[200];
+char buf766[200];
+char buf767[200];
+char buf768[200];
+char buf769[200];
+char buf770[200];
+char buf771[200];
+char buf772[200];
+char buf773[200];
+char buf774[200];
+char buf775[200];
+char buf776[200];
+char buf777[200];
+char buf778[200];
+char buf779[200];
+char buf780[200];
+char buf781[200];
+char buf782[200];
+char buf783[200];
+char buf784[200];
+char buf785[200];
+char buf786[200];
+char buf787[200];
+char buf788[200];
+char buf789[200];
+char buf790[200];
+char buf791[200];
+char buf792[200];
+char buf793[200];
+char buf794[200];
+char buf795[200];
+char buf796[200];
+char buf797[200];
+char buf798[200];
+char buf799[200];
+char buf800[200];
+char buf801[200];
+char buf802[200];
+char buf803[200];
+char buf804[200];
+char buf805[200];
+char buf806[200];
+char buf807[200];
+char buf808[200];
+char buf809[200];
+char buf810[200];
+char buf811[200];
+char buf812[200];
+char buf813[200];
+char buf814[200];
+char buf815[200];
+char buf816[200];
+char buf817[200];
+char buf818[200];
+char buf819[200];
+char buf820[200];
+char buf821[200];
+char buf822[200];
+char buf823[200];
+char buf824[200];
+char buf825[200];
+char buf826[200];
+char buf827[200];
+char buf828[200];
+char buf829[200];
+char buf830[200];
+char buf831[200];
+char buf832[200];
+char buf833[200];
+char buf834[200];
+char buf835[200];
+char buf836[200];
+char buf837[200];
+char buf838[200];
+char buf839[200];
+char buf840[200];
+char buf841[200];
+char buf842[200];
+char buf843[200];
+char buf844[200];
+char buf845[200];
+char buf846[200];
+char buf847[200];
+char buf848[200];
+char buf849[200];
+char buf850[200];
+char buf851[200];
+char buf852[200];
+char buf853[200];
+char buf854[200];
+char buf855[200];
+char buf856[200];
+char buf857[200];
+char buf858[200];
+char buf859[200];
+char buf860[200];
+char buf861[200];
+char buf862[200];
+char buf863[200];
+char buf864[200];
+char buf865[200];
+char buf866[200];
+char buf867[200];
+char buf868[200];
+char buf869[200];
+char buf870[200];
+char buf871[200];
+char buf872[200];
+char buf873[200];
+char buf874[200];
+char buf875[200];
+char buf876[200];
+char buf877[200];
+char buf878[200];
+char buf879[200];
+char buf880[200];
+char buf881[200];
+char buf882[200];
+char buf883[200];
+char buf884[200];
+char buf885[200];
+char buf886[200];
+char buf887[200];
+char buf888[200];
+char buf889[200];
+char buf890[200];
+char buf891[200];
+char buf892[200];
+char buf893[200];
+char buf894[200];
+char buf895[200];
+char buf896[200];
+char buf897[200];
+char buf898[200];
+char buf899[200];
+char buf900[200];
+char buf901[200];
+char buf902[200];
+char buf903[200];
+char buf904[200];
+char buf905[200];
+char buf906[200];
+char buf907[200];
+char buf908[200];
+char buf909[200];
+char buf910[200];
+char buf911[200];
+char buf912[200];
+char buf913[200];
+char buf914[200];
+char buf915[200];
+char buf916[200];
+char buf917[200];
+char buf918[200];
+char buf919[200];
+char buf920[200];
+char buf921[200];
+char buf922[200];
+char buf923[200];
+char buf924[200];
+char buf925[200];
+char buf926[200];
+char buf927[200];
+char buf928[200];
+char buf929[200];
+char buf930[200];
+char buf931[200];
+char buf932[200];
+char buf933[200];
+char buf934[200];
+char buf935[200];
+char buf936[200];
+char buf937[200];
+char buf938[200];
+char buf939[200];
+char buf940[200];
+char buf941[200];
+char buf942[200];
+char buf943[200];
+char buf944[200];
+char buf945[200];
+char buf946[200];
+char buf947[200];
+char buf948[200];
+char buf949[200];
+char buf950[200];
+char buf951[200];
+char buf952[200];
+char buf953[200];
+char buf954[200];
+char buf955[200];
+char buf956[200];
+char buf957[200];
+char buf958[200];
+char buf959[200];
+char buf960[200];
+char buf961[200];
+char buf962[200];
+char buf963[200];
+char buf964[200];
+char buf965[200];
+char buf966[200];
+char buf967[200];
+char buf968[200];
+char buf969[200];
+char buf970[200];
+char buf971[200];
+char buf972[200];
+char buf973[200];
+char buf974[200];
+char buf975[200];
+char buf976[200];
+char buf977[200];
+char buf978[200];
+char buf979[200];
+char buf980[200];
+char buf981[200];
+char buf982[200];
+char buf983[200];
+char buf984[200];
+char buf985[200];
+char buf986[200];
+char buf987[200];
+char buf988[200];
+char buf989[200];
+char buf990[200];
+char buf991[200];
+char buf992[200];
+char buf993[200];
+char buf994[200];
+char buf995[200];
+char buf996[200];
+char buf997[200];
+char buf998[200];
+char buf999[200];
+char buf1000[200];
+char buf1001[200];
+char buf1002[200];
+char buf1003[200];
+char buf1004[200];
+char buf1005[200];
+char buf1006[200];
+char buf1007[200];
+char buf1008[200];
+char buf1009[200];
+char buf1010[200];
+char buf1011[200];
+char buf1012[200];
+char buf1013[200];
+char buf1014[200];
+char buf1015[200];
+char buf1016[200];
+char buf1017[200];
+char buf1018[200];
+char buf1019[200];
+char buf1020[200];
+char buf1021[200];
+char buf1022[200];
+char buf1023[200];
+char buf1024[200];
+char buf1025[200];
+char buf1026[200];
+char buf1027[200];
+char buf1028[200];
+char buf1029[200];
+char buf1030[200];
+char buf1031[200];
+char buf1032[200];
+char buf1033[200];
+char buf1034[200];
+char buf1035[200];
+char buf1036[200];
+char buf1037[200];
+char buf1038[200];
+char buf1039[200];
+char buf1040[200];
+char buf1041[200];
+char buf1042[200];
+char buf1043[200];
+char buf1044[200];
+char buf1045[200];
+char buf1046[200];
+char buf1047[200];
+char buf1048[200];
+char buf1049[200];
+char buf1050[200];
+char buf1051[200];
+char buf1052[200];
+char buf1053[200];
+char buf1054[200];
+char buf1055[200];
+char buf1056[200];
+char buf1057[200];
+char buf1058[200];
+char buf1059[200];
+char buf1060[200];
+char buf1061[200];
+char buf1062[200];
+char buf1063[200];
+char buf1064[200];
+char buf1065[200];
+char buf1066[200];
+char buf1067[200];
+char buf1068[200];
+char buf1069[200];
+char buf1070[200];
+char buf1071[200];
+char buf1072[200];
+char buf1073[200];
+char buf1074[200];
+char buf1075[200];
+char buf1076[200];
+char buf1077[200];
+char buf1078[200];
+char buf1079[200];
+char buf1080[200];
+char buf1081[200];
+char buf1082[200];
+char buf1083[200];
+char buf1084[200];
+char buf1085[200];
+char buf1086[200];
+char buf1087[200];
+char buf1088[200];
+char buf1089[200];
+char buf1090[200];
+char buf1091[200];
+char buf1092[200];
+char buf1093[200];
+char buf1094[200];
+char buf1095[200];
+char buf1096[200];
+char buf1097[200];
+char buf1098[200];
+char buf1099[200];
+char buf1100[200];
+char buf1101[200];
+char buf1102[200];
+char buf1103[200];
+char buf1104[200];
+char buf1105[200];
+char buf1106[200];
+char buf1107[200];
+char buf1108[200];
+char buf1109[200];
+char buf1110[200];
+char buf1111[200];
+char buf1112[200];
+char buf1113[200];
+char buf1114[200];
+char buf1115[200];
+char buf1116[200];
+char buf1117[200];
+char buf1118[200];
+char buf1119[200];
+char buf1120[200];
+char buf1121[200];
+char buf1122[200];
+char buf1123[200];
+char buf1124[200];
+char buf1125[200];
+char buf1126[200];
+char buf1127[200];
+char buf1128[200];
+char buf1129[200];
+char buf1130[200];
+char buf1131[200];
+char buf1132[200];
+char buf1133[200];
+char buf1134[200];
+char buf1135[200];
+char buf1136[200];
+char buf1137[200];
+char buf1138[200];
+char buf1139[200];
+char buf1140[200];
+char buf1141[200];
+char buf1142[200];
+char buf1143[200];
+char buf1144[200];
+char buf1145[200];
+char buf1146[200];
+char buf1147[200];
+char buf1148[200];
+char buf1149[200];
+char buf1150[200];
+char buf1151[200];
+char buf1152[200];
+char buf1153[200];
+char buf1154[200];
+char buf1155[200];
+char buf1156[200];
+char buf1157[200];
+char buf1158[200];
+char buf1159[200];
+char buf1160[200];
+char buf1161[200];
+char buf1162[200];
+char buf1163[200];
+char buf1164[200];
+char buf1165[200];
+char buf1166[200];
+char buf1167[200];
+char buf1168[200];
+char buf1169[200];
+char buf1170[200];
+char buf1171[200];
+char buf1172[200];
+char buf1173[200];
+char buf1174[200];
+char buf1175[200];
+char buf1176[200];
+char buf1177[200];
+char buf1178[200];
+char buf1179[200];
+char buf1180[200];
+char buf1181[200];
+char buf1182[200];
+char buf1183[200];
+char buf1184[200];
+char buf1185[200];
+char buf1186[200];
+char buf1187[200];
+char buf1188[200];
+char buf1189[200];
+char buf1190[200];
+char buf1191[200];
+char buf1192[200];
+char buf1193[200];
+char buf1194[200];
+char buf1195[200];
+char buf1196[200];
+char buf1197[200];
+char buf1198[200];
+char buf1199[200];
+char buf1200[200];
+char buf1201[200];
+char buf1202[200];
+char buf1203[200];
+char buf1204[200];
+char buf1205[200];
+char buf1206[200];
+char buf1207[200];
+char buf1208[200];
+char buf1209[200];
+char buf1210[200];
+char buf1211[200];
+char buf1212[200];
+char buf1213[200];
+char buf1214[200];
+char buf1215[200];
+char buf1216[200];
+char buf1217[200];
+char buf1218[200];
+char buf1219[200];
+char buf1220[200];
+char buf1221[200];
+char buf1222[200];
+char buf1223[200];
+char buf1224[200];
+char buf1225[200];
+char buf1226[200];
+char buf1227[200];
+char buf1228[200];
+char buf1229[200];
+char buf1230[200];
+char buf1231[200];
+char buf1232[200];
+char buf1233[200];
+char buf1234[200];
+char buf1235[200];
+char buf1236[200];
+char buf1237[200];
+char buf1238[200];
+char buf1239[200];
+char buf1240[200];
+char buf1241[200];
+char buf1242[200];
+char buf1243[200];
+char buf1244[200];
+char buf1245[200];
+char buf1246[200];
+char buf1247[200];
+char buf1248[200];
+char buf1249[200];
+char buf1250[200];
+char buf1251[200];
+char buf1252[200];
+char buf1253[200];
+char buf1254[200];
+char buf1255[200];
+char buf1256[200];
+char buf1257[200];
+char buf1258[200];
+char buf1259[200];
+char buf1260[200];
+char buf1261[200];
+char buf1262[200];
+char buf1263[200];
+char buf1264[200];
+char buf1265[200];
+char buf1266[200];
+char buf1267[200];
+char buf1268[200];
+char buf1269[200];
+char buf1270[200];
+char buf1271[200];
+char buf1272[200];
+char buf1273[200];
+char buf1274[200];
+char buf1275[200];
+char buf1276[200];
+char buf1277[200];
+char buf1278[200];
+char buf1279[200];
+char buf1280[200];
+char buf1281[200];
+char buf1282[200];
+char buf1283[200];
+char buf1284[200];
+char buf1285[200];
+char buf1286[200];
+char buf1287[200];
+char buf1288[200];
+char buf1289[200];
+char buf1290[200];
+char buf1291[200];
+char buf1292[200];
+char buf1293[200];
+char buf1294[200];
+char buf1295[200];
+char buf1296[200];
+char buf1297[200];
+char buf1298[200];
+char buf1299[200];
+char buf1300[200];
+char buf1301[200];
+char buf1302[200];
+char buf1303[200];
+char buf1304[200];
+char buf1305[200];
+char buf1306[200];
+char buf1307[200];
+char buf1308[200];
+char buf1309[200];
+char buf1310[200];
+char buf1311[200];
+char buf1312[200];
+char buf1313[200];
+char buf1314[200];
+char buf1315[200];
+char buf1316[200];
+char buf1317[200];
+char buf1318[200];
+char buf1319[200];
+char buf1320[200];
+char buf1321[200];
+char buf1322[200];
+char buf1323[200];
+char buf1324[200];
+char buf1325[200];
+char buf1326[200];
+char buf1327[200];
+char buf1328[200];
+char buf1329[200];
+char buf1330[200];
+char buf1331[200];
+char buf1332[200];
+char buf1333[200];
+char buf1334[200];
+char buf1335[200];
+char buf1336[200];
+char buf1337[200];
+char buf1338[200];
+char buf1339[200];
+char buf1340[200];
+char buf1341[200];
+char buf1342[200];
+char buf1343[200];
+char buf1344[200];
+char buf1345[200];
+char buf1346[200];
+char buf1347[200];
+char buf1348[200];
+char buf1349[200];
+char buf1350[200];
+char buf1351[200];
+char buf1352[200];
+char buf1353[200];
+char buf1354[200];
+char buf1355[200];
+char buf1356[200];
+char buf1357[200];
+char buf1358[200];
+char buf1359[200];
+char buf1360[200];
+char buf1361[200];
+char buf1362[200];
+char buf1363[200];
+char buf1364[200];
+char buf1365[200];
+char buf1366[200];
+char buf1367[200];
+char buf1368[200];
+char buf1369[200];
+char buf1370[200];
+char buf1371[200];
+char buf1372[200];
+char buf1373[200];
+char buf1374[200];
+char buf1375[200];
+char buf1376[200];
+char buf1377[200];
+char buf1378[200];
+char buf1379[200];
+char buf1380[200];
+char buf1381[200];
+char buf1382[200];
+char buf1383[200];
+char buf1384[200];
+char buf1385[200];
+char buf1386[200];
+char buf1387[200];
+char buf1388[200];
+char buf1389[200];
+char buf1390[200];
+char buf1391[200];
+char buf1392[200];
+char buf1393[200];
+char buf1394[200];
+char buf1395[200];
+char buf1396[200];
+char buf1397[200];
+char buf1398[200];
+char buf1399[200];
+char buf1400[200];
+char buf1401[200];
+char buf1402[200];
+char buf1403[200];
+char buf1404[200];
+char buf1405[200];
+char buf1406[200];
+char buf1407[200];
+char buf1408[200];
+char buf1409[200];
+char buf1410[200];
+char buf1411[200];
+char buf1412[200];
+char buf1413[200];
+char buf1414[200];
+char buf1415[200];
+char buf1416[200];
+char buf1417[200];
+char buf1418[200];
+char buf1419[200];
+char buf1420[200];
+char buf1421[200];
+char buf1422[200];
+char buf1423[200];
+char buf1424[200];
+char buf1425[200];
+char buf1426[200];
+char buf1427[200];
+char buf1428[200];
+char buf1429[200];
+char buf1430[200];
+char buf1431[200];
+char buf1432[200];
+char buf1433[200];
+char buf1434[200];
+char buf1435[200];
+char buf1436[200];
+char buf1437[200];
+char buf1438[200];
+char buf1439[200];
+char buf1440[200];
+char buf1441[200];
+char buf1442[200];
+char buf1443[200];
+char buf1444[200];
+char buf1445[200];
+char buf1446[200];
+char buf1447[200];
+char buf1448[200];
+char buf1449[200];
+char buf1450[200];
+char buf1451[200];
+char buf1452[200];
+char buf1453[200];
+char buf1454[200];
+char buf1455[200];
+char buf1456[200];
+char buf1457[200];
+char buf1458[200];
+char buf1459[200];
+char buf1460[200];
+char buf1461[200];
+char buf1462[200];
+char buf1463[200];
+char buf1464[200];
+char buf1465[200];
+char buf1466[200];
+char buf1467[200];
+char buf1468[200];
+char buf1469[200];
+char buf1470[200];
+char buf1471[200];
+char buf1472[200];
+char buf1473[200];
+char buf1474[200];
+char buf1475[200];
+char buf1476[200];
+char buf1477[200];
+char buf1478[200];
+char buf1479[200];
+char buf1480[200];
+char buf1481[200];
+char buf1482[200];
+char buf1483[200];
+char buf1484[200];
+char buf1485[200];
+char buf1486[200];
+char buf1487[200];
+char buf1488[200];
+char buf1489[200];
+char buf1490[200];
+char buf1491[200];
+char buf1492[200];
+char buf1493[200];
+char buf1494[200];
+char buf1495[200];
+char buf1496[200];
+char buf1497[200];
+char buf1498[200];
+char buf1499[200];
+char buf1500[200];
+char buf1501[200];
+char buf1502[200];
+char buf1503[200];
+char buf1504[200];
+char buf1505[200];
+char buf1506[200];
+char buf1507[200];
+char buf1508[200];
+char buf1509[200];
+char buf1510[200];
+char buf1511[200];
+char buf1512[200];
+char buf1513[200];
+char buf1514[200];
+char buf1515[200];
+char buf1516[200];
+char buf1517[200];
+char buf1518[200];
+char buf1519[200];
+char buf1520[200];
+char buf1521[200];
+char buf1522[200];
+char buf1523[200];
+char buf1524[200];
+char buf1525[200];
+char buf1526[200];
+char buf1527[200];
+char buf1528[200];
+char buf1529[200];
+char buf1530[200];
+char buf1531[200];
+char buf1532[200];
+char buf1533[200];
+char buf1534[200];
+char buf1535[200];
+char buf1536[200];
+char buf1537[200];
+char buf1538[200];
+char buf1539[200];
+char buf1540[200];
+char buf1541[200];
+char buf1542[200];
+char buf1543[200];
+char buf1544[200];
+char buf1545[200];
+char buf1546[200];
+char buf1547[200];
+char buf1548[200];
+char buf1549[200];
+char buf1550[200];
+char buf1551[200];
+char buf1552[200];
+char buf1553[200];
+char buf1554[200];
+char buf1555[200];
+char buf1556[200];
+char buf1557[200];
+char buf1558[200];
+char buf1559[200];
+char buf1560[200];
+char buf1561[200];
+char buf1562[200];
+char buf1563[200];
+char buf1564[200];
+char buf1565[200];
+char buf1566[200];
+char buf1567[200];
+char buf1568[200];
+char buf1569[200];
+char buf1570[200];
+char buf1571[200];
+char buf1572[200];
+char buf1573[200];
+char buf1574[200];
+char buf1575[200];
+char buf1576[200];
+char buf1577[200];
+char buf1578[200];
+char buf1579[200];
+char buf1580[200];
+char buf1581[200];
+char buf1582[200];
+char buf1583[200];
+char buf1584[200];
+char buf1585[200];
+char buf1586[200];
+char buf1587[200];
+char buf1588[200];
+char buf1589[200];
+char buf1590[200];
+char buf1591[200];
+char buf1592[200];
+char buf1593[200];
+char buf1594[200];
+char buf1595[200];
+char buf1596[200];
+char buf1597[200];
+char buf1598[200];
+char buf1599[200];
+char buf1600[200];
+char buf1601[200];
+char buf1602[200];
+char buf1603[200];
+char buf1604[200];
+char buf1605[200];
+char buf1606[200];
+char buf1607[200];
+char buf1608[200];
+char buf1609[200];
+char buf1610[200];
+char buf1611[200];
+char buf1612[200];
+char buf1613[200];
+char buf1614[200];
+char buf1615[200];
+char buf1616[200];
+char buf1617[200];
+char buf1618[200];
+char buf1619[200];
+char buf1620[200];
+char buf1621[200];
+char buf1622[200];
+char buf1623[200];
+char buf1624[200];
+char buf1625[200];
+char buf1626[200];
+char buf1627[200];
+char buf1628[200];
+char buf1629[200];
+char buf1630[200];
+char buf1631[200];
+char buf1632[200];
+char buf1633[200];
+char buf1634[200];
+char buf1635[200];
+char buf1636[200];
+char buf1637[200];
+char buf1638[200];
+char buf1639[200];
+char buf1640[200];
+char buf1641[200];
+char buf1642[200];
+char buf1643[200];
+char buf1644[200];
+char buf1645[200];
+char buf1646[200];
+char buf1647[200];
+char buf1648[200];
+char buf1649[200];
+char buf1650[200];
+char buf1651[200];
+char buf1652[200];
+char buf1653[200];
+char buf1654[200];
+char buf1655[200];
+char buf1656[200];
+char buf1657[200];
+char buf1658[200];
+char buf1659[200];
+char buf1660[200];
+char buf1661[200];
+char buf1662[200];
+char buf1663[200];
+char buf1664[200];
+char buf1665[200];
+char buf1666[200];
+char buf1667[200];
+char buf1668[200];
+char buf1669[200];
+char buf1670[200];
+char buf1671[200];
+char buf1672[200];
+char buf1673[200];
+char buf1674[200];
+char buf1675[200];
+char buf1676[200];
+char buf1677[200];
+char buf1678[200];
+char buf1679[200];
+char buf1680[200];
+char buf1681[200];
+char buf1682[200];
+char buf1683[200];
+char buf1684[200];
+char buf1685[200];
+char buf1686[200];
+char buf1687[200];
+char buf1688[200];
+char buf1689[200];
+char buf1690[200];
+char buf1691[200];
+char buf1692[200];
+char buf1693[200];
+char buf1694[200];
+char buf1695[200];
+char buf1696[200];
+char buf1697[200];
+char buf1698[200];
+char buf1699[200];
+char buf1700[200];
+char buf1701[200];
+char buf1702[200];
+char buf1703[200];
+char buf1704[200];
+char buf1705[200];
+char buf1706[200];
+char buf1707[200];
+char buf1708[200];
+char buf1709[200];
+char buf1710[200];
+char buf1711[200];
+char buf1712[200];
+char buf1713[200];
+char buf1714[200];
+char buf1715[200];
+char buf1716[200];
+char buf1717[200];
+char buf1718[200];
+char buf1719[200];
+char buf1720[200];
+char buf1721[200];
+char buf1722[200];
+char buf1723[200];
+char buf1724[200];
+char buf1725[200];
+char buf1726[200];
+char buf1727[200];
+char buf1728[200];
+char buf1729[200];
+char buf1730[200];
+char buf1731[200];
+char buf1732[200];
+char buf1733[200];
+char buf1734[200];
+char buf1735[200];
+char buf1736[200];
+char buf1737[200];
+char buf1738[200];
+char buf1739[200];
+char buf1740[200];
+char buf1741[200];
+char buf1742[200];
+char buf1743[200];
+char buf1744[200];
+char buf1745[200];
+char buf1746[200];
+char buf1747[200];
+char buf1748[200];
+char buf1749[200];
+char buf1750[200];
+char buf1751[200];
+char buf1752[200];
+char buf1753[200];
+char buf1754[200];
+char buf1755[200];
+char buf1756[200];
+char buf1757[200];
+char buf1758[200];
+char buf1759[200];
+char buf1760[200];
+char buf1761[200];
+char buf1762[200];
+char buf1763[200];
+char buf1764[200];
+char buf1765[200];
+char buf1766[200];
+char buf1767[200];
+char buf1768[200];
+char buf1769[200];
+char buf1770[200];
+char buf1771[200];
+char buf1772[200];
+char buf1773[200];
+char buf1774[200];
+char buf1775[200];
+char buf1776[200];
+char buf1777[200];
+char buf1778[200];
+char buf1779[200];
+char buf1780[200];
+char buf1781[200];
+char buf1782[200];
+char buf1783[200];
+char buf1784[200];
+char buf1785[200];
+char buf1786[200];
+char buf1787[200];
+char buf1788[200];
+char buf1789[200];
+char buf1790[200];
+char buf1791[200];
+char buf1792[200];
+char buf1793[200];
+char buf1794[200];
+char buf1795[200];
+char buf1796[200];
+char buf1797[200];
+char buf1798[200];
+char buf1799[200];
+char buf1800[200];
+char buf1801[200];
+char buf1802[200];
+char buf1803[200];
+char buf1804[200];
+char buf1805[200];
+char buf1806[200];
+char buf1807[200];
+char buf1808[200];
+char buf1809[200];
+char buf1810[200];
+char buf1811[200];
+char buf1812[200];
+char buf1813[200];
+char buf1814[200];
+char buf1815[200];
+char buf1816[200];
+char buf1817[200];
+char buf1818[200];
+char buf1819[200];
+char buf1820[200];
+char buf1821[200];
+char buf1822[200];
+char buf1823[200];
+char buf1824[200];
+char buf1825[200];
+char buf1826[200];
+char buf1827[200];
+char buf1828[200];
+char buf1829[200];
+char buf1830[200];
+char buf1831[200];
+char buf1832[200];
+char buf1833[200];
+char buf1834[200];
+char buf1835[200];
+char buf1836[200];
+char buf1837[200];
+char buf1838[200];
+char buf1839[200];
+char buf1840[200];
+char buf1841[200];
+char buf1842[200];
+char buf1843[200];
+char buf1844[200];
+char buf1845[200];
+char buf1846[200];
+char buf1847[200];
+char buf1848[200];
+char buf1849[200];
+char buf1850[200];
+char buf1851[200];
+char buf1852[200];
+char buf1853[200];
+char buf1854[200];
+char buf1855[200];
+char buf1856[200];
+char buf1857[200];
+char buf1858[200];
+char buf1859[200];
+char buf1860[200];
+char buf1861[200];
+char buf1862[200];
+char buf1863[200];
+char buf1864[200];
+char buf1865[200];
+char buf1866[200];
+char buf1867[200];
+char buf1868[200];
+char buf1869[200];
+char buf1870[200];
+char buf1871[200];
+char buf1872[200];
+char buf1873[200];
+char buf1874[200];
+char buf1875[200];
+char buf1876[200];
+char buf1877[200];
+char buf1878[200];
+char buf1879[200];
+char buf1880[200];
+char buf1881[200];
+char buf1882[200];
+char buf1883[200];
+char buf1884[200];
+char buf1885[200];
+char buf1886[200];
+char buf1887[200];
+char buf1888[200];
+char buf1889[200];
+char buf1890[200];
+char buf1891[200];
+char buf1892[200];
+char buf1893[200];
+char buf1894[200];
+char buf1895[200];
+char buf1896[200];
+char buf1897[200];
+char buf1898[200];
+char buf1899[200];
+char buf1900[200];
+char buf1901[200];
+char buf1902[200];
+char buf1903[200];
+char buf1904[200];
+char buf1905[200];
+char buf1906[200];
+char buf1907[200];
+char buf1908[200];
+char buf1909[200];
+char buf1910[200];
+char buf1911[200];
+char buf1912[200];
+char buf1913[200];
+char buf1914[200];
+char buf1915[200];
+char buf1916[200];
+char buf1917[200];
+char buf1918[200];
+char buf1919[200];
+char buf1920[200];
+char buf1921[200];
+char buf1922[200];
+char buf1923[200];
+char buf1924[200];
+char buf1925[200];
+char buf1926[200];
+char buf1927[200];
+char buf1928[200];
+char buf1929[200];
+char buf1930[200];
+char buf1931[200];
+char buf1932[200];
+char buf1933[200];
+char buf1934[200];
+char buf1935[200];
+char buf1936[200];
+char buf1937[200];
+char buf1938[200];
+char buf1939[200];
+char buf1940[200];
+char buf1941[200];
+char buf1942[200];
+char buf1943[200];
+char buf1944[200];
+char buf1945[200];
+char buf1946[200];
+char buf1947[200];
+char buf1948[200];
+char buf1949[200];
+char buf1950[200];
+char buf1951[200];
+char buf1952[200];
+char buf1953[200];
+char buf1954[200];
+char buf1955[200];
+char buf1956[200];
+char buf1957[200];
+char buf1958[200];
+char buf1959[200];
+char buf1960[200];
+char buf1961[200];
+char buf1962[200];
+char buf1963[200];
+char buf1964[200];
+char buf1965[200];
+char buf1966[200];
+char buf1967[200];
+char buf1968[200];
+char buf1969[200];
+char buf1970[200];
+char buf1971[200];
+char buf1972[200];
+char buf1973[200];
+char buf1974[200];
+char buf1975[200];
+char buf1976[200];
+char buf1977[200];
+char buf1978[200];
+char buf1979[200];
+char buf1980[200];
+char buf1981[200];
+char buf1982[200];
+char buf1983[200];
+char buf1984[200];
+char buf1985[200];
+char buf1986[200];
+char buf1987[200];
+char buf1988[200];
+char buf1989[200];
+char buf1990[200];
+char buf1991[200];
+char buf1992[200];
+char buf1993[200];
+char buf1994[200];
+char buf1995[200];
+char buf1996[200];
+char buf1997[200];
+char buf1998[200];
+char buf1999[200];
+char buf2000[200];
+char buf2001[200];
+char buf2002[200];
+char buf2003[200];
+char buf2004[200];
+char buf2005[200];
+char buf2006[200];
+char buf2007[200];
+char buf2008[200];
+char buf2009[200];
+char buf2010[200];
+char buf2011[200];
+char buf2012[200];
+char buf2013[200];
+char buf2014[200];
+char buf2015[200];
+char buf2016[200];
+char buf2017[200];
+char buf2018[200];
+char buf2019[200];
+char buf2020[200];
+char buf2021[200];
+char buf2022[200];
+char buf2023[200];
+char buf2024[200];
+char buf2025[200];
+char buf2026[200];
+char buf2027[200];
+char buf2028[200];
+char buf2029[200];
+char buf2030[200];
+char buf2031[200];
+char buf2032[200];
+char buf2033[200];
+char buf2034[200];
+char buf2035[200];
+char buf2036[200];
+char buf2037[200];
+char buf2038[200];
+char buf2039[200];
+char buf2040[200];
+char buf2041[200];
+char buf2042[200];
+char buf2043[200];
+char buf2044[200];
+char buf2045[200];
+char buf2046[200];
+char buf2047[200];
+char buf2048[200];
+char buf2049[200];
+char buf2050[200];
+char buf2051[200];
+char buf2052[200];
+char buf2053[200];
+char buf2054[200];
+char buf2055[200];
+char buf2056[200];
+char buf2057[200];
+char buf2058[200];
+char buf2059[200];
+char buf2060[200];
+char buf2061[200];
+char buf2062[200];
+char buf2063[200];
+char buf2064[200];
+char buf2065[200];
+char buf2066[200];
+char buf2067[200];
+char buf2068[200];
+char buf2069[200];
+char buf2070[200];
+char buf2071[200];
+char buf2072[200];
+char buf2073[200];
+char buf2074[200];
+char buf2075[200];
+char buf2076[200];
+char buf2077[200];
+char buf2078[200];
+char buf2079[200];
+char buf2080[200];
+char buf2081[200];
+char buf2082[200];
+char buf2083[200];
+char buf2084[200];
+char buf2085[200];
+char buf2086[200];
+char buf2087[200];
+char buf2088[200];
+char buf2089[200];
+char buf2090[200];
+char buf2091[200];
+char buf2092[200];
+char buf2093[200];
+char buf2094[200];
+char buf2095[200];
+char buf2096[200];
+char buf2097[200];
+char buf2098[200];
+char buf2099[200];
+char buf2100[200];
+char buf2101[200];
+char buf2102[200];
+char buf2103[200];
+char buf2104[200];
+char buf2105[200];
+char buf2106[200];
+char buf2107[200];
+char buf2108[200];
+char buf2109[200];
+char buf2110[200];
+char buf2111[200];
+char buf2112[200];
+char buf2113[200];
+char buf2114[200];
+char buf2115[200];
+char buf2116[200];
+char buf2117[200];
+char buf2118[200];
+char buf2119[200];
+char buf2120[200];
+char buf2121[200];
+char buf2122[200];
+char buf2123[200];
+char buf2124[200];
+char buf2125[200];
+char buf2126[200];
+char buf2127[200];
+char buf2128[200];
+char buf2129[200];
+char buf2130[200];
+char buf2131[200];
+char buf2132[200];
+char buf2133[200];
+char buf2134[200];
+char buf2135[200];
+char buf2136[200];
+char buf2137[200];
+char buf2138[200];
+char buf2139[200];
+char buf2140[200];
+char buf2141[200];
+char buf2142[200];
+char buf2143[200];
+char buf2144[200];
+char buf2145[200];
+char buf2146[200];
+char buf2147[200];
+char buf2148[200];
+char buf2149[200];
+char buf2150[200];
+char buf2151[200];
+char buf2152[200];
+char buf2153[200];
+char buf2154[200];
+char buf2155[200];
+char buf2156[200];
+char buf2157[200];
+char buf2158[200];
+char buf2159[200];
+char buf2160[200];
+char buf2161[200];
+char buf2162[200];
+char buf2163[200];
+char buf2164[200];
+char buf2165[200];
+char buf2166[200];
+char buf2167[200];
+char buf2168[200];
+char buf2169[200];
+char buf2170[200];
+char buf2171[200];
+char buf2172[200];
+char buf2173[200];
+char buf2174[200];
+char buf2175[200];
+char buf2176[200];
+char buf2177[200];
+char buf2178[200];
+char buf2179[200];
+char buf2180[200];
+char buf2181[200];
+char buf2182[200];
+char buf2183[200];
+char buf2184[200];
+char buf2185[200];
+char buf2186[200];
+char buf2187[200];
+char buf2188[200];
+char buf2189[200];
+char buf2190[200];
+char buf2191[200];
+char buf2192[200];
+char buf2193[200];
+char buf2194[200];
+char buf2195[200];
+char buf2196[200];
+char buf2197[200];
+char buf2198[200];
+char buf2199[200];
+char buf2200[200];
+char buf2201[200];
+char buf2202[200];
+char buf2203[200];
+char buf2204[200];
+char buf2205[200];
+char buf2206[200];
+char buf2207[200];
+char buf2208[200];
+char buf2209[200];
+char buf2210[200];
+char buf2211[200];
+char buf2212[200];
+char buf2213[200];
+char buf2214[200];
+char buf2215[200];
+char buf2216[200];
+char buf2217[200];
+char buf2218[200];
+char buf2219[200];
+char buf2220[200];
+char buf2221[200];
+char buf2222[200];
+char buf2223[200];
+char buf2224[200];
+char buf2225[200];
+char buf2226[200];
+char buf2227[200];
+char buf2228[200];
+char buf2229[200];
+char buf2230[200];
+char buf2231[200];
+char buf2232[200];
+char buf2233[200];
+char buf2234[200];
+char buf2235[200];
+char buf2236[200];
+char buf2237[200];
+char buf2238[200];
+char buf2239[200];
+char buf2240[200];
+char buf2241[200];
+char buf2242[200];
+char buf2243[200];
+char buf2244[200];
+char buf2245[200];
+char buf2246[200];
+char buf2247[200];
+char buf2248[200];
+char buf2249[200];
+char buf2250[200];
+char buf2251[200];
+char buf2252[200];
+char buf2253[200];
+char buf2254[200];
+char buf2255[200];
+char buf2256[200];
+char buf2257[200];
+char buf2258[200];
+char buf2259[200];
+char buf2260[200];
+char buf2261[200];
+char buf2262[200];
+char buf2263[200];
+char buf2264[200];
+char buf2265[200];
+char buf2266[200];
+char buf2267[200];
+char buf2268[200];
+char buf2269[200];
+char buf2270[200];
+char buf2271[200];
+char buf2272[200];
+char buf2273[200];
+char buf2274[200];
+char buf2275[200];
+char buf2276[200];
+char buf2277[200];
+char buf2278[200];
+char buf2279[200];
+char buf2280[200];
+char buf2281[200];
+char buf2282[200];
+char buf2283[200];
+char buf2284[200];
+char buf2285[200];
+char buf2286[200];
+char buf2287[200];
+char buf2288[200];
+char buf2289[200];
+char buf2290[200];
+char buf2291[200];
+char buf2292[200];
+char buf2293[200];
+char buf2294[200];
+char buf2295[200];
+char buf2296[200];
+char buf2297[200];
+char buf2298[200];
+char buf2299[200];
+char buf2300[200];
+char buf2301[200];
+char buf2302[200];
+char buf2303[200];
+char buf2304[200];
+char buf2305[200];
+char buf2306[200];
+char buf2307[200];
+char buf2308[200];
+char buf2309[200];
+char buf2310[200];
+char buf2311[200];
+char buf2312[200];
+char buf2313[200];
+char buf2314[200];
+char buf2315[200];
+char buf2316[200];
+char buf2317[200];
+char buf2318[200];
+char buf2319[200];
+char buf2320[200];
+char buf2321[200];
+char buf2322[200];
+char buf2323[200];
+char buf2324[200];
+char buf2325[200];
+char buf2326[200];
+char buf2327[200];
+char buf2328[200];
+char buf2329[200];
+char buf2330[200];
+char buf2331[200];
+char buf2332[200];
+char buf2333[200];
+char buf2334[200];
+char buf2335[200];
+char buf2336[200];
+char buf2337[200];
+char buf2338[200];
+char buf2339[200];
+char buf2340[200];
+char buf2341[200];
+char buf2342[200];
+char buf2343[200];
+char buf2344[200];
+char buf2345[200];
+char buf2346[200];
+char buf2347[200];
+char buf2348[200];
+char buf2349[200];
+char buf2350[200];
+char buf2351[200];
+char buf2352[200];
+char buf2353[200];
+char buf2354[200];
+char buf2355[200];
+char buf2356[200];
+char buf2357[200];
+char buf2358[200];
+char buf2359[200];
+char buf2360[200];
+char buf2361[200];
+char buf2362[200];
+char buf2363[200];
+char buf2364[200];
+char buf2365[200];
+char buf2366[200];
+char buf2367[200];
+char buf2368[200];
+char buf2369[200];
+char buf2370[200];
+char buf2371[200];
+char buf2372[200];
+char buf2373[200];
+char buf2374[200];
+char buf2375[200];
+char buf2376[200];
+char buf2377[200];
+char buf2378[200];
+char buf2379[200];
+char buf2380[200];
+char buf2381[200];
+char buf2382[200];
+char buf2383[200];
+char buf2384[200];
+char buf2385[200];
+char buf2386[200];
+char buf2387[200];
+char buf2388[200];
+char buf2389[200];
+char buf2390[200];
+char buf2391[200];
+char buf2392[200];
+char buf2393[200];
+char buf2394[200];
+char buf2395[200];
+char buf2396[200];
+char buf2397[200];
+char buf2398[200];
+char buf2399[200];
+char buf2400[200];
+char buf2401[200];
+char buf2402[200];
+char buf2403[200];
+char buf2404[200];
+char buf2405[200];
+char buf2406[200];
+char buf2407[200];
+char buf2408[200];
+char buf2409[200];
+char buf2410[200];
+char buf2411[200];
+char buf2412[200];
+char buf2413[200];
+char buf2414[200];
+char buf2415[200];
+char buf2416[200];
+char buf2417[200];
+char buf2418[200];
+char buf2419[200];
+char buf2420[200];
+char buf2421[200];
+char buf2422[200];
+char buf2423[200];
+char buf2424[200];
+char buf2425[200];
+char buf2426[200];
+char buf2427[200];
+char buf2428[200];
+char buf2429[200];
+char buf2430[200];
+char buf2431[200];
+char buf2432[200];
+char buf2433[200];
+char buf2434[200];
+char buf2435[200];
+char buf2436[200];
+char buf2437[200];
+char buf2438[200];
+char buf2439[200];
+char buf2440[200];
+char buf2441[200];
+char buf2442[200];
+char buf2443[200];
+char buf2444[200];
+char buf2445[200];
+char buf2446[200];
+char buf2447[200];
+char buf2448[200];
+char buf2449[200];
+char buf2450[200];
+char buf2451[200];
+char buf2452[200];
+char buf2453[200];
+char buf2454[200];
+char buf2455[200];
+char buf2456[200];
+char buf2457[200];
+char buf2458[200];
+char buf2459[200];
+char buf2460[200];
+char buf2461[200];
+char buf2462[200];
+char buf2463[200];
+char buf2464[200];
+char buf2465[200];
+char buf2466[200];
+char buf2467[200];
+char buf2468[200];
+char buf2469[200];
+char buf2470[200];
+char buf2471[200];
+char buf2472[200];
+char buf2473[200];
+char buf2474[200];
+char buf2475[200];
+char buf2476[200];
+char buf2477[200];
+char buf2478[200];
+char buf2479[200];
+char buf2480[200];
+char buf2481[200];
+char buf2482[200];
+char buf2483[200];
+char buf2484[200];
+char buf2485[200];
+char buf2486[200];
+char buf2487[200];
+char buf2488[200];
+char buf2489[200];
+char buf2490[200];
+char buf2491[200];
+char buf2492[200];
+char buf2493[200];
+char buf2494[200];
+char buf2495[200];
+char buf2496[200];
+char buf2497[200];
+char buf2498[200];
+char buf2499[200];
+char buf2500[200];
+char buf2501[200];
+char buf2502[200];
+char buf2503[200];
+char buf2504[200];
+char buf2505[200];
+char buf2506[200];
+char buf2507[200];
+char buf2508[200];
+char buf2509[200];
+char buf2510[200];
+char buf2511[200];
+char buf2512[200];
+char buf2513[200];
+char buf2514[200];
+char buf2515[200];
+char buf2516[200];
+char buf2517[200];
+char buf2518[200];
+char buf2519[200];
+char buf2520[200];
+char buf2521[200];
+char buf2522[200];
+char buf2523[200];
+char buf2524[200];
+char buf2525[200];
+char buf2526[200];
+char buf2527[200];
+char buf2528[200];
+char buf2529[200];
+char buf2530[200];
+char buf2531[200];
+char buf2532[200];
+char buf2533[200];
+char buf2534[200];
+char buf2535[200];
+char buf2536[200];
+char buf2537[200];
+char buf2538[200];
+char buf2539[200];
+char buf2540[200];
+char buf2541[200];
+char buf2542[200];
+char buf2543[200];
+char buf2544[200];
+char buf2545[200];
+char buf2546[200];
+char buf2547[200];
+char buf2548[200];
+char buf2549[200];
+char buf2550[200];
+char buf2551[200];
+char buf2552[200];
+char buf2553[200];
+char buf2554[200];
+char buf2555[200];
+char buf2556[200];
+char buf2557[200];
+char buf2558[200];
+char buf2559[200];
+char buf2560[200];
+char buf2561[200];
+char buf2562[200];
+char buf2563[200];
+char buf2564[200];
+char buf2565[200];
+char buf2566[200];
+char buf2567[200];
+char buf2568[200];
+char buf2569[200];
+char buf2570[200];
+char buf2571[200];
+char buf2572[200];
+char buf2573[200];
+char buf2574[200];
+char buf2575[200];
+char buf2576[200];
+char buf2577[200];
+char buf2578[200];
+char buf2579[200];
+char buf2580[200];
+char buf2581[200];
+char buf2582[200];
+char buf2583[200];
+char buf2584[200];
+char buf2585[200];
+char buf2586[200];
+char buf2587[200];
+char buf2588[200];
+char buf2589[200];
+char buf2590[200];
+char buf2591[200];
+char buf2592[200];
+char buf2593[200];
+char buf2594[200];
+char buf2595[200];
+char buf2596[200];
+char buf2597[200];
+char buf2598[200];
+char buf2599[200];
+char buf2600[200];
+char buf2601[200];
+char buf2602[200];
+char buf2603[200];
+char buf2604[200];
+char buf2605[200];
+char buf2606[200];
+char buf2607[200];
+char buf2608[200];
+char buf2609[200];
+char buf2610[200];
+char buf2611[200];
+char buf2612[200];
+char buf2613[200];
+char buf2614[200];
+char buf2615[200];
+char buf2616[200];
+char buf2617[200];
+char buf2618[200];
+char buf2619[200];
+char buf2620[200];
+char buf2621[200];
+char buf2622[200];
+char buf2623[200];
+char buf2624[200];
+char buf2625[200];
+char buf2626[200];
+char buf2627[200];
+char buf2628[200];
+char buf2629[200];
+char buf2630[200];
+char buf2631[200];
+char buf2632[200];
+char buf2633[200];
+char buf2634[200];
+char buf2635[200];
+char buf2636[200];
+char buf2637[200];
+char buf2638[200];
+char buf2639[200];
+char buf2640[200];
+char buf2641[200];
+char buf2642[200];
+char buf2643[200];
+char buf2644[200];
+char buf2645[200];
+char buf2646[200];
+char buf2647[200];
+char buf2648[200];
+char buf2649[200];
+char buf2650[200];
+char buf2651[200];
+char buf2652[200];
+char buf2653[200];
+char buf2654[200];
+char buf2655[200];
+char buf2656[200];
+char buf2657[200];
+char buf2658[200];
+char buf2659[200];
+char buf2660[200];
+char buf2661[200];
+char buf2662[200];
+char buf2663[200];
+char buf2664[200];
+char buf2665[200];
+char buf2666[200];
+char buf2667[200];
+char buf2668[200];
+char buf2669[200];
+char buf2670[200];
+char buf2671[200];
+char buf2672[200];
+char buf2673[200];
+char buf2674[200];
+char buf2675[200];
+char buf2676[200];
+char buf2677[200];
+char buf2678[200];
+char buf2679[200];
+char buf2680[200];
+char buf2681[200];
+char buf2682[200];
+char buf2683[200];
+char buf2684[200];
+char buf2685[200];
+char buf2686[200];
+char buf2687[200];
+char buf2688[200];
+char buf2689[200];
+char buf2690[200];
+char buf2691[200];
+char buf2692[200];
+char buf2693[200];
+char buf2694[200];
+char buf2695[200];
+char buf2696[200];
+char buf2697[200];
+char buf2698[200];
+char buf2699[200];
+char buf2700[200];
+char buf2701[200];
+char buf2702[200];
+char buf2703[200];
+char buf2704[200];
+char buf2705[200];
+char buf2706[200];
+char buf2707[200];
+char buf2708[200];
+char buf2709[200];
+char buf2710[200];
+char buf2711[200];
+char buf2712[200];
+char buf2713[200];
+char buf2714[200];
+char buf2715[200];
+char buf2716[200];
+char buf2717[200];
+char buf2718[200];
+char buf2719[200];
+char buf2720[200];
+char buf2721[200];
+char buf2722[200];
+char buf2723[200];
+char buf2724[200];
+char buf2725[200];
+char buf2726[200];
+char buf2727[200];
+char buf2728[200];
+char buf2729[200];
+char buf2730[200];
+char buf2731[200];
+char buf2732[200];
+char buf2733[200];
+char buf2734[200];
+char buf2735[200];
+char buf2736[200];
+char buf2737[200];
+char buf2738[200];
+char buf2739[200];
+char buf2740[200];
+char buf2741[200];
+char buf2742[200];
+char buf2743[200];
+char buf2744[200];
+char buf2745[200];
+char buf2746[200];
+char buf2747[200];
+char buf2748[200];
+char buf2749[200];
+char buf2750[200];
+char buf2751[200];
+char buf2752[200];
+char buf2753[200];
+char buf2754[200];
+char buf2755[200];
+char buf2756[200];
+char buf2757[200];
+char buf2758[200];
+char buf2759[200];
+char buf2760[200];
+char buf2761[200];
+char buf2762[200];
+char buf2763[200];
+char buf2764[200];
+char buf2765[200];
+char buf2766[200];
+char buf2767[200];
+char buf2768[200];
+char buf2769[200];
+char buf2770[200];
+char buf2771[200];
+char buf2772[200];
+char buf2773[200];
+char buf2774[200];
+char buf2775[200];
+char buf2776[200];
+char buf2777[200];
+char buf2778[200];
+char buf2779[200];
+char buf2780[200];
+char buf2781[200];
+char buf2782[200];
+char buf2783[200];
+char buf2784[200];
+char buf2785[200];
+char buf2786[200];
+char buf2787[200];
+char buf2788[200];
+char buf2789[200];
+char buf2790[200];
+char buf2791[200];
+char buf2792[200];
+char buf2793[200];
+char buf2794[200];
+char buf2795[200];
+char buf2796[200];
+char buf2797[200];
+char buf2798[200];
+char buf2799[200];
+char buf2800[200];
+char buf2801[200];
+char buf2802[200];
+char buf2803[200];
+char buf2804[200];
+char buf2805[200];
+char buf2806[200];
+char buf2807[200];
+char buf2808[200];
+char buf2809[200];
+char buf2810[200];
+char buf2811[200];
+char buf2812[200];
+char buf2813[200];
+char buf2814[200];
+char buf2815[200];
+char buf2816[200];
+char buf2817[200];
+char buf2818[200];
+char buf2819[200];
+char buf2820[200];
+char buf2821[200];
+char buf2822[200];
+char buf2823[200];
+char buf2824[200];
+char buf2825[200];
+char buf2826[200];
+char buf2827[200];
+char buf2828[200];
+char buf2829[200];
+char buf2830[200];
+char buf2831[200];
+char buf2832[200];
+char buf2833[200];
+char buf2834[200];
+char buf2835[200];
+char buf2836[200];
+char buf2837[200];
+char buf2838[200];
+char buf2839[200];
+char buf2840[200];
+char buf2841[200];
+char buf2842[200];
+char buf2843[200];
+char buf2844[200];
+char buf2845[200];
+char buf2846[200];
+char buf2847[200];
+char buf2848[200];
+char buf2849[200];
+char buf2850[200];
+char buf2851[200];
+char buf2852[200];
+char buf2853[200];
+char buf2854[200];
+char buf2855[200];
+char buf2856[200];
+char buf2857[200];
+char buf2858[200];
+char buf2859[200];
+char buf2860[200];
+char buf2861[200];
+char buf2862[200];
+char buf2863[200];
+char buf2864[200];
+char buf2865[200];
+char buf2866[200];
+char buf2867[200];
+char buf2868[200];
+char buf2869[200];
+char buf2870[200];
+char buf2871[200];
+char buf2872[200];
+char buf2873[200];
+char buf2874[200];
+char buf2875[200];
+char buf2876[200];
+char buf2877[200];
+char buf2878[200];
+char buf2879[200];
+char buf2880[200];
+char buf2881[200];
+char buf2882[200];
+char buf2883[200];
+char buf2884[200];
+char buf2885[200];
+char buf2886[200];
+char buf2887[200];
+char buf2888[200];
+char buf2889[200];
+char buf2890[200];
+char buf2891[200];
+char buf2892[200];
+char buf2893[200];
+char buf2894[200];
+char buf2895[200];
+char buf2896[200];
+char buf2897[200];
+char buf2898[200];
+char buf2899[200];
+char buf2900[200];
+char buf2901[200];
+char buf2902[200];
+char buf2903[200];
+char buf2904[200];
+char buf2905[200];
+char buf2906[200];
+char buf2907[200];
+char buf2908[200];
+char buf2909[200];
+char buf2910[200];
+char buf2911[200];
+char buf2912[200];
+char buf2913[200];
+char buf2914[200];
+char buf2915[200];
+char buf2916[200];
+char buf2917[200];
+char buf2918[200];
+char buf2919[200];
+char buf2920[200];
+char buf2921[200];
+char buf2922[200];
+char buf2923[200];
+char buf2924[200];
+char buf2925[200];
+char buf2926[200];
+char buf2927[200];
+char buf2928[200];
+char buf2929[200];
+char buf2930[200];
+char buf2931[200];
+char buf2932[200];
+char buf2933[200];
+char buf2934[200];
+char buf2935[200];
+char buf2936[200];
+char buf2937[200];
+char buf2938[200];
+char buf2939[200];
+char buf2940[200];
+char buf2941[200];
+char buf2942[200];
+char buf2943[200];
+char buf2944[200];
+char buf2945[200];
+char buf2946[200];
+char buf2947[200];
+char buf2948[200];
+char buf2949[200];
+char buf2950[200];
+char buf2951[200];
+char buf2952[200];
+char buf2953[200];
+char buf2954[200];
+char buf2955[200];
+char buf2956[200];
+char buf2957[200];
+char buf2958[200];
+char buf2959[200];
+char buf2960[200];
+char buf2961[200];
+char buf2962[200];
+char buf2963[200];
+char buf2964[200];
+char buf2965[200];
+char buf2966[200];
+char buf2967[200];
+char buf2968[200];
+char buf2969[200];
+char buf2970[200];
+char buf2971[200];
+char buf2972[200];
+char buf2973[200];
+char buf2974[200];
+char buf2975[200];
+char buf2976[200];
+char buf2977[200];
+char buf2978[200];
+char buf2979[200];
+char buf2980[200];
+char buf2981[200];
+char buf2982[200];
+char buf2983[200];
+char buf2984[200];
+char buf2985[200];
+char buf2986[200];
+char buf2987[200];
+char buf2988[200];
+char buf2989[200];
+char buf2990[200];
+char buf2991[200];
+char buf2992[200];
+char buf2993[200];
+char buf2994[200];
+char buf2995[200];
+char buf2996[200];
+char buf2997[200];
+char buf2998[200];
+char buf2999[200];
+char buf3000[200];
+char buf3001[200];
+char buf3002[200];
+char buf3003[200];
+char buf3004[200];
+char buf3005[200];
+char buf3006[200];
+char buf3007[200];
+char buf3008[200];
+char buf3009[200];
+char buf3010[200];
+char buf3011[200];
+char buf3012[200];
+char buf3013[200];
+char buf3014[200];
+char buf3015[200];
+char buf3016[200];
+char buf3017[200];
+char buf3018[200];
+char buf3019[200];
+char buf3020[200];
+char buf3021[200];
+char buf3022[200];
+char buf3023[200];
+char buf3024[200];
+char buf3025[200];
+char buf3026[200];
+char buf3027[200];
+char buf3028[200];
+char buf3029[200];
+char buf3030[200];
+char buf3031[200];
+char buf3032[200];
+char buf3033[200];
+char buf3034[200];
+char buf3035[200];
+char buf3036[200];
+char buf3037[200];
+char buf3038[200];
+char buf3039[200];
+char buf3040[200];
+char buf3041[200];
+char buf3042[200];
+char buf3043[200];
+char buf3044[200];
+char buf3045[200];
+char buf3046[200];
+char buf3047[200];
+char buf3048[200];
+char buf3049[200];
+char buf3050[200];
+char buf3051[200];
+char buf3052[200];
+char buf3053[200];
+char buf3054[200];
+char buf3055[200];
+char buf3056[200];
+char buf3057[200];
+char buf3058[200];
+char buf3059[200];
+char buf3060[200];
+char buf3061[200];
+char buf3062[200];
+char buf3063[200];
+char buf3064[200];
+char buf3065[200];
+char buf3066[200];
+char buf3067[200];
+char buf3068[200];
+char buf3069[200];
+char buf3070[200];
+char buf3071[200];
+char buf3072[200];
+char buf3073[200];
+char buf3074[200];
+char buf3075[200];
+char buf3076[200];
+char buf3077[200];
+char buf3078[200];
+char buf3079[200];
+char buf3080[200];
+char buf3081[200];
+char buf3082[200];
+char buf3083[200];
+char buf3084[200];
+char buf3085[200];
+char buf3086[200];
+char buf3087[200];
+char buf3088[200];
+char buf3089[200];
+char buf3090[200];
+char buf3091[200];
+char buf3092[200];
+char buf3093[200];
+char buf3094[200];
+char buf3095[200];
+char buf3096[200];
+char buf3097[200];
+char buf3098[200];
+char buf3099[200];
+char buf3100[200];
+char buf3101[200];
+char buf3102[200];
+char buf3103[200];
+char buf3104[200];
+char buf3105[200];
+char buf3106[200];
+char buf3107[200];
+char buf3108[200];
+char buf3109[200];
+char buf3110[200];
+char buf3111[200];
+char buf3112[200];
+char buf3113[200];
+char buf3114[200];
+char buf3115[200];
+char buf3116[200];
+char buf3117[200];
+char buf3118[200];
+char buf3119[200];
+char buf3120[200];
+char buf3121[200];
+char buf3122[200];
+char buf3123[200];
+char buf3124[200];
+char buf3125[200];
+char buf3126[200];
+char buf3127[200];
+char buf3128[200];
+char buf3129[200];
+char buf3130[200];
+char buf3131[200];
+char buf3132[200];
+char buf3133[200];
+char buf3134[200];
+char buf3135[200];
+char buf3136[200];
+char buf3137[200];
+char buf3138[200];
+char buf3139[200];
+char buf3140[200];
+char buf3141[200];
+char buf3142[200];
+char buf3143[200];
+char buf3144[200];
+char buf3145[200];
+char buf3146[200];
+char buf3147[200];
+char buf3148[200];
+char buf3149[200];
+char buf3150[200];
+char buf3151[200];
+char buf3152[200];
+char buf3153[200];
+char buf3154[200];
+char buf3155[200];
+char buf3156[200];
+char buf3157[200];
+char buf3158[200];
+char buf3159[200];
+char buf3160[200];
+char buf3161[200];
+char buf3162[200];
+char buf3163[200];
+char buf3164[200];
+char buf3165[200];
+char buf3166[200];
+char buf3167[200];
+char buf3168[200];
+char buf3169[200];
+char buf3170[200];
+char buf3171[200];
+char buf3172[200];
+char buf3173[200];
+char buf3174[200];
+char buf3175[200];
+char buf3176[200];
+char buf3177[200];
+char buf3178[200];
+char buf3179[200];
+char buf3180[200];
+char buf3181[200];
+char buf3182[200];
+char buf3183[200];
+char buf3184[200];
+char buf3185[200];
+char buf3186[200];
+char buf3187[200];
+char buf3188[200];
+char buf3189[200];
+char buf3190[200];
+char buf3191[200];
+char buf3192[200];
+char buf3193[200];
+char buf3194[200];
+char buf3195[200];
+char buf3196[200];
+char buf3197[200];
+char buf3198[200];
+char buf3199[200];
+char buf3200[200];
+char buf3201[200];
+char buf3202[200];
+char buf3203[200];
+char buf3204[200];
+char buf3205[200];
+char buf3206[200];
+char buf3207[200];
+char buf3208[200];
+char buf3209[200];
+char buf3210[200];
+char buf3211[200];
+char buf3212[200];
+char buf3213[200];
+char buf3214[200];
+char buf3215[200];
+char buf3216[200];
+char buf3217[200];
+char buf3218[200];
+char buf3219[200];
+char buf3220[200];
+char buf3221[200];
+char buf3222[200];
+char buf3223[200];
+char buf3224[200];
+char buf3225[200];
+char buf3226[200];
+char buf3227[200];
+char buf3228[200];
+char buf3229[200];
+char buf3230[200];
+char buf3231[200];
+char buf3232[200];
+char buf3233[200];
+char buf3234[200];
+char buf3235[200];
+char buf3236[200];
+char buf3237[200];
+char buf3238[200];
+char buf3239[200];
+char buf3240[200];
+char buf3241[200];
+char buf3242[200];
+char buf3243[200];
+char buf3244[200];
+char buf3245[200];
+char buf3246[200];
+char buf3247[200];
+char buf3248[200];
+char buf3249[200];
+char buf3250[200];
+char buf3251[200];
+char buf3252[200];
+char buf3253[200];
+char buf3254[200];
+char buf3255[200];
+char buf3256[200];
+char buf3257[200];
+char buf3258[200];
+char buf3259[200];
+char buf3260[200];
+char buf3261[200];
+char buf3262[200];
+char buf3263[200];
+char buf3264[200];
+char buf3265[200];
+char buf3266[200];
+char buf3267[200];
+char buf3268[200];
+char buf3269[200];
+char buf3270[200];
+char buf3271[200];
+char buf3272[200];
+char buf3273[200];
+char buf3274[200];
+char buf3275[200];
+char buf3276[200];
+char buf3277[200];
+char buf3278[200];
+char buf3279[200];
+char buf3280[200];
+char buf3281[200];
+char buf3282[200];
+char buf3283[200];
+char buf3284[200];
+char buf3285[200];
+char buf3286[200];
+char buf3287[200];
+char buf3288[200];
+char buf3289[200];
+char buf3290[200];
+char buf3291[200];
+char buf3292[200];
+char buf3293[200];
+char buf3294[200];
+char buf3295[200];
+char buf3296[200];
+char buf3297[200];
+char buf3298[200];
+char buf3299[200];
+char buf3300[200];
+char buf3301[200];
+char buf3302[200];
+char buf3303[200];
+char buf3304[200];
+char buf3305[200];
+char buf3306[200];
+char buf3307[200];
+char buf3308[200];
+char buf3309[200];
+char buf3310[200];
+char buf3311[200];
+char buf3312[200];
+char buf3313[200];
+char buf3314[200];
+char buf3315[200];
+char buf3316[200];
+char buf3317[200];
+char buf3318[200];
+char buf3319[200];
+char buf3320[200];
+char buf3321[200];
+char buf3322[200];
+char buf3323[200];
+char buf3324[200];
+char buf3325[200];
+char buf3326[200];
+char buf3327[200];
+char buf3328[200];
+char buf3329[200];
+char buf3330[200];
+char buf3331[200];
+char buf3332[200];
+char buf3333[200];
+char buf3334[200];
+char buf3335[200];
+char buf3336[200];
+char buf3337[200];
+char buf3338[200];
+char buf3339[200];
+char buf3340[200];
+char buf3341[200];
+char buf3342[200];
+char buf3343[200];
+char buf3344[200];
+char buf3345[200];
+char buf3346[200];
+char buf3347[200];
+char buf3348[200];
+char buf3349[200];
+char buf3350[200];
+char buf3351[200];
+char buf3352[200];
+char buf3353[200];
+char buf3354[200];
+char buf3355[200];
+char buf3356[200];
+char buf3357[200];
+char buf3358[200];
+char buf3359[200];
+char buf3360[200];
+char buf3361[200];
+char buf3362[200];
+char buf3363[200];
+char buf3364[200];
+char buf3365[200];
+char buf3366[200];
+char buf3367[200];
+char buf3368[200];
+char buf3369[200];
+char buf3370[200];
+char buf3371[200];
+char buf3372[200];
+char buf3373[200];
+char buf3374[200];
+char buf3375[200];
+char buf3376[200];
+char buf3377[200];
+char buf3378[200];
+char buf3379[200];
+char buf3380[200];
+char buf3381[200];
+char buf3382[200];
+char buf3383[200];
+char buf3384[200];
+char buf3385[200];
+char buf3386[200];
+char buf3387[200];
+char buf3388[200];
+char buf3389[200];
+char buf3390[200];
+char buf3391[200];
+char buf3392[200];
+char buf3393[200];
+char buf3394[200];
+char buf3395[200];
+char buf3396[200];
+char buf3397[200];
+char buf3398[200];
+char buf3399[200];
+char buf3400[200];
+char buf3401[200];
+char buf3402[200];
+char buf3403[200];
+char buf3404[200];
+char buf3405[200];
+char buf3406[200];
+char buf3407[200];
+char buf3408[200];
+char buf3409[200];
+char buf3410[200];
+char buf3411[200];
+char buf3412[200];
+char buf3413[200];
+char buf3414[200];
+char buf3415[200];
+char buf3416[200];
+char buf3417[200];
+char buf3418[200];
+char buf3419[200];
+char buf3420[200];
+char buf3421[200];
+char buf3422[200];
+char buf3423[200];
+char buf3424[200];
+char buf3425[200];
+char buf3426[200];
+char buf3427[200];
+char buf3428[200];
+char buf3429[200];
+char buf3430[200];
+char buf3431[200];
+char buf3432[200];
+char buf3433[200];
+char buf3434[200];
+char buf3435[200];
+char buf3436[200];
+char buf3437[200];
+char buf3438[200];
+char buf3439[200];
+char buf3440[200];
+char buf3441[200];
+char buf3442[200];
+char buf3443[200];
+char buf3444[200];
+char buf3445[200];
+char buf3446[200];
+char buf3447[200];
+char buf3448[200];
+char buf3449[200];
+char buf3450[200];
+char buf3451[200];
+char buf3452[200];
+char buf3453[200];
+char buf3454[200];
+char buf3455[200];
+char buf3456[200];
+char buf3457[200];
+char buf3458[200];
+char buf3459[200];
+char buf3460[200];
+char buf3461[200];
+char buf3462[200];
+char buf3463[200];
+char buf3464[200];
+char buf3465[200];
+char buf3466[200];
+char buf3467[200];
+char buf3468[200];
+char buf3469[200];
+char buf3470[200];
+char buf3471[200];
+char buf3472[200];
+char buf3473[200];
+char buf3474[200];
+char buf3475[200];
+char buf3476[200];
+char buf3477[200];
+char buf3478[200];
+char buf3479[200];
+char buf3480[200];
+char buf3481[200];
+char buf3482[200];
+char buf3483[200];
+char buf3484[200];
+char buf3485[200];
+char buf3486[200];
+char buf3487[200];
+char buf3488[200];
+char buf3489[200];
+char buf3490[200];
+char buf3491[200];
+char buf3492[200];
+char buf3493[200];
+char buf3494[200];
+char buf3495[200];
+char buf3496[200];
+char buf3497[200];
+char buf3498[200];
+char buf3499[200];
+char buf3500[200];
+char buf3501[200];
+char buf3502[200];
+char buf3503[200];
+char buf3504[200];
+char buf3505[200];
+char buf3506[200];
+char buf3507[200];
+char buf3508[200];
+char buf3509[200];
+char buf3510[200];
+char buf3511[200];
+char buf3512[200];
+char buf3513[200];
+char buf3514[200];
+char buf3515[200];
+char buf3516[200];
+char buf3517[200];
+char buf3518[200];
+char buf3519[200];
+char buf3520[200];
+char buf3521[200];
+char buf3522[200];
+char buf3523[200];
+char buf3524[200];
+char buf3525[200];
+char buf3526[200];
+char buf3527[200];
+char buf3528[200];
+char buf3529[200];
+char buf3530[200];
+char buf3531[200];
+char buf3532[200];
+char buf3533[200];
+char buf3534[200];
+char buf3535[200];
+char buf3536[200];
+char buf3537[200];
+char buf3538[200];
+char buf3539[200];
+char buf3540[200];
+char buf3541[200];
+char buf3542[200];
+char buf3543[200];
+char buf3544[200];
+char buf3545[200];
+char buf3546[200];
+char buf3547[200];
+char buf3548[200];
+char buf3549[200];
+char buf3550[200];
+char buf3551[200];
+char buf3552[200];
+char buf3553[200];
+char buf3554[200];
+char buf3555[200];
+char buf3556[200];
+char buf3557[200];
+char buf3558[200];
+char buf3559[200];
+char buf3560[200];
+char buf3561[200];
+char buf3562[200];
+char buf3563[200];
+char buf3564[200];
+char buf3565[200];
+char buf3566[200];
+char buf3567[200];
+char buf3568[200];
+char buf3569[200];
+char buf3570[200];
+char buf3571[200];
+char buf3572[200];
+char buf3573[200];
+char buf3574[200];
+char buf3575[200];
+char buf3576[200];
+char buf3577[200];
+char buf3578[200];
+char buf3579[200];
+char buf3580[200];
+char buf3581[200];
+char buf3582[200];
+char buf3583[200];
+char buf3584[200];
+char buf3585[200];
+char buf3586[200];
+char buf3587[200];
+char buf3588[200];
+char buf3589[200];
+char buf3590[200];
+char buf3591[200];
+char buf3592[200];
+char buf3593[200];
+char buf3594[200];
+char buf3595[200];
+char buf3596[200];
+char buf3597[200];
+char buf3598[200];
+char buf3599[200];
+char buf3600[200];
+char buf3601[200];
+char buf3602[200];
+char buf3603[200];
+char buf3604[200];
+char buf3605[200];
+char buf3606[200];
+char buf3607[200];
+char buf3608[200];
+char buf3609[200];
+char buf3610[200];
+char buf3611[200];
+char buf3612[200];
+char buf3613[200];
+char buf3614[200];
+char buf3615[200];
+char buf3616[200];
+char buf3617[200];
+char buf3618[200];
+char buf3619[200];
+char buf3620[200];
+char buf3621[200];
+char buf3622[200];
+char buf3623[200];
+char buf3624[200];
+char buf3625[200];
+char buf3626[200];
+char buf3627[200];
+char buf3628[200];
+char buf3629[200];
+char buf3630[200];
+char buf3631[200];
+char buf3632[200];
+char buf3633[200];
+char buf3634[200];
+char buf3635[200];
+char buf3636[200];
+char buf3637[200];
+char buf3638[200];
+char buf3639[200];
+char buf3640[200];
+char buf3641[200];
+char buf3642[200];
+char buf3643[200];
+char buf3644[200];
+char buf3645[200];
+char buf3646[200];
+char buf3647[200];
+char buf3648[200];
+char buf3649[200];
+char buf3650[200];
+char buf3651[200];
+char buf3652[200];
+char buf3653[200];
+char buf3654[200];
+char buf3655[200];
+char buf3656[200];
+char buf3657[200];
+char buf3658[200];
+char buf3659[200];
+char buf3660[200];
+char buf3661[200];
+char buf3662[200];
+char buf3663[200];
+char buf3664[200];
+char buf3665[200];
+char buf3666[200];
+char buf3667[200];
+char buf3668[200];
+char buf3669[200];
+char buf3670[200];
+char buf3671[200];
+char buf3672[200];
+char buf3673[200];
+char buf3674[200];
+char buf3675[200];
+char buf3676[200];
+char buf3677[200];
+char buf3678[200];
+char buf3679[200];
+char buf3680[200];
+char buf3681[200];
+char buf3682[200];
+char buf3683[200];
+char buf3684[200];
+char buf3685[200];
+char buf3686[200];
+char buf3687[200];
+char buf3688[200];
+char buf3689[200];
+char buf3690[200];
+char buf3691[200];
+char buf3692[200];
+char buf3693[200];
+char buf3694[200];
+char buf3695[200];
+char buf3696[200];
+char buf3697[200];
+char buf3698[200];
+char buf3699[200];
+char buf3700[200];
+char buf3701[200];
+char buf3702[200];
+char buf3703[200];
+char buf3704[200];
+char buf3705[200];
+char buf3706[200];
+char buf3707[200];
+char buf3708[200];
+char buf3709[200];
+char buf3710[200];
+char buf3711[200];
+char buf3712[200];
+char buf3713[200];
+char buf3714[200];
+char buf3715[200];
+char buf3716[200];
+char buf3717[200];
+char buf3718[200];
+char buf3719[200];
+char buf3720[200];
+char buf3721[200];
+char buf3722[200];
+char buf3723[200];
+char buf3724[200];
+char buf3725[200];
+char buf3726[200];
+char buf3727[200];
+char buf3728[200];
+char buf3729[200];
+char buf3730[200];
+char buf3731[200];
+char buf3732[200];
+char buf3733[200];
+char buf3734[200];
+char buf3735[200];
+char buf3736[200];
+char buf3737[200];
+char buf3738[200];
+char buf3739[200];
+char buf3740[200];
+char buf3741[200];
+char buf3742[200];
+char buf3743[200];
+char buf3744[200];
+char buf3745[200];
+char buf3746[200];
+char buf3747[200];
+char buf3748[200];
+char buf3749[200];
+char buf3750[200];
+char buf3751[200];
+char buf3752[200];
+char buf3753[200];
+char buf3754[200];
+char buf3755[200];
+char buf3756[200];
+char buf3757[200];
+char buf3758[200];
+char buf3759[200];
+char buf3760[200];
+char buf3761[200];
+char buf3762[200];
+char buf3763[200];
+char buf3764[200];
+char buf3765[200];
+char buf3766[200];
+char buf3767[200];
+char buf3768[200];
+char buf3769[200];
+char buf3770[200];
+char buf3771[200];
+char buf3772[200];
+char buf3773[200];
+char buf3774[200];
+char buf3775[200];
+char buf3776[200];
+char buf3777[200];
+char buf3778[200];
+char buf3779[200];
+char buf3780[200];
+char buf3781[200];
+char buf3782[200];
+char buf3783[200];
+char buf3784[200];
+char buf3785[200];
+char buf3786[200];
+char buf3787[200];
+char buf3788[200];
+char buf3789[200];
+char buf3790[200];
+char buf3791[200];
+char buf3792[200];
+char buf3793[200];
+char buf3794[200];
+char buf3795[200];
+char buf3796[200];
+char buf3797[200];
+char buf3798[200];
+char buf3799[200];
+char buf3800[200];
+char buf3801[200];
+char buf3802[200];
+char buf3803[200];
+char buf3804[200];
+char buf3805[200];
+char buf3806[200];
+char buf3807[200];
+char buf3808[200];
+char buf3809[200];
+char buf3810[200];
+char buf3811[200];
+char buf3812[200];
+char buf3813[200];
+char buf3814[200];
+char buf3815[200];
+char buf3816[200];
+char buf3817[200];
+char buf3818[200];
+char buf3819[200];
+char buf3820[200];
+char buf3821[200];
+char buf3822[200];
+char buf3823[200];
+char buf3824[200];
+char buf3825[200];
+char buf3826[200];
+char buf3827[200];
+char buf3828[200];
+char buf3829[200];
+char buf3830[200];
+char buf3831[200];
+char buf3832[200];
+char buf3833[200];
+char buf3834[200];
+char buf3835[200];
+char buf3836[200];
+char buf3837[200];
+char buf3838[200];
+char buf3839[200];
+char buf3840[200];
+char buf3841[200];
+char buf3842[200];
+char buf3843[200];
+char buf3844[200];
+char buf3845[200];
+char buf3846[200];
+char buf3847[200];
+char buf3848[200];
+char buf3849[200];
+char buf3850[200];
+char buf3851[200];
+char buf3852[200];
+char buf3853[200];
+char buf3854[200];
+char buf3855[200];
+char buf3856[200];
+char buf3857[200];
+char buf3858[200];
+char buf3859[200];
+char buf3860[200];
+char buf3861[200];
+char buf3862[200];
+char buf3863[200];
+char buf3864[200];
+char buf3865[200];
+char buf3866[200];
+char buf3867[200];
+char buf3868[200];
+char buf3869[200];
+char buf3870[200];
+char buf3871[200];
+char buf3872[200];
+char buf3873[200];
+char buf3874[200];
+char buf3875[200];
+char buf3876[200];
+char buf3877[200];
+char buf3878[200];
+char buf3879[200];
+char buf3880[200];
+char buf3881[200];
+char buf3882[200];
+char buf3883[200];
+char buf3884[200];
+char buf3885[200];
+char buf3886[200];
+char buf3887[200];
+char buf3888[200];
+char buf3889[200];
+char buf3890[200];
+char buf3891[200];
+char buf3892[200];
+char buf3893[200];
+char buf3894[200];
+char buf3895[200];
+char buf3896[200];
+char buf3897[200];
+char buf3898[200];
+char buf3899[200];
+char buf3900[200];
+char buf3901[200];
+char buf3902[200];
+char buf3903[200];
+char buf3904[200];
+char buf3905[200];
+char buf3906[200];
+char buf3907[200];
+char buf3908[200];
+char buf3909[200];
+char buf3910[200];
+char buf3911[200];
+char buf3912[200];
+char buf3913[200];
+char buf3914[200];
+char buf3915[200];
+char buf3916[200];
+char buf3917[200];
+char buf3918[200];
+char buf3919[200];
+char buf3920[200];
+char buf3921[200];
+char buf3922[200];
+char buf3923[200];
+char buf3924[200];
+char buf3925[200];
+char buf3926[200];
+char buf3927[200];
+char buf3928[200];
+char buf3929[200];
+char buf3930[200];
+char buf3931[200];
+char buf3932[200];
+char buf3933[200];
+char buf3934[200];
+char buf3935[200];
+char buf3936[200];
+char buf3937[200];
+char buf3938[200];
+char buf3939[200];
+char buf3940[200];
+char buf3941[200];
+char buf3942[200];
+char buf3943[200];
+char buf3944[200];
+char buf3945[200];
+char buf3946[200];
+char buf3947[200];
+char buf3948[200];
+char buf3949[200];
+char buf3950[200];
+char buf3951[200];
+char buf3952[200];
+char buf3953[200];
+char buf3954[200];
+char buf3955[200];
+char buf3956[200];
+char buf3957[200];
+char buf3958[200];
+char buf3959[200];
+char buf3960[200];
+char buf3961[200];
+char buf3962[200];
+char buf3963[200];
+char buf3964[200];
+char buf3965[200];
+char buf3966[200];
+char buf3967[200];
+char buf3968[200];
+char buf3969[200];
+char buf3970[200];
+char buf3971[200];
+char buf3972[200];
+char buf3973[200];
+char buf3974[200];
+char buf3975[200];
+char buf3976[200];
+char buf3977[200];
+char buf3978[200];
+char buf3979[200];
+char buf3980[200];
+char buf3981[200];
+char buf3982[200];
+char buf3983[200];
+char buf3984[200];
+char buf3985[200];
+char buf3986[200];
+char buf3987[200];
+char buf3988[200];
+char buf3989[200];
+char buf3990[200];
+char buf3991[200];
+char buf3992[200];
+char buf3993[200];
+char buf3994[200];
+char buf3995[200];
+char buf3996[200];
+char buf3997[200];
+char buf3998[200];
+char buf3999[200];
+char buf4000[200];
+char buf4001[200];
+char buf4002[200];
+char buf4003[200];
+char buf4004[200];
+char buf4005[200];
+char buf4006[200];
+char buf4007[200];
+char buf4008[200];
+char buf4009[200];
+char buf4010[200];
+char buf4011[200];
+char buf4012[200];
+char buf4013[200];
+char buf4014[200];
+char buf4015[200];
+char buf4016[200];
+char buf4017[200];
+char buf4018[200];
+char buf4019[200];
+char buf4020[200];
+char buf4021[200];
+char buf4022[200];
+char buf4023[200];
+char buf4024[200];
+char buf4025[200];
+char buf4026[200];
+char buf4027[200];
+char buf4028[200];
+char buf4029[200];
+char buf4030[200];
+char buf4031[200];
+char buf4032[200];
+char buf4033[200];
+char buf4034[200];
+char buf4035[200];
+char buf4036[200];
+char buf4037[200];
+char buf4038[200];
+char buf4039[200];
+char buf4040[200];
+char buf4041[200];
+char buf4042[200];
+char buf4043[200];
+char buf4044[200];
+char buf4045[200];
+char buf4046[200];
+
+void RS_KERNEL test(int in) {
+    *(uchar*)buf0 = abs(*(char*)buf1);
+    *(uchar2*)buf2 = abs(*(char2*)buf3);
+    *(uchar3*)buf4 = abs(*(char3*)buf5);
+    *(uchar4*)buf6 = abs(*(char4*)buf7);
+    *(ushort*)buf8 = abs(*(short*)buf9);
+    *(ushort2*)buf10 = abs(*(short2*)buf11);
+    *(ushort3*)buf12 = abs(*(short3*)buf13);
+    *(ushort4*)buf14 = abs(*(short4*)buf15);
+    *(uint*)buf16 = abs(*(int*)buf17);
+    *(uint2*)buf18 = abs(*(int2*)buf19);
+    *(uint3*)buf20 = abs(*(int3*)buf21);
+    *(uint4*)buf22 = abs(*(int4*)buf23);
+    *(float*)buf24 = acos(*(float*)buf25);
+    *(float2*)buf26 = acos(*(float2*)buf27);
+    *(float3*)buf28 = acos(*(float3*)buf29);
+    *(float4*)buf30 = acos(*(float4*)buf31);
+    *(float*)buf32 = acosh(*(float*)buf33);
+    *(float2*)buf34 = acosh(*(float2*)buf35);
+    *(float3*)buf36 = acosh(*(float3*)buf37);
+    *(float4*)buf38 = acosh(*(float4*)buf39);
+    *(float*)buf40 = acospi(*(float*)buf41);
+    *(float2*)buf42 = acospi(*(float2*)buf43);
+    *(float3*)buf44 = acospi(*(float3*)buf45);
+    *(float4*)buf46 = acospi(*(float4*)buf47);
+    *(float*)buf48 = asin(*(float*)buf49);
+    *(float2*)buf50 = asin(*(float2*)buf51);
+    *(float3*)buf52 = asin(*(float3*)buf53);
+    *(float4*)buf54 = asin(*(float4*)buf55);
+    *(float*)buf56 = asinh(*(float*)buf57);
+    *(float2*)buf58 = asinh(*(float2*)buf59);
+    *(float3*)buf60 = asinh(*(float3*)buf61);
+    *(float4*)buf62 = asinh(*(float4*)buf63);
+    *(float*)buf64 = asinpi(*(float*)buf65);
+    *(float2*)buf66 = asinpi(*(float2*)buf67);
+    *(float3*)buf68 = asinpi(*(float3*)buf69);
+    *(float4*)buf70 = asinpi(*(float4*)buf71);
+    *(float*)buf72 = atan(*(float*)buf73);
+    *(float2*)buf74 = atan(*(float2*)buf75);
+    *(float3*)buf76 = atan(*(float3*)buf77);
+    *(float4*)buf78 = atan(*(float4*)buf79);
+    *(float*)buf80 = atan2(*(float*)buf81, *(float*)buf82);
+    *(float2*)buf83 = atan2(*(float2*)buf84, *(float2*)buf85);
+    *(float3*)buf86 = atan2(*(float3*)buf87, *(float3*)buf88);
+    *(float4*)buf89 = atan2(*(float4*)buf90, *(float4*)buf91);
+    *(float*)buf92 = atan2pi(*(float*)buf93, *(float*)buf94);
+    *(float2*)buf95 = atan2pi(*(float2*)buf96, *(float2*)buf97);
+    *(float3*)buf98 = atan2pi(*(float3*)buf99, *(float3*)buf100);
+    *(float4*)buf101 = atan2pi(*(float4*)buf102, *(float4*)buf103);
+    *(float*)buf104 = atanh(*(float*)buf105);
+    *(float2*)buf106 = atanh(*(float2*)buf107);
+    *(float3*)buf108 = atanh(*(float3*)buf109);
+    *(float4*)buf110 = atanh(*(float4*)buf111);
+    *(float*)buf112 = atanpi(*(float*)buf113);
+    *(float2*)buf114 = atanpi(*(float2*)buf115);
+    *(float3*)buf116 = atanpi(*(float3*)buf117);
+    *(float4*)buf118 = atanpi(*(float4*)buf119);
+    *(float*)buf120 = cbrt(*(float*)buf121);
+    *(float2*)buf122 = cbrt(*(float2*)buf123);
+    *(float3*)buf124 = cbrt(*(float3*)buf125);
+    *(float4*)buf126 = cbrt(*(float4*)buf127);
+    *(float*)buf128 = ceil(*(float*)buf129);
+    *(float2*)buf130 = ceil(*(float2*)buf131);
+    *(float3*)buf132 = ceil(*(float3*)buf133);
+    *(float4*)buf134 = ceil(*(float4*)buf135);
+    *(float*)buf136 = clamp(*(float*)buf137, *(float*)buf138, *(float*)buf139);
+    *(float2*)buf140 = clamp(*(float2*)buf141, *(float2*)buf142, *(float2*)buf143);
+    *(float3*)buf144 = clamp(*(float3*)buf145, *(float3*)buf146, *(float3*)buf147);
+    *(float4*)buf148 = clamp(*(float4*)buf149, *(float4*)buf150, *(float4*)buf151);
+    *(float2*)buf152 = clamp(*(float2*)buf153, *(float*)buf154, *(float*)buf155);
+    *(float3*)buf156 = clamp(*(float3*)buf157, *(float*)buf158, *(float*)buf159);
+    *(float4*)buf160 = clamp(*(float4*)buf161, *(float*)buf162, *(float*)buf163);
+    *(char*)buf164 = clamp(*(char*)buf165, *(char*)buf166, *(char*)buf167);
+    *(char2*)buf168 = clamp(*(char2*)buf169, *(char2*)buf170, *(char2*)buf171);
+    *(char3*)buf172 = clamp(*(char3*)buf173, *(char3*)buf174, *(char3*)buf175);
+    *(char4*)buf176 = clamp(*(char4*)buf177, *(char4*)buf178, *(char4*)buf179);
+    *(uchar*)buf180 = clamp(*(uchar*)buf181, *(uchar*)buf182, *(uchar*)buf183);
+    *(uchar2*)buf184 = clamp(*(uchar2*)buf185, *(uchar2*)buf186, *(uchar2*)buf187);
+    *(uchar3*)buf188 = clamp(*(uchar3*)buf189, *(uchar3*)buf190, *(uchar3*)buf191);
+    *(uchar4*)buf192 = clamp(*(uchar4*)buf193, *(uchar4*)buf194, *(uchar4*)buf195);
+    *(short*)buf196 = clamp(*(short*)buf197, *(short*)buf198, *(short*)buf199);
+    *(short2*)buf200 = clamp(*(short2*)buf201, *(short2*)buf202, *(short2*)buf203);
+    *(short3*)buf204 = clamp(*(short3*)buf205, *(short3*)buf206, *(short3*)buf207);
+    *(short4*)buf208 = clamp(*(short4*)buf209, *(short4*)buf210, *(short4*)buf211);
+    *(ushort*)buf212 = clamp(*(ushort*)buf213, *(ushort*)buf214, *(ushort*)buf215);
+    *(ushort2*)buf216 = clamp(*(ushort2*)buf217, *(ushort2*)buf218, *(ushort2*)buf219);
+    *(ushort3*)buf220 = clamp(*(ushort3*)buf221, *(ushort3*)buf222, *(ushort3*)buf223);
+    *(ushort4*)buf224 = clamp(*(ushort4*)buf225, *(ushort4*)buf226, *(ushort4*)buf227);
+    *(int*)buf228 = clamp(*(int*)buf229, *(int*)buf230, *(int*)buf231);
+    *(int2*)buf232 = clamp(*(int2*)buf233, *(int2*)buf234, *(int2*)buf235);
+    *(int3*)buf236 = clamp(*(int3*)buf237, *(int3*)buf238, *(int3*)buf239);
+    *(int4*)buf240 = clamp(*(int4*)buf241, *(int4*)buf242, *(int4*)buf243);
+    *(uint*)buf244 = clamp(*(uint*)buf245, *(uint*)buf246, *(uint*)buf247);
+    *(uint2*)buf248 = clamp(*(uint2*)buf249, *(uint2*)buf250, *(uint2*)buf251);
+    *(uint3*)buf252 = clamp(*(uint3*)buf253, *(uint3*)buf254, *(uint3*)buf255);
+    *(uint4*)buf256 = clamp(*(uint4*)buf257, *(uint4*)buf258, *(uint4*)buf259);
+    *(long*)buf260 = clamp(*(long*)buf261, *(long*)buf262, *(long*)buf263);
+    *(long2*)buf264 = clamp(*(long2*)buf265, *(long2*)buf266, *(long2*)buf267);
+    *(long3*)buf268 = clamp(*(long3*)buf269, *(long3*)buf270, *(long3*)buf271);
+    *(long4*)buf272 = clamp(*(long4*)buf273, *(long4*)buf274, *(long4*)buf275);
+    *(ulong*)buf276 = clamp(*(ulong*)buf277, *(ulong*)buf278, *(ulong*)buf279);
+    *(ulong2*)buf280 = clamp(*(ulong2*)buf281, *(ulong2*)buf282, *(ulong2*)buf283);
+    *(ulong3*)buf284 = clamp(*(ulong3*)buf285, *(ulong3*)buf286, *(ulong3*)buf287);
+    *(ulong4*)buf288 = clamp(*(ulong4*)buf289, *(ulong4*)buf290, *(ulong4*)buf291);
+    *(char2*)buf292 = clamp(*(char2*)buf293, *(char*)buf294, *(char*)buf295);
+    *(char3*)buf296 = clamp(*(char3*)buf297, *(char*)buf298, *(char*)buf299);
+    *(char4*)buf300 = clamp(*(char4*)buf301, *(char*)buf302, *(char*)buf303);
+    *(uchar2*)buf304 = clamp(*(uchar2*)buf305, *(uchar*)buf306, *(uchar*)buf307);
+    *(uchar3*)buf308 = clamp(*(uchar3*)buf309, *(uchar*)buf310, *(uchar*)buf311);
+    *(uchar4*)buf312 = clamp(*(uchar4*)buf313, *(uchar*)buf314, *(uchar*)buf315);
+    *(short2*)buf316 = clamp(*(short2*)buf317, *(short*)buf318, *(short*)buf319);
+    *(short3*)buf320 = clamp(*(short3*)buf321, *(short*)buf322, *(short*)buf323);
+    *(short4*)buf324 = clamp(*(short4*)buf325, *(short*)buf326, *(short*)buf327);
+    *(ushort2*)buf328 = clamp(*(ushort2*)buf329, *(ushort*)buf330, *(ushort*)buf331);
+    *(ushort3*)buf332 = clamp(*(ushort3*)buf333, *(ushort*)buf334, *(ushort*)buf335);
+    *(ushort4*)buf336 = clamp(*(ushort4*)buf337, *(ushort*)buf338, *(ushort*)buf339);
+    *(int2*)buf340 = clamp(*(int2*)buf341, *(int*)buf342, *(int*)buf343);
+    *(int3*)buf344 = clamp(*(int3*)buf345, *(int*)buf346, *(int*)buf347);
+    *(int4*)buf348 = clamp(*(int4*)buf349, *(int*)buf350, *(int*)buf351);
+    *(uint2*)buf352 = clamp(*(uint2*)buf353, *(uint*)buf354, *(uint*)buf355);
+    *(uint3*)buf356 = clamp(*(uint3*)buf357, *(uint*)buf358, *(uint*)buf359);
+    *(uint4*)buf360 = clamp(*(uint4*)buf361, *(uint*)buf362, *(uint*)buf363);
+    *(long2*)buf364 = clamp(*(long2*)buf365, *(long*)buf366, *(long*)buf367);
+    *(long3*)buf368 = clamp(*(long3*)buf369, *(long*)buf370, *(long*)buf371);
+    *(long4*)buf372 = clamp(*(long4*)buf373, *(long*)buf374, *(long*)buf375);
+    *(ulong2*)buf376 = clamp(*(ulong2*)buf377, *(ulong*)buf378, *(ulong*)buf379);
+    *(ulong3*)buf380 = clamp(*(ulong3*)buf381, *(ulong*)buf382, *(ulong*)buf383);
+    *(ulong4*)buf384 = clamp(*(ulong4*)buf385, *(ulong*)buf386, *(ulong*)buf387);
+    *(char*)buf388 = clz(*(char*)buf389);
+    *(char2*)buf390 = clz(*(char2*)buf391);
+    *(char3*)buf392 = clz(*(char3*)buf393);
+    *(char4*)buf394 = clz(*(char4*)buf395);
+    *(uchar*)buf396 = clz(*(uchar*)buf397);
+    *(uchar2*)buf398 = clz(*(uchar2*)buf399);
+    *(uchar3*)buf400 = clz(*(uchar3*)buf401);
+    *(uchar4*)buf402 = clz(*(uchar4*)buf403);
+    *(short*)buf404 = clz(*(short*)buf405);
+    *(short2*)buf406 = clz(*(short2*)buf407);
+    *(short3*)buf408 = clz(*(short3*)buf409);
+    *(short4*)buf410 = clz(*(short4*)buf411);
+    *(ushort*)buf412 = clz(*(ushort*)buf413);
+    *(ushort2*)buf414 = clz(*(ushort2*)buf415);
+    *(ushort3*)buf416 = clz(*(ushort3*)buf417);
+    *(ushort4*)buf418 = clz(*(ushort4*)buf419);
+    *(int*)buf420 = clz(*(int*)buf421);
+    *(int2*)buf422 = clz(*(int2*)buf423);
+    *(int3*)buf424 = clz(*(int3*)buf425);
+    *(int4*)buf426 = clz(*(int4*)buf427);
+    *(uint*)buf428 = clz(*(uint*)buf429);
+    *(uint2*)buf430 = clz(*(uint2*)buf431);
+    *(uint3*)buf432 = clz(*(uint3*)buf433);
+    *(uint4*)buf434 = clz(*(uint4*)buf435);
+    *(float2*)buf436 = convert_float2(*(float2*)buf437);
+    *(float3*)buf438 = convert_float3(*(float3*)buf439);
+    *(float4*)buf440 = convert_float4(*(float4*)buf441);
+    *(float2*)buf442 = convert_float2(*(char2*)buf443);
+    *(float3*)buf444 = convert_float3(*(char3*)buf445);
+    *(float4*)buf446 = convert_float4(*(char4*)buf447);
+    *(float2*)buf448 = convert_float2(*(uchar2*)buf449);
+    *(float3*)buf450 = convert_float3(*(uchar3*)buf451);
+    *(float4*)buf452 = convert_float4(*(uchar4*)buf453);
+    *(float2*)buf454 = convert_float2(*(short2*)buf455);
+    *(float3*)buf456 = convert_float3(*(short3*)buf457);
+    *(float4*)buf458 = convert_float4(*(short4*)buf459);
+    *(float2*)buf460 = convert_float2(*(ushort2*)buf461);
+    *(float3*)buf462 = convert_float3(*(ushort3*)buf463);
+    *(float4*)buf464 = convert_float4(*(ushort4*)buf465);
+    *(float2*)buf466 = convert_float2(*(int2*)buf467);
+    *(float3*)buf468 = convert_float3(*(int3*)buf469);
+    *(float4*)buf470 = convert_float4(*(int4*)buf471);
+    *(float2*)buf472 = convert_float2(*(uint2*)buf473);
+    *(float3*)buf474 = convert_float3(*(uint3*)buf475);
+    *(float4*)buf476 = convert_float4(*(uint4*)buf477);
+    *(char2*)buf478 = convert_char2(*(float2*)buf479);
+    *(char3*)buf480 = convert_char3(*(float3*)buf481);
+    *(char4*)buf482 = convert_char4(*(float4*)buf483);
+    *(char2*)buf484 = convert_char2(*(char2*)buf485);
+    *(char3*)buf486 = convert_char3(*(char3*)buf487);
+    *(char4*)buf488 = convert_char4(*(char4*)buf489);
+    *(char2*)buf490 = convert_char2(*(uchar2*)buf491);
+    *(char3*)buf492 = convert_char3(*(uchar3*)buf493);
+    *(char4*)buf494 = convert_char4(*(uchar4*)buf495);
+    *(char2*)buf496 = convert_char2(*(short2*)buf497);
+    *(char3*)buf498 = convert_char3(*(short3*)buf499);
+    *(char4*)buf500 = convert_char4(*(short4*)buf501);
+    *(char2*)buf502 = convert_char2(*(ushort2*)buf503);
+    *(char3*)buf504 = convert_char3(*(ushort3*)buf505);
+    *(char4*)buf506 = convert_char4(*(ushort4*)buf507);
+    *(char2*)buf508 = convert_char2(*(int2*)buf509);
+    *(char3*)buf510 = convert_char3(*(int3*)buf511);
+    *(char4*)buf512 = convert_char4(*(int4*)buf513);
+    *(char2*)buf514 = convert_char2(*(uint2*)buf515);
+    *(char3*)buf516 = convert_char3(*(uint3*)buf517);
+    *(char4*)buf518 = convert_char4(*(uint4*)buf519);
+    *(uchar2*)buf520 = convert_uchar2(*(float2*)buf521);
+    *(uchar3*)buf522 = convert_uchar3(*(float3*)buf523);
+    *(uchar4*)buf524 = convert_uchar4(*(float4*)buf525);
+    *(uchar2*)buf526 = convert_uchar2(*(char2*)buf527);
+    *(uchar3*)buf528 = convert_uchar3(*(char3*)buf529);
+    *(uchar4*)buf530 = convert_uchar4(*(char4*)buf531);
+    *(uchar2*)buf532 = convert_uchar2(*(uchar2*)buf533);
+    *(uchar3*)buf534 = convert_uchar3(*(uchar3*)buf535);
+    *(uchar4*)buf536 = convert_uchar4(*(uchar4*)buf537);
+    *(uchar2*)buf538 = convert_uchar2(*(short2*)buf539);
+    *(uchar3*)buf540 = convert_uchar3(*(short3*)buf541);
+    *(uchar4*)buf542 = convert_uchar4(*(short4*)buf543);
+    *(uchar2*)buf544 = convert_uchar2(*(ushort2*)buf545);
+    *(uchar3*)buf546 = convert_uchar3(*(ushort3*)buf547);
+    *(uchar4*)buf548 = convert_uchar4(*(ushort4*)buf549);
+    *(uchar2*)buf550 = convert_uchar2(*(int2*)buf551);
+    *(uchar3*)buf552 = convert_uchar3(*(int3*)buf553);
+    *(uchar4*)buf554 = convert_uchar4(*(int4*)buf555);
+    *(uchar2*)buf556 = convert_uchar2(*(uint2*)buf557);
+    *(uchar3*)buf558 = convert_uchar3(*(uint3*)buf559);
+    *(uchar4*)buf560 = convert_uchar4(*(uint4*)buf561);
+    *(short2*)buf562 = convert_short2(*(float2*)buf563);
+    *(short3*)buf564 = convert_short3(*(float3*)buf565);
+    *(short4*)buf566 = convert_short4(*(float4*)buf567);
+    *(short2*)buf568 = convert_short2(*(char2*)buf569);
+    *(short3*)buf570 = convert_short3(*(char3*)buf571);
+    *(short4*)buf572 = convert_short4(*(char4*)buf573);
+    *(short2*)buf574 = convert_short2(*(uchar2*)buf575);
+    *(short3*)buf576 = convert_short3(*(uchar3*)buf577);
+    *(short4*)buf578 = convert_short4(*(uchar4*)buf579);
+    *(short2*)buf580 = convert_short2(*(short2*)buf581);
+    *(short3*)buf582 = convert_short3(*(short3*)buf583);
+    *(short4*)buf584 = convert_short4(*(short4*)buf585);
+    *(short2*)buf586 = convert_short2(*(ushort2*)buf587);
+    *(short3*)buf588 = convert_short3(*(ushort3*)buf589);
+    *(short4*)buf590 = convert_short4(*(ushort4*)buf591);
+    *(short2*)buf592 = convert_short2(*(int2*)buf593);
+    *(short3*)buf594 = convert_short3(*(int3*)buf595);
+    *(short4*)buf596 = convert_short4(*(int4*)buf597);
+    *(short2*)buf598 = convert_short2(*(uint2*)buf599);
+    *(short3*)buf600 = convert_short3(*(uint3*)buf601);
+    *(short4*)buf602 = convert_short4(*(uint4*)buf603);
+    *(ushort2*)buf604 = convert_ushort2(*(float2*)buf605);
+    *(ushort3*)buf606 = convert_ushort3(*(float3*)buf607);
+    *(ushort4*)buf608 = convert_ushort4(*(float4*)buf609);
+    *(ushort2*)buf610 = convert_ushort2(*(char2*)buf611);
+    *(ushort3*)buf612 = convert_ushort3(*(char3*)buf613);
+    *(ushort4*)buf614 = convert_ushort4(*(char4*)buf615);
+    *(ushort2*)buf616 = convert_ushort2(*(uchar2*)buf617);
+    *(ushort3*)buf618 = convert_ushort3(*(uchar3*)buf619);
+    *(ushort4*)buf620 = convert_ushort4(*(uchar4*)buf621);
+    *(ushort2*)buf622 = convert_ushort2(*(short2*)buf623);
+    *(ushort3*)buf624 = convert_ushort3(*(short3*)buf625);
+    *(ushort4*)buf626 = convert_ushort4(*(short4*)buf627);
+    *(ushort2*)buf628 = convert_ushort2(*(ushort2*)buf629);
+    *(ushort3*)buf630 = convert_ushort3(*(ushort3*)buf631);
+    *(ushort4*)buf632 = convert_ushort4(*(ushort4*)buf633);
+    *(ushort2*)buf634 = convert_ushort2(*(int2*)buf635);
+    *(ushort3*)buf636 = convert_ushort3(*(int3*)buf637);
+    *(ushort4*)buf638 = convert_ushort4(*(int4*)buf639);
+    *(ushort2*)buf640 = convert_ushort2(*(uint2*)buf641);
+    *(ushort3*)buf642 = convert_ushort3(*(uint3*)buf643);
+    *(ushort4*)buf644 = convert_ushort4(*(uint4*)buf645);
+    *(int2*)buf646 = convert_int2(*(float2*)buf647);
+    *(int3*)buf648 = convert_int3(*(float3*)buf649);
+    *(int4*)buf650 = convert_int4(*(float4*)buf651);
+    *(int2*)buf652 = convert_int2(*(char2*)buf653);
+    *(int3*)buf654 = convert_int3(*(char3*)buf655);
+    *(int4*)buf656 = convert_int4(*(char4*)buf657);
+    *(int2*)buf658 = convert_int2(*(uchar2*)buf659);
+    *(int3*)buf660 = convert_int3(*(uchar3*)buf661);
+    *(int4*)buf662 = convert_int4(*(uchar4*)buf663);
+    *(int2*)buf664 = convert_int2(*(short2*)buf665);
+    *(int3*)buf666 = convert_int3(*(short3*)buf667);
+    *(int4*)buf668 = convert_int4(*(short4*)buf669);
+    *(int2*)buf670 = convert_int2(*(ushort2*)buf671);
+    *(int3*)buf672 = convert_int3(*(ushort3*)buf673);
+    *(int4*)buf674 = convert_int4(*(ushort4*)buf675);
+    *(int2*)buf676 = convert_int2(*(int2*)buf677);
+    *(int3*)buf678 = convert_int3(*(int3*)buf679);
+    *(int4*)buf680 = convert_int4(*(int4*)buf681);
+    *(int2*)buf682 = convert_int2(*(uint2*)buf683);
+    *(int3*)buf684 = convert_int3(*(uint3*)buf685);
+    *(int4*)buf686 = convert_int4(*(uint4*)buf687);
+    *(uint2*)buf688 = convert_uint2(*(float2*)buf689);
+    *(uint3*)buf690 = convert_uint3(*(float3*)buf691);
+    *(uint4*)buf692 = convert_uint4(*(float4*)buf693);
+    *(uint2*)buf694 = convert_uint2(*(char2*)buf695);
+    *(uint3*)buf696 = convert_uint3(*(char3*)buf697);
+    *(uint4*)buf698 = convert_uint4(*(char4*)buf699);
+    *(uint2*)buf700 = convert_uint2(*(uchar2*)buf701);
+    *(uint3*)buf702 = convert_uint3(*(uchar3*)buf703);
+    *(uint4*)buf704 = convert_uint4(*(uchar4*)buf705);
+    *(uint2*)buf706 = convert_uint2(*(short2*)buf707);
+    *(uint3*)buf708 = convert_uint3(*(short3*)buf709);
+    *(uint4*)buf710 = convert_uint4(*(short4*)buf711);
+    *(uint2*)buf712 = convert_uint2(*(ushort2*)buf713);
+    *(uint3*)buf714 = convert_uint3(*(ushort3*)buf715);
+    *(uint4*)buf716 = convert_uint4(*(ushort4*)buf717);
+    *(uint2*)buf718 = convert_uint2(*(int2*)buf719);
+    *(uint3*)buf720 = convert_uint3(*(int3*)buf721);
+    *(uint4*)buf722 = convert_uint4(*(int4*)buf723);
+    *(uint2*)buf724 = convert_uint2(*(uint2*)buf725);
+    *(uint3*)buf726 = convert_uint3(*(uint3*)buf727);
+    *(uint4*)buf728 = convert_uint4(*(uint4*)buf729);
+    *(double2*)buf730 = convert_double2(*(double2*)buf731);
+    *(double3*)buf732 = convert_double3(*(double3*)buf733);
+    *(double4*)buf734 = convert_double4(*(double4*)buf735);
+    *(double2*)buf736 = convert_double2(*(long2*)buf737);
+    *(double3*)buf738 = convert_double3(*(long3*)buf739);
+    *(double4*)buf740 = convert_double4(*(long4*)buf741);
+    *(double2*)buf742 = convert_double2(*(ulong2*)buf743);
+    *(double3*)buf744 = convert_double3(*(ulong3*)buf745);
+    *(double4*)buf746 = convert_double4(*(ulong4*)buf747);
+    *(long2*)buf748 = convert_long2(*(double2*)buf749);
+    *(long3*)buf750 = convert_long3(*(double3*)buf751);
+    *(long4*)buf752 = convert_long4(*(double4*)buf753);
+    *(long2*)buf754 = convert_long2(*(long2*)buf755);
+    *(long3*)buf756 = convert_long3(*(long3*)buf757);
+    *(long4*)buf758 = convert_long4(*(long4*)buf759);
+    *(long2*)buf760 = convert_long2(*(ulong2*)buf761);
+    *(long3*)buf762 = convert_long3(*(ulong3*)buf763);
+    *(long4*)buf764 = convert_long4(*(ulong4*)buf765);
+    *(ulong2*)buf766 = convert_ulong2(*(double2*)buf767);
+    *(ulong3*)buf768 = convert_ulong3(*(double3*)buf769);
+    *(ulong4*)buf770 = convert_ulong4(*(double4*)buf771);
+    *(ulong2*)buf772 = convert_ulong2(*(long2*)buf773);
+    *(ulong3*)buf774 = convert_ulong3(*(long3*)buf775);
+    *(ulong4*)buf776 = convert_ulong4(*(long4*)buf777);
+    *(ulong2*)buf778 = convert_ulong2(*(ulong2*)buf779);
+    *(ulong3*)buf780 = convert_ulong3(*(ulong3*)buf781);
+    *(ulong4*)buf782 = convert_ulong4(*(ulong4*)buf783);
+    *(float2*)buf784 = convert_float2(*(double2*)buf785);
+    *(float3*)buf786 = convert_float3(*(double3*)buf787);
+    *(float4*)buf788 = convert_float4(*(double4*)buf789);
+    *(float2*)buf790 = convert_float2(*(long2*)buf791);
+    *(float3*)buf792 = convert_float3(*(long3*)buf793);
+    *(float4*)buf794 = convert_float4(*(long4*)buf795);
+    *(float2*)buf796 = convert_float2(*(ulong2*)buf797);
+    *(float3*)buf798 = convert_float3(*(ulong3*)buf799);
+    *(float4*)buf800 = convert_float4(*(ulong4*)buf801);
+    *(char2*)buf802 = convert_char2(*(double2*)buf803);
+    *(char3*)buf804 = convert_char3(*(double3*)buf805);
+    *(char4*)buf806 = convert_char4(*(double4*)buf807);
+    *(char2*)buf808 = convert_char2(*(long2*)buf809);
+    *(char3*)buf810 = convert_char3(*(long3*)buf811);
+    *(char4*)buf812 = convert_char4(*(long4*)buf813);
+    *(char2*)buf814 = convert_char2(*(ulong2*)buf815);
+    *(char3*)buf816 = convert_char3(*(ulong3*)buf817);
+    *(char4*)buf818 = convert_char4(*(ulong4*)buf819);
+    *(uchar2*)buf820 = convert_uchar2(*(double2*)buf821);
+    *(uchar3*)buf822 = convert_uchar3(*(double3*)buf823);
+    *(uchar4*)buf824 = convert_uchar4(*(double4*)buf825);
+    *(uchar2*)buf826 = convert_uchar2(*(long2*)buf827);
+    *(uchar3*)buf828 = convert_uchar3(*(long3*)buf829);
+    *(uchar4*)buf830 = convert_uchar4(*(long4*)buf831);
+    *(uchar2*)buf832 = convert_uchar2(*(ulong2*)buf833);
+    *(uchar3*)buf834 = convert_uchar3(*(ulong3*)buf835);
+    *(uchar4*)buf836 = convert_uchar4(*(ulong4*)buf837);
+    *(short2*)buf838 = convert_short2(*(double2*)buf839);
+    *(short3*)buf840 = convert_short3(*(double3*)buf841);
+    *(short4*)buf842 = convert_short4(*(double4*)buf843);
+    *(short2*)buf844 = convert_short2(*(long2*)buf845);
+    *(short3*)buf846 = convert_short3(*(long3*)buf847);
+    *(short4*)buf848 = convert_short4(*(long4*)buf849);
+    *(short2*)buf850 = convert_short2(*(ulong2*)buf851);
+    *(short3*)buf852 = convert_short3(*(ulong3*)buf853);
+    *(short4*)buf854 = convert_short4(*(ulong4*)buf855);
+    *(ushort2*)buf856 = convert_ushort2(*(double2*)buf857);
+    *(ushort3*)buf858 = convert_ushort3(*(double3*)buf859);
+    *(ushort4*)buf860 = convert_ushort4(*(double4*)buf861);
+    *(ushort2*)buf862 = convert_ushort2(*(long2*)buf863);
+    *(ushort3*)buf864 = convert_ushort3(*(long3*)buf865);
+    *(ushort4*)buf866 = convert_ushort4(*(long4*)buf867);
+    *(ushort2*)buf868 = convert_ushort2(*(ulong2*)buf869);
+    *(ushort3*)buf870 = convert_ushort3(*(ulong3*)buf871);
+    *(ushort4*)buf872 = convert_ushort4(*(ulong4*)buf873);
+    *(int2*)buf874 = convert_int2(*(double2*)buf875);
+    *(int3*)buf876 = convert_int3(*(double3*)buf877);
+    *(int4*)buf878 = convert_int4(*(double4*)buf879);
+    *(int2*)buf880 = convert_int2(*(long2*)buf881);
+    *(int3*)buf882 = convert_int3(*(long3*)buf883);
+    *(int4*)buf884 = convert_int4(*(long4*)buf885);
+    *(int2*)buf886 = convert_int2(*(ulong2*)buf887);
+    *(int3*)buf888 = convert_int3(*(ulong3*)buf889);
+    *(int4*)buf890 = convert_int4(*(ulong4*)buf891);
+    *(uint2*)buf892 = convert_uint2(*(double2*)buf893);
+    *(uint3*)buf894 = convert_uint3(*(double3*)buf895);
+    *(uint4*)buf896 = convert_uint4(*(double4*)buf897);
+    *(uint2*)buf898 = convert_uint2(*(long2*)buf899);
+    *(uint3*)buf900 = convert_uint3(*(long3*)buf901);
+    *(uint4*)buf902 = convert_uint4(*(long4*)buf903);
+    *(uint2*)buf904 = convert_uint2(*(ulong2*)buf905);
+    *(uint3*)buf906 = convert_uint3(*(ulong3*)buf907);
+    *(uint4*)buf908 = convert_uint4(*(ulong4*)buf909);
+    *(double2*)buf910 = convert_double2(*(float2*)buf911);
+    *(double3*)buf912 = convert_double3(*(float3*)buf913);
+    *(double4*)buf914 = convert_double4(*(float4*)buf915);
+    *(double2*)buf916 = convert_double2(*(char2*)buf917);
+    *(double3*)buf918 = convert_double3(*(char3*)buf919);
+    *(double4*)buf920 = convert_double4(*(char4*)buf921);
+    *(double2*)buf922 = convert_double2(*(uchar2*)buf923);
+    *(double3*)buf924 = convert_double3(*(uchar3*)buf925);
+    *(double4*)buf926 = convert_double4(*(uchar4*)buf927);
+    *(double2*)buf928 = convert_double2(*(short2*)buf929);
+    *(double3*)buf930 = convert_double3(*(short3*)buf931);
+    *(double4*)buf932 = convert_double4(*(short4*)buf933);
+    *(double2*)buf934 = convert_double2(*(ushort2*)buf935);
+    *(double3*)buf936 = convert_double3(*(ushort3*)buf937);
+    *(double4*)buf938 = convert_double4(*(ushort4*)buf939);
+    *(double2*)buf940 = convert_double2(*(int2*)buf941);
+    *(double3*)buf942 = convert_double3(*(int3*)buf943);
+    *(double4*)buf944 = convert_double4(*(int4*)buf945);
+    *(double2*)buf946 = convert_double2(*(uint2*)buf947);
+    *(double3*)buf948 = convert_double3(*(uint3*)buf949);
+    *(double4*)buf950 = convert_double4(*(uint4*)buf951);
+    *(long2*)buf952 = convert_long2(*(float2*)buf953);
+    *(long3*)buf954 = convert_long3(*(float3*)buf955);
+    *(long4*)buf956 = convert_long4(*(float4*)buf957);
+    *(long2*)buf958 = convert_long2(*(char2*)buf959);
+    *(long3*)buf960 = convert_long3(*(char3*)buf961);
+    *(long4*)buf962 = convert_long4(*(char4*)buf963);
+    *(long2*)buf964 = convert_long2(*(uchar2*)buf965);
+    *(long3*)buf966 = convert_long3(*(uchar3*)buf967);
+    *(long4*)buf968 = convert_long4(*(uchar4*)buf969);
+    *(long2*)buf970 = convert_long2(*(short2*)buf971);
+    *(long3*)buf972 = convert_long3(*(short3*)buf973);
+    *(long4*)buf974 = convert_long4(*(short4*)buf975);
+    *(long2*)buf976 = convert_long2(*(ushort2*)buf977);
+    *(long3*)buf978 = convert_long3(*(ushort3*)buf979);
+    *(long4*)buf980 = convert_long4(*(ushort4*)buf981);
+    *(long2*)buf982 = convert_long2(*(int2*)buf983);
+    *(long3*)buf984 = convert_long3(*(int3*)buf985);
+    *(long4*)buf986 = convert_long4(*(int4*)buf987);
+    *(long2*)buf988 = convert_long2(*(uint2*)buf989);
+    *(long3*)buf990 = convert_long3(*(uint3*)buf991);
+    *(long4*)buf992 = convert_long4(*(uint4*)buf993);
+    *(ulong2*)buf994 = convert_ulong2(*(float2*)buf995);
+    *(ulong3*)buf996 = convert_ulong3(*(float3*)buf997);
+    *(ulong4*)buf998 = convert_ulong4(*(float4*)buf999);
+    *(ulong2*)buf1000 = convert_ulong2(*(char2*)buf1001);
+    *(ulong3*)buf1002 = convert_ulong3(*(char3*)buf1003);
+    *(ulong4*)buf1004 = convert_ulong4(*(char4*)buf1005);
+    *(ulong2*)buf1006 = convert_ulong2(*(uchar2*)buf1007);
+    *(ulong3*)buf1008 = convert_ulong3(*(uchar3*)buf1009);
+    *(ulong4*)buf1010 = convert_ulong4(*(uchar4*)buf1011);
+    *(ulong2*)buf1012 = convert_ulong2(*(short2*)buf1013);
+    *(ulong3*)buf1014 = convert_ulong3(*(short3*)buf1015);
+    *(ulong4*)buf1016 = convert_ulong4(*(short4*)buf1017);
+    *(ulong2*)buf1018 = convert_ulong2(*(ushort2*)buf1019);
+    *(ulong3*)buf1020 = convert_ulong3(*(ushort3*)buf1021);
+    *(ulong4*)buf1022 = convert_ulong4(*(ushort4*)buf1023);
+    *(ulong2*)buf1024 = convert_ulong2(*(int2*)buf1025);
+    *(ulong3*)buf1026 = convert_ulong3(*(int3*)buf1027);
+    *(ulong4*)buf1028 = convert_ulong4(*(int4*)buf1029);
+    *(ulong2*)buf1030 = convert_ulong2(*(uint2*)buf1031);
+    *(ulong3*)buf1032 = convert_ulong3(*(uint3*)buf1033);
+    *(ulong4*)buf1034 = convert_ulong4(*(uint4*)buf1035);
+    *(float*)buf1036 = copysign(*(float*)buf1037, *(float*)buf1038);
+    *(float2*)buf1039 = copysign(*(float2*)buf1040, *(float2*)buf1041);
+    *(float3*)buf1042 = copysign(*(float3*)buf1043, *(float3*)buf1044);
+    *(float4*)buf1045 = copysign(*(float4*)buf1046, *(float4*)buf1047);
+    *(float*)buf1048 = cos(*(float*)buf1049);
+    *(float2*)buf1050 = cos(*(float2*)buf1051);
+    *(float3*)buf1052 = cos(*(float3*)buf1053);
+    *(float4*)buf1054 = cos(*(float4*)buf1055);
+    *(float*)buf1056 = cosh(*(float*)buf1057);
+    *(float2*)buf1058 = cosh(*(float2*)buf1059);
+    *(float3*)buf1060 = cosh(*(float3*)buf1061);
+    *(float4*)buf1062 = cosh(*(float4*)buf1063);
+    *(float*)buf1064 = cospi(*(float*)buf1065);
+    *(float2*)buf1066 = cospi(*(float2*)buf1067);
+    *(float3*)buf1068 = cospi(*(float3*)buf1069);
+    *(float4*)buf1070 = cospi(*(float4*)buf1071);
+    *(float3*)buf1072 = cross(*(float3*)buf1073, *(float3*)buf1074);
+    *(float4*)buf1075 = cross(*(float4*)buf1076, *(float4*)buf1077);
+    *(float*)buf1078 = degrees(*(float*)buf1079);
+    *(float2*)buf1080 = degrees(*(float2*)buf1081);
+    *(float3*)buf1082 = degrees(*(float3*)buf1083);
+    *(float4*)buf1084 = degrees(*(float4*)buf1085);
+    *(float*)buf1086 = distance(*(float*)buf1087, *(float*)buf1088);
+    *(float*)buf1089 = distance(*(float2*)buf1090, *(float2*)buf1091);
+    *(float*)buf1092 = distance(*(float3*)buf1093, *(float3*)buf1094);
+    *(float*)buf1095 = distance(*(float4*)buf1096, *(float4*)buf1097);
+    *(float*)buf1098 = dot(*(float*)buf1099, *(float*)buf1100);
+    *(float*)buf1101 = dot(*(float2*)buf1102, *(float2*)buf1103);
+    *(float*)buf1104 = dot(*(float3*)buf1105, *(float3*)buf1106);
+    *(float*)buf1107 = dot(*(float4*)buf1108, *(float4*)buf1109);
+    *(float*)buf1110 = erf(*(float*)buf1111);
+    *(float2*)buf1112 = erf(*(float2*)buf1113);
+    *(float3*)buf1114 = erf(*(float3*)buf1115);
+    *(float4*)buf1116 = erf(*(float4*)buf1117);
+    *(float*)buf1118 = erfc(*(float*)buf1119);
+    *(float2*)buf1120 = erfc(*(float2*)buf1121);
+    *(float3*)buf1122 = erfc(*(float3*)buf1123);
+    *(float4*)buf1124 = erfc(*(float4*)buf1125);
+    *(float*)buf1126 = exp(*(float*)buf1127);
+    *(float2*)buf1128 = exp(*(float2*)buf1129);
+    *(float3*)buf1130 = exp(*(float3*)buf1131);
+    *(float4*)buf1132 = exp(*(float4*)buf1133);
+    *(float*)buf1134 = exp10(*(float*)buf1135);
+    *(float2*)buf1136 = exp10(*(float2*)buf1137);
+    *(float3*)buf1138 = exp10(*(float3*)buf1139);
+    *(float4*)buf1140 = exp10(*(float4*)buf1141);
+    *(float*)buf1142 = exp2(*(float*)buf1143);
+    *(float2*)buf1144 = exp2(*(float2*)buf1145);
+    *(float3*)buf1146 = exp2(*(float3*)buf1147);
+    *(float4*)buf1148 = exp2(*(float4*)buf1149);
+    *(float*)buf1150 = expm1(*(float*)buf1151);
+    *(float2*)buf1152 = expm1(*(float2*)buf1153);
+    *(float3*)buf1154 = expm1(*(float3*)buf1155);
+    *(float4*)buf1156 = expm1(*(float4*)buf1157);
+    *(float*)buf1158 = fabs(*(float*)buf1159);
+    *(float2*)buf1160 = fabs(*(float2*)buf1161);
+    *(float3*)buf1162 = fabs(*(float3*)buf1163);
+    *(float4*)buf1164 = fabs(*(float4*)buf1165);
+    *(float*)buf1166 = fast_distance(*(float*)buf1167, *(float*)buf1168);
+    *(float*)buf1169 = fast_distance(*(float2*)buf1170, *(float2*)buf1171);
+    *(float*)buf1172 = fast_distance(*(float3*)buf1173, *(float3*)buf1174);
+    *(float*)buf1175 = fast_distance(*(float4*)buf1176, *(float4*)buf1177);
+    *(float*)buf1178 = fast_length(*(float*)buf1179);
+    *(float*)buf1180 = fast_length(*(float2*)buf1181);
+    *(float*)buf1182 = fast_length(*(float3*)buf1183);
+    *(float*)buf1184 = fast_length(*(float4*)buf1185);
+    *(float*)buf1186 = fast_normalize(*(float*)buf1187);
+    *(float2*)buf1188 = fast_normalize(*(float2*)buf1189);
+    *(float3*)buf1190 = fast_normalize(*(float3*)buf1191);
+    *(float4*)buf1192 = fast_normalize(*(float4*)buf1193);
+    *(float*)buf1194 = fdim(*(float*)buf1195, *(float*)buf1196);
+    *(float2*)buf1197 = fdim(*(float2*)buf1198, *(float2*)buf1199);
+    *(float3*)buf1200 = fdim(*(float3*)buf1201, *(float3*)buf1202);
+    *(float4*)buf1203 = fdim(*(float4*)buf1204, *(float4*)buf1205);
+    *(float*)buf1206 = floor(*(float*)buf1207);
+    *(float2*)buf1208 = floor(*(float2*)buf1209);
+    *(float3*)buf1210 = floor(*(float3*)buf1211);
+    *(float4*)buf1212 = floor(*(float4*)buf1213);
+    *(float*)buf1214 = fma(*(float*)buf1215, *(float*)buf1216, *(float*)buf1217);
+    *(float2*)buf1218 = fma(*(float2*)buf1219, *(float2*)buf1220, *(float2*)buf1221);
+    *(float3*)buf1222 = fma(*(float3*)buf1223, *(float3*)buf1224, *(float3*)buf1225);
+    *(float4*)buf1226 = fma(*(float4*)buf1227, *(float4*)buf1228, *(float4*)buf1229);
+    *(float*)buf1230 = fmax(*(float*)buf1231, *(float*)buf1232);
+    *(float2*)buf1233 = fmax(*(float2*)buf1234, *(float2*)buf1235);
+    *(float3*)buf1236 = fmax(*(float3*)buf1237, *(float3*)buf1238);
+    *(float4*)buf1239 = fmax(*(float4*)buf1240, *(float4*)buf1241);
+    *(float2*)buf1242 = fmax(*(float2*)buf1243, *(float*)buf1244);
+    *(float3*)buf1245 = fmax(*(float3*)buf1246, *(float*)buf1247);
+    *(float4*)buf1248 = fmax(*(float4*)buf1249, *(float*)buf1250);
+    *(float*)buf1251 = fmin(*(float*)buf1252, *(float*)buf1253);
+    *(float2*)buf1254 = fmin(*(float2*)buf1255, *(float2*)buf1256);
+    *(float3*)buf1257 = fmin(*(float3*)buf1258, *(float3*)buf1259);
+    *(float4*)buf1260 = fmin(*(float4*)buf1261, *(float4*)buf1262);
+    *(float2*)buf1263 = fmin(*(float2*)buf1264, *(float*)buf1265);
+    *(float3*)buf1266 = fmin(*(float3*)buf1267, *(float*)buf1268);
+    *(float4*)buf1269 = fmin(*(float4*)buf1270, *(float*)buf1271);
+    *(float*)buf1272 = fmod(*(float*)buf1273, *(float*)buf1274);
+    *(float2*)buf1275 = fmod(*(float2*)buf1276, *(float2*)buf1277);
+    *(float3*)buf1278 = fmod(*(float3*)buf1279, *(float3*)buf1280);
+    *(float4*)buf1281 = fmod(*(float4*)buf1282, *(float4*)buf1283);
+    *(float*)buf1284 = fract(*(float*)buf1285, (float*) buf1286);
+    *(float2*)buf1287 = fract(*(float2*)buf1288, (float2*) buf1289);
+    *(float3*)buf1290 = fract(*(float3*)buf1291, (float3*) buf1292);
+    *(float4*)buf1293 = fract(*(float4*)buf1294, (float4*) buf1295);
+    *(float*)buf1296 = fract(*(float*)buf1297);
+    *(float2*)buf1298 = fract(*(float2*)buf1299);
+    *(float3*)buf1300 = fract(*(float3*)buf1301);
+    *(float4*)buf1302 = fract(*(float4*)buf1303);
+    *(float*)buf1304 = frexp(*(float*)buf1305, (int*) buf1306);
+    *(float2*)buf1307 = frexp(*(float2*)buf1308, (int2*) buf1309);
+    *(float3*)buf1310 = frexp(*(float3*)buf1311, (int3*) buf1312);
+    *(float4*)buf1313 = frexp(*(float4*)buf1314, (int4*) buf1315);
+    *(float*)buf1316 = half_recip(*(float*)buf1317);
+    *(float2*)buf1318 = half_recip(*(float2*)buf1319);
+    *(float3*)buf1320 = half_recip(*(float3*)buf1321);
+    *(float4*)buf1322 = half_recip(*(float4*)buf1323);
+    *(float*)buf1324 = half_rsqrt(*(float*)buf1325);
+    *(float2*)buf1326 = half_rsqrt(*(float2*)buf1327);
+    *(float3*)buf1328 = half_rsqrt(*(float3*)buf1329);
+    *(float4*)buf1330 = half_rsqrt(*(float4*)buf1331);
+    *(float*)buf1332 = half_sqrt(*(float*)buf1333);
+    *(float2*)buf1334 = half_sqrt(*(float2*)buf1335);
+    *(float3*)buf1336 = half_sqrt(*(float3*)buf1337);
+    *(float4*)buf1338 = half_sqrt(*(float4*)buf1339);
+    *(float*)buf1340 = hypot(*(float*)buf1341, *(float*)buf1342);
+    *(float2*)buf1343 = hypot(*(float2*)buf1344, *(float2*)buf1345);
+    *(float3*)buf1346 = hypot(*(float3*)buf1347, *(float3*)buf1348);
+    *(float4*)buf1349 = hypot(*(float4*)buf1350, *(float4*)buf1351);
+    *(int*)buf1352 = ilogb(*(float*)buf1353);
+    *(int2*)buf1354 = ilogb(*(float2*)buf1355);
+    *(int3*)buf1356 = ilogb(*(float3*)buf1357);
+    *(int4*)buf1358 = ilogb(*(float4*)buf1359);
+    *(float*)buf1360 = ldexp(*(float*)buf1361, *(int*)buf1362);
+    *(float2*)buf1363 = ldexp(*(float2*)buf1364, *(int2*)buf1365);
+    *(float3*)buf1366 = ldexp(*(float3*)buf1367, *(int3*)buf1368);
+    *(float4*)buf1369 = ldexp(*(float4*)buf1370, *(int4*)buf1371);
+    *(float2*)buf1372 = ldexp(*(float2*)buf1373, *(int*)buf1374);
+    *(float3*)buf1375 = ldexp(*(float3*)buf1376, *(int*)buf1377);
+    *(float4*)buf1378 = ldexp(*(float4*)buf1379, *(int*)buf1380);
+    *(float*)buf1381 = length(*(float*)buf1382);
+    *(float*)buf1383 = length(*(float2*)buf1384);
+    *(float*)buf1385 = length(*(float3*)buf1386);
+    *(float*)buf1387 = length(*(float4*)buf1388);
+    *(float*)buf1389 = lgamma(*(float*)buf1390);
+    *(float2*)buf1391 = lgamma(*(float2*)buf1392);
+    *(float3*)buf1393 = lgamma(*(float3*)buf1394);
+    *(float4*)buf1395 = lgamma(*(float4*)buf1396);
+    *(float*)buf1397 = lgamma(*(float*)buf1398, (int*) buf1399);
+    *(float2*)buf1400 = lgamma(*(float2*)buf1401, (int2*) buf1402);
+    *(float3*)buf1403 = lgamma(*(float3*)buf1404, (int3*) buf1405);
+    *(float4*)buf1406 = lgamma(*(float4*)buf1407, (int4*) buf1408);
+    *(float*)buf1409 = log(*(float*)buf1410);
+    *(float2*)buf1411 = log(*(float2*)buf1412);
+    *(float3*)buf1413 = log(*(float3*)buf1414);
+    *(float4*)buf1415 = log(*(float4*)buf1416);
+    *(float*)buf1417 = log10(*(float*)buf1418);
+    *(float2*)buf1419 = log10(*(float2*)buf1420);
+    *(float3*)buf1421 = log10(*(float3*)buf1422);
+    *(float4*)buf1423 = log10(*(float4*)buf1424);
+    *(float*)buf1425 = log1p(*(float*)buf1426);
+    *(float2*)buf1427 = log1p(*(float2*)buf1428);
+    *(float3*)buf1429 = log1p(*(float3*)buf1430);
+    *(float4*)buf1431 = log1p(*(float4*)buf1432);
+    *(float*)buf1433 = log2(*(float*)buf1434);
+    *(float2*)buf1435 = log2(*(float2*)buf1436);
+    *(float3*)buf1437 = log2(*(float3*)buf1438);
+    *(float4*)buf1439 = log2(*(float4*)buf1440);
+    *(float*)buf1441 = logb(*(float*)buf1442);
+    *(float2*)buf1443 = logb(*(float2*)buf1444);
+    *(float3*)buf1445 = logb(*(float3*)buf1446);
+    *(float4*)buf1447 = logb(*(float4*)buf1448);
+    *(float*)buf1449 = mad(*(float*)buf1450, *(float*)buf1451, *(float*)buf1452);
+    *(float2*)buf1453 = mad(*(float2*)buf1454, *(float2*)buf1455, *(float2*)buf1456);
+    *(float3*)buf1457 = mad(*(float3*)buf1458, *(float3*)buf1459, *(float3*)buf1460);
+    *(float4*)buf1461 = mad(*(float4*)buf1462, *(float4*)buf1463, *(float4*)buf1464);
+    *(float*)buf1465 = max(*(float*)buf1466, *(float*)buf1467);
+    *(float2*)buf1468 = max(*(float2*)buf1469, *(float2*)buf1470);
+    *(float3*)buf1471 = max(*(float3*)buf1472, *(float3*)buf1473);
+    *(float4*)buf1474 = max(*(float4*)buf1475, *(float4*)buf1476);
+    *(float2*)buf1477 = max(*(float2*)buf1478, *(float*)buf1479);
+    *(float3*)buf1480 = max(*(float3*)buf1481, *(float*)buf1482);
+    *(float4*)buf1483 = max(*(float4*)buf1484, *(float*)buf1485);
+    *(char*)buf1486 = max(*(char*)buf1487, *(char*)buf1488);
+    *(char2*)buf1489 = max(*(char2*)buf1490, *(char2*)buf1491);
+    *(char3*)buf1492 = max(*(char3*)buf1493, *(char3*)buf1494);
+    *(char4*)buf1495 = max(*(char4*)buf1496, *(char4*)buf1497);
+    *(uchar*)buf1498 = max(*(uchar*)buf1499, *(uchar*)buf1500);
+    *(uchar2*)buf1501 = max(*(uchar2*)buf1502, *(uchar2*)buf1503);
+    *(uchar3*)buf1504 = max(*(uchar3*)buf1505, *(uchar3*)buf1506);
+    *(uchar4*)buf1507 = max(*(uchar4*)buf1508, *(uchar4*)buf1509);
+    *(short*)buf1510 = max(*(short*)buf1511, *(short*)buf1512);
+    *(short2*)buf1513 = max(*(short2*)buf1514, *(short2*)buf1515);
+    *(short3*)buf1516 = max(*(short3*)buf1517, *(short3*)buf1518);
+    *(short4*)buf1519 = max(*(short4*)buf1520, *(short4*)buf1521);
+    *(ushort*)buf1522 = max(*(ushort*)buf1523, *(ushort*)buf1524);
+    *(ushort2*)buf1525 = max(*(ushort2*)buf1526, *(ushort2*)buf1527);
+    *(ushort3*)buf1528 = max(*(ushort3*)buf1529, *(ushort3*)buf1530);
+    *(ushort4*)buf1531 = max(*(ushort4*)buf1532, *(ushort4*)buf1533);
+    *(int*)buf1534 = max(*(int*)buf1535, *(int*)buf1536);
+    *(int2*)buf1537 = max(*(int2*)buf1538, *(int2*)buf1539);
+    *(int3*)buf1540 = max(*(int3*)buf1541, *(int3*)buf1542);
+    *(int4*)buf1543 = max(*(int4*)buf1544, *(int4*)buf1545);
+    *(uint*)buf1546 = max(*(uint*)buf1547, *(uint*)buf1548);
+    *(uint2*)buf1549 = max(*(uint2*)buf1550, *(uint2*)buf1551);
+    *(uint3*)buf1552 = max(*(uint3*)buf1553, *(uint3*)buf1554);
+    *(uint4*)buf1555 = max(*(uint4*)buf1556, *(uint4*)buf1557);
+    *(long*)buf1558 = max(*(long*)buf1559, *(long*)buf1560);
+    *(long2*)buf1561 = max(*(long2*)buf1562, *(long2*)buf1563);
+    *(long3*)buf1564 = max(*(long3*)buf1565, *(long3*)buf1566);
+    *(long4*)buf1567 = max(*(long4*)buf1568, *(long4*)buf1569);
+    *(ulong*)buf1570 = max(*(ulong*)buf1571, *(ulong*)buf1572);
+    *(ulong2*)buf1573 = max(*(ulong2*)buf1574, *(ulong2*)buf1575);
+    *(ulong3*)buf1576 = max(*(ulong3*)buf1577, *(ulong3*)buf1578);
+    *(ulong4*)buf1579 = max(*(ulong4*)buf1580, *(ulong4*)buf1581);
+    *(float*)buf1582 = min(*(float*)buf1583, *(float*)buf1584);
+    *(float2*)buf1585 = min(*(float2*)buf1586, *(float2*)buf1587);
+    *(float3*)buf1588 = min(*(float3*)buf1589, *(float3*)buf1590);
+    *(float4*)buf1591 = min(*(float4*)buf1592, *(float4*)buf1593);
+    *(float2*)buf1594 = min(*(float2*)buf1595, *(float*)buf1596);
+    *(float3*)buf1597 = min(*(float3*)buf1598, *(float*)buf1599);
+    *(float4*)buf1600 = min(*(float4*)buf1601, *(float*)buf1602);
+    *(char*)buf1603 = min(*(char*)buf1604, *(char*)buf1605);
+    *(char2*)buf1606 = min(*(char2*)buf1607, *(char2*)buf1608);
+    *(char3*)buf1609 = min(*(char3*)buf1610, *(char3*)buf1611);
+    *(char4*)buf1612 = min(*(char4*)buf1613, *(char4*)buf1614);
+    *(uchar*)buf1615 = min(*(uchar*)buf1616, *(uchar*)buf1617);
+    *(uchar2*)buf1618 = min(*(uchar2*)buf1619, *(uchar2*)buf1620);
+    *(uchar3*)buf1621 = min(*(uchar3*)buf1622, *(uchar3*)buf1623);
+    *(uchar4*)buf1624 = min(*(uchar4*)buf1625, *(uchar4*)buf1626);
+    *(short*)buf1627 = min(*(short*)buf1628, *(short*)buf1629);
+    *(short2*)buf1630 = min(*(short2*)buf1631, *(short2*)buf1632);
+    *(short3*)buf1633 = min(*(short3*)buf1634, *(short3*)buf1635);
+    *(short4*)buf1636 = min(*(short4*)buf1637, *(short4*)buf1638);
+    *(ushort*)buf1639 = min(*(ushort*)buf1640, *(ushort*)buf1641);
+    *(ushort2*)buf1642 = min(*(ushort2*)buf1643, *(ushort2*)buf1644);
+    *(ushort3*)buf1645 = min(*(ushort3*)buf1646, *(ushort3*)buf1647);
+    *(ushort4*)buf1648 = min(*(ushort4*)buf1649, *(ushort4*)buf1650);
+    *(int*)buf1651 = min(*(int*)buf1652, *(int*)buf1653);
+    *(int2*)buf1654 = min(*(int2*)buf1655, *(int2*)buf1656);
+    *(int3*)buf1657 = min(*(int3*)buf1658, *(int3*)buf1659);
+    *(int4*)buf1660 = min(*(int4*)buf1661, *(int4*)buf1662);
+    *(uint*)buf1663 = min(*(uint*)buf1664, *(uint*)buf1665);
+    *(uint2*)buf1666 = min(*(uint2*)buf1667, *(uint2*)buf1668);
+    *(uint3*)buf1669 = min(*(uint3*)buf1670, *(uint3*)buf1671);
+    *(uint4*)buf1672 = min(*(uint4*)buf1673, *(uint4*)buf1674);
+    *(long*)buf1675 = min(*(long*)buf1676, *(long*)buf1677);
+    *(long2*)buf1678 = min(*(long2*)buf1679, *(long2*)buf1680);
+    *(long3*)buf1681 = min(*(long3*)buf1682, *(long3*)buf1683);
+    *(long4*)buf1684 = min(*(long4*)buf1685, *(long4*)buf1686);
+    *(ulong*)buf1687 = min(*(ulong*)buf1688, *(ulong*)buf1689);
+    *(ulong2*)buf1690 = min(*(ulong2*)buf1691, *(ulong2*)buf1692);
+    *(ulong3*)buf1693 = min(*(ulong3*)buf1694, *(ulong3*)buf1695);
+    *(ulong4*)buf1696 = min(*(ulong4*)buf1697, *(ulong4*)buf1698);
+    *(float*)buf1699 = mix(*(float*)buf1700, *(float*)buf1701, *(float*)buf1702);
+    *(float2*)buf1703 = mix(*(float2*)buf1704, *(float2*)buf1705, *(float2*)buf1706);
+    *(float3*)buf1707 = mix(*(float3*)buf1708, *(float3*)buf1709, *(float3*)buf1710);
+    *(float4*)buf1711 = mix(*(float4*)buf1712, *(float4*)buf1713, *(float4*)buf1714);
+    *(float2*)buf1715 = mix(*(float2*)buf1716, *(float2*)buf1717, *(float*)buf1718);
+    *(float3*)buf1719 = mix(*(float3*)buf1720, *(float3*)buf1721, *(float*)buf1722);
+    *(float4*)buf1723 = mix(*(float4*)buf1724, *(float4*)buf1725, *(float*)buf1726);
+    *(float*)buf1727 = modf(*(float*)buf1728, (float*) buf1729);
+    *(float2*)buf1730 = modf(*(float2*)buf1731, (float2*) buf1732);
+    *(float3*)buf1733 = modf(*(float3*)buf1734, (float3*) buf1735);
+    *(float4*)buf1736 = modf(*(float4*)buf1737, (float4*) buf1738);
+    *(float*)buf1739 = nan(*(uint*)buf1740);
+    *(float*)buf1741 = native_acos(*(float*)buf1742);
+    *(float2*)buf1743 = native_acos(*(float2*)buf1744);
+    *(float3*)buf1745 = native_acos(*(float3*)buf1746);
+    *(float4*)buf1747 = native_acos(*(float4*)buf1748);
+    *(float*)buf1749 = native_acosh(*(float*)buf1750);
+    *(float2*)buf1751 = native_acosh(*(float2*)buf1752);
+    *(float3*)buf1753 = native_acosh(*(float3*)buf1754);
+    *(float4*)buf1755 = native_acosh(*(float4*)buf1756);
+    *(float*)buf1757 = native_acospi(*(float*)buf1758);
+    *(float2*)buf1759 = native_acospi(*(float2*)buf1760);
+    *(float3*)buf1761 = native_acospi(*(float3*)buf1762);
+    *(float4*)buf1763 = native_acospi(*(float4*)buf1764);
+    *(float*)buf1765 = native_asin(*(float*)buf1766);
+    *(float2*)buf1767 = native_asin(*(float2*)buf1768);
+    *(float3*)buf1769 = native_asin(*(float3*)buf1770);
+    *(float4*)buf1771 = native_asin(*(float4*)buf1772);
+    *(float*)buf1773 = native_asinh(*(float*)buf1774);
+    *(float2*)buf1775 = native_asinh(*(float2*)buf1776);
+    *(float3*)buf1777 = native_asinh(*(float3*)buf1778);
+    *(float4*)buf1779 = native_asinh(*(float4*)buf1780);
+    *(float*)buf1781 = native_asinpi(*(float*)buf1782);
+    *(float2*)buf1783 = native_asinpi(*(float2*)buf1784);
+    *(float3*)buf1785 = native_asinpi(*(float3*)buf1786);
+    *(float4*)buf1787 = native_asinpi(*(float4*)buf1788);
+    *(float*)buf1789 = native_atan(*(float*)buf1790);
+    *(float2*)buf1791 = native_atan(*(float2*)buf1792);
+    *(float3*)buf1793 = native_atan(*(float3*)buf1794);
+    *(float4*)buf1795 = native_atan(*(float4*)buf1796);
+    *(float*)buf1797 = native_atan2(*(float*)buf1798, *(float*)buf1799);
+    *(float2*)buf1800 = native_atan2(*(float2*)buf1801, *(float2*)buf1802);
+    *(float3*)buf1803 = native_atan2(*(float3*)buf1804, *(float3*)buf1805);
+    *(float4*)buf1806 = native_atan2(*(float4*)buf1807, *(float4*)buf1808);
+    *(float*)buf1809 = native_atan2pi(*(float*)buf1810, *(float*)buf1811);
+    *(float2*)buf1812 = native_atan2pi(*(float2*)buf1813, *(float2*)buf1814);
+    *(float3*)buf1815 = native_atan2pi(*(float3*)buf1816, *(float3*)buf1817);
+    *(float4*)buf1818 = native_atan2pi(*(float4*)buf1819, *(float4*)buf1820);
+    *(float*)buf1821 = native_atanh(*(float*)buf1822);
+    *(float2*)buf1823 = native_atanh(*(float2*)buf1824);
+    *(float3*)buf1825 = native_atanh(*(float3*)buf1826);
+    *(float4*)buf1827 = native_atanh(*(float4*)buf1828);
+    *(float*)buf1829 = native_atanpi(*(float*)buf1830);
+    *(float2*)buf1831 = native_atanpi(*(float2*)buf1832);
+    *(float3*)buf1833 = native_atanpi(*(float3*)buf1834);
+    *(float4*)buf1835 = native_atanpi(*(float4*)buf1836);
+    *(float*)buf1837 = native_cbrt(*(float*)buf1838);
+    *(float2*)buf1839 = native_cbrt(*(float2*)buf1840);
+    *(float3*)buf1841 = native_cbrt(*(float3*)buf1842);
+    *(float4*)buf1843 = native_cbrt(*(float4*)buf1844);
+    *(float*)buf1845 = native_cos(*(float*)buf1846);
+    *(float2*)buf1847 = native_cos(*(float2*)buf1848);
+    *(float3*)buf1849 = native_cos(*(float3*)buf1850);
+    *(float4*)buf1851 = native_cos(*(float4*)buf1852);
+    *(float*)buf1853 = native_cosh(*(float*)buf1854);
+    *(float2*)buf1855 = native_cosh(*(float2*)buf1856);
+    *(float3*)buf1857 = native_cosh(*(float3*)buf1858);
+    *(float4*)buf1859 = native_cosh(*(float4*)buf1860);
+    *(float*)buf1861 = native_cospi(*(float*)buf1862);
+    *(float2*)buf1863 = native_cospi(*(float2*)buf1864);
+    *(float3*)buf1865 = native_cospi(*(float3*)buf1866);
+    *(float4*)buf1867 = native_cospi(*(float4*)buf1868);
+    *(float*)buf1869 = native_distance(*(float*)buf1870, *(float*)buf1871);
+    *(float*)buf1872 = native_distance(*(float2*)buf1873, *(float2*)buf1874);
+    *(float*)buf1875 = native_distance(*(float3*)buf1876, *(float3*)buf1877);
+    *(float*)buf1878 = native_distance(*(float4*)buf1879, *(float4*)buf1880);
+    *(float*)buf1881 = native_divide(*(float*)buf1882, *(float*)buf1883);
+    *(float2*)buf1884 = native_divide(*(float2*)buf1885, *(float2*)buf1886);
+    *(float3*)buf1887 = native_divide(*(float3*)buf1888, *(float3*)buf1889);
+    *(float4*)buf1890 = native_divide(*(float4*)buf1891, *(float4*)buf1892);
+    *(float*)buf1893 = native_exp(*(float*)buf1894);
+    *(float2*)buf1895 = native_exp(*(float2*)buf1896);
+    *(float3*)buf1897 = native_exp(*(float3*)buf1898);
+    *(float4*)buf1899 = native_exp(*(float4*)buf1900);
+    *(float*)buf1901 = native_exp10(*(float*)buf1902);
+    *(float2*)buf1903 = native_exp10(*(float2*)buf1904);
+    *(float3*)buf1905 = native_exp10(*(float3*)buf1906);
+    *(float4*)buf1907 = native_exp10(*(float4*)buf1908);
+    *(float*)buf1909 = native_exp2(*(float*)buf1910);
+    *(float2*)buf1911 = native_exp2(*(float2*)buf1912);
+    *(float3*)buf1913 = native_exp2(*(float3*)buf1914);
+    *(float4*)buf1915 = native_exp2(*(float4*)buf1916);
+    *(float*)buf1917 = native_expm1(*(float*)buf1918);
+    *(float2*)buf1919 = native_expm1(*(float2*)buf1920);
+    *(float3*)buf1921 = native_expm1(*(float3*)buf1922);
+    *(float4*)buf1923 = native_expm1(*(float4*)buf1924);
+    *(float*)buf1925 = native_hypot(*(float*)buf1926, *(float*)buf1927);
+    *(float2*)buf1928 = native_hypot(*(float2*)buf1929, *(float2*)buf1930);
+    *(float3*)buf1931 = native_hypot(*(float3*)buf1932, *(float3*)buf1933);
+    *(float4*)buf1934 = native_hypot(*(float4*)buf1935, *(float4*)buf1936);
+    *(float*)buf1937 = native_length(*(float*)buf1938);
+    *(float*)buf1939 = native_length(*(float2*)buf1940);
+    *(float*)buf1941 = native_length(*(float3*)buf1942);
+    *(float*)buf1943 = native_length(*(float4*)buf1944);
+    *(float*)buf1945 = native_log(*(float*)buf1946);
+    *(float2*)buf1947 = native_log(*(float2*)buf1948);
+    *(float3*)buf1949 = native_log(*(float3*)buf1950);
+    *(float4*)buf1951 = native_log(*(float4*)buf1952);
+    *(float*)buf1953 = native_log10(*(float*)buf1954);
+    *(float2*)buf1955 = native_log10(*(float2*)buf1956);
+    *(float3*)buf1957 = native_log10(*(float3*)buf1958);
+    *(float4*)buf1959 = native_log10(*(float4*)buf1960);
+    *(float*)buf1961 = native_log1p(*(float*)buf1962);
+    *(float2*)buf1963 = native_log1p(*(float2*)buf1964);
+    *(float3*)buf1965 = native_log1p(*(float3*)buf1966);
+    *(float4*)buf1967 = native_log1p(*(float4*)buf1968);
+    *(float*)buf1969 = native_log2(*(float*)buf1970);
+    *(float2*)buf1971 = native_log2(*(float2*)buf1972);
+    *(float3*)buf1973 = native_log2(*(float3*)buf1974);
+    *(float4*)buf1975 = native_log2(*(float4*)buf1976);
+    *(float*)buf1977 = native_normalize(*(float*)buf1978);
+    *(float2*)buf1979 = native_normalize(*(float2*)buf1980);
+    *(float3*)buf1981 = native_normalize(*(float3*)buf1982);
+    *(float4*)buf1983 = native_normalize(*(float4*)buf1984);
+    *(float*)buf1985 = native_powr(*(float*)buf1986, *(float*)buf1987);
+    *(float2*)buf1988 = native_powr(*(float2*)buf1989, *(float2*)buf1990);
+    *(float3*)buf1991 = native_powr(*(float3*)buf1992, *(float3*)buf1993);
+    *(float4*)buf1994 = native_powr(*(float4*)buf1995, *(float4*)buf1996);
+    *(float*)buf1997 = native_recip(*(float*)buf1998);
+    *(float2*)buf1999 = native_recip(*(float2*)buf2000);
+    *(float3*)buf2001 = native_recip(*(float3*)buf2002);
+    *(float4*)buf2003 = native_recip(*(float4*)buf2004);
+    *(float*)buf2005 = native_rootn(*(float*)buf2006, *(int*)buf2007);
+    *(float2*)buf2008 = native_rootn(*(float2*)buf2009, *(int2*)buf2010);
+    *(float3*)buf2011 = native_rootn(*(float3*)buf2012, *(int3*)buf2013);
+    *(float4*)buf2014 = native_rootn(*(float4*)buf2015, *(int4*)buf2016);
+    *(float*)buf2017 = native_rsqrt(*(float*)buf2018);
+    *(float2*)buf2019 = native_rsqrt(*(float2*)buf2020);
+    *(float3*)buf2021 = native_rsqrt(*(float3*)buf2022);
+    *(float4*)buf2023 = native_rsqrt(*(float4*)buf2024);
+    *(float*)buf2025 = native_sin(*(float*)buf2026);
+    *(float2*)buf2027 = native_sin(*(float2*)buf2028);
+    *(float3*)buf2029 = native_sin(*(float3*)buf2030);
+    *(float4*)buf2031 = native_sin(*(float4*)buf2032);
+    *(float*)buf2033 = native_sincos(*(float*)buf2034, (float*) buf2035);
+    *(float2*)buf2036 = native_sincos(*(float2*)buf2037, (float2*) buf2038);
+    *(float3*)buf2039 = native_sincos(*(float3*)buf2040, (float3*) buf2041);
+    *(float4*)buf2042 = native_sincos(*(float4*)buf2043, (float4*) buf2044);
+    *(float*)buf2045 = native_sinh(*(float*)buf2046);
+    *(float2*)buf2047 = native_sinh(*(float2*)buf2048);
+    *(float3*)buf2049 = native_sinh(*(float3*)buf2050);
+    *(float4*)buf2051 = native_sinh(*(float4*)buf2052);
+    *(float*)buf2053 = native_sinpi(*(float*)buf2054);
+    *(float2*)buf2055 = native_sinpi(*(float2*)buf2056);
+    *(float3*)buf2057 = native_sinpi(*(float3*)buf2058);
+    *(float4*)buf2059 = native_sinpi(*(float4*)buf2060);
+    *(float*)buf2061 = native_sqrt(*(float*)buf2062);
+    *(float2*)buf2063 = native_sqrt(*(float2*)buf2064);
+    *(float3*)buf2065 = native_sqrt(*(float3*)buf2066);
+    *(float4*)buf2067 = native_sqrt(*(float4*)buf2068);
+    *(float*)buf2069 = native_tan(*(float*)buf2070);
+    *(float2*)buf2071 = native_tan(*(float2*)buf2072);
+    *(float3*)buf2073 = native_tan(*(float3*)buf2074);
+    *(float4*)buf2075 = native_tan(*(float4*)buf2076);
+    *(float*)buf2077 = native_tanh(*(float*)buf2078);
+    *(float2*)buf2079 = native_tanh(*(float2*)buf2080);
+    *(float3*)buf2081 = native_tanh(*(float3*)buf2082);
+    *(float4*)buf2083 = native_tanh(*(float4*)buf2084);
+    *(float*)buf2085 = native_tanpi(*(float*)buf2086);
+    *(float2*)buf2087 = native_tanpi(*(float2*)buf2088);
+    *(float3*)buf2089 = native_tanpi(*(float3*)buf2090);
+    *(float4*)buf2091 = native_tanpi(*(float4*)buf2092);
+    *(float*)buf2093 = nextafter(*(float*)buf2094, *(float*)buf2095);
+    *(float2*)buf2096 = nextafter(*(float2*)buf2097, *(float2*)buf2098);
+    *(float3*)buf2099 = nextafter(*(float3*)buf2100, *(float3*)buf2101);
+    *(float4*)buf2102 = nextafter(*(float4*)buf2103, *(float4*)buf2104);
+    *(float*)buf2105 = normalize(*(float*)buf2106);
+    *(float2*)buf2107 = normalize(*(float2*)buf2108);
+    *(float3*)buf2109 = normalize(*(float3*)buf2110);
+    *(float4*)buf2111 = normalize(*(float4*)buf2112);
+    *(float*)buf2113 = pow(*(float*)buf2114, *(float*)buf2115);
+    *(float2*)buf2116 = pow(*(float2*)buf2117, *(float2*)buf2118);
+    *(float3*)buf2119 = pow(*(float3*)buf2120, *(float3*)buf2121);
+    *(float4*)buf2122 = pow(*(float4*)buf2123, *(float4*)buf2124);
+    *(float*)buf2125 = pown(*(float*)buf2126, *(int*)buf2127);
+    *(float2*)buf2128 = pown(*(float2*)buf2129, *(int2*)buf2130);
+    *(float3*)buf2131 = pown(*(float3*)buf2132, *(int3*)buf2133);
+    *(float4*)buf2134 = pown(*(float4*)buf2135, *(int4*)buf2136);
+    *(float*)buf2137 = powr(*(float*)buf2138, *(float*)buf2139);
+    *(float2*)buf2140 = powr(*(float2*)buf2141, *(float2*)buf2142);
+    *(float3*)buf2143 = powr(*(float3*)buf2144, *(float3*)buf2145);
+    *(float4*)buf2146 = powr(*(float4*)buf2147, *(float4*)buf2148);
+    *(float*)buf2149 = radians(*(float*)buf2150);
+    *(float2*)buf2151 = radians(*(float2*)buf2152);
+    *(float3*)buf2153 = radians(*(float3*)buf2154);
+    *(float4*)buf2155 = radians(*(float4*)buf2156);
+    *(float*)buf2157 = remainder(*(float*)buf2158, *(float*)buf2159);
+    *(float2*)buf2160 = remainder(*(float2*)buf2161, *(float2*)buf2162);
+    *(float3*)buf2163 = remainder(*(float3*)buf2164, *(float3*)buf2165);
+    *(float4*)buf2166 = remainder(*(float4*)buf2167, *(float4*)buf2168);
+    *(float*)buf2169 = remquo(*(float*)buf2170, *(float*)buf2171, (int*) buf2172);
+    *(float2*)buf2173 = remquo(*(float2*)buf2174, *(float2*)buf2175, (int2*) buf2176);
+    *(float3*)buf2177 = remquo(*(float3*)buf2178, *(float3*)buf2179, (int3*) buf2180);
+    *(float4*)buf2181 = remquo(*(float4*)buf2182, *(float4*)buf2183, (int4*) buf2184);
+    *(float*)buf2185 = rint(*(float*)buf2186);
+    *(float2*)buf2187 = rint(*(float2*)buf2188);
+    *(float3*)buf2189 = rint(*(float3*)buf2190);
+    *(float4*)buf2191 = rint(*(float4*)buf2192);
+    *(float*)buf2193 = rootn(*(float*)buf2194, *(int*)buf2195);
+    *(float2*)buf2196 = rootn(*(float2*)buf2197, *(int2*)buf2198);
+    *(float3*)buf2199 = rootn(*(float3*)buf2200, *(int3*)buf2201);
+    *(float4*)buf2202 = rootn(*(float4*)buf2203, *(int4*)buf2204);
+    *(float*)buf2205 = round(*(float*)buf2206);
+    *(float2*)buf2207 = round(*(float2*)buf2208);
+    *(float3*)buf2209 = round(*(float3*)buf2210);
+    *(float4*)buf2211 = round(*(float4*)buf2212);
+    rsAllocationCopy1DRange(*(rs_allocation*)buf2213, *(uint32_t*)buf2214, *(uint32_t*)buf2215, *(uint32_t*)buf2216, *(rs_allocation*)buf2217, *(uint32_t*)buf2218, *(uint32_t*)buf2219);
+    rsAllocationCopy2DRange(*(rs_allocation*)buf2220, *(uint32_t*)buf2221, *(uint32_t*)buf2222, *(uint32_t*)buf2223, *(rs_allocation_cubemap_face*)buf2224, *(uint32_t*)buf2225, *(uint32_t*)buf2226, *(rs_allocation*)buf2227, *(uint32_t*)buf2228, *(uint32_t*)buf2229, *(uint32_t*)buf2230, *(rs_allocation_cubemap_face*)buf2231);
+    *(uint32_t*)buf2232 = rsAllocationGetDimFaces(*(rs_allocation*)buf2233);
+    *(uint32_t*)buf2234 = rsAllocationGetDimLOD(*(rs_allocation*)buf2235);
+    *(uint32_t*)buf2236 = rsAllocationGetDimX(*(rs_allocation*)buf2237);
+    *(uint32_t*)buf2238 = rsAllocationGetDimY(*(rs_allocation*)buf2239);
+    *(uint32_t*)buf2240 = rsAllocationGetDimZ(*(rs_allocation*)buf2241);
+    *(rs_element*)buf2242 = rsAllocationGetElement(*(rs_allocation*)buf2243);
+    rsAllocationIoReceive(*(rs_allocation*)buf2244);
+    rsAllocationIoSend(*(rs_allocation*)buf2245);
+    *(int32_t*)buf2246 = rsAtomicAdd((volatile int32_t*) buf2247, *(int32_t*)buf2248);
+    *(int32_t*)buf2249 = rsAtomicAdd((volatile uint32_t*) buf2250, *(uint32_t*)buf2251);
+    *(int32_t*)buf2252 = rsAtomicAnd((volatile int32_t*) buf2253, *(int32_t*)buf2254);
+    *(int32_t*)buf2255 = rsAtomicAnd((volatile uint32_t*) buf2256, *(uint32_t*)buf2257);
+    *(int32_t*)buf2258 = rsAtomicCas((volatile int32_t*) buf2259, *(int32_t*)buf2260, *(int32_t*)buf2261);
+    *(uint32_t*)buf2262 = rsAtomicCas((volatile uint32_t*) buf2263, *(uint32_t*)buf2264, *(uint32_t*)buf2265);
+    *(int32_t*)buf2266 = rsAtomicDec((volatile int32_t*) buf2267);
+    *(int32_t*)buf2268 = rsAtomicDec((volatile uint32_t*) buf2269);
+    *(int32_t*)buf2270 = rsAtomicInc((volatile int32_t*) buf2271);
+    *(int32_t*)buf2272 = rsAtomicInc((volatile uint32_t*) buf2273);
+    *(uint32_t*)buf2274 = rsAtomicMax((volatile uint32_t*) buf2275, *(uint32_t*)buf2276);
+    *(int32_t*)buf2277 = rsAtomicMax((volatile int32_t*) buf2278, *(int32_t*)buf2279);
+    *(uint32_t*)buf2280 = rsAtomicMin((volatile uint32_t*) buf2281, *(uint32_t*)buf2282);
+    *(int32_t*)buf2283 = rsAtomicMin((volatile int32_t*) buf2284, *(int32_t*)buf2285);
+    *(int32_t*)buf2286 = rsAtomicOr((volatile int32_t*) buf2287, *(int32_t*)buf2288);
+    *(int32_t*)buf2289 = rsAtomicOr((volatile uint32_t*) buf2290, *(uint32_t*)buf2291);
+    *(int32_t*)buf2292 = rsAtomicSub((volatile int32_t*) buf2293, *(int32_t*)buf2294);
+    *(int32_t*)buf2295 = rsAtomicSub((volatile uint32_t*) buf2296, *(uint32_t*)buf2297);
+    *(int32_t*)buf2298 = rsAtomicXor((volatile int32_t*) buf2299, *(int32_t*)buf2300);
+    *(int32_t*)buf2301 = rsAtomicXor((volatile uint32_t*) buf2302, *(uint32_t*)buf2303);
+    *(char*)buf2304 = rsClamp(*(char*)buf2305, *(char*)buf2306, *(char*)buf2307);
+    *(uchar*)buf2308 = rsClamp(*(uchar*)buf2309, *(uchar*)buf2310, *(uchar*)buf2311);
+    *(short*)buf2312 = rsClamp(*(short*)buf2313, *(short*)buf2314, *(short*)buf2315);
+    *(ushort*)buf2316 = rsClamp(*(ushort*)buf2317, *(ushort*)buf2318, *(ushort*)buf2319);
+    *(int*)buf2320 = rsClamp(*(int*)buf2321, *(int*)buf2322, *(int*)buf2323);
+    *(uint*)buf2324 = rsClamp(*(uint*)buf2325, *(uint*)buf2326, *(uint*)buf2327);
+    rsClearObject((rs_element*) buf2328);
+    rsClearObject((rs_type*) buf2329);
+    rsClearObject((rs_allocation*) buf2330);
+    rsClearObject((rs_sampler*) buf2331);
+    rsClearObject((rs_script*) buf2332);
+#ifndef __LP64__
+    rsClearObject((rs_mesh*) buf2333);
+    rsClearObject((rs_program_fragment*) buf2334);
+    rsClearObject((rs_program_vertex*) buf2335);
+    rsClearObject((rs_program_raster*) buf2336);
+    rsClearObject((rs_program_store*) buf2337);
+    rsClearObject((rs_font*) buf2338);
+#endif
+    rsDebug((const char*) buf2339, *(double*)buf2340);
+    rsDebug((const char*) buf2341, *(int*)buf2342);
+    rsDebug((const char*) buf2343, *(uint*)buf2344);
+    rsDebug((const char*) buf2345, *(long*)buf2346);
+    rsDebug((const char*) buf2347, *(ulong*)buf2348);
+    rsDebug((const char*) buf2349, *(int2*)buf2350);
+    rsDebug((const char*) buf2351, *(int3*)buf2352);
+    rsDebug((const char*) buf2353, *(int4*)buf2354);
+    rsDebug((const char*) buf2355, *(uint2*)buf2356);
+    rsDebug((const char*) buf2357, *(uint3*)buf2358);
+    rsDebug((const char*) buf2359, *(uint4*)buf2360);
+    rsDebug((const char*) buf2361, *(long2*)buf2362);
+    rsDebug((const char*) buf2363, *(long3*)buf2364);
+    rsDebug((const char*) buf2365, *(long4*)buf2366);
+    rsDebug((const char*) buf2367, *(ulong2*)buf2368);
+    rsDebug((const char*) buf2369, *(ulong3*)buf2370);
+    rsDebug((const char*) buf2371, *(ulong4*)buf2372);
+    rsDebug((const char*) buf2373, *(float*)buf2374);
+    rsDebug((const char*) buf2375, *(float2*)buf2376);
+    rsDebug((const char*) buf2377, *(float3*)buf2378);
+    rsDebug((const char*) buf2379, *(float4*)buf2380);
+    rsDebug((const char*) buf2381, *(char*)buf2382);
+    rsDebug((const char*) buf2383, *(char2*)buf2384);
+    rsDebug((const char*) buf2385, *(char3*)buf2386);
+    rsDebug((const char*) buf2387, *(char4*)buf2388);
+    rsDebug((const char*) buf2389, *(uchar*)buf2390);
+    rsDebug((const char*) buf2391, *(uchar2*)buf2392);
+    rsDebug((const char*) buf2393, *(uchar3*)buf2394);
+    rsDebug((const char*) buf2395, *(uchar4*)buf2396);
+    rsDebug((const char*) buf2397, *(short*)buf2398);
+    rsDebug((const char*) buf2399, *(short2*)buf2400);
+    rsDebug((const char*) buf2401, *(short3*)buf2402);
+    rsDebug((const char*) buf2403, *(short4*)buf2404);
+    rsDebug((const char*) buf2405, *(ushort*)buf2406);
+    rsDebug((const char*) buf2407, *(ushort2*)buf2408);
+    rsDebug((const char*) buf2409, *(ushort3*)buf2410);
+    rsDebug((const char*) buf2411, *(ushort4*)buf2412);
+    rsDebug((const char*) buf2413, *(float*)buf2414, *(float*)buf2415);
+    rsDebug((const char*) buf2416, *(float*)buf2417, *(float*)buf2418, *(float*)buf2419);
+    rsDebug((const char*) buf2420, *(float*)buf2421, *(float*)buf2422, *(float*)buf2423, *(float*)buf2424);
+    rsDebug((const char*) buf2425, *(long long*)buf2426);
+    rsDebug((const char*) buf2427, *(unsigned long long*)buf2428);
+    rsDebug((const char*) buf2429, (const void*) buf2430);
+    rsDebug((const char*) buf2431, (const rs_matrix4x4*) buf2432);
+    rsDebug((const char*) buf2433, (const rs_matrix3x3*) buf2434);
+    rsDebug((const char*) buf2435, (const rs_matrix2x2*) buf2436);
+    *(uint32_t*)buf2437 = rsElementGetBytesSize(*(rs_element*)buf2438);
+    *(rs_data_kind*)buf2439 = rsElementGetDataKind(*(rs_element*)buf2440);
+    *(rs_data_type*)buf2441 = rsElementGetDataType(*(rs_element*)buf2442);
+    *(rs_element*)buf2443 = rsElementGetSubElement(*(rs_element*)buf2444, *(uint32_t*)buf2445);
+    *(uint32_t*)buf2446 = rsElementGetSubElementArraySize(*(rs_element*)buf2447, *(uint32_t*)buf2448);
+    *(uint32_t*)buf2449 = rsElementGetSubElementCount(*(rs_element*)buf2450);
+    *(uint32_t*)buf2451 = rsElementGetSubElementName(*(rs_element*)buf2452, *(uint32_t*)buf2453, (char*) buf2454, *(uint32_t*)buf2455);
+    *(uint32_t*)buf2456 = rsElementGetSubElementNameLength(*(rs_element*)buf2457, *(uint32_t*)buf2458);
+    *(uint32_t*)buf2459 = rsElementGetSubElementOffsetBytes(*(rs_element*)buf2460, *(uint32_t*)buf2461);
+    *(uint32_t*)buf2462 = rsElementGetVectorSize(*(rs_element*)buf2463);
+    rsExtractFrustumPlanes((const rs_matrix4x4*) buf2464, (float4*) buf2465, (float4*) buf2466, (float4*) buf2467, (float4*) buf2468, (float4*) buf2469, (float4*) buf2470);
+    rsForEach(*(rs_script*)buf2471, *(rs_allocation*)buf2472, *(rs_allocation*)buf2473);
+    *(float*)buf2474 = rsFrac(*(float*)buf2475);
+    *(rs_allocation*)buf2476 = rsGetAllocation((const void*) buf2477);
+    *(float*)buf2478 = rsGetDt();
+    *(const void**)buf2479 = rsGetElementAt(*(rs_allocation*)buf2480, *(uint32_t*)buf2481);
+    *(const void**)buf2482 = rsGetElementAt(*(rs_allocation*)buf2483, *(uint32_t*)buf2484, *(uint32_t*)buf2485);
+    *(const void**)buf2486 = rsGetElementAt(*(rs_allocation*)buf2487, *(uint32_t*)buf2488, *(uint32_t*)buf2489, *(uint32_t*)buf2490);
+    *(float*)buf2491 = rsGetElementAt_float(*(rs_allocation*)buf2492, *(uint32_t*)buf2493);
+    *(float2*)buf2494 = rsGetElementAt_float2(*(rs_allocation*)buf2495, *(uint32_t*)buf2496);
+    *(float3*)buf2497 = rsGetElementAt_float3(*(rs_allocation*)buf2498, *(uint32_t*)buf2499);
+    *(float4*)buf2500 = rsGetElementAt_float4(*(rs_allocation*)buf2501, *(uint32_t*)buf2502);
+    *(double*)buf2503 = rsGetElementAt_double(*(rs_allocation*)buf2504, *(uint32_t*)buf2505);
+    *(double2*)buf2506 = rsGetElementAt_double2(*(rs_allocation*)buf2507, *(uint32_t*)buf2508);
+    *(double3*)buf2509 = rsGetElementAt_double3(*(rs_allocation*)buf2510, *(uint32_t*)buf2511);
+    *(double4*)buf2512 = rsGetElementAt_double4(*(rs_allocation*)buf2513, *(uint32_t*)buf2514);
+    *(char*)buf2515 = rsGetElementAt_char(*(rs_allocation*)buf2516, *(uint32_t*)buf2517);
+    *(char2*)buf2518 = rsGetElementAt_char2(*(rs_allocation*)buf2519, *(uint32_t*)buf2520);
+    *(char3*)buf2521 = rsGetElementAt_char3(*(rs_allocation*)buf2522, *(uint32_t*)buf2523);
+    *(char4*)buf2524 = rsGetElementAt_char4(*(rs_allocation*)buf2525, *(uint32_t*)buf2526);
+    *(uchar*)buf2527 = rsGetElementAt_uchar(*(rs_allocation*)buf2528, *(uint32_t*)buf2529);
+    *(uchar2*)buf2530 = rsGetElementAt_uchar2(*(rs_allocation*)buf2531, *(uint32_t*)buf2532);
+    *(uchar3*)buf2533 = rsGetElementAt_uchar3(*(rs_allocation*)buf2534, *(uint32_t*)buf2535);
+    *(uchar4*)buf2536 = rsGetElementAt_uchar4(*(rs_allocation*)buf2537, *(uint32_t*)buf2538);
+    *(short*)buf2539 = rsGetElementAt_short(*(rs_allocation*)buf2540, *(uint32_t*)buf2541);
+    *(short2*)buf2542 = rsGetElementAt_short2(*(rs_allocation*)buf2543, *(uint32_t*)buf2544);
+    *(short3*)buf2545 = rsGetElementAt_short3(*(rs_allocation*)buf2546, *(uint32_t*)buf2547);
+    *(short4*)buf2548 = rsGetElementAt_short4(*(rs_allocation*)buf2549, *(uint32_t*)buf2550);
+    *(ushort*)buf2551 = rsGetElementAt_ushort(*(rs_allocation*)buf2552, *(uint32_t*)buf2553);
+    *(ushort2*)buf2554 = rsGetElementAt_ushort2(*(rs_allocation*)buf2555, *(uint32_t*)buf2556);
+    *(ushort3*)buf2557 = rsGetElementAt_ushort3(*(rs_allocation*)buf2558, *(uint32_t*)buf2559);
+    *(ushort4*)buf2560 = rsGetElementAt_ushort4(*(rs_allocation*)buf2561, *(uint32_t*)buf2562);
+    *(int*)buf2563 = rsGetElementAt_int(*(rs_allocation*)buf2564, *(uint32_t*)buf2565);
+    *(int2*)buf2566 = rsGetElementAt_int2(*(rs_allocation*)buf2567, *(uint32_t*)buf2568);
+    *(int3*)buf2569 = rsGetElementAt_int3(*(rs_allocation*)buf2570, *(uint32_t*)buf2571);
+    *(int4*)buf2572 = rsGetElementAt_int4(*(rs_allocation*)buf2573, *(uint32_t*)buf2574);
+    *(uint*)buf2575 = rsGetElementAt_uint(*(rs_allocation*)buf2576, *(uint32_t*)buf2577);
+    *(uint2*)buf2578 = rsGetElementAt_uint2(*(rs_allocation*)buf2579, *(uint32_t*)buf2580);
+    *(uint3*)buf2581 = rsGetElementAt_uint3(*(rs_allocation*)buf2582, *(uint32_t*)buf2583);
+    *(uint4*)buf2584 = rsGetElementAt_uint4(*(rs_allocation*)buf2585, *(uint32_t*)buf2586);
+    *(long*)buf2587 = rsGetElementAt_long(*(rs_allocation*)buf2588, *(uint32_t*)buf2589);
+    *(long2*)buf2590 = rsGetElementAt_long2(*(rs_allocation*)buf2591, *(uint32_t*)buf2592);
+    *(long3*)buf2593 = rsGetElementAt_long3(*(rs_allocation*)buf2594, *(uint32_t*)buf2595);
+    *(long4*)buf2596 = rsGetElementAt_long4(*(rs_allocation*)buf2597, *(uint32_t*)buf2598);
+    *(ulong*)buf2599 = rsGetElementAt_ulong(*(rs_allocation*)buf2600, *(uint32_t*)buf2601);
+    *(ulong2*)buf2602 = rsGetElementAt_ulong2(*(rs_allocation*)buf2603, *(uint32_t*)buf2604);
+    *(ulong3*)buf2605 = rsGetElementAt_ulong3(*(rs_allocation*)buf2606, *(uint32_t*)buf2607);
+    *(ulong4*)buf2608 = rsGetElementAt_ulong4(*(rs_allocation*)buf2609, *(uint32_t*)buf2610);
+    *(float*)buf2611 = rsGetElementAt_float(*(rs_allocation*)buf2612, *(uint32_t*)buf2613, *(uint32_t*)buf2614);
+    *(float2*)buf2615 = rsGetElementAt_float2(*(rs_allocation*)buf2616, *(uint32_t*)buf2617, *(uint32_t*)buf2618);
+    *(float3*)buf2619 = rsGetElementAt_float3(*(rs_allocation*)buf2620, *(uint32_t*)buf2621, *(uint32_t*)buf2622);
+    *(float4*)buf2623 = rsGetElementAt_float4(*(rs_allocation*)buf2624, *(uint32_t*)buf2625, *(uint32_t*)buf2626);
+    *(double*)buf2627 = rsGetElementAt_double(*(rs_allocation*)buf2628, *(uint32_t*)buf2629, *(uint32_t*)buf2630);
+    *(double2*)buf2631 = rsGetElementAt_double2(*(rs_allocation*)buf2632, *(uint32_t*)buf2633, *(uint32_t*)buf2634);
+    *(double3*)buf2635 = rsGetElementAt_double3(*(rs_allocation*)buf2636, *(uint32_t*)buf2637, *(uint32_t*)buf2638);
+    *(double4*)buf2639 = rsGetElementAt_double4(*(rs_allocation*)buf2640, *(uint32_t*)buf2641, *(uint32_t*)buf2642);
+    *(char*)buf2643 = rsGetElementAt_char(*(rs_allocation*)buf2644, *(uint32_t*)buf2645, *(uint32_t*)buf2646);
+    *(char2*)buf2647 = rsGetElementAt_char2(*(rs_allocation*)buf2648, *(uint32_t*)buf2649, *(uint32_t*)buf2650);
+    *(char3*)buf2651 = rsGetElementAt_char3(*(rs_allocation*)buf2652, *(uint32_t*)buf2653, *(uint32_t*)buf2654);
+    *(char4*)buf2655 = rsGetElementAt_char4(*(rs_allocation*)buf2656, *(uint32_t*)buf2657, *(uint32_t*)buf2658);
+    *(uchar*)buf2659 = rsGetElementAt_uchar(*(rs_allocation*)buf2660, *(uint32_t*)buf2661, *(uint32_t*)buf2662);
+    *(uchar2*)buf2663 = rsGetElementAt_uchar2(*(rs_allocation*)buf2664, *(uint32_t*)buf2665, *(uint32_t*)buf2666);
+    *(uchar3*)buf2667 = rsGetElementAt_uchar3(*(rs_allocation*)buf2668, *(uint32_t*)buf2669, *(uint32_t*)buf2670);
+    *(uchar4*)buf2671 = rsGetElementAt_uchar4(*(rs_allocation*)buf2672, *(uint32_t*)buf2673, *(uint32_t*)buf2674);
+    *(short*)buf2675 = rsGetElementAt_short(*(rs_allocation*)buf2676, *(uint32_t*)buf2677, *(uint32_t*)buf2678);
+    *(short2*)buf2679 = rsGetElementAt_short2(*(rs_allocation*)buf2680, *(uint32_t*)buf2681, *(uint32_t*)buf2682);
+    *(short3*)buf2683 = rsGetElementAt_short3(*(rs_allocation*)buf2684, *(uint32_t*)buf2685, *(uint32_t*)buf2686);
+    *(short4*)buf2687 = rsGetElementAt_short4(*(rs_allocation*)buf2688, *(uint32_t*)buf2689, *(uint32_t*)buf2690);
+    *(ushort*)buf2691 = rsGetElementAt_ushort(*(rs_allocation*)buf2692, *(uint32_t*)buf2693, *(uint32_t*)buf2694);
+    *(ushort2*)buf2695 = rsGetElementAt_ushort2(*(rs_allocation*)buf2696, *(uint32_t*)buf2697, *(uint32_t*)buf2698);
+    *(ushort3*)buf2699 = rsGetElementAt_ushort3(*(rs_allocation*)buf2700, *(uint32_t*)buf2701, *(uint32_t*)buf2702);
+    *(ushort4*)buf2703 = rsGetElementAt_ushort4(*(rs_allocation*)buf2704, *(uint32_t*)buf2705, *(uint32_t*)buf2706);
+    *(int*)buf2707 = rsGetElementAt_int(*(rs_allocation*)buf2708, *(uint32_t*)buf2709, *(uint32_t*)buf2710);
+    *(int2*)buf2711 = rsGetElementAt_int2(*(rs_allocation*)buf2712, *(uint32_t*)buf2713, *(uint32_t*)buf2714);
+    *(int3*)buf2715 = rsGetElementAt_int3(*(rs_allocation*)buf2716, *(uint32_t*)buf2717, *(uint32_t*)buf2718);
+    *(int4*)buf2719 = rsGetElementAt_int4(*(rs_allocation*)buf2720, *(uint32_t*)buf2721, *(uint32_t*)buf2722);
+    *(uint*)buf2723 = rsGetElementAt_uint(*(rs_allocation*)buf2724, *(uint32_t*)buf2725, *(uint32_t*)buf2726);
+    *(uint2*)buf2727 = rsGetElementAt_uint2(*(rs_allocation*)buf2728, *(uint32_t*)buf2729, *(uint32_t*)buf2730);
+    *(uint3*)buf2731 = rsGetElementAt_uint3(*(rs_allocation*)buf2732, *(uint32_t*)buf2733, *(uint32_t*)buf2734);
+    *(uint4*)buf2735 = rsGetElementAt_uint4(*(rs_allocation*)buf2736, *(uint32_t*)buf2737, *(uint32_t*)buf2738);
+    *(long*)buf2739 = rsGetElementAt_long(*(rs_allocation*)buf2740, *(uint32_t*)buf2741, *(uint32_t*)buf2742);
+    *(long2*)buf2743 = rsGetElementAt_long2(*(rs_allocation*)buf2744, *(uint32_t*)buf2745, *(uint32_t*)buf2746);
+    *(long3*)buf2747 = rsGetElementAt_long3(*(rs_allocation*)buf2748, *(uint32_t*)buf2749, *(uint32_t*)buf2750);
+    *(long4*)buf2751 = rsGetElementAt_long4(*(rs_allocation*)buf2752, *(uint32_t*)buf2753, *(uint32_t*)buf2754);
+    *(ulong*)buf2755 = rsGetElementAt_ulong(*(rs_allocation*)buf2756, *(uint32_t*)buf2757, *(uint32_t*)buf2758);
+    *(ulong2*)buf2759 = rsGetElementAt_ulong2(*(rs_allocation*)buf2760, *(uint32_t*)buf2761, *(uint32_t*)buf2762);
+    *(ulong3*)buf2763 = rsGetElementAt_ulong3(*(rs_allocation*)buf2764, *(uint32_t*)buf2765, *(uint32_t*)buf2766);
+    *(ulong4*)buf2767 = rsGetElementAt_ulong4(*(rs_allocation*)buf2768, *(uint32_t*)buf2769, *(uint32_t*)buf2770);
+    *(float*)buf2771 = rsGetElementAt_float(*(rs_allocation*)buf2772, *(uint32_t*)buf2773, *(uint32_t*)buf2774, *(uint32_t*)buf2775);
+    *(float2*)buf2776 = rsGetElementAt_float2(*(rs_allocation*)buf2777, *(uint32_t*)buf2778, *(uint32_t*)buf2779, *(uint32_t*)buf2780);
+    *(float3*)buf2781 = rsGetElementAt_float3(*(rs_allocation*)buf2782, *(uint32_t*)buf2783, *(uint32_t*)buf2784, *(uint32_t*)buf2785);
+    *(float4*)buf2786 = rsGetElementAt_float4(*(rs_allocation*)buf2787, *(uint32_t*)buf2788, *(uint32_t*)buf2789, *(uint32_t*)buf2790);
+    *(double*)buf2791 = rsGetElementAt_double(*(rs_allocation*)buf2792, *(uint32_t*)buf2793, *(uint32_t*)buf2794, *(uint32_t*)buf2795);
+    *(double2*)buf2796 = rsGetElementAt_double2(*(rs_allocation*)buf2797, *(uint32_t*)buf2798, *(uint32_t*)buf2799, *(uint32_t*)buf2800);
+    *(double3*)buf2801 = rsGetElementAt_double3(*(rs_allocation*)buf2802, *(uint32_t*)buf2803, *(uint32_t*)buf2804, *(uint32_t*)buf2805);
+    *(double4*)buf2806 = rsGetElementAt_double4(*(rs_allocation*)buf2807, *(uint32_t*)buf2808, *(uint32_t*)buf2809, *(uint32_t*)buf2810);
+    *(char*)buf2811 = rsGetElementAt_char(*(rs_allocation*)buf2812, *(uint32_t*)buf2813, *(uint32_t*)buf2814, *(uint32_t*)buf2815);
+    *(char2*)buf2816 = rsGetElementAt_char2(*(rs_allocation*)buf2817, *(uint32_t*)buf2818, *(uint32_t*)buf2819, *(uint32_t*)buf2820);
+    *(char3*)buf2821 = rsGetElementAt_char3(*(rs_allocation*)buf2822, *(uint32_t*)buf2823, *(uint32_t*)buf2824, *(uint32_t*)buf2825);
+    *(char4*)buf2826 = rsGetElementAt_char4(*(rs_allocation*)buf2827, *(uint32_t*)buf2828, *(uint32_t*)buf2829, *(uint32_t*)buf2830);
+    *(uchar*)buf2831 = rsGetElementAt_uchar(*(rs_allocation*)buf2832, *(uint32_t*)buf2833, *(uint32_t*)buf2834, *(uint32_t*)buf2835);
+    *(uchar2*)buf2836 = rsGetElementAt_uchar2(*(rs_allocation*)buf2837, *(uint32_t*)buf2838, *(uint32_t*)buf2839, *(uint32_t*)buf2840);
+    *(uchar3*)buf2841 = rsGetElementAt_uchar3(*(rs_allocation*)buf2842, *(uint32_t*)buf2843, *(uint32_t*)buf2844, *(uint32_t*)buf2845);
+    *(uchar4*)buf2846 = rsGetElementAt_uchar4(*(rs_allocation*)buf2847, *(uint32_t*)buf2848, *(uint32_t*)buf2849, *(uint32_t*)buf2850);
+    *(short*)buf2851 = rsGetElementAt_short(*(rs_allocation*)buf2852, *(uint32_t*)buf2853, *(uint32_t*)buf2854, *(uint32_t*)buf2855);
+    *(short2*)buf2856 = rsGetElementAt_short2(*(rs_allocation*)buf2857, *(uint32_t*)buf2858, *(uint32_t*)buf2859, *(uint32_t*)buf2860);
+    *(short3*)buf2861 = rsGetElementAt_short3(*(rs_allocation*)buf2862, *(uint32_t*)buf2863, *(uint32_t*)buf2864, *(uint32_t*)buf2865);
+    *(short4*)buf2866 = rsGetElementAt_short4(*(rs_allocation*)buf2867, *(uint32_t*)buf2868, *(uint32_t*)buf2869, *(uint32_t*)buf2870);
+    *(ushort*)buf2871 = rsGetElementAt_ushort(*(rs_allocation*)buf2872, *(uint32_t*)buf2873, *(uint32_t*)buf2874, *(uint32_t*)buf2875);
+    *(ushort2*)buf2876 = rsGetElementAt_ushort2(*(rs_allocation*)buf2877, *(uint32_t*)buf2878, *(uint32_t*)buf2879, *(uint32_t*)buf2880);
+    *(ushort3*)buf2881 = rsGetElementAt_ushort3(*(rs_allocation*)buf2882, *(uint32_t*)buf2883, *(uint32_t*)buf2884, *(uint32_t*)buf2885);
+    *(ushort4*)buf2886 = rsGetElementAt_ushort4(*(rs_allocation*)buf2887, *(uint32_t*)buf2888, *(uint32_t*)buf2889, *(uint32_t*)buf2890);
+    *(int*)buf2891 = rsGetElementAt_int(*(rs_allocation*)buf2892, *(uint32_t*)buf2893, *(uint32_t*)buf2894, *(uint32_t*)buf2895);
+    *(int2*)buf2896 = rsGetElementAt_int2(*(rs_allocation*)buf2897, *(uint32_t*)buf2898, *(uint32_t*)buf2899, *(uint32_t*)buf2900);
+    *(int3*)buf2901 = rsGetElementAt_int3(*(rs_allocation*)buf2902, *(uint32_t*)buf2903, *(uint32_t*)buf2904, *(uint32_t*)buf2905);
+    *(int4*)buf2906 = rsGetElementAt_int4(*(rs_allocation*)buf2907, *(uint32_t*)buf2908, *(uint32_t*)buf2909, *(uint32_t*)buf2910);
+    *(uint*)buf2911 = rsGetElementAt_uint(*(rs_allocation*)buf2912, *(uint32_t*)buf2913, *(uint32_t*)buf2914, *(uint32_t*)buf2915);
+    *(uint2*)buf2916 = rsGetElementAt_uint2(*(rs_allocation*)buf2917, *(uint32_t*)buf2918, *(uint32_t*)buf2919, *(uint32_t*)buf2920);
+    *(uint3*)buf2921 = rsGetElementAt_uint3(*(rs_allocation*)buf2922, *(uint32_t*)buf2923, *(uint32_t*)buf2924, *(uint32_t*)buf2925);
+    *(uint4*)buf2926 = rsGetElementAt_uint4(*(rs_allocation*)buf2927, *(uint32_t*)buf2928, *(uint32_t*)buf2929, *(uint32_t*)buf2930);
+    *(long*)buf2931 = rsGetElementAt_long(*(rs_allocation*)buf2932, *(uint32_t*)buf2933, *(uint32_t*)buf2934, *(uint32_t*)buf2935);
+    *(long2*)buf2936 = rsGetElementAt_long2(*(rs_allocation*)buf2937, *(uint32_t*)buf2938, *(uint32_t*)buf2939, *(uint32_t*)buf2940);
+    *(long3*)buf2941 = rsGetElementAt_long3(*(rs_allocation*)buf2942, *(uint32_t*)buf2943, *(uint32_t*)buf2944, *(uint32_t*)buf2945);
+    *(long4*)buf2946 = rsGetElementAt_long4(*(rs_allocation*)buf2947, *(uint32_t*)buf2948, *(uint32_t*)buf2949, *(uint32_t*)buf2950);
+    *(ulong*)buf2951 = rsGetElementAt_ulong(*(rs_allocation*)buf2952, *(uint32_t*)buf2953, *(uint32_t*)buf2954, *(uint32_t*)buf2955);
+    *(ulong2*)buf2956 = rsGetElementAt_ulong2(*(rs_allocation*)buf2957, *(uint32_t*)buf2958, *(uint32_t*)buf2959, *(uint32_t*)buf2960);
+    *(ulong3*)buf2961 = rsGetElementAt_ulong3(*(rs_allocation*)buf2962, *(uint32_t*)buf2963, *(uint32_t*)buf2964, *(uint32_t*)buf2965);
+    *(ulong4*)buf2966 = rsGetElementAt_ulong4(*(rs_allocation*)buf2967, *(uint32_t*)buf2968, *(uint32_t*)buf2969, *(uint32_t*)buf2970);
+    *(uchar*)buf2971 = rsGetElementAtYuv_uchar_U(*(rs_allocation*)buf2972, *(uint32_t*)buf2973, *(uint32_t*)buf2974);
+    *(uchar*)buf2975 = rsGetElementAtYuv_uchar_V(*(rs_allocation*)buf2976, *(uint32_t*)buf2977, *(uint32_t*)buf2978);
+    *(uchar*)buf2979 = rsGetElementAtYuv_uchar_Y(*(rs_allocation*)buf2980, *(uint32_t*)buf2981, *(uint32_t*)buf2982);
+    *(bool*)buf2983 = rsIsObject(*(rs_element*)buf2984);
+    *(bool*)buf2985 = rsIsObject(*(rs_type*)buf2986);
+    *(bool*)buf2987 = rsIsObject(*(rs_allocation*)buf2988);
+    *(bool*)buf2989 = rsIsObject(*(rs_sampler*)buf2990);
+    *(bool*)buf2991 = rsIsObject(*(rs_script*)buf2992);
+#ifndef __LP64__
+    *(bool*)buf2993 = rsIsObject(*(rs_mesh*)buf2994);
+    *(bool*)buf2995 = rsIsObject(*(rs_program_fragment*)buf2996);
+    *(bool*)buf2997 = rsIsObject(*(rs_program_vertex*)buf2998);
+    *(bool*)buf2999 = rsIsObject(*(rs_program_raster*)buf3000);
+    *(bool*)buf3001 = rsIsObject(*(rs_program_store*)buf3002);
+    *(bool*)buf3003 = rsIsObject(*(rs_font*)buf3004);
+#endif
+    *(bool*)buf3005 = rsIsSphereInFrustum((float4*) buf3006, (float4*) buf3007, (float4*) buf3008, (float4*) buf3009, (float4*) buf3010, (float4*) buf3011, (float4*) buf3012);
+    *(rs_tm**)buf3013 = rsLocaltime((rs_tm*) buf3014, (const rs_time_t*) buf3015);
+    *(float*)buf3016 = rsMatrixGet((const rs_matrix4x4*) buf3017, *(uint32_t*)buf3018, *(uint32_t*)buf3019);
+    *(float*)buf3020 = rsMatrixGet((const rs_matrix3x3*) buf3021, *(uint32_t*)buf3022, *(uint32_t*)buf3023);
+    *(float*)buf3024 = rsMatrixGet((const rs_matrix2x2*) buf3025, *(uint32_t*)buf3026, *(uint32_t*)buf3027);
+    *(bool*)buf3028 = rsMatrixInverse((rs_matrix4x4*) buf3029);
+    *(bool*)buf3030 = rsMatrixInverseTranspose((rs_matrix4x4*) buf3031);
+    rsMatrixLoad((rs_matrix4x4*) buf3032, (const float*) buf3033);
+    rsMatrixLoad((rs_matrix3x3*) buf3034, (const float*) buf3035);
+    rsMatrixLoad((rs_matrix2x2*) buf3036, (const float*) buf3037);
+    rsMatrixLoad((rs_matrix4x4*) buf3038, (const rs_matrix4x4*) buf3039);
+    rsMatrixLoad((rs_matrix3x3*) buf3040, (const rs_matrix3x3*) buf3041);
+    rsMatrixLoad((rs_matrix2x2*) buf3042, (const rs_matrix2x2*) buf3043);
+    rsMatrixLoad((rs_matrix4x4*) buf3044, (const rs_matrix3x3*) buf3045);
+    rsMatrixLoad((rs_matrix4x4*) buf3046, (const rs_matrix2x2*) buf3047);
+    rsMatrixLoadFrustum((rs_matrix4x4*) buf3048, *(float*)buf3049, *(float*)buf3050, *(float*)buf3051, *(float*)buf3052, *(float*)buf3053, *(float*)buf3054);
+    rsMatrixLoadIdentity((rs_matrix4x4*) buf3055);
+    rsMatrixLoadIdentity((rs_matrix3x3*) buf3056);
+    rsMatrixLoadIdentity((rs_matrix2x2*) buf3057);
+    rsMatrixLoadMultiply((rs_matrix4x4*) buf3058, (const rs_matrix4x4*) buf3059, (const rs_matrix4x4*) buf3060);
+    rsMatrixLoadMultiply((rs_matrix3x3*) buf3061, (const rs_matrix3x3*) buf3062, (const rs_matrix3x3*) buf3063);
+    rsMatrixLoadMultiply((rs_matrix2x2*) buf3064, (const rs_matrix2x2*) buf3065, (const rs_matrix2x2*) buf3066);
+    rsMatrixLoadOrtho((rs_matrix4x4*) buf3067, *(float*)buf3068, *(float*)buf3069, *(float*)buf3070, *(float*)buf3071, *(float*)buf3072, *(float*)buf3073);
+    rsMatrixLoadPerspective((rs_matrix4x4*) buf3074, *(float*)buf3075, *(float*)buf3076, *(float*)buf3077, *(float*)buf3078);
+    rsMatrixLoadRotate((rs_matrix4x4*) buf3079, *(float*)buf3080, *(float*)buf3081, *(float*)buf3082, *(float*)buf3083);
+    rsMatrixLoadScale((rs_matrix4x4*) buf3084, *(float*)buf3085, *(float*)buf3086, *(float*)buf3087);
+    rsMatrixLoadTranslate((rs_matrix4x4*) buf3088, *(float*)buf3089, *(float*)buf3090, *(float*)buf3091);
+    rsMatrixMultiply((rs_matrix4x4*) buf3092, (const rs_matrix4x4*) buf3093);
+    rsMatrixMultiply((rs_matrix3x3*) buf3094, (const rs_matrix3x3*) buf3095);
+    rsMatrixMultiply((rs_matrix2x2*) buf3096, (const rs_matrix2x2*) buf3097);
+    *(float4*)buf3098 = rsMatrixMultiply((const rs_matrix4x4*) buf3099, *(float4*)buf3100);
+    *(float4*)buf3101 = rsMatrixMultiply((const rs_matrix4x4*) buf3102, *(float3*)buf3103);
+    *(float4*)buf3104 = rsMatrixMultiply((const rs_matrix4x4*) buf3105, *(float2*)buf3106);
+    *(float3*)buf3107 = rsMatrixMultiply((const rs_matrix3x3*) buf3108, *(float3*)buf3109);
+    *(float3*)buf3110 = rsMatrixMultiply((const rs_matrix3x3*) buf3111, *(float2*)buf3112);
+    *(float2*)buf3113 = rsMatrixMultiply((const rs_matrix2x2*) buf3114, *(float2*)buf3115);
+    rsMatrixRotate((rs_matrix4x4*) buf3116, *(float*)buf3117, *(float*)buf3118, *(float*)buf3119, *(float*)buf3120);
+    rsMatrixScale((rs_matrix4x4*) buf3121, *(float*)buf3122, *(float*)buf3123, *(float*)buf3124);
+    rsMatrixSet((rs_matrix4x4*) buf3125, *(uint32_t*)buf3126, *(uint32_t*)buf3127, *(float*)buf3128);
+    rsMatrixSet((rs_matrix3x3*) buf3129, *(uint32_t*)buf3130, *(uint32_t*)buf3131, *(float*)buf3132);
+    rsMatrixSet((rs_matrix2x2*) buf3133, *(uint32_t*)buf3134, *(uint32_t*)buf3135, *(float*)buf3136);
+    rsMatrixTranslate((rs_matrix4x4*) buf3137, *(float*)buf3138, *(float*)buf3139, *(float*)buf3140);
+    rsMatrixTranspose((rs_matrix4x4*) buf3141);
+    rsMatrixTranspose((rs_matrix3x3*) buf3142);
+    rsMatrixTranspose((rs_matrix2x2*) buf3143);
+    *(uchar4*)buf3144 = rsPackColorTo8888(*(float*)buf3145, *(float*)buf3146, *(float*)buf3147);
+    *(uchar4*)buf3148 = rsPackColorTo8888(*(float*)buf3149, *(float*)buf3150, *(float*)buf3151, *(float*)buf3152);
+    *(uchar4*)buf3153 = rsPackColorTo8888(*(float3*)buf3154);
+    *(uchar4*)buf3155 = rsPackColorTo8888(*(float4*)buf3156);
+    rsQuaternionAdd((rs_quaternion*) buf3157, (const rs_quaternion*) buf3158);
+    rsQuaternionConjugate((rs_quaternion*) buf3159);
+    *(float*)buf3160 = rsQuaternionDot((const rs_quaternion*) buf3161, (const rs_quaternion*) buf3162);
+    rsQuaternionGetMatrixUnit((rs_matrix4x4*) buf3163, (const rs_quaternion*) buf3164);
+    rsQuaternionLoadRotate((rs_quaternion*) buf3165, *(float*)buf3166, *(float*)buf3167, *(float*)buf3168, *(float*)buf3169);
+    rsQuaternionLoadRotateUnit((rs_quaternion*) buf3170, *(float*)buf3171, *(float*)buf3172, *(float*)buf3173, *(float*)buf3174);
+    rsQuaternionMultiply((rs_quaternion*) buf3175, *(float*)buf3176);
+    rsQuaternionMultiply((rs_quaternion*) buf3177, (const rs_quaternion*) buf3178);
+    rsQuaternionNormalize((rs_quaternion*) buf3179);
+    rsQuaternionSet((rs_quaternion*) buf3180, *(float*)buf3181, *(float*)buf3182, *(float*)buf3183, *(float*)buf3184);
+    rsQuaternionSet((rs_quaternion*) buf3185, (const rs_quaternion*) buf3186);
+    rsQuaternionSlerp((rs_quaternion*) buf3187, (const rs_quaternion*) buf3188, (const rs_quaternion*) buf3189, *(float*)buf3190);
+    *(int*)buf3191 = rsRand(*(int*)buf3192);
+    *(int*)buf3193 = rsRand(*(int*)buf3194, *(int*)buf3195);
+    *(float*)buf3196 = rsRand(*(float*)buf3197);
+    *(float*)buf3198 = rsRand(*(float*)buf3199, *(float*)buf3200);
+    *(float4*)buf3201 = rsSample(*(rs_allocation*)buf3202, *(rs_sampler*)buf3203, *(float*)buf3204);
+    *(float4*)buf3205 = rsSample(*(rs_allocation*)buf3206, *(rs_sampler*)buf3207, *(float*)buf3208, *(float*)buf3209);
+    *(float4*)buf3210 = rsSample(*(rs_allocation*)buf3211, *(rs_sampler*)buf3212, *(float2*)buf3213);
+    *(float4*)buf3214 = rsSample(*(rs_allocation*)buf3215, *(rs_sampler*)buf3216, *(float2*)buf3217, *(float*)buf3218);
+    *(float*)buf3219 = rsSamplerGetAnisotropy(*(rs_sampler*)buf3220);
+    *(rs_sampler_value*)buf3221 = rsSamplerGetMagnification(*(rs_sampler*)buf3222);
+    *(rs_sampler_value*)buf3223 = rsSamplerGetMinification(*(rs_sampler*)buf3224);
+    *(rs_sampler_value*)buf3225 = rsSamplerGetWrapS(*(rs_sampler*)buf3226);
+    *(rs_sampler_value*)buf3227 = rsSamplerGetWrapT(*(rs_sampler*)buf3228);
+    *(bool*)buf3229 = rsSendToClient(*(int*)buf3230);
+    *(bool*)buf3231 = rsSendToClient(*(int*)buf3232, (const void*) buf3233, *(uint*)buf3234);
+    rsSendToClientBlocking(*(int*)buf3235);
+    rsSendToClientBlocking(*(int*)buf3236, (const void*) buf3237, *(uint*)buf3238);
+    rsSetElementAt(*(rs_allocation*)buf3239, (void*) buf3240, *(uint32_t*)buf3241);
+    rsSetElementAt(*(rs_allocation*)buf3242, (void*) buf3243, *(uint32_t*)buf3244, *(uint32_t*)buf3245);
+    rsSetElementAt_float(*(rs_allocation*)buf3246, *(float*)buf3247, *(uint32_t*)buf3248);
+    rsSetElementAt_float2(*(rs_allocation*)buf3249, *(float2*)buf3250, *(uint32_t*)buf3251);
+    rsSetElementAt_float3(*(rs_allocation*)buf3252, *(float3*)buf3253, *(uint32_t*)buf3254);
+    rsSetElementAt_float4(*(rs_allocation*)buf3255, *(float4*)buf3256, *(uint32_t*)buf3257);
+    rsSetElementAt_double(*(rs_allocation*)buf3258, *(double*)buf3259, *(uint32_t*)buf3260);
+    rsSetElementAt_double2(*(rs_allocation*)buf3261, *(double2*)buf3262, *(uint32_t*)buf3263);
+    rsSetElementAt_double3(*(rs_allocation*)buf3264, *(double3*)buf3265, *(uint32_t*)buf3266);
+    rsSetElementAt_double4(*(rs_allocation*)buf3267, *(double4*)buf3268, *(uint32_t*)buf3269);
+    rsSetElementAt_char(*(rs_allocation*)buf3270, *(char*)buf3271, *(uint32_t*)buf3272);
+    rsSetElementAt_char2(*(rs_allocation*)buf3273, *(char2*)buf3274, *(uint32_t*)buf3275);
+    rsSetElementAt_char3(*(rs_allocation*)buf3276, *(char3*)buf3277, *(uint32_t*)buf3278);
+    rsSetElementAt_char4(*(rs_allocation*)buf3279, *(char4*)buf3280, *(uint32_t*)buf3281);
+    rsSetElementAt_uchar(*(rs_allocation*)buf3282, *(uchar*)buf3283, *(uint32_t*)buf3284);
+    rsSetElementAt_uchar2(*(rs_allocation*)buf3285, *(uchar2*)buf3286, *(uint32_t*)buf3287);
+    rsSetElementAt_uchar3(*(rs_allocation*)buf3288, *(uchar3*)buf3289, *(uint32_t*)buf3290);
+    rsSetElementAt_uchar4(*(rs_allocation*)buf3291, *(uchar4*)buf3292, *(uint32_t*)buf3293);
+    rsSetElementAt_short(*(rs_allocation*)buf3294, *(short*)buf3295, *(uint32_t*)buf3296);
+    rsSetElementAt_short2(*(rs_allocation*)buf3297, *(short2*)buf3298, *(uint32_t*)buf3299);
+    rsSetElementAt_short3(*(rs_allocation*)buf3300, *(short3*)buf3301, *(uint32_t*)buf3302);
+    rsSetElementAt_short4(*(rs_allocation*)buf3303, *(short4*)buf3304, *(uint32_t*)buf3305);
+    rsSetElementAt_ushort(*(rs_allocation*)buf3306, *(ushort*)buf3307, *(uint32_t*)buf3308);
+    rsSetElementAt_ushort2(*(rs_allocation*)buf3309, *(ushort2*)buf3310, *(uint32_t*)buf3311);
+    rsSetElementAt_ushort3(*(rs_allocation*)buf3312, *(ushort3*)buf3313, *(uint32_t*)buf3314);
+    rsSetElementAt_ushort4(*(rs_allocation*)buf3315, *(ushort4*)buf3316, *(uint32_t*)buf3317);
+    rsSetElementAt_int(*(rs_allocation*)buf3318, *(int*)buf3319, *(uint32_t*)buf3320);
+    rsSetElementAt_int2(*(rs_allocation*)buf3321, *(int2*)buf3322, *(uint32_t*)buf3323);
+    rsSetElementAt_int3(*(rs_allocation*)buf3324, *(int3*)buf3325, *(uint32_t*)buf3326);
+    rsSetElementAt_int4(*(rs_allocation*)buf3327, *(int4*)buf3328, *(uint32_t*)buf3329);
+    rsSetElementAt_uint(*(rs_allocation*)buf3330, *(uint*)buf3331, *(uint32_t*)buf3332);
+    rsSetElementAt_uint2(*(rs_allocation*)buf3333, *(uint2*)buf3334, *(uint32_t*)buf3335);
+    rsSetElementAt_uint3(*(rs_allocation*)buf3336, *(uint3*)buf3337, *(uint32_t*)buf3338);
+    rsSetElementAt_uint4(*(rs_allocation*)buf3339, *(uint4*)buf3340, *(uint32_t*)buf3341);
+    rsSetElementAt_long(*(rs_allocation*)buf3342, *(long*)buf3343, *(uint32_t*)buf3344);
+    rsSetElementAt_long2(*(rs_allocation*)buf3345, *(long2*)buf3346, *(uint32_t*)buf3347);
+    rsSetElementAt_long3(*(rs_allocation*)buf3348, *(long3*)buf3349, *(uint32_t*)buf3350);
+    rsSetElementAt_long4(*(rs_allocation*)buf3351, *(long4*)buf3352, *(uint32_t*)buf3353);
+    rsSetElementAt_ulong(*(rs_allocation*)buf3354, *(ulong*)buf3355, *(uint32_t*)buf3356);
+    rsSetElementAt_ulong2(*(rs_allocation*)buf3357, *(ulong2*)buf3358, *(uint32_t*)buf3359);
+    rsSetElementAt_ulong3(*(rs_allocation*)buf3360, *(ulong3*)buf3361, *(uint32_t*)buf3362);
+    rsSetElementAt_ulong4(*(rs_allocation*)buf3363, *(ulong4*)buf3364, *(uint32_t*)buf3365);
+    rsSetElementAt_float(*(rs_allocation*)buf3366, *(float*)buf3367, *(uint32_t*)buf3368, *(uint32_t*)buf3369);
+    rsSetElementAt_float2(*(rs_allocation*)buf3370, *(float2*)buf3371, *(uint32_t*)buf3372, *(uint32_t*)buf3373);
+    rsSetElementAt_float3(*(rs_allocation*)buf3374, *(float3*)buf3375, *(uint32_t*)buf3376, *(uint32_t*)buf3377);
+    rsSetElementAt_float4(*(rs_allocation*)buf3378, *(float4*)buf3379, *(uint32_t*)buf3380, *(uint32_t*)buf3381);
+    rsSetElementAt_double(*(rs_allocation*)buf3382, *(double*)buf3383, *(uint32_t*)buf3384, *(uint32_t*)buf3385);
+    rsSetElementAt_double2(*(rs_allocation*)buf3386, *(double2*)buf3387, *(uint32_t*)buf3388, *(uint32_t*)buf3389);
+    rsSetElementAt_double3(*(rs_allocation*)buf3390, *(double3*)buf3391, *(uint32_t*)buf3392, *(uint32_t*)buf3393);
+    rsSetElementAt_double4(*(rs_allocation*)buf3394, *(double4*)buf3395, *(uint32_t*)buf3396, *(uint32_t*)buf3397);
+    rsSetElementAt_char(*(rs_allocation*)buf3398, *(char*)buf3399, *(uint32_t*)buf3400, *(uint32_t*)buf3401);
+    rsSetElementAt_char2(*(rs_allocation*)buf3402, *(char2*)buf3403, *(uint32_t*)buf3404, *(uint32_t*)buf3405);
+    rsSetElementAt_char3(*(rs_allocation*)buf3406, *(char3*)buf3407, *(uint32_t*)buf3408, *(uint32_t*)buf3409);
+    rsSetElementAt_char4(*(rs_allocation*)buf3410, *(char4*)buf3411, *(uint32_t*)buf3412, *(uint32_t*)buf3413);
+    rsSetElementAt_uchar(*(rs_allocation*)buf3414, *(uchar*)buf3415, *(uint32_t*)buf3416, *(uint32_t*)buf3417);
+    rsSetElementAt_uchar2(*(rs_allocation*)buf3418, *(uchar2*)buf3419, *(uint32_t*)buf3420, *(uint32_t*)buf3421);
+    rsSetElementAt_uchar3(*(rs_allocation*)buf3422, *(uchar3*)buf3423, *(uint32_t*)buf3424, *(uint32_t*)buf3425);
+    rsSetElementAt_uchar4(*(rs_allocation*)buf3426, *(uchar4*)buf3427, *(uint32_t*)buf3428, *(uint32_t*)buf3429);
+    rsSetElementAt_short(*(rs_allocation*)buf3430, *(short*)buf3431, *(uint32_t*)buf3432, *(uint32_t*)buf3433);
+    rsSetElementAt_short2(*(rs_allocation*)buf3434, *(short2*)buf3435, *(uint32_t*)buf3436, *(uint32_t*)buf3437);
+    rsSetElementAt_short3(*(rs_allocation*)buf3438, *(short3*)buf3439, *(uint32_t*)buf3440, *(uint32_t*)buf3441);
+    rsSetElementAt_short4(*(rs_allocation*)buf3442, *(short4*)buf3443, *(uint32_t*)buf3444, *(uint32_t*)buf3445);
+    rsSetElementAt_ushort(*(rs_allocation*)buf3446, *(ushort*)buf3447, *(uint32_t*)buf3448, *(uint32_t*)buf3449);
+    rsSetElementAt_ushort2(*(rs_allocation*)buf3450, *(ushort2*)buf3451, *(uint32_t*)buf3452, *(uint32_t*)buf3453);
+    rsSetElementAt_ushort3(*(rs_allocation*)buf3454, *(ushort3*)buf3455, *(uint32_t*)buf3456, *(uint32_t*)buf3457);
+    rsSetElementAt_ushort4(*(rs_allocation*)buf3458, *(ushort4*)buf3459, *(uint32_t*)buf3460, *(uint32_t*)buf3461);
+    rsSetElementAt_int(*(rs_allocation*)buf3462, *(int*)buf3463, *(uint32_t*)buf3464, *(uint32_t*)buf3465);
+    rsSetElementAt_int2(*(rs_allocation*)buf3466, *(int2*)buf3467, *(uint32_t*)buf3468, *(uint32_t*)buf3469);
+    rsSetElementAt_int3(*(rs_allocation*)buf3470, *(int3*)buf3471, *(uint32_t*)buf3472, *(uint32_t*)buf3473);
+    rsSetElementAt_int4(*(rs_allocation*)buf3474, *(int4*)buf3475, *(uint32_t*)buf3476, *(uint32_t*)buf3477);
+    rsSetElementAt_uint(*(rs_allocation*)buf3478, *(uint*)buf3479, *(uint32_t*)buf3480, *(uint32_t*)buf3481);
+    rsSetElementAt_uint2(*(rs_allocation*)buf3482, *(uint2*)buf3483, *(uint32_t*)buf3484, *(uint32_t*)buf3485);
+    rsSetElementAt_uint3(*(rs_allocation*)buf3486, *(uint3*)buf3487, *(uint32_t*)buf3488, *(uint32_t*)buf3489);
+    rsSetElementAt_uint4(*(rs_allocation*)buf3490, *(uint4*)buf3491, *(uint32_t*)buf3492, *(uint32_t*)buf3493);
+    rsSetElementAt_long(*(rs_allocation*)buf3494, *(long*)buf3495, *(uint32_t*)buf3496, *(uint32_t*)buf3497);
+    rsSetElementAt_long2(*(rs_allocation*)buf3498, *(long2*)buf3499, *(uint32_t*)buf3500, *(uint32_t*)buf3501);
+    rsSetElementAt_long3(*(rs_allocation*)buf3502, *(long3*)buf3503, *(uint32_t*)buf3504, *(uint32_t*)buf3505);
+    rsSetElementAt_long4(*(rs_allocation*)buf3506, *(long4*)buf3507, *(uint32_t*)buf3508, *(uint32_t*)buf3509);
+    rsSetElementAt_ulong(*(rs_allocation*)buf3510, *(ulong*)buf3511, *(uint32_t*)buf3512, *(uint32_t*)buf3513);
+    rsSetElementAt_ulong2(*(rs_allocation*)buf3514, *(ulong2*)buf3515, *(uint32_t*)buf3516, *(uint32_t*)buf3517);
+    rsSetElementAt_ulong3(*(rs_allocation*)buf3518, *(ulong3*)buf3519, *(uint32_t*)buf3520, *(uint32_t*)buf3521);
+    rsSetElementAt_ulong4(*(rs_allocation*)buf3522, *(ulong4*)buf3523, *(uint32_t*)buf3524, *(uint32_t*)buf3525);
+    rsSetElementAt_float(*(rs_allocation*)buf3526, *(float*)buf3527, *(uint32_t*)buf3528, *(uint32_t*)buf3529, *(uint32_t*)buf3530);
+    rsSetElementAt_float2(*(rs_allocation*)buf3531, *(float2*)buf3532, *(uint32_t*)buf3533, *(uint32_t*)buf3534, *(uint32_t*)buf3535);
+    rsSetElementAt_float3(*(rs_allocation*)buf3536, *(float3*)buf3537, *(uint32_t*)buf3538, *(uint32_t*)buf3539, *(uint32_t*)buf3540);
+    rsSetElementAt_float4(*(rs_allocation*)buf3541, *(float4*)buf3542, *(uint32_t*)buf3543, *(uint32_t*)buf3544, *(uint32_t*)buf3545);
+    rsSetElementAt_double(*(rs_allocation*)buf3546, *(double*)buf3547, *(uint32_t*)buf3548, *(uint32_t*)buf3549, *(uint32_t*)buf3550);
+    rsSetElementAt_double2(*(rs_allocation*)buf3551, *(double2*)buf3552, *(uint32_t*)buf3553, *(uint32_t*)buf3554, *(uint32_t*)buf3555);
+    rsSetElementAt_double3(*(rs_allocation*)buf3556, *(double3*)buf3557, *(uint32_t*)buf3558, *(uint32_t*)buf3559, *(uint32_t*)buf3560);
+    rsSetElementAt_double4(*(rs_allocation*)buf3561, *(double4*)buf3562, *(uint32_t*)buf3563, *(uint32_t*)buf3564, *(uint32_t*)buf3565);
+    rsSetElementAt_char(*(rs_allocation*)buf3566, *(char*)buf3567, *(uint32_t*)buf3568, *(uint32_t*)buf3569, *(uint32_t*)buf3570);
+    rsSetElementAt_char2(*(rs_allocation*)buf3571, *(char2*)buf3572, *(uint32_t*)buf3573, *(uint32_t*)buf3574, *(uint32_t*)buf3575);
+    rsSetElementAt_char3(*(rs_allocation*)buf3576, *(char3*)buf3577, *(uint32_t*)buf3578, *(uint32_t*)buf3579, *(uint32_t*)buf3580);
+    rsSetElementAt_char4(*(rs_allocation*)buf3581, *(char4*)buf3582, *(uint32_t*)buf3583, *(uint32_t*)buf3584, *(uint32_t*)buf3585);
+    rsSetElementAt_uchar(*(rs_allocation*)buf3586, *(uchar*)buf3587, *(uint32_t*)buf3588, *(uint32_t*)buf3589, *(uint32_t*)buf3590);
+    rsSetElementAt_uchar2(*(rs_allocation*)buf3591, *(uchar2*)buf3592, *(uint32_t*)buf3593, *(uint32_t*)buf3594, *(uint32_t*)buf3595);
+    rsSetElementAt_uchar3(*(rs_allocation*)buf3596, *(uchar3*)buf3597, *(uint32_t*)buf3598, *(uint32_t*)buf3599, *(uint32_t*)buf3600);
+    rsSetElementAt_uchar4(*(rs_allocation*)buf3601, *(uchar4*)buf3602, *(uint32_t*)buf3603, *(uint32_t*)buf3604, *(uint32_t*)buf3605);
+    rsSetElementAt_short(*(rs_allocation*)buf3606, *(short*)buf3607, *(uint32_t*)buf3608, *(uint32_t*)buf3609, *(uint32_t*)buf3610);
+    rsSetElementAt_short2(*(rs_allocation*)buf3611, *(short2*)buf3612, *(uint32_t*)buf3613, *(uint32_t*)buf3614, *(uint32_t*)buf3615);
+    rsSetElementAt_short3(*(rs_allocation*)buf3616, *(short3*)buf3617, *(uint32_t*)buf3618, *(uint32_t*)buf3619, *(uint32_t*)buf3620);
+    rsSetElementAt_short4(*(rs_allocation*)buf3621, *(short4*)buf3622, *(uint32_t*)buf3623, *(uint32_t*)buf3624, *(uint32_t*)buf3625);
+    rsSetElementAt_ushort(*(rs_allocation*)buf3626, *(ushort*)buf3627, *(uint32_t*)buf3628, *(uint32_t*)buf3629, *(uint32_t*)buf3630);
+    rsSetElementAt_ushort2(*(rs_allocation*)buf3631, *(ushort2*)buf3632, *(uint32_t*)buf3633, *(uint32_t*)buf3634, *(uint32_t*)buf3635);
+    rsSetElementAt_ushort3(*(rs_allocation*)buf3636, *(ushort3*)buf3637, *(uint32_t*)buf3638, *(uint32_t*)buf3639, *(uint32_t*)buf3640);
+    rsSetElementAt_ushort4(*(rs_allocation*)buf3641, *(ushort4*)buf3642, *(uint32_t*)buf3643, *(uint32_t*)buf3644, *(uint32_t*)buf3645);
+    rsSetElementAt_int(*(rs_allocation*)buf3646, *(int*)buf3647, *(uint32_t*)buf3648, *(uint32_t*)buf3649, *(uint32_t*)buf3650);
+    rsSetElementAt_int2(*(rs_allocation*)buf3651, *(int2*)buf3652, *(uint32_t*)buf3653, *(uint32_t*)buf3654, *(uint32_t*)buf3655);
+    rsSetElementAt_int3(*(rs_allocation*)buf3656, *(int3*)buf3657, *(uint32_t*)buf3658, *(uint32_t*)buf3659, *(uint32_t*)buf3660);
+    rsSetElementAt_int4(*(rs_allocation*)buf3661, *(int4*)buf3662, *(uint32_t*)buf3663, *(uint32_t*)buf3664, *(uint32_t*)buf3665);
+    rsSetElementAt_uint(*(rs_allocation*)buf3666, *(uint*)buf3667, *(uint32_t*)buf3668, *(uint32_t*)buf3669, *(uint32_t*)buf3670);
+    rsSetElementAt_uint2(*(rs_allocation*)buf3671, *(uint2*)buf3672, *(uint32_t*)buf3673, *(uint32_t*)buf3674, *(uint32_t*)buf3675);
+    rsSetElementAt_uint3(*(rs_allocation*)buf3676, *(uint3*)buf3677, *(uint32_t*)buf3678, *(uint32_t*)buf3679, *(uint32_t*)buf3680);
+    rsSetElementAt_uint4(*(rs_allocation*)buf3681, *(uint4*)buf3682, *(uint32_t*)buf3683, *(uint32_t*)buf3684, *(uint32_t*)buf3685);
+    rsSetElementAt_long(*(rs_allocation*)buf3686, *(long*)buf3687, *(uint32_t*)buf3688, *(uint32_t*)buf3689, *(uint32_t*)buf3690);
+    rsSetElementAt_long2(*(rs_allocation*)buf3691, *(long2*)buf3692, *(uint32_t*)buf3693, *(uint32_t*)buf3694, *(uint32_t*)buf3695);
+    rsSetElementAt_long3(*(rs_allocation*)buf3696, *(long3*)buf3697, *(uint32_t*)buf3698, *(uint32_t*)buf3699, *(uint32_t*)buf3700);
+    rsSetElementAt_long4(*(rs_allocation*)buf3701, *(long4*)buf3702, *(uint32_t*)buf3703, *(uint32_t*)buf3704, *(uint32_t*)buf3705);
+    rsSetElementAt_ulong(*(rs_allocation*)buf3706, *(ulong*)buf3707, *(uint32_t*)buf3708, *(uint32_t*)buf3709, *(uint32_t*)buf3710);
+    rsSetElementAt_ulong2(*(rs_allocation*)buf3711, *(ulong2*)buf3712, *(uint32_t*)buf3713, *(uint32_t*)buf3714, *(uint32_t*)buf3715);
+    rsSetElementAt_ulong3(*(rs_allocation*)buf3716, *(ulong3*)buf3717, *(uint32_t*)buf3718, *(uint32_t*)buf3719, *(uint32_t*)buf3720);
+    rsSetElementAt_ulong4(*(rs_allocation*)buf3721, *(ulong4*)buf3722, *(uint32_t*)buf3723, *(uint32_t*)buf3724, *(uint32_t*)buf3725);
+    rsSetObject((rs_element*) buf3726, *(rs_element*)buf3727);
+    rsSetObject((rs_type*) buf3728, *(rs_type*)buf3729);
+    rsSetObject((rs_allocation*) buf3730, *(rs_allocation*)buf3731);
+    rsSetObject((rs_sampler*) buf3732, *(rs_sampler*)buf3733);
+    rsSetObject((rs_script*) buf3734, *(rs_script*)buf3735);
+#ifndef __LP64__
+    rsSetObject((rs_mesh*) buf3736, *(rs_mesh*)buf3737);
+    rsSetObject((rs_program_fragment*) buf3738, *(rs_program_fragment*)buf3739);
+    rsSetObject((rs_program_vertex*) buf3740, *(rs_program_vertex*)buf3741);
+    rsSetObject((rs_program_raster*) buf3742, *(rs_program_raster*)buf3743);
+    rsSetObject((rs_program_store*) buf3744, *(rs_program_store*)buf3745);
+    rsSetObject((rs_font*) buf3746, *(rs_font*)buf3747);
+#endif
+    *(rs_time_t*)buf3748 = rsTime((rs_time_t*) buf3749);
+    *(float4*)buf3750 = rsUnpackColor8888(*(uchar4*)buf3751);
+    *(int64_t*)buf3752 = rsUptimeMillis();
+    *(int64_t*)buf3753 = rsUptimeNanos();
+    *(float4*)buf3754 = rsYuvToRGBA_float4(*(uchar*)buf3755, *(uchar*)buf3756, *(uchar*)buf3757);
+    *(uchar4*)buf3758 = rsYuvToRGBA_uchar4(*(uchar*)buf3759, *(uchar*)buf3760, *(uchar*)buf3761);
+#ifndef __LP64__
+    rsgAllocationSyncAll(*(rs_allocation*)buf3762);
+#endif
+#ifndef __LP64__
+    rsgAllocationSyncAll(*(rs_allocation*)buf3763, *(rs_allocation_usage_type*)buf3764);
+#endif
+#ifndef __LP64__
+    rsgBindColorTarget(*(rs_allocation*)buf3765, *(uint*)buf3766);
+#endif
+#ifndef __LP64__
+    rsgBindConstant(*(rs_program_fragment*)buf3767, *(uint*)buf3768, *(rs_allocation*)buf3769);
+#endif
+#ifndef __LP64__
+    rsgBindConstant(*(rs_program_vertex*)buf3770, *(uint*)buf3771, *(rs_allocation*)buf3772);
+#endif
+#ifndef __LP64__
+    rsgBindDepthTarget(*(rs_allocation*)buf3773);
+#endif
+#ifndef __LP64__
+    rsgBindFont(*(rs_font*)buf3774);
+#endif
+#ifndef __LP64__
+    rsgBindProgramFragment(*(rs_program_fragment*)buf3775);
+#endif
+#ifndef __LP64__
+    rsgBindProgramRaster(*(rs_program_raster*)buf3776);
+#endif
+#ifndef __LP64__
+    rsgBindProgramStore(*(rs_program_store*)buf3777);
+#endif
+#ifndef __LP64__
+    rsgBindProgramVertex(*(rs_program_vertex*)buf3778);
+#endif
+#ifndef __LP64__
+    rsgBindSampler(*(rs_program_fragment*)buf3779, *(uint*)buf3780, *(rs_sampler*)buf3781);
+#endif
+#ifndef __LP64__
+    rsgBindTexture(*(rs_program_fragment*)buf3782, *(uint*)buf3783, *(rs_allocation*)buf3784);
+#endif
+#ifndef __LP64__
+    rsgClearAllRenderTargets();
+#endif
+#ifndef __LP64__
+    rsgClearColor(*(float*)buf3785, *(float*)buf3786, *(float*)buf3787, *(float*)buf3788);
+#endif
+#ifndef __LP64__
+    rsgClearColorTarget(*(uint*)buf3789);
+#endif
+#ifndef __LP64__
+    rsgClearDepth(*(float*)buf3790);
+#endif
+#ifndef __LP64__
+    rsgClearDepthTarget();
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf3791);
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf3792, *(uint*)buf3793);
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf3794, *(uint*)buf3795, *(uint*)buf3796, *(uint*)buf3797);
+#endif
+#ifndef __LP64__
+    rsgDrawQuad(*(float*)buf3798, *(float*)buf3799, *(float*)buf3800, *(float*)buf3801, *(float*)buf3802, *(float*)buf3803, *(float*)buf3804, *(float*)buf3805, *(float*)buf3806, *(float*)buf3807, *(float*)buf3808, *(float*)buf3809);
+#endif
+#ifndef __LP64__
+    rsgDrawQuadTexCoords(*(float*)buf3810, *(float*)buf3811, *(float*)buf3812, *(float*)buf3813, *(float*)buf3814, *(float*)buf3815, *(float*)buf3816, *(float*)buf3817, *(float*)buf3818, *(float*)buf3819, *(float*)buf3820, *(float*)buf3821, *(float*)buf3822, *(float*)buf3823, *(float*)buf3824, *(float*)buf3825, *(float*)buf3826, *(float*)buf3827, *(float*)buf3828, *(float*)buf3829);
+#endif
+#ifndef __LP64__
+    rsgDrawRect(*(float*)buf3830, *(float*)buf3831, *(float*)buf3832, *(float*)buf3833, *(float*)buf3834);
+#endif
+#ifndef __LP64__
+    rsgDrawSpriteScreenspace(*(float*)buf3835, *(float*)buf3836, *(float*)buf3837, *(float*)buf3838, *(float*)buf3839);
+#endif
+#ifndef __LP64__
+    rsgDrawText((const char*) buf3840, *(int*)buf3841, *(int*)buf3842);
+#endif
+#ifndef __LP64__
+    rsgDrawText(*(rs_allocation*)buf3843, *(int*)buf3844, *(int*)buf3845);
+#endif
+#ifndef __LP64__
+    *(uint*)buf3846 = rsgFinish();
+#endif
+#ifndef __LP64__
+    rsgFontColor(*(float*)buf3847, *(float*)buf3848, *(float*)buf3849, *(float*)buf3850);
+#endif
+#ifndef __LP64__
+    *(uint*)buf3851 = rsgGetHeight();
+#endif
+#ifndef __LP64__
+    *(uint*)buf3852 = rsgGetWidth();
+#endif
+#ifndef __LP64__
+    rsgMeasureText((const char*) buf3853, (int*) buf3854, (int*) buf3855, (int*) buf3856, (int*) buf3857);
+#endif
+#ifndef __LP64__
+    rsgMeasureText(*(rs_allocation*)buf3858, (int*) buf3859, (int*) buf3860, (int*) buf3861, (int*) buf3862);
+#endif
+#ifndef __LP64__
+    rsgMeshComputeBoundingBox(*(rs_mesh*)buf3863, (float*) buf3864, (float*) buf3865, (float*) buf3866, (float*) buf3867, (float*) buf3868, (float*) buf3869);
+#endif
+#ifndef __LP64__
+    rsgMeshComputeBoundingBox(*(rs_mesh*)buf3870, (float3*) buf3871, (float3*) buf3872);
+#endif
+#ifndef __LP64__
+    *(rs_allocation*)buf3873 = rsgMeshGetIndexAllocation(*(rs_mesh*)buf3874, *(uint32_t*)buf3875);
+#endif
+#ifndef __LP64__
+    *(rs_primitive*)buf3876 = rsgMeshGetPrimitive(*(rs_mesh*)buf3877, *(uint32_t*)buf3878);
+#endif
+#ifndef __LP64__
+    *(uint32_t*)buf3879 = rsgMeshGetPrimitiveCount(*(rs_mesh*)buf3880);
+#endif
+#ifndef __LP64__
+    *(rs_allocation*)buf3881 = rsgMeshGetVertexAllocation(*(rs_mesh*)buf3882, *(uint32_t*)buf3883);
+#endif
+#ifndef __LP64__
+    *(uint32_t*)buf3884 = rsgMeshGetVertexAllocationCount(*(rs_mesh*)buf3885);
+#endif
+#ifndef __LP64__
+    rsgProgramFragmentConstantColor(*(rs_program_fragment*)buf3886, *(float*)buf3887, *(float*)buf3888, *(float*)buf3889, *(float*)buf3890);
+#endif
+#ifndef __LP64__
+    *(rs_cull_mode*)buf3891 = rsgProgramRasterGetCullMode(*(rs_program_raster*)buf3892);
+#endif
+#ifndef __LP64__
+    *(bool*)buf3893 = rsgProgramRasterIsPointSpriteEnabled(*(rs_program_raster*)buf3894);
+#endif
+#ifndef __LP64__
+    *(rs_blend_dst_func*)buf3895 = rsgProgramStoreGetBlendDstFunc(*(rs_program_store*)buf3896);
+#endif
+#ifndef __LP64__
+    *(rs_blend_src_func*)buf3897 = rsgProgramStoreGetBlendSrcFunc(*(rs_program_store*)buf3898);
+#endif
+#ifndef __LP64__
+    *(rs_depth_func*)buf3899 = rsgProgramStoreGetDepthFunc(*(rs_program_store*)buf3900);
+#endif
+#ifndef __LP64__
+    *(bool*)buf3901 = rsgProgramStoreIsColorMaskAlphaEnabled(*(rs_program_store*)buf3902);
+#endif
+#ifndef __LP64__
+    *(bool*)buf3903 = rsgProgramStoreIsColorMaskBlueEnabled(*(rs_program_store*)buf3904);
+#endif
+#ifndef __LP64__
+    *(bool*)buf3905 = rsgProgramStoreIsColorMaskGreenEnabled(*(rs_program_store*)buf3906);
+#endif
+#ifndef __LP64__
+    *(bool*)buf3907 = rsgProgramStoreIsColorMaskRedEnabled(*(rs_program_store*)buf3908);
+#endif
+#ifndef __LP64__
+    *(bool*)buf3909 = rsgProgramStoreIsDepthMaskEnabled(*(rs_program_store*)buf3910);
+#endif
+#ifndef __LP64__
+    *(bool*)buf3911 = rsgProgramStoreIsDitherEnabled(*(rs_program_store*)buf3912);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexGetProjectionMatrix((rs_matrix4x4*) buf3913);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadModelMatrix((const rs_matrix4x4*) buf3914);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadProjectionMatrix((const rs_matrix4x4*) buf3915);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadTextureMatrix((const rs_matrix4x4*) buf3916);
+#endif
+    *(float*)buf3917 = rsqrt(*(float*)buf3918);
+    *(float2*)buf3919 = rsqrt(*(float2*)buf3920);
+    *(float3*)buf3921 = rsqrt(*(float3*)buf3922);
+    *(float4*)buf3923 = rsqrt(*(float4*)buf3924);
+    *(float*)buf3925 = sign(*(float*)buf3926);
+    *(float2*)buf3927 = sign(*(float2*)buf3928);
+    *(float3*)buf3929 = sign(*(float3*)buf3930);
+    *(float4*)buf3931 = sign(*(float4*)buf3932);
+    *(float*)buf3933 = sin(*(float*)buf3934);
+    *(float2*)buf3935 = sin(*(float2*)buf3936);
+    *(float3*)buf3937 = sin(*(float3*)buf3938);
+    *(float4*)buf3939 = sin(*(float4*)buf3940);
+    *(float*)buf3941 = sincos(*(float*)buf3942, (float*) buf3943);
+    *(float2*)buf3944 = sincos(*(float2*)buf3945, (float2*) buf3946);
+    *(float3*)buf3947 = sincos(*(float3*)buf3948, (float3*) buf3949);
+    *(float4*)buf3950 = sincos(*(float4*)buf3951, (float4*) buf3952);
+    *(float*)buf3953 = sinh(*(float*)buf3954);
+    *(float2*)buf3955 = sinh(*(float2*)buf3956);
+    *(float3*)buf3957 = sinh(*(float3*)buf3958);
+    *(float4*)buf3959 = sinh(*(float4*)buf3960);
+    *(float*)buf3961 = sinpi(*(float*)buf3962);
+    *(float2*)buf3963 = sinpi(*(float2*)buf3964);
+    *(float3*)buf3965 = sinpi(*(float3*)buf3966);
+    *(float4*)buf3967 = sinpi(*(float4*)buf3968);
+    *(float*)buf3969 = sqrt(*(float*)buf3970);
+    *(float2*)buf3971 = sqrt(*(float2*)buf3972);
+    *(float3*)buf3973 = sqrt(*(float3*)buf3974);
+    *(float4*)buf3975 = sqrt(*(float4*)buf3976);
+    *(float*)buf3977 = step(*(float*)buf3978, *(float*)buf3979);
+    *(float2*)buf3980 = step(*(float2*)buf3981, *(float2*)buf3982);
+    *(float3*)buf3983 = step(*(float3*)buf3984, *(float3*)buf3985);
+    *(float4*)buf3986 = step(*(float4*)buf3987, *(float4*)buf3988);
+    *(float2*)buf3989 = step(*(float2*)buf3990, *(float*)buf3991);
+    *(float3*)buf3992 = step(*(float3*)buf3993, *(float*)buf3994);
+    *(float4*)buf3995 = step(*(float4*)buf3996, *(float*)buf3997);
+    *(float2*)buf3998 = step(*(float*)buf3999, *(float2*)buf4000);
+    *(float3*)buf4001 = step(*(float*)buf4002, *(float3*)buf4003);
+    *(float4*)buf4004 = step(*(float*)buf4005, *(float4*)buf4006);
+    *(float*)buf4007 = tan(*(float*)buf4008);
+    *(float2*)buf4009 = tan(*(float2*)buf4010);
+    *(float3*)buf4011 = tan(*(float3*)buf4012);
+    *(float4*)buf4013 = tan(*(float4*)buf4014);
+    *(float*)buf4015 = tanh(*(float*)buf4016);
+    *(float2*)buf4017 = tanh(*(float2*)buf4018);
+    *(float3*)buf4019 = tanh(*(float3*)buf4020);
+    *(float4*)buf4021 = tanh(*(float4*)buf4022);
+    *(float*)buf4023 = tanpi(*(float*)buf4024);
+    *(float2*)buf4025 = tanpi(*(float2*)buf4026);
+    *(float3*)buf4027 = tanpi(*(float3*)buf4028);
+    *(float4*)buf4029 = tanpi(*(float4*)buf4030);
+    *(float*)buf4031 = tgamma(*(float*)buf4032);
+    *(float2*)buf4033 = tgamma(*(float2*)buf4034);
+    *(float3*)buf4035 = tgamma(*(float3*)buf4036);
+    *(float4*)buf4037 = tgamma(*(float4*)buf4038);
+    *(float*)buf4039 = trunc(*(float*)buf4040);
+    *(float2*)buf4041 = trunc(*(float2*)buf4042);
+    *(float3*)buf4043 = trunc(*(float3*)buf4044);
+    *(float4*)buf4045 = trunc(*(float4*)buf4046);
+}
diff --git a/slang/tests/P_all_api_21/stderr.txt.expect b/slang/tests/P_all_api_21/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_all_api_21/stderr.txt.expect
diff --git a/slang/tests/P_all_api_21/stdout.txt.expect b/slang/tests/P_all_api_21/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_all_api_21/stdout.txt.expect
diff --git a/slang/tests/P_all_api_22/all22.rs b/slang/tests/P_all_api_22/all22.rs
new file mode 100644
index 0000000..9d20f7b
--- /dev/null
+++ b/slang/tests/P_all_api_22/all22.rs
@@ -0,0 +1,6588 @@
+// -target-api 22 -Wno-deprecated-declarations
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Don't edit this file!  It is auto-generated by frameworks/rs/api/generate.sh.
+
+#pragma version(1)
+#pragma rs java_package_name(com.example.renderscript.testallapi)
+
+#include "rs_graphics.rsh"
+
+char buf0[200];
+char buf1[200];
+char buf2[200];
+char buf3[200];
+char buf4[200];
+char buf5[200];
+char buf6[200];
+char buf7[200];
+char buf8[200];
+char buf9[200];
+char buf10[200];
+char buf11[200];
+char buf12[200];
+char buf13[200];
+char buf14[200];
+char buf15[200];
+char buf16[200];
+char buf17[200];
+char buf18[200];
+char buf19[200];
+char buf20[200];
+char buf21[200];
+char buf22[200];
+char buf23[200];
+char buf24[200];
+char buf25[200];
+char buf26[200];
+char buf27[200];
+char buf28[200];
+char buf29[200];
+char buf30[200];
+char buf31[200];
+char buf32[200];
+char buf33[200];
+char buf34[200];
+char buf35[200];
+char buf36[200];
+char buf37[200];
+char buf38[200];
+char buf39[200];
+char buf40[200];
+char buf41[200];
+char buf42[200];
+char buf43[200];
+char buf44[200];
+char buf45[200];
+char buf46[200];
+char buf47[200];
+char buf48[200];
+char buf49[200];
+char buf50[200];
+char buf51[200];
+char buf52[200];
+char buf53[200];
+char buf54[200];
+char buf55[200];
+char buf56[200];
+char buf57[200];
+char buf58[200];
+char buf59[200];
+char buf60[200];
+char buf61[200];
+char buf62[200];
+char buf63[200];
+char buf64[200];
+char buf65[200];
+char buf66[200];
+char buf67[200];
+char buf68[200];
+char buf69[200];
+char buf70[200];
+char buf71[200];
+char buf72[200];
+char buf73[200];
+char buf74[200];
+char buf75[200];
+char buf76[200];
+char buf77[200];
+char buf78[200];
+char buf79[200];
+char buf80[200];
+char buf81[200];
+char buf82[200];
+char buf83[200];
+char buf84[200];
+char buf85[200];
+char buf86[200];
+char buf87[200];
+char buf88[200];
+char buf89[200];
+char buf90[200];
+char buf91[200];
+char buf92[200];
+char buf93[200];
+char buf94[200];
+char buf95[200];
+char buf96[200];
+char buf97[200];
+char buf98[200];
+char buf99[200];
+char buf100[200];
+char buf101[200];
+char buf102[200];
+char buf103[200];
+char buf104[200];
+char buf105[200];
+char buf106[200];
+char buf107[200];
+char buf108[200];
+char buf109[200];
+char buf110[200];
+char buf111[200];
+char buf112[200];
+char buf113[200];
+char buf114[200];
+char buf115[200];
+char buf116[200];
+char buf117[200];
+char buf118[200];
+char buf119[200];
+char buf120[200];
+char buf121[200];
+char buf122[200];
+char buf123[200];
+char buf124[200];
+char buf125[200];
+char buf126[200];
+char buf127[200];
+char buf128[200];
+char buf129[200];
+char buf130[200];
+char buf131[200];
+char buf132[200];
+char buf133[200];
+char buf134[200];
+char buf135[200];
+char buf136[200];
+char buf137[200];
+char buf138[200];
+char buf139[200];
+char buf140[200];
+char buf141[200];
+char buf142[200];
+char buf143[200];
+char buf144[200];
+char buf145[200];
+char buf146[200];
+char buf147[200];
+char buf148[200];
+char buf149[200];
+char buf150[200];
+char buf151[200];
+char buf152[200];
+char buf153[200];
+char buf154[200];
+char buf155[200];
+char buf156[200];
+char buf157[200];
+char buf158[200];
+char buf159[200];
+char buf160[200];
+char buf161[200];
+char buf162[200];
+char buf163[200];
+char buf164[200];
+char buf165[200];
+char buf166[200];
+char buf167[200];
+char buf168[200];
+char buf169[200];
+char buf170[200];
+char buf171[200];
+char buf172[200];
+char buf173[200];
+char buf174[200];
+char buf175[200];
+char buf176[200];
+char buf177[200];
+char buf178[200];
+char buf179[200];
+char buf180[200];
+char buf181[200];
+char buf182[200];
+char buf183[200];
+char buf184[200];
+char buf185[200];
+char buf186[200];
+char buf187[200];
+char buf188[200];
+char buf189[200];
+char buf190[200];
+char buf191[200];
+char buf192[200];
+char buf193[200];
+char buf194[200];
+char buf195[200];
+char buf196[200];
+char buf197[200];
+char buf198[200];
+char buf199[200];
+char buf200[200];
+char buf201[200];
+char buf202[200];
+char buf203[200];
+char buf204[200];
+char buf205[200];
+char buf206[200];
+char buf207[200];
+char buf208[200];
+char buf209[200];
+char buf210[200];
+char buf211[200];
+char buf212[200];
+char buf213[200];
+char buf214[200];
+char buf215[200];
+char buf216[200];
+char buf217[200];
+char buf218[200];
+char buf219[200];
+char buf220[200];
+char buf221[200];
+char buf222[200];
+char buf223[200];
+char buf224[200];
+char buf225[200];
+char buf226[200];
+char buf227[200];
+char buf228[200];
+char buf229[200];
+char buf230[200];
+char buf231[200];
+char buf232[200];
+char buf233[200];
+char buf234[200];
+char buf235[200];
+char buf236[200];
+char buf237[200];
+char buf238[200];
+char buf239[200];
+char buf240[200];
+char buf241[200];
+char buf242[200];
+char buf243[200];
+char buf244[200];
+char buf245[200];
+char buf246[200];
+char buf247[200];
+char buf248[200];
+char buf249[200];
+char buf250[200];
+char buf251[200];
+char buf252[200];
+char buf253[200];
+char buf254[200];
+char buf255[200];
+char buf256[200];
+char buf257[200];
+char buf258[200];
+char buf259[200];
+char buf260[200];
+char buf261[200];
+char buf262[200];
+char buf263[200];
+char buf264[200];
+char buf265[200];
+char buf266[200];
+char buf267[200];
+char buf268[200];
+char buf269[200];
+char buf270[200];
+char buf271[200];
+char buf272[200];
+char buf273[200];
+char buf274[200];
+char buf275[200];
+char buf276[200];
+char buf277[200];
+char buf278[200];
+char buf279[200];
+char buf280[200];
+char buf281[200];
+char buf282[200];
+char buf283[200];
+char buf284[200];
+char buf285[200];
+char buf286[200];
+char buf287[200];
+char buf288[200];
+char buf289[200];
+char buf290[200];
+char buf291[200];
+char buf292[200];
+char buf293[200];
+char buf294[200];
+char buf295[200];
+char buf296[200];
+char buf297[200];
+char buf298[200];
+char buf299[200];
+char buf300[200];
+char buf301[200];
+char buf302[200];
+char buf303[200];
+char buf304[200];
+char buf305[200];
+char buf306[200];
+char buf307[200];
+char buf308[200];
+char buf309[200];
+char buf310[200];
+char buf311[200];
+char buf312[200];
+char buf313[200];
+char buf314[200];
+char buf315[200];
+char buf316[200];
+char buf317[200];
+char buf318[200];
+char buf319[200];
+char buf320[200];
+char buf321[200];
+char buf322[200];
+char buf323[200];
+char buf324[200];
+char buf325[200];
+char buf326[200];
+char buf327[200];
+char buf328[200];
+char buf329[200];
+char buf330[200];
+char buf331[200];
+char buf332[200];
+char buf333[200];
+char buf334[200];
+char buf335[200];
+char buf336[200];
+char buf337[200];
+char buf338[200];
+char buf339[200];
+char buf340[200];
+char buf341[200];
+char buf342[200];
+char buf343[200];
+char buf344[200];
+char buf345[200];
+char buf346[200];
+char buf347[200];
+char buf348[200];
+char buf349[200];
+char buf350[200];
+char buf351[200];
+char buf352[200];
+char buf353[200];
+char buf354[200];
+char buf355[200];
+char buf356[200];
+char buf357[200];
+char buf358[200];
+char buf359[200];
+char buf360[200];
+char buf361[200];
+char buf362[200];
+char buf363[200];
+char buf364[200];
+char buf365[200];
+char buf366[200];
+char buf367[200];
+char buf368[200];
+char buf369[200];
+char buf370[200];
+char buf371[200];
+char buf372[200];
+char buf373[200];
+char buf374[200];
+char buf375[200];
+char buf376[200];
+char buf377[200];
+char buf378[200];
+char buf379[200];
+char buf380[200];
+char buf381[200];
+char buf382[200];
+char buf383[200];
+char buf384[200];
+char buf385[200];
+char buf386[200];
+char buf387[200];
+char buf388[200];
+char buf389[200];
+char buf390[200];
+char buf391[200];
+char buf392[200];
+char buf393[200];
+char buf394[200];
+char buf395[200];
+char buf396[200];
+char buf397[200];
+char buf398[200];
+char buf399[200];
+char buf400[200];
+char buf401[200];
+char buf402[200];
+char buf403[200];
+char buf404[200];
+char buf405[200];
+char buf406[200];
+char buf407[200];
+char buf408[200];
+char buf409[200];
+char buf410[200];
+char buf411[200];
+char buf412[200];
+char buf413[200];
+char buf414[200];
+char buf415[200];
+char buf416[200];
+char buf417[200];
+char buf418[200];
+char buf419[200];
+char buf420[200];
+char buf421[200];
+char buf422[200];
+char buf423[200];
+char buf424[200];
+char buf425[200];
+char buf426[200];
+char buf427[200];
+char buf428[200];
+char buf429[200];
+char buf430[200];
+char buf431[200];
+char buf432[200];
+char buf433[200];
+char buf434[200];
+char buf435[200];
+char buf436[200];
+char buf437[200];
+char buf438[200];
+char buf439[200];
+char buf440[200];
+char buf441[200];
+char buf442[200];
+char buf443[200];
+char buf444[200];
+char buf445[200];
+char buf446[200];
+char buf447[200];
+char buf448[200];
+char buf449[200];
+char buf450[200];
+char buf451[200];
+char buf452[200];
+char buf453[200];
+char buf454[200];
+char buf455[200];
+char buf456[200];
+char buf457[200];
+char buf458[200];
+char buf459[200];
+char buf460[200];
+char buf461[200];
+char buf462[200];
+char buf463[200];
+char buf464[200];
+char buf465[200];
+char buf466[200];
+char buf467[200];
+char buf468[200];
+char buf469[200];
+char buf470[200];
+char buf471[200];
+char buf472[200];
+char buf473[200];
+char buf474[200];
+char buf475[200];
+char buf476[200];
+char buf477[200];
+char buf478[200];
+char buf479[200];
+char buf480[200];
+char buf481[200];
+char buf482[200];
+char buf483[200];
+char buf484[200];
+char buf485[200];
+char buf486[200];
+char buf487[200];
+char buf488[200];
+char buf489[200];
+char buf490[200];
+char buf491[200];
+char buf492[200];
+char buf493[200];
+char buf494[200];
+char buf495[200];
+char buf496[200];
+char buf497[200];
+char buf498[200];
+char buf499[200];
+char buf500[200];
+char buf501[200];
+char buf502[200];
+char buf503[200];
+char buf504[200];
+char buf505[200];
+char buf506[200];
+char buf507[200];
+char buf508[200];
+char buf509[200];
+char buf510[200];
+char buf511[200];
+char buf512[200];
+char buf513[200];
+char buf514[200];
+char buf515[200];
+char buf516[200];
+char buf517[200];
+char buf518[200];
+char buf519[200];
+char buf520[200];
+char buf521[200];
+char buf522[200];
+char buf523[200];
+char buf524[200];
+char buf525[200];
+char buf526[200];
+char buf527[200];
+char buf528[200];
+char buf529[200];
+char buf530[200];
+char buf531[200];
+char buf532[200];
+char buf533[200];
+char buf534[200];
+char buf535[200];
+char buf536[200];
+char buf537[200];
+char buf538[200];
+char buf539[200];
+char buf540[200];
+char buf541[200];
+char buf542[200];
+char buf543[200];
+char buf544[200];
+char buf545[200];
+char buf546[200];
+char buf547[200];
+char buf548[200];
+char buf549[200];
+char buf550[200];
+char buf551[200];
+char buf552[200];
+char buf553[200];
+char buf554[200];
+char buf555[200];
+char buf556[200];
+char buf557[200];
+char buf558[200];
+char buf559[200];
+char buf560[200];
+char buf561[200];
+char buf562[200];
+char buf563[200];
+char buf564[200];
+char buf565[200];
+char buf566[200];
+char buf567[200];
+char buf568[200];
+char buf569[200];
+char buf570[200];
+char buf571[200];
+char buf572[200];
+char buf573[200];
+char buf574[200];
+char buf575[200];
+char buf576[200];
+char buf577[200];
+char buf578[200];
+char buf579[200];
+char buf580[200];
+char buf581[200];
+char buf582[200];
+char buf583[200];
+char buf584[200];
+char buf585[200];
+char buf586[200];
+char buf587[200];
+char buf588[200];
+char buf589[200];
+char buf590[200];
+char buf591[200];
+char buf592[200];
+char buf593[200];
+char buf594[200];
+char buf595[200];
+char buf596[200];
+char buf597[200];
+char buf598[200];
+char buf599[200];
+char buf600[200];
+char buf601[200];
+char buf602[200];
+char buf603[200];
+char buf604[200];
+char buf605[200];
+char buf606[200];
+char buf607[200];
+char buf608[200];
+char buf609[200];
+char buf610[200];
+char buf611[200];
+char buf612[200];
+char buf613[200];
+char buf614[200];
+char buf615[200];
+char buf616[200];
+char buf617[200];
+char buf618[200];
+char buf619[200];
+char buf620[200];
+char buf621[200];
+char buf622[200];
+char buf623[200];
+char buf624[200];
+char buf625[200];
+char buf626[200];
+char buf627[200];
+char buf628[200];
+char buf629[200];
+char buf630[200];
+char buf631[200];
+char buf632[200];
+char buf633[200];
+char buf634[200];
+char buf635[200];
+char buf636[200];
+char buf637[200];
+char buf638[200];
+char buf639[200];
+char buf640[200];
+char buf641[200];
+char buf642[200];
+char buf643[200];
+char buf644[200];
+char buf645[200];
+char buf646[200];
+char buf647[200];
+char buf648[200];
+char buf649[200];
+char buf650[200];
+char buf651[200];
+char buf652[200];
+char buf653[200];
+char buf654[200];
+char buf655[200];
+char buf656[200];
+char buf657[200];
+char buf658[200];
+char buf659[200];
+char buf660[200];
+char buf661[200];
+char buf662[200];
+char buf663[200];
+char buf664[200];
+char buf665[200];
+char buf666[200];
+char buf667[200];
+char buf668[200];
+char buf669[200];
+char buf670[200];
+char buf671[200];
+char buf672[200];
+char buf673[200];
+char buf674[200];
+char buf675[200];
+char buf676[200];
+char buf677[200];
+char buf678[200];
+char buf679[200];
+char buf680[200];
+char buf681[200];
+char buf682[200];
+char buf683[200];
+char buf684[200];
+char buf685[200];
+char buf686[200];
+char buf687[200];
+char buf688[200];
+char buf689[200];
+char buf690[200];
+char buf691[200];
+char buf692[200];
+char buf693[200];
+char buf694[200];
+char buf695[200];
+char buf696[200];
+char buf697[200];
+char buf698[200];
+char buf699[200];
+char buf700[200];
+char buf701[200];
+char buf702[200];
+char buf703[200];
+char buf704[200];
+char buf705[200];
+char buf706[200];
+char buf707[200];
+char buf708[200];
+char buf709[200];
+char buf710[200];
+char buf711[200];
+char buf712[200];
+char buf713[200];
+char buf714[200];
+char buf715[200];
+char buf716[200];
+char buf717[200];
+char buf718[200];
+char buf719[200];
+char buf720[200];
+char buf721[200];
+char buf722[200];
+char buf723[200];
+char buf724[200];
+char buf725[200];
+char buf726[200];
+char buf727[200];
+char buf728[200];
+char buf729[200];
+char buf730[200];
+char buf731[200];
+char buf732[200];
+char buf733[200];
+char buf734[200];
+char buf735[200];
+char buf736[200];
+char buf737[200];
+char buf738[200];
+char buf739[200];
+char buf740[200];
+char buf741[200];
+char buf742[200];
+char buf743[200];
+char buf744[200];
+char buf745[200];
+char buf746[200];
+char buf747[200];
+char buf748[200];
+char buf749[200];
+char buf750[200];
+char buf751[200];
+char buf752[200];
+char buf753[200];
+char buf754[200];
+char buf755[200];
+char buf756[200];
+char buf757[200];
+char buf758[200];
+char buf759[200];
+char buf760[200];
+char buf761[200];
+char buf762[200];
+char buf763[200];
+char buf764[200];
+char buf765[200];
+char buf766[200];
+char buf767[200];
+char buf768[200];
+char buf769[200];
+char buf770[200];
+char buf771[200];
+char buf772[200];
+char buf773[200];
+char buf774[200];
+char buf775[200];
+char buf776[200];
+char buf777[200];
+char buf778[200];
+char buf779[200];
+char buf780[200];
+char buf781[200];
+char buf782[200];
+char buf783[200];
+char buf784[200];
+char buf785[200];
+char buf786[200];
+char buf787[200];
+char buf788[200];
+char buf789[200];
+char buf790[200];
+char buf791[200];
+char buf792[200];
+char buf793[200];
+char buf794[200];
+char buf795[200];
+char buf796[200];
+char buf797[200];
+char buf798[200];
+char buf799[200];
+char buf800[200];
+char buf801[200];
+char buf802[200];
+char buf803[200];
+char buf804[200];
+char buf805[200];
+char buf806[200];
+char buf807[200];
+char buf808[200];
+char buf809[200];
+char buf810[200];
+char buf811[200];
+char buf812[200];
+char buf813[200];
+char buf814[200];
+char buf815[200];
+char buf816[200];
+char buf817[200];
+char buf818[200];
+char buf819[200];
+char buf820[200];
+char buf821[200];
+char buf822[200];
+char buf823[200];
+char buf824[200];
+char buf825[200];
+char buf826[200];
+char buf827[200];
+char buf828[200];
+char buf829[200];
+char buf830[200];
+char buf831[200];
+char buf832[200];
+char buf833[200];
+char buf834[200];
+char buf835[200];
+char buf836[200];
+char buf837[200];
+char buf838[200];
+char buf839[200];
+char buf840[200];
+char buf841[200];
+char buf842[200];
+char buf843[200];
+char buf844[200];
+char buf845[200];
+char buf846[200];
+char buf847[200];
+char buf848[200];
+char buf849[200];
+char buf850[200];
+char buf851[200];
+char buf852[200];
+char buf853[200];
+char buf854[200];
+char buf855[200];
+char buf856[200];
+char buf857[200];
+char buf858[200];
+char buf859[200];
+char buf860[200];
+char buf861[200];
+char buf862[200];
+char buf863[200];
+char buf864[200];
+char buf865[200];
+char buf866[200];
+char buf867[200];
+char buf868[200];
+char buf869[200];
+char buf870[200];
+char buf871[200];
+char buf872[200];
+char buf873[200];
+char buf874[200];
+char buf875[200];
+char buf876[200];
+char buf877[200];
+char buf878[200];
+char buf879[200];
+char buf880[200];
+char buf881[200];
+char buf882[200];
+char buf883[200];
+char buf884[200];
+char buf885[200];
+char buf886[200];
+char buf887[200];
+char buf888[200];
+char buf889[200];
+char buf890[200];
+char buf891[200];
+char buf892[200];
+char buf893[200];
+char buf894[200];
+char buf895[200];
+char buf896[200];
+char buf897[200];
+char buf898[200];
+char buf899[200];
+char buf900[200];
+char buf901[200];
+char buf902[200];
+char buf903[200];
+char buf904[200];
+char buf905[200];
+char buf906[200];
+char buf907[200];
+char buf908[200];
+char buf909[200];
+char buf910[200];
+char buf911[200];
+char buf912[200];
+char buf913[200];
+char buf914[200];
+char buf915[200];
+char buf916[200];
+char buf917[200];
+char buf918[200];
+char buf919[200];
+char buf920[200];
+char buf921[200];
+char buf922[200];
+char buf923[200];
+char buf924[200];
+char buf925[200];
+char buf926[200];
+char buf927[200];
+char buf928[200];
+char buf929[200];
+char buf930[200];
+char buf931[200];
+char buf932[200];
+char buf933[200];
+char buf934[200];
+char buf935[200];
+char buf936[200];
+char buf937[200];
+char buf938[200];
+char buf939[200];
+char buf940[200];
+char buf941[200];
+char buf942[200];
+char buf943[200];
+char buf944[200];
+char buf945[200];
+char buf946[200];
+char buf947[200];
+char buf948[200];
+char buf949[200];
+char buf950[200];
+char buf951[200];
+char buf952[200];
+char buf953[200];
+char buf954[200];
+char buf955[200];
+char buf956[200];
+char buf957[200];
+char buf958[200];
+char buf959[200];
+char buf960[200];
+char buf961[200];
+char buf962[200];
+char buf963[200];
+char buf964[200];
+char buf965[200];
+char buf966[200];
+char buf967[200];
+char buf968[200];
+char buf969[200];
+char buf970[200];
+char buf971[200];
+char buf972[200];
+char buf973[200];
+char buf974[200];
+char buf975[200];
+char buf976[200];
+char buf977[200];
+char buf978[200];
+char buf979[200];
+char buf980[200];
+char buf981[200];
+char buf982[200];
+char buf983[200];
+char buf984[200];
+char buf985[200];
+char buf986[200];
+char buf987[200];
+char buf988[200];
+char buf989[200];
+char buf990[200];
+char buf991[200];
+char buf992[200];
+char buf993[200];
+char buf994[200];
+char buf995[200];
+char buf996[200];
+char buf997[200];
+char buf998[200];
+char buf999[200];
+char buf1000[200];
+char buf1001[200];
+char buf1002[200];
+char buf1003[200];
+char buf1004[200];
+char buf1005[200];
+char buf1006[200];
+char buf1007[200];
+char buf1008[200];
+char buf1009[200];
+char buf1010[200];
+char buf1011[200];
+char buf1012[200];
+char buf1013[200];
+char buf1014[200];
+char buf1015[200];
+char buf1016[200];
+char buf1017[200];
+char buf1018[200];
+char buf1019[200];
+char buf1020[200];
+char buf1021[200];
+char buf1022[200];
+char buf1023[200];
+char buf1024[200];
+char buf1025[200];
+char buf1026[200];
+char buf1027[200];
+char buf1028[200];
+char buf1029[200];
+char buf1030[200];
+char buf1031[200];
+char buf1032[200];
+char buf1033[200];
+char buf1034[200];
+char buf1035[200];
+char buf1036[200];
+char buf1037[200];
+char buf1038[200];
+char buf1039[200];
+char buf1040[200];
+char buf1041[200];
+char buf1042[200];
+char buf1043[200];
+char buf1044[200];
+char buf1045[200];
+char buf1046[200];
+char buf1047[200];
+char buf1048[200];
+char buf1049[200];
+char buf1050[200];
+char buf1051[200];
+char buf1052[200];
+char buf1053[200];
+char buf1054[200];
+char buf1055[200];
+char buf1056[200];
+char buf1057[200];
+char buf1058[200];
+char buf1059[200];
+char buf1060[200];
+char buf1061[200];
+char buf1062[200];
+char buf1063[200];
+char buf1064[200];
+char buf1065[200];
+char buf1066[200];
+char buf1067[200];
+char buf1068[200];
+char buf1069[200];
+char buf1070[200];
+char buf1071[200];
+char buf1072[200];
+char buf1073[200];
+char buf1074[200];
+char buf1075[200];
+char buf1076[200];
+char buf1077[200];
+char buf1078[200];
+char buf1079[200];
+char buf1080[200];
+char buf1081[200];
+char buf1082[200];
+char buf1083[200];
+char buf1084[200];
+char buf1085[200];
+char buf1086[200];
+char buf1087[200];
+char buf1088[200];
+char buf1089[200];
+char buf1090[200];
+char buf1091[200];
+char buf1092[200];
+char buf1093[200];
+char buf1094[200];
+char buf1095[200];
+char buf1096[200];
+char buf1097[200];
+char buf1098[200];
+char buf1099[200];
+char buf1100[200];
+char buf1101[200];
+char buf1102[200];
+char buf1103[200];
+char buf1104[200];
+char buf1105[200];
+char buf1106[200];
+char buf1107[200];
+char buf1108[200];
+char buf1109[200];
+char buf1110[200];
+char buf1111[200];
+char buf1112[200];
+char buf1113[200];
+char buf1114[200];
+char buf1115[200];
+char buf1116[200];
+char buf1117[200];
+char buf1118[200];
+char buf1119[200];
+char buf1120[200];
+char buf1121[200];
+char buf1122[200];
+char buf1123[200];
+char buf1124[200];
+char buf1125[200];
+char buf1126[200];
+char buf1127[200];
+char buf1128[200];
+char buf1129[200];
+char buf1130[200];
+char buf1131[200];
+char buf1132[200];
+char buf1133[200];
+char buf1134[200];
+char buf1135[200];
+char buf1136[200];
+char buf1137[200];
+char buf1138[200];
+char buf1139[200];
+char buf1140[200];
+char buf1141[200];
+char buf1142[200];
+char buf1143[200];
+char buf1144[200];
+char buf1145[200];
+char buf1146[200];
+char buf1147[200];
+char buf1148[200];
+char buf1149[200];
+char buf1150[200];
+char buf1151[200];
+char buf1152[200];
+char buf1153[200];
+char buf1154[200];
+char buf1155[200];
+char buf1156[200];
+char buf1157[200];
+char buf1158[200];
+char buf1159[200];
+char buf1160[200];
+char buf1161[200];
+char buf1162[200];
+char buf1163[200];
+char buf1164[200];
+char buf1165[200];
+char buf1166[200];
+char buf1167[200];
+char buf1168[200];
+char buf1169[200];
+char buf1170[200];
+char buf1171[200];
+char buf1172[200];
+char buf1173[200];
+char buf1174[200];
+char buf1175[200];
+char buf1176[200];
+char buf1177[200];
+char buf1178[200];
+char buf1179[200];
+char buf1180[200];
+char buf1181[200];
+char buf1182[200];
+char buf1183[200];
+char buf1184[200];
+char buf1185[200];
+char buf1186[200];
+char buf1187[200];
+char buf1188[200];
+char buf1189[200];
+char buf1190[200];
+char buf1191[200];
+char buf1192[200];
+char buf1193[200];
+char buf1194[200];
+char buf1195[200];
+char buf1196[200];
+char buf1197[200];
+char buf1198[200];
+char buf1199[200];
+char buf1200[200];
+char buf1201[200];
+char buf1202[200];
+char buf1203[200];
+char buf1204[200];
+char buf1205[200];
+char buf1206[200];
+char buf1207[200];
+char buf1208[200];
+char buf1209[200];
+char buf1210[200];
+char buf1211[200];
+char buf1212[200];
+char buf1213[200];
+char buf1214[200];
+char buf1215[200];
+char buf1216[200];
+char buf1217[200];
+char buf1218[200];
+char buf1219[200];
+char buf1220[200];
+char buf1221[200];
+char buf1222[200];
+char buf1223[200];
+char buf1224[200];
+char buf1225[200];
+char buf1226[200];
+char buf1227[200];
+char buf1228[200];
+char buf1229[200];
+char buf1230[200];
+char buf1231[200];
+char buf1232[200];
+char buf1233[200];
+char buf1234[200];
+char buf1235[200];
+char buf1236[200];
+char buf1237[200];
+char buf1238[200];
+char buf1239[200];
+char buf1240[200];
+char buf1241[200];
+char buf1242[200];
+char buf1243[200];
+char buf1244[200];
+char buf1245[200];
+char buf1246[200];
+char buf1247[200];
+char buf1248[200];
+char buf1249[200];
+char buf1250[200];
+char buf1251[200];
+char buf1252[200];
+char buf1253[200];
+char buf1254[200];
+char buf1255[200];
+char buf1256[200];
+char buf1257[200];
+char buf1258[200];
+char buf1259[200];
+char buf1260[200];
+char buf1261[200];
+char buf1262[200];
+char buf1263[200];
+char buf1264[200];
+char buf1265[200];
+char buf1266[200];
+char buf1267[200];
+char buf1268[200];
+char buf1269[200];
+char buf1270[200];
+char buf1271[200];
+char buf1272[200];
+char buf1273[200];
+char buf1274[200];
+char buf1275[200];
+char buf1276[200];
+char buf1277[200];
+char buf1278[200];
+char buf1279[200];
+char buf1280[200];
+char buf1281[200];
+char buf1282[200];
+char buf1283[200];
+char buf1284[200];
+char buf1285[200];
+char buf1286[200];
+char buf1287[200];
+char buf1288[200];
+char buf1289[200];
+char buf1290[200];
+char buf1291[200];
+char buf1292[200];
+char buf1293[200];
+char buf1294[200];
+char buf1295[200];
+char buf1296[200];
+char buf1297[200];
+char buf1298[200];
+char buf1299[200];
+char buf1300[200];
+char buf1301[200];
+char buf1302[200];
+char buf1303[200];
+char buf1304[200];
+char buf1305[200];
+char buf1306[200];
+char buf1307[200];
+char buf1308[200];
+char buf1309[200];
+char buf1310[200];
+char buf1311[200];
+char buf1312[200];
+char buf1313[200];
+char buf1314[200];
+char buf1315[200];
+char buf1316[200];
+char buf1317[200];
+char buf1318[200];
+char buf1319[200];
+char buf1320[200];
+char buf1321[200];
+char buf1322[200];
+char buf1323[200];
+char buf1324[200];
+char buf1325[200];
+char buf1326[200];
+char buf1327[200];
+char buf1328[200];
+char buf1329[200];
+char buf1330[200];
+char buf1331[200];
+char buf1332[200];
+char buf1333[200];
+char buf1334[200];
+char buf1335[200];
+char buf1336[200];
+char buf1337[200];
+char buf1338[200];
+char buf1339[200];
+char buf1340[200];
+char buf1341[200];
+char buf1342[200];
+char buf1343[200];
+char buf1344[200];
+char buf1345[200];
+char buf1346[200];
+char buf1347[200];
+char buf1348[200];
+char buf1349[200];
+char buf1350[200];
+char buf1351[200];
+char buf1352[200];
+char buf1353[200];
+char buf1354[200];
+char buf1355[200];
+char buf1356[200];
+char buf1357[200];
+char buf1358[200];
+char buf1359[200];
+char buf1360[200];
+char buf1361[200];
+char buf1362[200];
+char buf1363[200];
+char buf1364[200];
+char buf1365[200];
+char buf1366[200];
+char buf1367[200];
+char buf1368[200];
+char buf1369[200];
+char buf1370[200];
+char buf1371[200];
+char buf1372[200];
+char buf1373[200];
+char buf1374[200];
+char buf1375[200];
+char buf1376[200];
+char buf1377[200];
+char buf1378[200];
+char buf1379[200];
+char buf1380[200];
+char buf1381[200];
+char buf1382[200];
+char buf1383[200];
+char buf1384[200];
+char buf1385[200];
+char buf1386[200];
+char buf1387[200];
+char buf1388[200];
+char buf1389[200];
+char buf1390[200];
+char buf1391[200];
+char buf1392[200];
+char buf1393[200];
+char buf1394[200];
+char buf1395[200];
+char buf1396[200];
+char buf1397[200];
+char buf1398[200];
+char buf1399[200];
+char buf1400[200];
+char buf1401[200];
+char buf1402[200];
+char buf1403[200];
+char buf1404[200];
+char buf1405[200];
+char buf1406[200];
+char buf1407[200];
+char buf1408[200];
+char buf1409[200];
+char buf1410[200];
+char buf1411[200];
+char buf1412[200];
+char buf1413[200];
+char buf1414[200];
+char buf1415[200];
+char buf1416[200];
+char buf1417[200];
+char buf1418[200];
+char buf1419[200];
+char buf1420[200];
+char buf1421[200];
+char buf1422[200];
+char buf1423[200];
+char buf1424[200];
+char buf1425[200];
+char buf1426[200];
+char buf1427[200];
+char buf1428[200];
+char buf1429[200];
+char buf1430[200];
+char buf1431[200];
+char buf1432[200];
+char buf1433[200];
+char buf1434[200];
+char buf1435[200];
+char buf1436[200];
+char buf1437[200];
+char buf1438[200];
+char buf1439[200];
+char buf1440[200];
+char buf1441[200];
+char buf1442[200];
+char buf1443[200];
+char buf1444[200];
+char buf1445[200];
+char buf1446[200];
+char buf1447[200];
+char buf1448[200];
+char buf1449[200];
+char buf1450[200];
+char buf1451[200];
+char buf1452[200];
+char buf1453[200];
+char buf1454[200];
+char buf1455[200];
+char buf1456[200];
+char buf1457[200];
+char buf1458[200];
+char buf1459[200];
+char buf1460[200];
+char buf1461[200];
+char buf1462[200];
+char buf1463[200];
+char buf1464[200];
+char buf1465[200];
+char buf1466[200];
+char buf1467[200];
+char buf1468[200];
+char buf1469[200];
+char buf1470[200];
+char buf1471[200];
+char buf1472[200];
+char buf1473[200];
+char buf1474[200];
+char buf1475[200];
+char buf1476[200];
+char buf1477[200];
+char buf1478[200];
+char buf1479[200];
+char buf1480[200];
+char buf1481[200];
+char buf1482[200];
+char buf1483[200];
+char buf1484[200];
+char buf1485[200];
+char buf1486[200];
+char buf1487[200];
+char buf1488[200];
+char buf1489[200];
+char buf1490[200];
+char buf1491[200];
+char buf1492[200];
+char buf1493[200];
+char buf1494[200];
+char buf1495[200];
+char buf1496[200];
+char buf1497[200];
+char buf1498[200];
+char buf1499[200];
+char buf1500[200];
+char buf1501[200];
+char buf1502[200];
+char buf1503[200];
+char buf1504[200];
+char buf1505[200];
+char buf1506[200];
+char buf1507[200];
+char buf1508[200];
+char buf1509[200];
+char buf1510[200];
+char buf1511[200];
+char buf1512[200];
+char buf1513[200];
+char buf1514[200];
+char buf1515[200];
+char buf1516[200];
+char buf1517[200];
+char buf1518[200];
+char buf1519[200];
+char buf1520[200];
+char buf1521[200];
+char buf1522[200];
+char buf1523[200];
+char buf1524[200];
+char buf1525[200];
+char buf1526[200];
+char buf1527[200];
+char buf1528[200];
+char buf1529[200];
+char buf1530[200];
+char buf1531[200];
+char buf1532[200];
+char buf1533[200];
+char buf1534[200];
+char buf1535[200];
+char buf1536[200];
+char buf1537[200];
+char buf1538[200];
+char buf1539[200];
+char buf1540[200];
+char buf1541[200];
+char buf1542[200];
+char buf1543[200];
+char buf1544[200];
+char buf1545[200];
+char buf1546[200];
+char buf1547[200];
+char buf1548[200];
+char buf1549[200];
+char buf1550[200];
+char buf1551[200];
+char buf1552[200];
+char buf1553[200];
+char buf1554[200];
+char buf1555[200];
+char buf1556[200];
+char buf1557[200];
+char buf1558[200];
+char buf1559[200];
+char buf1560[200];
+char buf1561[200];
+char buf1562[200];
+char buf1563[200];
+char buf1564[200];
+char buf1565[200];
+char buf1566[200];
+char buf1567[200];
+char buf1568[200];
+char buf1569[200];
+char buf1570[200];
+char buf1571[200];
+char buf1572[200];
+char buf1573[200];
+char buf1574[200];
+char buf1575[200];
+char buf1576[200];
+char buf1577[200];
+char buf1578[200];
+char buf1579[200];
+char buf1580[200];
+char buf1581[200];
+char buf1582[200];
+char buf1583[200];
+char buf1584[200];
+char buf1585[200];
+char buf1586[200];
+char buf1587[200];
+char buf1588[200];
+char buf1589[200];
+char buf1590[200];
+char buf1591[200];
+char buf1592[200];
+char buf1593[200];
+char buf1594[200];
+char buf1595[200];
+char buf1596[200];
+char buf1597[200];
+char buf1598[200];
+char buf1599[200];
+char buf1600[200];
+char buf1601[200];
+char buf1602[200];
+char buf1603[200];
+char buf1604[200];
+char buf1605[200];
+char buf1606[200];
+char buf1607[200];
+char buf1608[200];
+char buf1609[200];
+char buf1610[200];
+char buf1611[200];
+char buf1612[200];
+char buf1613[200];
+char buf1614[200];
+char buf1615[200];
+char buf1616[200];
+char buf1617[200];
+char buf1618[200];
+char buf1619[200];
+char buf1620[200];
+char buf1621[200];
+char buf1622[200];
+char buf1623[200];
+char buf1624[200];
+char buf1625[200];
+char buf1626[200];
+char buf1627[200];
+char buf1628[200];
+char buf1629[200];
+char buf1630[200];
+char buf1631[200];
+char buf1632[200];
+char buf1633[200];
+char buf1634[200];
+char buf1635[200];
+char buf1636[200];
+char buf1637[200];
+char buf1638[200];
+char buf1639[200];
+char buf1640[200];
+char buf1641[200];
+char buf1642[200];
+char buf1643[200];
+char buf1644[200];
+char buf1645[200];
+char buf1646[200];
+char buf1647[200];
+char buf1648[200];
+char buf1649[200];
+char buf1650[200];
+char buf1651[200];
+char buf1652[200];
+char buf1653[200];
+char buf1654[200];
+char buf1655[200];
+char buf1656[200];
+char buf1657[200];
+char buf1658[200];
+char buf1659[200];
+char buf1660[200];
+char buf1661[200];
+char buf1662[200];
+char buf1663[200];
+char buf1664[200];
+char buf1665[200];
+char buf1666[200];
+char buf1667[200];
+char buf1668[200];
+char buf1669[200];
+char buf1670[200];
+char buf1671[200];
+char buf1672[200];
+char buf1673[200];
+char buf1674[200];
+char buf1675[200];
+char buf1676[200];
+char buf1677[200];
+char buf1678[200];
+char buf1679[200];
+char buf1680[200];
+char buf1681[200];
+char buf1682[200];
+char buf1683[200];
+char buf1684[200];
+char buf1685[200];
+char buf1686[200];
+char buf1687[200];
+char buf1688[200];
+char buf1689[200];
+char buf1690[200];
+char buf1691[200];
+char buf1692[200];
+char buf1693[200];
+char buf1694[200];
+char buf1695[200];
+char buf1696[200];
+char buf1697[200];
+char buf1698[200];
+char buf1699[200];
+char buf1700[200];
+char buf1701[200];
+char buf1702[200];
+char buf1703[200];
+char buf1704[200];
+char buf1705[200];
+char buf1706[200];
+char buf1707[200];
+char buf1708[200];
+char buf1709[200];
+char buf1710[200];
+char buf1711[200];
+char buf1712[200];
+char buf1713[200];
+char buf1714[200];
+char buf1715[200];
+char buf1716[200];
+char buf1717[200];
+char buf1718[200];
+char buf1719[200];
+char buf1720[200];
+char buf1721[200];
+char buf1722[200];
+char buf1723[200];
+char buf1724[200];
+char buf1725[200];
+char buf1726[200];
+char buf1727[200];
+char buf1728[200];
+char buf1729[200];
+char buf1730[200];
+char buf1731[200];
+char buf1732[200];
+char buf1733[200];
+char buf1734[200];
+char buf1735[200];
+char buf1736[200];
+char buf1737[200];
+char buf1738[200];
+char buf1739[200];
+char buf1740[200];
+char buf1741[200];
+char buf1742[200];
+char buf1743[200];
+char buf1744[200];
+char buf1745[200];
+char buf1746[200];
+char buf1747[200];
+char buf1748[200];
+char buf1749[200];
+char buf1750[200];
+char buf1751[200];
+char buf1752[200];
+char buf1753[200];
+char buf1754[200];
+char buf1755[200];
+char buf1756[200];
+char buf1757[200];
+char buf1758[200];
+char buf1759[200];
+char buf1760[200];
+char buf1761[200];
+char buf1762[200];
+char buf1763[200];
+char buf1764[200];
+char buf1765[200];
+char buf1766[200];
+char buf1767[200];
+char buf1768[200];
+char buf1769[200];
+char buf1770[200];
+char buf1771[200];
+char buf1772[200];
+char buf1773[200];
+char buf1774[200];
+char buf1775[200];
+char buf1776[200];
+char buf1777[200];
+char buf1778[200];
+char buf1779[200];
+char buf1780[200];
+char buf1781[200];
+char buf1782[200];
+char buf1783[200];
+char buf1784[200];
+char buf1785[200];
+char buf1786[200];
+char buf1787[200];
+char buf1788[200];
+char buf1789[200];
+char buf1790[200];
+char buf1791[200];
+char buf1792[200];
+char buf1793[200];
+char buf1794[200];
+char buf1795[200];
+char buf1796[200];
+char buf1797[200];
+char buf1798[200];
+char buf1799[200];
+char buf1800[200];
+char buf1801[200];
+char buf1802[200];
+char buf1803[200];
+char buf1804[200];
+char buf1805[200];
+char buf1806[200];
+char buf1807[200];
+char buf1808[200];
+char buf1809[200];
+char buf1810[200];
+char buf1811[200];
+char buf1812[200];
+char buf1813[200];
+char buf1814[200];
+char buf1815[200];
+char buf1816[200];
+char buf1817[200];
+char buf1818[200];
+char buf1819[200];
+char buf1820[200];
+char buf1821[200];
+char buf1822[200];
+char buf1823[200];
+char buf1824[200];
+char buf1825[200];
+char buf1826[200];
+char buf1827[200];
+char buf1828[200];
+char buf1829[200];
+char buf1830[200];
+char buf1831[200];
+char buf1832[200];
+char buf1833[200];
+char buf1834[200];
+char buf1835[200];
+char buf1836[200];
+char buf1837[200];
+char buf1838[200];
+char buf1839[200];
+char buf1840[200];
+char buf1841[200];
+char buf1842[200];
+char buf1843[200];
+char buf1844[200];
+char buf1845[200];
+char buf1846[200];
+char buf1847[200];
+char buf1848[200];
+char buf1849[200];
+char buf1850[200];
+char buf1851[200];
+char buf1852[200];
+char buf1853[200];
+char buf1854[200];
+char buf1855[200];
+char buf1856[200];
+char buf1857[200];
+char buf1858[200];
+char buf1859[200];
+char buf1860[200];
+char buf1861[200];
+char buf1862[200];
+char buf1863[200];
+char buf1864[200];
+char buf1865[200];
+char buf1866[200];
+char buf1867[200];
+char buf1868[200];
+char buf1869[200];
+char buf1870[200];
+char buf1871[200];
+char buf1872[200];
+char buf1873[200];
+char buf1874[200];
+char buf1875[200];
+char buf1876[200];
+char buf1877[200];
+char buf1878[200];
+char buf1879[200];
+char buf1880[200];
+char buf1881[200];
+char buf1882[200];
+char buf1883[200];
+char buf1884[200];
+char buf1885[200];
+char buf1886[200];
+char buf1887[200];
+char buf1888[200];
+char buf1889[200];
+char buf1890[200];
+char buf1891[200];
+char buf1892[200];
+char buf1893[200];
+char buf1894[200];
+char buf1895[200];
+char buf1896[200];
+char buf1897[200];
+char buf1898[200];
+char buf1899[200];
+char buf1900[200];
+char buf1901[200];
+char buf1902[200];
+char buf1903[200];
+char buf1904[200];
+char buf1905[200];
+char buf1906[200];
+char buf1907[200];
+char buf1908[200];
+char buf1909[200];
+char buf1910[200];
+char buf1911[200];
+char buf1912[200];
+char buf1913[200];
+char buf1914[200];
+char buf1915[200];
+char buf1916[200];
+char buf1917[200];
+char buf1918[200];
+char buf1919[200];
+char buf1920[200];
+char buf1921[200];
+char buf1922[200];
+char buf1923[200];
+char buf1924[200];
+char buf1925[200];
+char buf1926[200];
+char buf1927[200];
+char buf1928[200];
+char buf1929[200];
+char buf1930[200];
+char buf1931[200];
+char buf1932[200];
+char buf1933[200];
+char buf1934[200];
+char buf1935[200];
+char buf1936[200];
+char buf1937[200];
+char buf1938[200];
+char buf1939[200];
+char buf1940[200];
+char buf1941[200];
+char buf1942[200];
+char buf1943[200];
+char buf1944[200];
+char buf1945[200];
+char buf1946[200];
+char buf1947[200];
+char buf1948[200];
+char buf1949[200];
+char buf1950[200];
+char buf1951[200];
+char buf1952[200];
+char buf1953[200];
+char buf1954[200];
+char buf1955[200];
+char buf1956[200];
+char buf1957[200];
+char buf1958[200];
+char buf1959[200];
+char buf1960[200];
+char buf1961[200];
+char buf1962[200];
+char buf1963[200];
+char buf1964[200];
+char buf1965[200];
+char buf1966[200];
+char buf1967[200];
+char buf1968[200];
+char buf1969[200];
+char buf1970[200];
+char buf1971[200];
+char buf1972[200];
+char buf1973[200];
+char buf1974[200];
+char buf1975[200];
+char buf1976[200];
+char buf1977[200];
+char buf1978[200];
+char buf1979[200];
+char buf1980[200];
+char buf1981[200];
+char buf1982[200];
+char buf1983[200];
+char buf1984[200];
+char buf1985[200];
+char buf1986[200];
+char buf1987[200];
+char buf1988[200];
+char buf1989[200];
+char buf1990[200];
+char buf1991[200];
+char buf1992[200];
+char buf1993[200];
+char buf1994[200];
+char buf1995[200];
+char buf1996[200];
+char buf1997[200];
+char buf1998[200];
+char buf1999[200];
+char buf2000[200];
+char buf2001[200];
+char buf2002[200];
+char buf2003[200];
+char buf2004[200];
+char buf2005[200];
+char buf2006[200];
+char buf2007[200];
+char buf2008[200];
+char buf2009[200];
+char buf2010[200];
+char buf2011[200];
+char buf2012[200];
+char buf2013[200];
+char buf2014[200];
+char buf2015[200];
+char buf2016[200];
+char buf2017[200];
+char buf2018[200];
+char buf2019[200];
+char buf2020[200];
+char buf2021[200];
+char buf2022[200];
+char buf2023[200];
+char buf2024[200];
+char buf2025[200];
+char buf2026[200];
+char buf2027[200];
+char buf2028[200];
+char buf2029[200];
+char buf2030[200];
+char buf2031[200];
+char buf2032[200];
+char buf2033[200];
+char buf2034[200];
+char buf2035[200];
+char buf2036[200];
+char buf2037[200];
+char buf2038[200];
+char buf2039[200];
+char buf2040[200];
+char buf2041[200];
+char buf2042[200];
+char buf2043[200];
+char buf2044[200];
+char buf2045[200];
+char buf2046[200];
+char buf2047[200];
+char buf2048[200];
+char buf2049[200];
+char buf2050[200];
+char buf2051[200];
+char buf2052[200];
+char buf2053[200];
+char buf2054[200];
+char buf2055[200];
+char buf2056[200];
+char buf2057[200];
+char buf2058[200];
+char buf2059[200];
+char buf2060[200];
+char buf2061[200];
+char buf2062[200];
+char buf2063[200];
+char buf2064[200];
+char buf2065[200];
+char buf2066[200];
+char buf2067[200];
+char buf2068[200];
+char buf2069[200];
+char buf2070[200];
+char buf2071[200];
+char buf2072[200];
+char buf2073[200];
+char buf2074[200];
+char buf2075[200];
+char buf2076[200];
+char buf2077[200];
+char buf2078[200];
+char buf2079[200];
+char buf2080[200];
+char buf2081[200];
+char buf2082[200];
+char buf2083[200];
+char buf2084[200];
+char buf2085[200];
+char buf2086[200];
+char buf2087[200];
+char buf2088[200];
+char buf2089[200];
+char buf2090[200];
+char buf2091[200];
+char buf2092[200];
+char buf2093[200];
+char buf2094[200];
+char buf2095[200];
+char buf2096[200];
+char buf2097[200];
+char buf2098[200];
+char buf2099[200];
+char buf2100[200];
+char buf2101[200];
+char buf2102[200];
+char buf2103[200];
+char buf2104[200];
+char buf2105[200];
+char buf2106[200];
+char buf2107[200];
+char buf2108[200];
+char buf2109[200];
+char buf2110[200];
+char buf2111[200];
+char buf2112[200];
+char buf2113[200];
+char buf2114[200];
+char buf2115[200];
+char buf2116[200];
+char buf2117[200];
+char buf2118[200];
+char buf2119[200];
+char buf2120[200];
+char buf2121[200];
+char buf2122[200];
+char buf2123[200];
+char buf2124[200];
+char buf2125[200];
+char buf2126[200];
+char buf2127[200];
+char buf2128[200];
+char buf2129[200];
+char buf2130[200];
+char buf2131[200];
+char buf2132[200];
+char buf2133[200];
+char buf2134[200];
+char buf2135[200];
+char buf2136[200];
+char buf2137[200];
+char buf2138[200];
+char buf2139[200];
+char buf2140[200];
+char buf2141[200];
+char buf2142[200];
+char buf2143[200];
+char buf2144[200];
+char buf2145[200];
+char buf2146[200];
+char buf2147[200];
+char buf2148[200];
+char buf2149[200];
+char buf2150[200];
+char buf2151[200];
+char buf2152[200];
+char buf2153[200];
+char buf2154[200];
+char buf2155[200];
+char buf2156[200];
+char buf2157[200];
+char buf2158[200];
+char buf2159[200];
+char buf2160[200];
+char buf2161[200];
+char buf2162[200];
+char buf2163[200];
+char buf2164[200];
+char buf2165[200];
+char buf2166[200];
+char buf2167[200];
+char buf2168[200];
+char buf2169[200];
+char buf2170[200];
+char buf2171[200];
+char buf2172[200];
+char buf2173[200];
+char buf2174[200];
+char buf2175[200];
+char buf2176[200];
+char buf2177[200];
+char buf2178[200];
+char buf2179[200];
+char buf2180[200];
+char buf2181[200];
+char buf2182[200];
+char buf2183[200];
+char buf2184[200];
+char buf2185[200];
+char buf2186[200];
+char buf2187[200];
+char buf2188[200];
+char buf2189[200];
+char buf2190[200];
+char buf2191[200];
+char buf2192[200];
+char buf2193[200];
+char buf2194[200];
+char buf2195[200];
+char buf2196[200];
+char buf2197[200];
+char buf2198[200];
+char buf2199[200];
+char buf2200[200];
+char buf2201[200];
+char buf2202[200];
+char buf2203[200];
+char buf2204[200];
+char buf2205[200];
+char buf2206[200];
+char buf2207[200];
+char buf2208[200];
+char buf2209[200];
+char buf2210[200];
+char buf2211[200];
+char buf2212[200];
+char buf2213[200];
+char buf2214[200];
+char buf2215[200];
+char buf2216[200];
+char buf2217[200];
+char buf2218[200];
+char buf2219[200];
+char buf2220[200];
+char buf2221[200];
+char buf2222[200];
+char buf2223[200];
+char buf2224[200];
+char buf2225[200];
+char buf2226[200];
+char buf2227[200];
+char buf2228[200];
+char buf2229[200];
+char buf2230[200];
+char buf2231[200];
+char buf2232[200];
+char buf2233[200];
+char buf2234[200];
+char buf2235[200];
+char buf2236[200];
+char buf2237[200];
+char buf2238[200];
+char buf2239[200];
+char buf2240[200];
+char buf2241[200];
+char buf2242[200];
+char buf2243[200];
+char buf2244[200];
+char buf2245[200];
+char buf2246[200];
+char buf2247[200];
+char buf2248[200];
+char buf2249[200];
+char buf2250[200];
+char buf2251[200];
+char buf2252[200];
+char buf2253[200];
+char buf2254[200];
+char buf2255[200];
+char buf2256[200];
+char buf2257[200];
+char buf2258[200];
+char buf2259[200];
+char buf2260[200];
+char buf2261[200];
+char buf2262[200];
+char buf2263[200];
+char buf2264[200];
+char buf2265[200];
+char buf2266[200];
+char buf2267[200];
+char buf2268[200];
+char buf2269[200];
+char buf2270[200];
+char buf2271[200];
+char buf2272[200];
+char buf2273[200];
+char buf2274[200];
+char buf2275[200];
+char buf2276[200];
+char buf2277[200];
+char buf2278[200];
+char buf2279[200];
+char buf2280[200];
+char buf2281[200];
+char buf2282[200];
+char buf2283[200];
+char buf2284[200];
+char buf2285[200];
+char buf2286[200];
+char buf2287[200];
+char buf2288[200];
+char buf2289[200];
+char buf2290[200];
+char buf2291[200];
+char buf2292[200];
+char buf2293[200];
+char buf2294[200];
+char buf2295[200];
+char buf2296[200];
+char buf2297[200];
+char buf2298[200];
+char buf2299[200];
+char buf2300[200];
+char buf2301[200];
+char buf2302[200];
+char buf2303[200];
+char buf2304[200];
+char buf2305[200];
+char buf2306[200];
+char buf2307[200];
+char buf2308[200];
+char buf2309[200];
+char buf2310[200];
+char buf2311[200];
+char buf2312[200];
+char buf2313[200];
+char buf2314[200];
+char buf2315[200];
+char buf2316[200];
+char buf2317[200];
+char buf2318[200];
+char buf2319[200];
+char buf2320[200];
+char buf2321[200];
+char buf2322[200];
+char buf2323[200];
+char buf2324[200];
+char buf2325[200];
+char buf2326[200];
+char buf2327[200];
+char buf2328[200];
+char buf2329[200];
+char buf2330[200];
+char buf2331[200];
+char buf2332[200];
+char buf2333[200];
+char buf2334[200];
+char buf2335[200];
+char buf2336[200];
+char buf2337[200];
+char buf2338[200];
+char buf2339[200];
+char buf2340[200];
+char buf2341[200];
+char buf2342[200];
+char buf2343[200];
+char buf2344[200];
+char buf2345[200];
+char buf2346[200];
+char buf2347[200];
+char buf2348[200];
+char buf2349[200];
+char buf2350[200];
+char buf2351[200];
+char buf2352[200];
+char buf2353[200];
+char buf2354[200];
+char buf2355[200];
+char buf2356[200];
+char buf2357[200];
+char buf2358[200];
+char buf2359[200];
+char buf2360[200];
+char buf2361[200];
+char buf2362[200];
+char buf2363[200];
+char buf2364[200];
+char buf2365[200];
+char buf2366[200];
+char buf2367[200];
+char buf2368[200];
+char buf2369[200];
+char buf2370[200];
+char buf2371[200];
+char buf2372[200];
+char buf2373[200];
+char buf2374[200];
+char buf2375[200];
+char buf2376[200];
+char buf2377[200];
+char buf2378[200];
+char buf2379[200];
+char buf2380[200];
+char buf2381[200];
+char buf2382[200];
+char buf2383[200];
+char buf2384[200];
+char buf2385[200];
+char buf2386[200];
+char buf2387[200];
+char buf2388[200];
+char buf2389[200];
+char buf2390[200];
+char buf2391[200];
+char buf2392[200];
+char buf2393[200];
+char buf2394[200];
+char buf2395[200];
+char buf2396[200];
+char buf2397[200];
+char buf2398[200];
+char buf2399[200];
+char buf2400[200];
+char buf2401[200];
+char buf2402[200];
+char buf2403[200];
+char buf2404[200];
+char buf2405[200];
+char buf2406[200];
+char buf2407[200];
+char buf2408[200];
+char buf2409[200];
+char buf2410[200];
+char buf2411[200];
+char buf2412[200];
+char buf2413[200];
+char buf2414[200];
+char buf2415[200];
+char buf2416[200];
+char buf2417[200];
+char buf2418[200];
+char buf2419[200];
+char buf2420[200];
+char buf2421[200];
+char buf2422[200];
+char buf2423[200];
+char buf2424[200];
+char buf2425[200];
+char buf2426[200];
+char buf2427[200];
+char buf2428[200];
+char buf2429[200];
+char buf2430[200];
+char buf2431[200];
+char buf2432[200];
+char buf2433[200];
+char buf2434[200];
+char buf2435[200];
+char buf2436[200];
+char buf2437[200];
+char buf2438[200];
+char buf2439[200];
+char buf2440[200];
+char buf2441[200];
+char buf2442[200];
+char buf2443[200];
+char buf2444[200];
+char buf2445[200];
+char buf2446[200];
+char buf2447[200];
+char buf2448[200];
+char buf2449[200];
+char buf2450[200];
+char buf2451[200];
+char buf2452[200];
+char buf2453[200];
+char buf2454[200];
+char buf2455[200];
+char buf2456[200];
+char buf2457[200];
+char buf2458[200];
+char buf2459[200];
+char buf2460[200];
+char buf2461[200];
+char buf2462[200];
+char buf2463[200];
+char buf2464[200];
+char buf2465[200];
+char buf2466[200];
+char buf2467[200];
+char buf2468[200];
+char buf2469[200];
+char buf2470[200];
+char buf2471[200];
+char buf2472[200];
+char buf2473[200];
+char buf2474[200];
+char buf2475[200];
+char buf2476[200];
+char buf2477[200];
+char buf2478[200];
+char buf2479[200];
+char buf2480[200];
+char buf2481[200];
+char buf2482[200];
+char buf2483[200];
+char buf2484[200];
+char buf2485[200];
+char buf2486[200];
+char buf2487[200];
+char buf2488[200];
+char buf2489[200];
+char buf2490[200];
+char buf2491[200];
+char buf2492[200];
+char buf2493[200];
+char buf2494[200];
+char buf2495[200];
+char buf2496[200];
+char buf2497[200];
+char buf2498[200];
+char buf2499[200];
+char buf2500[200];
+char buf2501[200];
+char buf2502[200];
+char buf2503[200];
+char buf2504[200];
+char buf2505[200];
+char buf2506[200];
+char buf2507[200];
+char buf2508[200];
+char buf2509[200];
+char buf2510[200];
+char buf2511[200];
+char buf2512[200];
+char buf2513[200];
+char buf2514[200];
+char buf2515[200];
+char buf2516[200];
+char buf2517[200];
+char buf2518[200];
+char buf2519[200];
+char buf2520[200];
+char buf2521[200];
+char buf2522[200];
+char buf2523[200];
+char buf2524[200];
+char buf2525[200];
+char buf2526[200];
+char buf2527[200];
+char buf2528[200];
+char buf2529[200];
+char buf2530[200];
+char buf2531[200];
+char buf2532[200];
+char buf2533[200];
+char buf2534[200];
+char buf2535[200];
+char buf2536[200];
+char buf2537[200];
+char buf2538[200];
+char buf2539[200];
+char buf2540[200];
+char buf2541[200];
+char buf2542[200];
+char buf2543[200];
+char buf2544[200];
+char buf2545[200];
+char buf2546[200];
+char buf2547[200];
+char buf2548[200];
+char buf2549[200];
+char buf2550[200];
+char buf2551[200];
+char buf2552[200];
+char buf2553[200];
+char buf2554[200];
+char buf2555[200];
+char buf2556[200];
+char buf2557[200];
+char buf2558[200];
+char buf2559[200];
+char buf2560[200];
+char buf2561[200];
+char buf2562[200];
+char buf2563[200];
+char buf2564[200];
+char buf2565[200];
+char buf2566[200];
+char buf2567[200];
+char buf2568[200];
+char buf2569[200];
+char buf2570[200];
+char buf2571[200];
+char buf2572[200];
+char buf2573[200];
+char buf2574[200];
+char buf2575[200];
+char buf2576[200];
+char buf2577[200];
+char buf2578[200];
+char buf2579[200];
+char buf2580[200];
+char buf2581[200];
+char buf2582[200];
+char buf2583[200];
+char buf2584[200];
+char buf2585[200];
+char buf2586[200];
+char buf2587[200];
+char buf2588[200];
+char buf2589[200];
+char buf2590[200];
+char buf2591[200];
+char buf2592[200];
+char buf2593[200];
+char buf2594[200];
+char buf2595[200];
+char buf2596[200];
+char buf2597[200];
+char buf2598[200];
+char buf2599[200];
+char buf2600[200];
+char buf2601[200];
+char buf2602[200];
+char buf2603[200];
+char buf2604[200];
+char buf2605[200];
+char buf2606[200];
+char buf2607[200];
+char buf2608[200];
+char buf2609[200];
+char buf2610[200];
+char buf2611[200];
+char buf2612[200];
+char buf2613[200];
+char buf2614[200];
+char buf2615[200];
+char buf2616[200];
+char buf2617[200];
+char buf2618[200];
+char buf2619[200];
+char buf2620[200];
+char buf2621[200];
+char buf2622[200];
+char buf2623[200];
+char buf2624[200];
+char buf2625[200];
+char buf2626[200];
+char buf2627[200];
+char buf2628[200];
+char buf2629[200];
+char buf2630[200];
+char buf2631[200];
+char buf2632[200];
+char buf2633[200];
+char buf2634[200];
+char buf2635[200];
+char buf2636[200];
+char buf2637[200];
+char buf2638[200];
+char buf2639[200];
+char buf2640[200];
+char buf2641[200];
+char buf2642[200];
+char buf2643[200];
+char buf2644[200];
+char buf2645[200];
+char buf2646[200];
+char buf2647[200];
+char buf2648[200];
+char buf2649[200];
+char buf2650[200];
+char buf2651[200];
+char buf2652[200];
+char buf2653[200];
+char buf2654[200];
+char buf2655[200];
+char buf2656[200];
+char buf2657[200];
+char buf2658[200];
+char buf2659[200];
+char buf2660[200];
+char buf2661[200];
+char buf2662[200];
+char buf2663[200];
+char buf2664[200];
+char buf2665[200];
+char buf2666[200];
+char buf2667[200];
+char buf2668[200];
+char buf2669[200];
+char buf2670[200];
+char buf2671[200];
+char buf2672[200];
+char buf2673[200];
+char buf2674[200];
+char buf2675[200];
+char buf2676[200];
+char buf2677[200];
+char buf2678[200];
+char buf2679[200];
+char buf2680[200];
+char buf2681[200];
+char buf2682[200];
+char buf2683[200];
+char buf2684[200];
+char buf2685[200];
+char buf2686[200];
+char buf2687[200];
+char buf2688[200];
+char buf2689[200];
+char buf2690[200];
+char buf2691[200];
+char buf2692[200];
+char buf2693[200];
+char buf2694[200];
+char buf2695[200];
+char buf2696[200];
+char buf2697[200];
+char buf2698[200];
+char buf2699[200];
+char buf2700[200];
+char buf2701[200];
+char buf2702[200];
+char buf2703[200];
+char buf2704[200];
+char buf2705[200];
+char buf2706[200];
+char buf2707[200];
+char buf2708[200];
+char buf2709[200];
+char buf2710[200];
+char buf2711[200];
+char buf2712[200];
+char buf2713[200];
+char buf2714[200];
+char buf2715[200];
+char buf2716[200];
+char buf2717[200];
+char buf2718[200];
+char buf2719[200];
+char buf2720[200];
+char buf2721[200];
+char buf2722[200];
+char buf2723[200];
+char buf2724[200];
+char buf2725[200];
+char buf2726[200];
+char buf2727[200];
+char buf2728[200];
+char buf2729[200];
+char buf2730[200];
+char buf2731[200];
+char buf2732[200];
+char buf2733[200];
+char buf2734[200];
+char buf2735[200];
+char buf2736[200];
+char buf2737[200];
+char buf2738[200];
+char buf2739[200];
+char buf2740[200];
+char buf2741[200];
+char buf2742[200];
+char buf2743[200];
+char buf2744[200];
+char buf2745[200];
+char buf2746[200];
+char buf2747[200];
+char buf2748[200];
+char buf2749[200];
+char buf2750[200];
+char buf2751[200];
+char buf2752[200];
+char buf2753[200];
+char buf2754[200];
+char buf2755[200];
+char buf2756[200];
+char buf2757[200];
+char buf2758[200];
+char buf2759[200];
+char buf2760[200];
+char buf2761[200];
+char buf2762[200];
+char buf2763[200];
+char buf2764[200];
+char buf2765[200];
+char buf2766[200];
+char buf2767[200];
+char buf2768[200];
+char buf2769[200];
+char buf2770[200];
+char buf2771[200];
+char buf2772[200];
+char buf2773[200];
+char buf2774[200];
+char buf2775[200];
+char buf2776[200];
+char buf2777[200];
+char buf2778[200];
+char buf2779[200];
+char buf2780[200];
+char buf2781[200];
+char buf2782[200];
+char buf2783[200];
+char buf2784[200];
+char buf2785[200];
+char buf2786[200];
+char buf2787[200];
+char buf2788[200];
+char buf2789[200];
+char buf2790[200];
+char buf2791[200];
+char buf2792[200];
+char buf2793[200];
+char buf2794[200];
+char buf2795[200];
+char buf2796[200];
+char buf2797[200];
+char buf2798[200];
+char buf2799[200];
+char buf2800[200];
+char buf2801[200];
+char buf2802[200];
+char buf2803[200];
+char buf2804[200];
+char buf2805[200];
+char buf2806[200];
+char buf2807[200];
+char buf2808[200];
+char buf2809[200];
+char buf2810[200];
+char buf2811[200];
+char buf2812[200];
+char buf2813[200];
+char buf2814[200];
+char buf2815[200];
+char buf2816[200];
+char buf2817[200];
+char buf2818[200];
+char buf2819[200];
+char buf2820[200];
+char buf2821[200];
+char buf2822[200];
+char buf2823[200];
+char buf2824[200];
+char buf2825[200];
+char buf2826[200];
+char buf2827[200];
+char buf2828[200];
+char buf2829[200];
+char buf2830[200];
+char buf2831[200];
+char buf2832[200];
+char buf2833[200];
+char buf2834[200];
+char buf2835[200];
+char buf2836[200];
+char buf2837[200];
+char buf2838[200];
+char buf2839[200];
+char buf2840[200];
+char buf2841[200];
+char buf2842[200];
+char buf2843[200];
+char buf2844[200];
+char buf2845[200];
+char buf2846[200];
+char buf2847[200];
+char buf2848[200];
+char buf2849[200];
+char buf2850[200];
+char buf2851[200];
+char buf2852[200];
+char buf2853[200];
+char buf2854[200];
+char buf2855[200];
+char buf2856[200];
+char buf2857[200];
+char buf2858[200];
+char buf2859[200];
+char buf2860[200];
+char buf2861[200];
+char buf2862[200];
+char buf2863[200];
+char buf2864[200];
+char buf2865[200];
+char buf2866[200];
+char buf2867[200];
+char buf2868[200];
+char buf2869[200];
+char buf2870[200];
+char buf2871[200];
+char buf2872[200];
+char buf2873[200];
+char buf2874[200];
+char buf2875[200];
+char buf2876[200];
+char buf2877[200];
+char buf2878[200];
+char buf2879[200];
+char buf2880[200];
+char buf2881[200];
+char buf2882[200];
+char buf2883[200];
+char buf2884[200];
+char buf2885[200];
+char buf2886[200];
+char buf2887[200];
+char buf2888[200];
+char buf2889[200];
+char buf2890[200];
+char buf2891[200];
+char buf2892[200];
+char buf2893[200];
+char buf2894[200];
+char buf2895[200];
+char buf2896[200];
+char buf2897[200];
+char buf2898[200];
+char buf2899[200];
+char buf2900[200];
+char buf2901[200];
+char buf2902[200];
+char buf2903[200];
+char buf2904[200];
+char buf2905[200];
+char buf2906[200];
+char buf2907[200];
+char buf2908[200];
+char buf2909[200];
+char buf2910[200];
+char buf2911[200];
+char buf2912[200];
+char buf2913[200];
+char buf2914[200];
+char buf2915[200];
+char buf2916[200];
+char buf2917[200];
+char buf2918[200];
+char buf2919[200];
+char buf2920[200];
+char buf2921[200];
+char buf2922[200];
+char buf2923[200];
+char buf2924[200];
+char buf2925[200];
+char buf2926[200];
+char buf2927[200];
+char buf2928[200];
+char buf2929[200];
+char buf2930[200];
+char buf2931[200];
+char buf2932[200];
+char buf2933[200];
+char buf2934[200];
+char buf2935[200];
+char buf2936[200];
+char buf2937[200];
+char buf2938[200];
+char buf2939[200];
+char buf2940[200];
+char buf2941[200];
+char buf2942[200];
+char buf2943[200];
+char buf2944[200];
+char buf2945[200];
+char buf2946[200];
+char buf2947[200];
+char buf2948[200];
+char buf2949[200];
+char buf2950[200];
+char buf2951[200];
+char buf2952[200];
+char buf2953[200];
+char buf2954[200];
+char buf2955[200];
+char buf2956[200];
+char buf2957[200];
+char buf2958[200];
+char buf2959[200];
+char buf2960[200];
+char buf2961[200];
+char buf2962[200];
+char buf2963[200];
+char buf2964[200];
+char buf2965[200];
+char buf2966[200];
+char buf2967[200];
+char buf2968[200];
+char buf2969[200];
+char buf2970[200];
+char buf2971[200];
+char buf2972[200];
+char buf2973[200];
+char buf2974[200];
+char buf2975[200];
+char buf2976[200];
+char buf2977[200];
+char buf2978[200];
+char buf2979[200];
+char buf2980[200];
+char buf2981[200];
+char buf2982[200];
+char buf2983[200];
+char buf2984[200];
+char buf2985[200];
+char buf2986[200];
+char buf2987[200];
+char buf2988[200];
+char buf2989[200];
+char buf2990[200];
+char buf2991[200];
+char buf2992[200];
+char buf2993[200];
+char buf2994[200];
+char buf2995[200];
+char buf2996[200];
+char buf2997[200];
+char buf2998[200];
+char buf2999[200];
+char buf3000[200];
+char buf3001[200];
+char buf3002[200];
+char buf3003[200];
+char buf3004[200];
+char buf3005[200];
+char buf3006[200];
+char buf3007[200];
+char buf3008[200];
+char buf3009[200];
+char buf3010[200];
+char buf3011[200];
+char buf3012[200];
+char buf3013[200];
+char buf3014[200];
+char buf3015[200];
+char buf3016[200];
+char buf3017[200];
+char buf3018[200];
+char buf3019[200];
+char buf3020[200];
+char buf3021[200];
+char buf3022[200];
+char buf3023[200];
+char buf3024[200];
+char buf3025[200];
+char buf3026[200];
+char buf3027[200];
+char buf3028[200];
+char buf3029[200];
+char buf3030[200];
+char buf3031[200];
+char buf3032[200];
+char buf3033[200];
+char buf3034[200];
+char buf3035[200];
+char buf3036[200];
+char buf3037[200];
+char buf3038[200];
+char buf3039[200];
+char buf3040[200];
+char buf3041[200];
+char buf3042[200];
+char buf3043[200];
+char buf3044[200];
+char buf3045[200];
+char buf3046[200];
+char buf3047[200];
+char buf3048[200];
+char buf3049[200];
+char buf3050[200];
+char buf3051[200];
+char buf3052[200];
+char buf3053[200];
+char buf3054[200];
+char buf3055[200];
+char buf3056[200];
+char buf3057[200];
+char buf3058[200];
+char buf3059[200];
+char buf3060[200];
+char buf3061[200];
+char buf3062[200];
+char buf3063[200];
+char buf3064[200];
+char buf3065[200];
+char buf3066[200];
+char buf3067[200];
+char buf3068[200];
+char buf3069[200];
+char buf3070[200];
+char buf3071[200];
+char buf3072[200];
+char buf3073[200];
+char buf3074[200];
+char buf3075[200];
+char buf3076[200];
+char buf3077[200];
+char buf3078[200];
+char buf3079[200];
+char buf3080[200];
+char buf3081[200];
+char buf3082[200];
+char buf3083[200];
+char buf3084[200];
+char buf3085[200];
+char buf3086[200];
+char buf3087[200];
+char buf3088[200];
+char buf3089[200];
+char buf3090[200];
+char buf3091[200];
+char buf3092[200];
+char buf3093[200];
+char buf3094[200];
+char buf3095[200];
+char buf3096[200];
+char buf3097[200];
+char buf3098[200];
+char buf3099[200];
+char buf3100[200];
+char buf3101[200];
+char buf3102[200];
+char buf3103[200];
+char buf3104[200];
+char buf3105[200];
+char buf3106[200];
+char buf3107[200];
+char buf3108[200];
+char buf3109[200];
+char buf3110[200];
+char buf3111[200];
+char buf3112[200];
+char buf3113[200];
+char buf3114[200];
+char buf3115[200];
+char buf3116[200];
+char buf3117[200];
+char buf3118[200];
+char buf3119[200];
+char buf3120[200];
+char buf3121[200];
+char buf3122[200];
+char buf3123[200];
+char buf3124[200];
+char buf3125[200];
+char buf3126[200];
+char buf3127[200];
+char buf3128[200];
+char buf3129[200];
+char buf3130[200];
+char buf3131[200];
+char buf3132[200];
+char buf3133[200];
+char buf3134[200];
+char buf3135[200];
+char buf3136[200];
+char buf3137[200];
+char buf3138[200];
+char buf3139[200];
+char buf3140[200];
+char buf3141[200];
+char buf3142[200];
+char buf3143[200];
+char buf3144[200];
+char buf3145[200];
+char buf3146[200];
+char buf3147[200];
+char buf3148[200];
+char buf3149[200];
+char buf3150[200];
+char buf3151[200];
+char buf3152[200];
+char buf3153[200];
+char buf3154[200];
+char buf3155[200];
+char buf3156[200];
+char buf3157[200];
+char buf3158[200];
+char buf3159[200];
+char buf3160[200];
+char buf3161[200];
+char buf3162[200];
+char buf3163[200];
+char buf3164[200];
+char buf3165[200];
+char buf3166[200];
+char buf3167[200];
+char buf3168[200];
+char buf3169[200];
+char buf3170[200];
+char buf3171[200];
+char buf3172[200];
+char buf3173[200];
+char buf3174[200];
+char buf3175[200];
+char buf3176[200];
+char buf3177[200];
+char buf3178[200];
+char buf3179[200];
+char buf3180[200];
+char buf3181[200];
+char buf3182[200];
+char buf3183[200];
+char buf3184[200];
+char buf3185[200];
+char buf3186[200];
+char buf3187[200];
+char buf3188[200];
+char buf3189[200];
+char buf3190[200];
+char buf3191[200];
+char buf3192[200];
+char buf3193[200];
+char buf3194[200];
+char buf3195[200];
+char buf3196[200];
+char buf3197[200];
+char buf3198[200];
+char buf3199[200];
+char buf3200[200];
+char buf3201[200];
+char buf3202[200];
+char buf3203[200];
+char buf3204[200];
+char buf3205[200];
+char buf3206[200];
+char buf3207[200];
+char buf3208[200];
+char buf3209[200];
+char buf3210[200];
+char buf3211[200];
+char buf3212[200];
+char buf3213[200];
+char buf3214[200];
+char buf3215[200];
+char buf3216[200];
+char buf3217[200];
+char buf3218[200];
+char buf3219[200];
+char buf3220[200];
+char buf3221[200];
+char buf3222[200];
+char buf3223[200];
+char buf3224[200];
+char buf3225[200];
+char buf3226[200];
+char buf3227[200];
+char buf3228[200];
+char buf3229[200];
+char buf3230[200];
+char buf3231[200];
+char buf3232[200];
+char buf3233[200];
+char buf3234[200];
+char buf3235[200];
+char buf3236[200];
+char buf3237[200];
+char buf3238[200];
+char buf3239[200];
+char buf3240[200];
+char buf3241[200];
+char buf3242[200];
+char buf3243[200];
+char buf3244[200];
+char buf3245[200];
+char buf3246[200];
+char buf3247[200];
+char buf3248[200];
+char buf3249[200];
+char buf3250[200];
+char buf3251[200];
+char buf3252[200];
+char buf3253[200];
+char buf3254[200];
+char buf3255[200];
+char buf3256[200];
+char buf3257[200];
+char buf3258[200];
+char buf3259[200];
+char buf3260[200];
+char buf3261[200];
+char buf3262[200];
+char buf3263[200];
+char buf3264[200];
+char buf3265[200];
+char buf3266[200];
+char buf3267[200];
+char buf3268[200];
+char buf3269[200];
+char buf3270[200];
+char buf3271[200];
+char buf3272[200];
+char buf3273[200];
+char buf3274[200];
+char buf3275[200];
+char buf3276[200];
+char buf3277[200];
+char buf3278[200];
+char buf3279[200];
+char buf3280[200];
+char buf3281[200];
+char buf3282[200];
+char buf3283[200];
+char buf3284[200];
+char buf3285[200];
+char buf3286[200];
+char buf3287[200];
+char buf3288[200];
+char buf3289[200];
+char buf3290[200];
+char buf3291[200];
+char buf3292[200];
+char buf3293[200];
+char buf3294[200];
+char buf3295[200];
+char buf3296[200];
+char buf3297[200];
+char buf3298[200];
+char buf3299[200];
+char buf3300[200];
+char buf3301[200];
+char buf3302[200];
+char buf3303[200];
+char buf3304[200];
+char buf3305[200];
+char buf3306[200];
+char buf3307[200];
+char buf3308[200];
+char buf3309[200];
+char buf3310[200];
+char buf3311[200];
+char buf3312[200];
+char buf3313[200];
+char buf3314[200];
+char buf3315[200];
+char buf3316[200];
+char buf3317[200];
+char buf3318[200];
+char buf3319[200];
+char buf3320[200];
+char buf3321[200];
+char buf3322[200];
+char buf3323[200];
+char buf3324[200];
+char buf3325[200];
+char buf3326[200];
+char buf3327[200];
+char buf3328[200];
+char buf3329[200];
+char buf3330[200];
+char buf3331[200];
+char buf3332[200];
+char buf3333[200];
+char buf3334[200];
+char buf3335[200];
+char buf3336[200];
+char buf3337[200];
+char buf3338[200];
+char buf3339[200];
+char buf3340[200];
+char buf3341[200];
+char buf3342[200];
+char buf3343[200];
+char buf3344[200];
+char buf3345[200];
+char buf3346[200];
+char buf3347[200];
+char buf3348[200];
+char buf3349[200];
+char buf3350[200];
+char buf3351[200];
+char buf3352[200];
+char buf3353[200];
+char buf3354[200];
+char buf3355[200];
+char buf3356[200];
+char buf3357[200];
+char buf3358[200];
+char buf3359[200];
+char buf3360[200];
+char buf3361[200];
+char buf3362[200];
+char buf3363[200];
+char buf3364[200];
+char buf3365[200];
+char buf3366[200];
+char buf3367[200];
+char buf3368[200];
+char buf3369[200];
+char buf3370[200];
+char buf3371[200];
+char buf3372[200];
+char buf3373[200];
+char buf3374[200];
+char buf3375[200];
+char buf3376[200];
+char buf3377[200];
+char buf3378[200];
+char buf3379[200];
+char buf3380[200];
+char buf3381[200];
+char buf3382[200];
+char buf3383[200];
+char buf3384[200];
+char buf3385[200];
+char buf3386[200];
+char buf3387[200];
+char buf3388[200];
+char buf3389[200];
+char buf3390[200];
+char buf3391[200];
+char buf3392[200];
+char buf3393[200];
+char buf3394[200];
+char buf3395[200];
+char buf3396[200];
+char buf3397[200];
+char buf3398[200];
+char buf3399[200];
+char buf3400[200];
+char buf3401[200];
+char buf3402[200];
+char buf3403[200];
+char buf3404[200];
+char buf3405[200];
+char buf3406[200];
+char buf3407[200];
+char buf3408[200];
+char buf3409[200];
+char buf3410[200];
+char buf3411[200];
+char buf3412[200];
+char buf3413[200];
+char buf3414[200];
+char buf3415[200];
+char buf3416[200];
+char buf3417[200];
+char buf3418[200];
+char buf3419[200];
+char buf3420[200];
+char buf3421[200];
+char buf3422[200];
+char buf3423[200];
+char buf3424[200];
+char buf3425[200];
+char buf3426[200];
+char buf3427[200];
+char buf3428[200];
+char buf3429[200];
+char buf3430[200];
+char buf3431[200];
+char buf3432[200];
+char buf3433[200];
+char buf3434[200];
+char buf3435[200];
+char buf3436[200];
+char buf3437[200];
+char buf3438[200];
+char buf3439[200];
+char buf3440[200];
+char buf3441[200];
+char buf3442[200];
+char buf3443[200];
+char buf3444[200];
+char buf3445[200];
+char buf3446[200];
+char buf3447[200];
+char buf3448[200];
+char buf3449[200];
+char buf3450[200];
+char buf3451[200];
+char buf3452[200];
+char buf3453[200];
+char buf3454[200];
+char buf3455[200];
+char buf3456[200];
+char buf3457[200];
+char buf3458[200];
+char buf3459[200];
+char buf3460[200];
+char buf3461[200];
+char buf3462[200];
+char buf3463[200];
+char buf3464[200];
+char buf3465[200];
+char buf3466[200];
+char buf3467[200];
+char buf3468[200];
+char buf3469[200];
+char buf3470[200];
+char buf3471[200];
+char buf3472[200];
+char buf3473[200];
+char buf3474[200];
+char buf3475[200];
+char buf3476[200];
+char buf3477[200];
+char buf3478[200];
+char buf3479[200];
+char buf3480[200];
+char buf3481[200];
+char buf3482[200];
+char buf3483[200];
+char buf3484[200];
+char buf3485[200];
+char buf3486[200];
+char buf3487[200];
+char buf3488[200];
+char buf3489[200];
+char buf3490[200];
+char buf3491[200];
+char buf3492[200];
+char buf3493[200];
+char buf3494[200];
+char buf3495[200];
+char buf3496[200];
+char buf3497[200];
+char buf3498[200];
+char buf3499[200];
+char buf3500[200];
+char buf3501[200];
+char buf3502[200];
+char buf3503[200];
+char buf3504[200];
+char buf3505[200];
+char buf3506[200];
+char buf3507[200];
+char buf3508[200];
+char buf3509[200];
+char buf3510[200];
+char buf3511[200];
+char buf3512[200];
+char buf3513[200];
+char buf3514[200];
+char buf3515[200];
+char buf3516[200];
+char buf3517[200];
+char buf3518[200];
+char buf3519[200];
+char buf3520[200];
+char buf3521[200];
+char buf3522[200];
+char buf3523[200];
+char buf3524[200];
+char buf3525[200];
+char buf3526[200];
+char buf3527[200];
+char buf3528[200];
+char buf3529[200];
+char buf3530[200];
+char buf3531[200];
+char buf3532[200];
+char buf3533[200];
+char buf3534[200];
+char buf3535[200];
+char buf3536[200];
+char buf3537[200];
+char buf3538[200];
+char buf3539[200];
+char buf3540[200];
+char buf3541[200];
+char buf3542[200];
+char buf3543[200];
+char buf3544[200];
+char buf3545[200];
+char buf3546[200];
+char buf3547[200];
+char buf3548[200];
+char buf3549[200];
+char buf3550[200];
+char buf3551[200];
+char buf3552[200];
+char buf3553[200];
+char buf3554[200];
+char buf3555[200];
+char buf3556[200];
+char buf3557[200];
+char buf3558[200];
+char buf3559[200];
+char buf3560[200];
+char buf3561[200];
+char buf3562[200];
+char buf3563[200];
+char buf3564[200];
+char buf3565[200];
+char buf3566[200];
+char buf3567[200];
+char buf3568[200];
+char buf3569[200];
+char buf3570[200];
+char buf3571[200];
+char buf3572[200];
+char buf3573[200];
+char buf3574[200];
+char buf3575[200];
+char buf3576[200];
+char buf3577[200];
+char buf3578[200];
+char buf3579[200];
+char buf3580[200];
+char buf3581[200];
+char buf3582[200];
+char buf3583[200];
+char buf3584[200];
+char buf3585[200];
+char buf3586[200];
+char buf3587[200];
+char buf3588[200];
+char buf3589[200];
+char buf3590[200];
+char buf3591[200];
+char buf3592[200];
+char buf3593[200];
+char buf3594[200];
+char buf3595[200];
+char buf3596[200];
+char buf3597[200];
+char buf3598[200];
+char buf3599[200];
+char buf3600[200];
+char buf3601[200];
+char buf3602[200];
+char buf3603[200];
+char buf3604[200];
+char buf3605[200];
+char buf3606[200];
+char buf3607[200];
+char buf3608[200];
+char buf3609[200];
+char buf3610[200];
+char buf3611[200];
+char buf3612[200];
+char buf3613[200];
+char buf3614[200];
+char buf3615[200];
+char buf3616[200];
+char buf3617[200];
+char buf3618[200];
+char buf3619[200];
+char buf3620[200];
+char buf3621[200];
+char buf3622[200];
+char buf3623[200];
+char buf3624[200];
+char buf3625[200];
+char buf3626[200];
+char buf3627[200];
+char buf3628[200];
+char buf3629[200];
+char buf3630[200];
+char buf3631[200];
+char buf3632[200];
+char buf3633[200];
+char buf3634[200];
+char buf3635[200];
+char buf3636[200];
+char buf3637[200];
+char buf3638[200];
+char buf3639[200];
+char buf3640[200];
+char buf3641[200];
+char buf3642[200];
+char buf3643[200];
+char buf3644[200];
+char buf3645[200];
+char buf3646[200];
+char buf3647[200];
+char buf3648[200];
+char buf3649[200];
+char buf3650[200];
+char buf3651[200];
+char buf3652[200];
+char buf3653[200];
+char buf3654[200];
+char buf3655[200];
+char buf3656[200];
+char buf3657[200];
+char buf3658[200];
+char buf3659[200];
+char buf3660[200];
+char buf3661[200];
+char buf3662[200];
+char buf3663[200];
+char buf3664[200];
+char buf3665[200];
+char buf3666[200];
+char buf3667[200];
+char buf3668[200];
+char buf3669[200];
+char buf3670[200];
+char buf3671[200];
+char buf3672[200];
+char buf3673[200];
+char buf3674[200];
+char buf3675[200];
+char buf3676[200];
+char buf3677[200];
+char buf3678[200];
+char buf3679[200];
+char buf3680[200];
+char buf3681[200];
+char buf3682[200];
+char buf3683[200];
+char buf3684[200];
+char buf3685[200];
+char buf3686[200];
+char buf3687[200];
+char buf3688[200];
+char buf3689[200];
+char buf3690[200];
+char buf3691[200];
+char buf3692[200];
+char buf3693[200];
+char buf3694[200];
+char buf3695[200];
+char buf3696[200];
+char buf3697[200];
+char buf3698[200];
+char buf3699[200];
+char buf3700[200];
+char buf3701[200];
+char buf3702[200];
+char buf3703[200];
+char buf3704[200];
+char buf3705[200];
+char buf3706[200];
+char buf3707[200];
+char buf3708[200];
+char buf3709[200];
+char buf3710[200];
+char buf3711[200];
+char buf3712[200];
+char buf3713[200];
+char buf3714[200];
+char buf3715[200];
+char buf3716[200];
+char buf3717[200];
+char buf3718[200];
+char buf3719[200];
+char buf3720[200];
+char buf3721[200];
+char buf3722[200];
+char buf3723[200];
+char buf3724[200];
+char buf3725[200];
+char buf3726[200];
+char buf3727[200];
+char buf3728[200];
+char buf3729[200];
+char buf3730[200];
+char buf3731[200];
+char buf3732[200];
+char buf3733[200];
+char buf3734[200];
+char buf3735[200];
+char buf3736[200];
+char buf3737[200];
+char buf3738[200];
+char buf3739[200];
+char buf3740[200];
+char buf3741[200];
+char buf3742[200];
+char buf3743[200];
+char buf3744[200];
+char buf3745[200];
+char buf3746[200];
+char buf3747[200];
+char buf3748[200];
+char buf3749[200];
+char buf3750[200];
+char buf3751[200];
+char buf3752[200];
+char buf3753[200];
+char buf3754[200];
+char buf3755[200];
+char buf3756[200];
+char buf3757[200];
+char buf3758[200];
+char buf3759[200];
+char buf3760[200];
+char buf3761[200];
+char buf3762[200];
+char buf3763[200];
+char buf3764[200];
+char buf3765[200];
+char buf3766[200];
+char buf3767[200];
+char buf3768[200];
+char buf3769[200];
+char buf3770[200];
+char buf3771[200];
+char buf3772[200];
+char buf3773[200];
+char buf3774[200];
+char buf3775[200];
+char buf3776[200];
+char buf3777[200];
+char buf3778[200];
+char buf3779[200];
+char buf3780[200];
+char buf3781[200];
+char buf3782[200];
+char buf3783[200];
+char buf3784[200];
+char buf3785[200];
+char buf3786[200];
+char buf3787[200];
+char buf3788[200];
+char buf3789[200];
+char buf3790[200];
+char buf3791[200];
+char buf3792[200];
+char buf3793[200];
+char buf3794[200];
+char buf3795[200];
+char buf3796[200];
+char buf3797[200];
+char buf3798[200];
+char buf3799[200];
+char buf3800[200];
+char buf3801[200];
+char buf3802[200];
+char buf3803[200];
+char buf3804[200];
+char buf3805[200];
+char buf3806[200];
+char buf3807[200];
+char buf3808[200];
+char buf3809[200];
+char buf3810[200];
+char buf3811[200];
+char buf3812[200];
+char buf3813[200];
+char buf3814[200];
+char buf3815[200];
+char buf3816[200];
+char buf3817[200];
+char buf3818[200];
+char buf3819[200];
+char buf3820[200];
+char buf3821[200];
+char buf3822[200];
+char buf3823[200];
+char buf3824[200];
+char buf3825[200];
+char buf3826[200];
+char buf3827[200];
+char buf3828[200];
+char buf3829[200];
+char buf3830[200];
+char buf3831[200];
+char buf3832[200];
+char buf3833[200];
+char buf3834[200];
+char buf3835[200];
+char buf3836[200];
+char buf3837[200];
+char buf3838[200];
+char buf3839[200];
+char buf3840[200];
+char buf3841[200];
+char buf3842[200];
+char buf3843[200];
+char buf3844[200];
+char buf3845[200];
+char buf3846[200];
+char buf3847[200];
+char buf3848[200];
+char buf3849[200];
+char buf3850[200];
+char buf3851[200];
+char buf3852[200];
+char buf3853[200];
+char buf3854[200];
+char buf3855[200];
+char buf3856[200];
+char buf3857[200];
+char buf3858[200];
+char buf3859[200];
+char buf3860[200];
+char buf3861[200];
+char buf3862[200];
+char buf3863[200];
+char buf3864[200];
+char buf3865[200];
+char buf3866[200];
+char buf3867[200];
+char buf3868[200];
+char buf3869[200];
+char buf3870[200];
+char buf3871[200];
+char buf3872[200];
+char buf3873[200];
+char buf3874[200];
+char buf3875[200];
+char buf3876[200];
+char buf3877[200];
+char buf3878[200];
+char buf3879[200];
+char buf3880[200];
+char buf3881[200];
+char buf3882[200];
+char buf3883[200];
+char buf3884[200];
+char buf3885[200];
+char buf3886[200];
+char buf3887[200];
+char buf3888[200];
+char buf3889[200];
+char buf3890[200];
+char buf3891[200];
+char buf3892[200];
+char buf3893[200];
+char buf3894[200];
+char buf3895[200];
+char buf3896[200];
+char buf3897[200];
+char buf3898[200];
+char buf3899[200];
+char buf3900[200];
+char buf3901[200];
+char buf3902[200];
+char buf3903[200];
+char buf3904[200];
+char buf3905[200];
+char buf3906[200];
+char buf3907[200];
+char buf3908[200];
+char buf3909[200];
+char buf3910[200];
+char buf3911[200];
+char buf3912[200];
+char buf3913[200];
+char buf3914[200];
+char buf3915[200];
+char buf3916[200];
+char buf3917[200];
+char buf3918[200];
+char buf3919[200];
+char buf3920[200];
+char buf3921[200];
+char buf3922[200];
+char buf3923[200];
+char buf3924[200];
+char buf3925[200];
+char buf3926[200];
+char buf3927[200];
+char buf3928[200];
+char buf3929[200];
+char buf3930[200];
+char buf3931[200];
+char buf3932[200];
+char buf3933[200];
+char buf3934[200];
+char buf3935[200];
+char buf3936[200];
+char buf3937[200];
+char buf3938[200];
+char buf3939[200];
+char buf3940[200];
+char buf3941[200];
+char buf3942[200];
+char buf3943[200];
+char buf3944[200];
+char buf3945[200];
+char buf3946[200];
+char buf3947[200];
+char buf3948[200];
+char buf3949[200];
+char buf3950[200];
+char buf3951[200];
+char buf3952[200];
+char buf3953[200];
+char buf3954[200];
+char buf3955[200];
+char buf3956[200];
+char buf3957[200];
+char buf3958[200];
+char buf3959[200];
+char buf3960[200];
+char buf3961[200];
+char buf3962[200];
+char buf3963[200];
+char buf3964[200];
+char buf3965[200];
+char buf3966[200];
+char buf3967[200];
+char buf3968[200];
+char buf3969[200];
+char buf3970[200];
+char buf3971[200];
+char buf3972[200];
+char buf3973[200];
+char buf3974[200];
+char buf3975[200];
+char buf3976[200];
+char buf3977[200];
+char buf3978[200];
+char buf3979[200];
+char buf3980[200];
+char buf3981[200];
+char buf3982[200];
+char buf3983[200];
+char buf3984[200];
+char buf3985[200];
+char buf3986[200];
+char buf3987[200];
+char buf3988[200];
+char buf3989[200];
+char buf3990[200];
+char buf3991[200];
+char buf3992[200];
+char buf3993[200];
+char buf3994[200];
+char buf3995[200];
+char buf3996[200];
+char buf3997[200];
+char buf3998[200];
+char buf3999[200];
+char buf4000[200];
+char buf4001[200];
+char buf4002[200];
+char buf4003[200];
+char buf4004[200];
+char buf4005[200];
+char buf4006[200];
+char buf4007[200];
+char buf4008[200];
+char buf4009[200];
+char buf4010[200];
+char buf4011[200];
+char buf4012[200];
+char buf4013[200];
+char buf4014[200];
+char buf4015[200];
+char buf4016[200];
+char buf4017[200];
+char buf4018[200];
+char buf4019[200];
+char buf4020[200];
+char buf4021[200];
+char buf4022[200];
+char buf4023[200];
+char buf4024[200];
+char buf4025[200];
+char buf4026[200];
+char buf4027[200];
+char buf4028[200];
+char buf4029[200];
+char buf4030[200];
+char buf4031[200];
+char buf4032[200];
+char buf4033[200];
+char buf4034[200];
+char buf4035[200];
+char buf4036[200];
+char buf4037[200];
+char buf4038[200];
+char buf4039[200];
+char buf4040[200];
+char buf4041[200];
+char buf4042[200];
+char buf4043[200];
+char buf4044[200];
+char buf4045[200];
+char buf4046[200];
+char buf4047[200];
+char buf4048[200];
+char buf4049[200];
+char buf4050[200];
+char buf4051[200];
+char buf4052[200];
+char buf4053[200];
+char buf4054[200];
+char buf4055[200];
+char buf4056[200];
+char buf4057[200];
+char buf4058[200];
+char buf4059[200];
+char buf4060[200];
+char buf4061[200];
+char buf4062[200];
+char buf4063[200];
+char buf4064[200];
+char buf4065[200];
+char buf4066[200];
+char buf4067[200];
+char buf4068[200];
+char buf4069[200];
+char buf4070[200];
+char buf4071[200];
+char buf4072[200];
+char buf4073[200];
+char buf4074[200];
+char buf4075[200];
+char buf4076[200];
+char buf4077[200];
+char buf4078[200];
+char buf4079[200];
+char buf4080[200];
+char buf4081[200];
+char buf4082[200];
+char buf4083[200];
+char buf4084[200];
+char buf4085[200];
+char buf4086[200];
+char buf4087[200];
+char buf4088[200];
+char buf4089[200];
+char buf4090[200];
+char buf4091[200];
+char buf4092[200];
+char buf4093[200];
+char buf4094[200];
+char buf4095[200];
+char buf4096[200];
+char buf4097[200];
+char buf4098[200];
+char buf4099[200];
+char buf4100[200];
+char buf4101[200];
+char buf4102[200];
+char buf4103[200];
+char buf4104[200];
+char buf4105[200];
+char buf4106[200];
+char buf4107[200];
+char buf4108[200];
+char buf4109[200];
+char buf4110[200];
+char buf4111[200];
+char buf4112[200];
+char buf4113[200];
+char buf4114[200];
+char buf4115[200];
+char buf4116[200];
+char buf4117[200];
+char buf4118[200];
+char buf4119[200];
+char buf4120[200];
+char buf4121[200];
+char buf4122[200];
+char buf4123[200];
+char buf4124[200];
+char buf4125[200];
+char buf4126[200];
+char buf4127[200];
+char buf4128[200];
+char buf4129[200];
+char buf4130[200];
+char buf4131[200];
+char buf4132[200];
+char buf4133[200];
+char buf4134[200];
+char buf4135[200];
+char buf4136[200];
+char buf4137[200];
+char buf4138[200];
+char buf4139[200];
+char buf4140[200];
+char buf4141[200];
+char buf4142[200];
+char buf4143[200];
+char buf4144[200];
+char buf4145[200];
+char buf4146[200];
+char buf4147[200];
+char buf4148[200];
+char buf4149[200];
+char buf4150[200];
+char buf4151[200];
+char buf4152[200];
+char buf4153[200];
+char buf4154[200];
+char buf4155[200];
+char buf4156[200];
+char buf4157[200];
+char buf4158[200];
+char buf4159[200];
+char buf4160[200];
+char buf4161[200];
+char buf4162[200];
+char buf4163[200];
+char buf4164[200];
+char buf4165[200];
+char buf4166[200];
+char buf4167[200];
+char buf4168[200];
+char buf4169[200];
+char buf4170[200];
+char buf4171[200];
+char buf4172[200];
+char buf4173[200];
+char buf4174[200];
+char buf4175[200];
+char buf4176[200];
+char buf4177[200];
+char buf4178[200];
+char buf4179[200];
+char buf4180[200];
+char buf4181[200];
+char buf4182[200];
+char buf4183[200];
+char buf4184[200];
+char buf4185[200];
+char buf4186[200];
+char buf4187[200];
+char buf4188[200];
+char buf4189[200];
+char buf4190[200];
+char buf4191[200];
+char buf4192[200];
+char buf4193[200];
+char buf4194[200];
+char buf4195[200];
+char buf4196[200];
+char buf4197[200];
+char buf4198[200];
+char buf4199[200];
+char buf4200[200];
+char buf4201[200];
+char buf4202[200];
+char buf4203[200];
+char buf4204[200];
+char buf4205[200];
+char buf4206[200];
+char buf4207[200];
+char buf4208[200];
+char buf4209[200];
+char buf4210[200];
+char buf4211[200];
+char buf4212[200];
+char buf4213[200];
+char buf4214[200];
+char buf4215[200];
+char buf4216[200];
+char buf4217[200];
+char buf4218[200];
+char buf4219[200];
+char buf4220[200];
+char buf4221[200];
+char buf4222[200];
+char buf4223[200];
+char buf4224[200];
+char buf4225[200];
+char buf4226[200];
+char buf4227[200];
+char buf4228[200];
+char buf4229[200];
+char buf4230[200];
+char buf4231[200];
+char buf4232[200];
+char buf4233[200];
+char buf4234[200];
+char buf4235[200];
+char buf4236[200];
+char buf4237[200];
+char buf4238[200];
+char buf4239[200];
+char buf4240[200];
+char buf4241[200];
+char buf4242[200];
+char buf4243[200];
+char buf4244[200];
+char buf4245[200];
+char buf4246[200];
+char buf4247[200];
+char buf4248[200];
+char buf4249[200];
+char buf4250[200];
+char buf4251[200];
+char buf4252[200];
+char buf4253[200];
+char buf4254[200];
+char buf4255[200];
+char buf4256[200];
+char buf4257[200];
+char buf4258[200];
+char buf4259[200];
+char buf4260[200];
+char buf4261[200];
+char buf4262[200];
+char buf4263[200];
+char buf4264[200];
+char buf4265[200];
+char buf4266[200];
+char buf4267[200];
+char buf4268[200];
+char buf4269[200];
+char buf4270[200];
+char buf4271[200];
+char buf4272[200];
+char buf4273[200];
+char buf4274[200];
+char buf4275[200];
+char buf4276[200];
+char buf4277[200];
+char buf4278[200];
+char buf4279[200];
+char buf4280[200];
+char buf4281[200];
+char buf4282[200];
+char buf4283[200];
+char buf4284[200];
+char buf4285[200];
+char buf4286[200];
+char buf4287[200];
+char buf4288[200];
+char buf4289[200];
+char buf4290[200];
+char buf4291[200];
+char buf4292[200];
+char buf4293[200];
+char buf4294[200];
+char buf4295[200];
+char buf4296[200];
+char buf4297[200];
+char buf4298[200];
+char buf4299[200];
+char buf4300[200];
+char buf4301[200];
+char buf4302[200];
+char buf4303[200];
+char buf4304[200];
+char buf4305[200];
+char buf4306[200];
+char buf4307[200];
+char buf4308[200];
+char buf4309[200];
+char buf4310[200];
+char buf4311[200];
+char buf4312[200];
+char buf4313[200];
+char buf4314[200];
+char buf4315[200];
+char buf4316[200];
+char buf4317[200];
+char buf4318[200];
+char buf4319[200];
+char buf4320[200];
+char buf4321[200];
+char buf4322[200];
+char buf4323[200];
+char buf4324[200];
+char buf4325[200];
+char buf4326[200];
+char buf4327[200];
+char buf4328[200];
+char buf4329[200];
+char buf4330[200];
+char buf4331[200];
+char buf4332[200];
+char buf4333[200];
+char buf4334[200];
+char buf4335[200];
+char buf4336[200];
+char buf4337[200];
+char buf4338[200];
+char buf4339[200];
+char buf4340[200];
+char buf4341[200];
+char buf4342[200];
+char buf4343[200];
+char buf4344[200];
+char buf4345[200];
+char buf4346[200];
+char buf4347[200];
+char buf4348[200];
+char buf4349[200];
+char buf4350[200];
+char buf4351[200];
+char buf4352[200];
+char buf4353[200];
+char buf4354[200];
+char buf4355[200];
+char buf4356[200];
+char buf4357[200];
+char buf4358[200];
+char buf4359[200];
+char buf4360[200];
+char buf4361[200];
+char buf4362[200];
+char buf4363[200];
+char buf4364[200];
+char buf4365[200];
+char buf4366[200];
+char buf4367[200];
+char buf4368[200];
+char buf4369[200];
+char buf4370[200];
+char buf4371[200];
+char buf4372[200];
+char buf4373[200];
+char buf4374[200];
+char buf4375[200];
+char buf4376[200];
+char buf4377[200];
+char buf4378[200];
+char buf4379[200];
+char buf4380[200];
+char buf4381[200];
+char buf4382[200];
+char buf4383[200];
+char buf4384[200];
+char buf4385[200];
+char buf4386[200];
+char buf4387[200];
+char buf4388[200];
+char buf4389[200];
+char buf4390[200];
+char buf4391[200];
+char buf4392[200];
+char buf4393[200];
+char buf4394[200];
+char buf4395[200];
+char buf4396[200];
+char buf4397[200];
+char buf4398[200];
+char buf4399[200];
+char buf4400[200];
+char buf4401[200];
+char buf4402[200];
+char buf4403[200];
+char buf4404[200];
+char buf4405[200];
+char buf4406[200];
+char buf4407[200];
+char buf4408[200];
+char buf4409[200];
+char buf4410[200];
+char buf4411[200];
+char buf4412[200];
+char buf4413[200];
+char buf4414[200];
+char buf4415[200];
+char buf4416[200];
+char buf4417[200];
+char buf4418[200];
+char buf4419[200];
+char buf4420[200];
+char buf4421[200];
+char buf4422[200];
+char buf4423[200];
+char buf4424[200];
+char buf4425[200];
+char buf4426[200];
+char buf4427[200];
+char buf4428[200];
+char buf4429[200];
+char buf4430[200];
+char buf4431[200];
+char buf4432[200];
+char buf4433[200];
+char buf4434[200];
+char buf4435[200];
+char buf4436[200];
+char buf4437[200];
+char buf4438[200];
+char buf4439[200];
+char buf4440[200];
+char buf4441[200];
+char buf4442[200];
+char buf4443[200];
+char buf4444[200];
+char buf4445[200];
+char buf4446[200];
+char buf4447[200];
+char buf4448[200];
+char buf4449[200];
+char buf4450[200];
+char buf4451[200];
+char buf4452[200];
+char buf4453[200];
+char buf4454[200];
+char buf4455[200];
+char buf4456[200];
+char buf4457[200];
+char buf4458[200];
+char buf4459[200];
+char buf4460[200];
+char buf4461[200];
+char buf4462[200];
+char buf4463[200];
+char buf4464[200];
+char buf4465[200];
+char buf4466[200];
+char buf4467[200];
+char buf4468[200];
+char buf4469[200];
+char buf4470[200];
+char buf4471[200];
+char buf4472[200];
+char buf4473[200];
+char buf4474[200];
+char buf4475[200];
+char buf4476[200];
+char buf4477[200];
+char buf4478[200];
+char buf4479[200];
+char buf4480[200];
+char buf4481[200];
+char buf4482[200];
+char buf4483[200];
+char buf4484[200];
+char buf4485[200];
+char buf4486[200];
+char buf4487[200];
+char buf4488[200];
+char buf4489[200];
+char buf4490[200];
+char buf4491[200];
+char buf4492[200];
+char buf4493[200];
+char buf4494[200];
+char buf4495[200];
+char buf4496[200];
+char buf4497[200];
+char buf4498[200];
+char buf4499[200];
+char buf4500[200];
+char buf4501[200];
+char buf4502[200];
+char buf4503[200];
+char buf4504[200];
+char buf4505[200];
+char buf4506[200];
+char buf4507[200];
+char buf4508[200];
+char buf4509[200];
+char buf4510[200];
+char buf4511[200];
+char buf4512[200];
+char buf4513[200];
+char buf4514[200];
+char buf4515[200];
+char buf4516[200];
+char buf4517[200];
+char buf4518[200];
+char buf4519[200];
+char buf4520[200];
+char buf4521[200];
+char buf4522[200];
+char buf4523[200];
+char buf4524[200];
+char buf4525[200];
+char buf4526[200];
+char buf4527[200];
+char buf4528[200];
+char buf4529[200];
+char buf4530[200];
+char buf4531[200];
+char buf4532[200];
+char buf4533[200];
+char buf4534[200];
+char buf4535[200];
+char buf4536[200];
+char buf4537[200];
+char buf4538[200];
+char buf4539[200];
+char buf4540[200];
+char buf4541[200];
+char buf4542[200];
+char buf4543[200];
+char buf4544[200];
+char buf4545[200];
+char buf4546[200];
+char buf4547[200];
+char buf4548[200];
+char buf4549[200];
+char buf4550[200];
+char buf4551[200];
+char buf4552[200];
+char buf4553[200];
+char buf4554[200];
+char buf4555[200];
+char buf4556[200];
+char buf4557[200];
+char buf4558[200];
+char buf4559[200];
+char buf4560[200];
+char buf4561[200];
+char buf4562[200];
+char buf4563[200];
+char buf4564[200];
+char buf4565[200];
+char buf4566[200];
+char buf4567[200];
+char buf4568[200];
+char buf4569[200];
+char buf4570[200];
+char buf4571[200];
+char buf4572[200];
+char buf4573[200];
+char buf4574[200];
+char buf4575[200];
+char buf4576[200];
+char buf4577[200];
+char buf4578[200];
+char buf4579[200];
+char buf4580[200];
+char buf4581[200];
+char buf4582[200];
+char buf4583[200];
+char buf4584[200];
+char buf4585[200];
+char buf4586[200];
+char buf4587[200];
+char buf4588[200];
+char buf4589[200];
+char buf4590[200];
+char buf4591[200];
+char buf4592[200];
+char buf4593[200];
+char buf4594[200];
+char buf4595[200];
+char buf4596[200];
+char buf4597[200];
+char buf4598[200];
+char buf4599[200];
+char buf4600[200];
+char buf4601[200];
+char buf4602[200];
+char buf4603[200];
+char buf4604[200];
+char buf4605[200];
+char buf4606[200];
+char buf4607[200];
+char buf4608[200];
+char buf4609[200];
+char buf4610[200];
+char buf4611[200];
+char buf4612[200];
+char buf4613[200];
+char buf4614[200];
+char buf4615[200];
+char buf4616[200];
+char buf4617[200];
+char buf4618[200];
+char buf4619[200];
+char buf4620[200];
+char buf4621[200];
+char buf4622[200];
+char buf4623[200];
+char buf4624[200];
+char buf4625[200];
+char buf4626[200];
+char buf4627[200];
+char buf4628[200];
+char buf4629[200];
+char buf4630[200];
+char buf4631[200];
+char buf4632[200];
+char buf4633[200];
+char buf4634[200];
+char buf4635[200];
+char buf4636[200];
+char buf4637[200];
+char buf4638[200];
+char buf4639[200];
+char buf4640[200];
+char buf4641[200];
+char buf4642[200];
+char buf4643[200];
+char buf4644[200];
+char buf4645[200];
+char buf4646[200];
+char buf4647[200];
+char buf4648[200];
+char buf4649[200];
+char buf4650[200];
+char buf4651[200];
+char buf4652[200];
+char buf4653[200];
+char buf4654[200];
+char buf4655[200];
+char buf4656[200];
+char buf4657[200];
+char buf4658[200];
+char buf4659[200];
+char buf4660[200];
+char buf4661[200];
+char buf4662[200];
+char buf4663[200];
+char buf4664[200];
+char buf4665[200];
+char buf4666[200];
+char buf4667[200];
+char buf4668[200];
+char buf4669[200];
+char buf4670[200];
+char buf4671[200];
+char buf4672[200];
+char buf4673[200];
+char buf4674[200];
+char buf4675[200];
+char buf4676[200];
+char buf4677[200];
+char buf4678[200];
+char buf4679[200];
+char buf4680[200];
+char buf4681[200];
+char buf4682[200];
+char buf4683[200];
+char buf4684[200];
+char buf4685[200];
+char buf4686[200];
+char buf4687[200];
+char buf4688[200];
+char buf4689[200];
+char buf4690[200];
+char buf4691[200];
+char buf4692[200];
+char buf4693[200];
+char buf4694[200];
+char buf4695[200];
+char buf4696[200];
+char buf4697[200];
+char buf4698[200];
+char buf4699[200];
+char buf4700[200];
+char buf4701[200];
+char buf4702[200];
+char buf4703[200];
+char buf4704[200];
+char buf4705[200];
+char buf4706[200];
+char buf4707[200];
+char buf4708[200];
+char buf4709[200];
+char buf4710[200];
+char buf4711[200];
+char buf4712[200];
+char buf4713[200];
+char buf4714[200];
+char buf4715[200];
+char buf4716[200];
+char buf4717[200];
+char buf4718[200];
+char buf4719[200];
+char buf4720[200];
+char buf4721[200];
+char buf4722[200];
+char buf4723[200];
+char buf4724[200];
+char buf4725[200];
+char buf4726[200];
+char buf4727[200];
+char buf4728[200];
+char buf4729[200];
+char buf4730[200];
+char buf4731[200];
+char buf4732[200];
+char buf4733[200];
+char buf4734[200];
+char buf4735[200];
+char buf4736[200];
+char buf4737[200];
+char buf4738[200];
+char buf4739[200];
+char buf4740[200];
+char buf4741[200];
+char buf4742[200];
+char buf4743[200];
+char buf4744[200];
+char buf4745[200];
+char buf4746[200];
+char buf4747[200];
+char buf4748[200];
+char buf4749[200];
+char buf4750[200];
+char buf4751[200];
+char buf4752[200];
+char buf4753[200];
+char buf4754[200];
+char buf4755[200];
+char buf4756[200];
+char buf4757[200];
+char buf4758[200];
+char buf4759[200];
+char buf4760[200];
+char buf4761[200];
+char buf4762[200];
+char buf4763[200];
+char buf4764[200];
+char buf4765[200];
+char buf4766[200];
+
+void RS_KERNEL test(int in) {
+    *(uchar*)buf0 = abs(*(char*)buf1);
+    *(uchar2*)buf2 = abs(*(char2*)buf3);
+    *(uchar3*)buf4 = abs(*(char3*)buf5);
+    *(uchar4*)buf6 = abs(*(char4*)buf7);
+    *(ushort*)buf8 = abs(*(short*)buf9);
+    *(ushort2*)buf10 = abs(*(short2*)buf11);
+    *(ushort3*)buf12 = abs(*(short3*)buf13);
+    *(ushort4*)buf14 = abs(*(short4*)buf15);
+    *(uint*)buf16 = abs(*(int*)buf17);
+    *(uint2*)buf18 = abs(*(int2*)buf19);
+    *(uint3*)buf20 = abs(*(int3*)buf21);
+    *(uint4*)buf22 = abs(*(int4*)buf23);
+    *(float*)buf24 = acos(*(float*)buf25);
+    *(float2*)buf26 = acos(*(float2*)buf27);
+    *(float3*)buf28 = acos(*(float3*)buf29);
+    *(float4*)buf30 = acos(*(float4*)buf31);
+    *(float*)buf32 = acosh(*(float*)buf33);
+    *(float2*)buf34 = acosh(*(float2*)buf35);
+    *(float3*)buf36 = acosh(*(float3*)buf37);
+    *(float4*)buf38 = acosh(*(float4*)buf39);
+    *(float*)buf40 = acospi(*(float*)buf41);
+    *(float2*)buf42 = acospi(*(float2*)buf43);
+    *(float3*)buf44 = acospi(*(float3*)buf45);
+    *(float4*)buf46 = acospi(*(float4*)buf47);
+    *(float*)buf48 = asin(*(float*)buf49);
+    *(float2*)buf50 = asin(*(float2*)buf51);
+    *(float3*)buf52 = asin(*(float3*)buf53);
+    *(float4*)buf54 = asin(*(float4*)buf55);
+    *(float*)buf56 = asinh(*(float*)buf57);
+    *(float2*)buf58 = asinh(*(float2*)buf59);
+    *(float3*)buf60 = asinh(*(float3*)buf61);
+    *(float4*)buf62 = asinh(*(float4*)buf63);
+    *(float*)buf64 = asinpi(*(float*)buf65);
+    *(float2*)buf66 = asinpi(*(float2*)buf67);
+    *(float3*)buf68 = asinpi(*(float3*)buf69);
+    *(float4*)buf70 = asinpi(*(float4*)buf71);
+    *(float*)buf72 = atan(*(float*)buf73);
+    *(float2*)buf74 = atan(*(float2*)buf75);
+    *(float3*)buf76 = atan(*(float3*)buf77);
+    *(float4*)buf78 = atan(*(float4*)buf79);
+    *(float*)buf80 = atan2(*(float*)buf81, *(float*)buf82);
+    *(float2*)buf83 = atan2(*(float2*)buf84, *(float2*)buf85);
+    *(float3*)buf86 = atan2(*(float3*)buf87, *(float3*)buf88);
+    *(float4*)buf89 = atan2(*(float4*)buf90, *(float4*)buf91);
+    *(float*)buf92 = atan2pi(*(float*)buf93, *(float*)buf94);
+    *(float2*)buf95 = atan2pi(*(float2*)buf96, *(float2*)buf97);
+    *(float3*)buf98 = atan2pi(*(float3*)buf99, *(float3*)buf100);
+    *(float4*)buf101 = atan2pi(*(float4*)buf102, *(float4*)buf103);
+    *(float*)buf104 = atanh(*(float*)buf105);
+    *(float2*)buf106 = atanh(*(float2*)buf107);
+    *(float3*)buf108 = atanh(*(float3*)buf109);
+    *(float4*)buf110 = atanh(*(float4*)buf111);
+    *(float*)buf112 = atanpi(*(float*)buf113);
+    *(float2*)buf114 = atanpi(*(float2*)buf115);
+    *(float3*)buf116 = atanpi(*(float3*)buf117);
+    *(float4*)buf118 = atanpi(*(float4*)buf119);
+    *(float*)buf120 = cbrt(*(float*)buf121);
+    *(float2*)buf122 = cbrt(*(float2*)buf123);
+    *(float3*)buf124 = cbrt(*(float3*)buf125);
+    *(float4*)buf126 = cbrt(*(float4*)buf127);
+    *(float*)buf128 = ceil(*(float*)buf129);
+    *(float2*)buf130 = ceil(*(float2*)buf131);
+    *(float3*)buf132 = ceil(*(float3*)buf133);
+    *(float4*)buf134 = ceil(*(float4*)buf135);
+    *(float*)buf136 = clamp(*(float*)buf137, *(float*)buf138, *(float*)buf139);
+    *(float2*)buf140 = clamp(*(float2*)buf141, *(float2*)buf142, *(float2*)buf143);
+    *(float3*)buf144 = clamp(*(float3*)buf145, *(float3*)buf146, *(float3*)buf147);
+    *(float4*)buf148 = clamp(*(float4*)buf149, *(float4*)buf150, *(float4*)buf151);
+    *(float2*)buf152 = clamp(*(float2*)buf153, *(float*)buf154, *(float*)buf155);
+    *(float3*)buf156 = clamp(*(float3*)buf157, *(float*)buf158, *(float*)buf159);
+    *(float4*)buf160 = clamp(*(float4*)buf161, *(float*)buf162, *(float*)buf163);
+    *(char*)buf164 = clamp(*(char*)buf165, *(char*)buf166, *(char*)buf167);
+    *(char2*)buf168 = clamp(*(char2*)buf169, *(char2*)buf170, *(char2*)buf171);
+    *(char3*)buf172 = clamp(*(char3*)buf173, *(char3*)buf174, *(char3*)buf175);
+    *(char4*)buf176 = clamp(*(char4*)buf177, *(char4*)buf178, *(char4*)buf179);
+    *(uchar*)buf180 = clamp(*(uchar*)buf181, *(uchar*)buf182, *(uchar*)buf183);
+    *(uchar2*)buf184 = clamp(*(uchar2*)buf185, *(uchar2*)buf186, *(uchar2*)buf187);
+    *(uchar3*)buf188 = clamp(*(uchar3*)buf189, *(uchar3*)buf190, *(uchar3*)buf191);
+    *(uchar4*)buf192 = clamp(*(uchar4*)buf193, *(uchar4*)buf194, *(uchar4*)buf195);
+    *(short*)buf196 = clamp(*(short*)buf197, *(short*)buf198, *(short*)buf199);
+    *(short2*)buf200 = clamp(*(short2*)buf201, *(short2*)buf202, *(short2*)buf203);
+    *(short3*)buf204 = clamp(*(short3*)buf205, *(short3*)buf206, *(short3*)buf207);
+    *(short4*)buf208 = clamp(*(short4*)buf209, *(short4*)buf210, *(short4*)buf211);
+    *(ushort*)buf212 = clamp(*(ushort*)buf213, *(ushort*)buf214, *(ushort*)buf215);
+    *(ushort2*)buf216 = clamp(*(ushort2*)buf217, *(ushort2*)buf218, *(ushort2*)buf219);
+    *(ushort3*)buf220 = clamp(*(ushort3*)buf221, *(ushort3*)buf222, *(ushort3*)buf223);
+    *(ushort4*)buf224 = clamp(*(ushort4*)buf225, *(ushort4*)buf226, *(ushort4*)buf227);
+    *(int*)buf228 = clamp(*(int*)buf229, *(int*)buf230, *(int*)buf231);
+    *(int2*)buf232 = clamp(*(int2*)buf233, *(int2*)buf234, *(int2*)buf235);
+    *(int3*)buf236 = clamp(*(int3*)buf237, *(int3*)buf238, *(int3*)buf239);
+    *(int4*)buf240 = clamp(*(int4*)buf241, *(int4*)buf242, *(int4*)buf243);
+    *(uint*)buf244 = clamp(*(uint*)buf245, *(uint*)buf246, *(uint*)buf247);
+    *(uint2*)buf248 = clamp(*(uint2*)buf249, *(uint2*)buf250, *(uint2*)buf251);
+    *(uint3*)buf252 = clamp(*(uint3*)buf253, *(uint3*)buf254, *(uint3*)buf255);
+    *(uint4*)buf256 = clamp(*(uint4*)buf257, *(uint4*)buf258, *(uint4*)buf259);
+    *(long*)buf260 = clamp(*(long*)buf261, *(long*)buf262, *(long*)buf263);
+    *(long2*)buf264 = clamp(*(long2*)buf265, *(long2*)buf266, *(long2*)buf267);
+    *(long3*)buf268 = clamp(*(long3*)buf269, *(long3*)buf270, *(long3*)buf271);
+    *(long4*)buf272 = clamp(*(long4*)buf273, *(long4*)buf274, *(long4*)buf275);
+    *(ulong*)buf276 = clamp(*(ulong*)buf277, *(ulong*)buf278, *(ulong*)buf279);
+    *(ulong2*)buf280 = clamp(*(ulong2*)buf281, *(ulong2*)buf282, *(ulong2*)buf283);
+    *(ulong3*)buf284 = clamp(*(ulong3*)buf285, *(ulong3*)buf286, *(ulong3*)buf287);
+    *(ulong4*)buf288 = clamp(*(ulong4*)buf289, *(ulong4*)buf290, *(ulong4*)buf291);
+    *(char2*)buf292 = clamp(*(char2*)buf293, *(char*)buf294, *(char*)buf295);
+    *(char3*)buf296 = clamp(*(char3*)buf297, *(char*)buf298, *(char*)buf299);
+    *(char4*)buf300 = clamp(*(char4*)buf301, *(char*)buf302, *(char*)buf303);
+    *(uchar2*)buf304 = clamp(*(uchar2*)buf305, *(uchar*)buf306, *(uchar*)buf307);
+    *(uchar3*)buf308 = clamp(*(uchar3*)buf309, *(uchar*)buf310, *(uchar*)buf311);
+    *(uchar4*)buf312 = clamp(*(uchar4*)buf313, *(uchar*)buf314, *(uchar*)buf315);
+    *(short2*)buf316 = clamp(*(short2*)buf317, *(short*)buf318, *(short*)buf319);
+    *(short3*)buf320 = clamp(*(short3*)buf321, *(short*)buf322, *(short*)buf323);
+    *(short4*)buf324 = clamp(*(short4*)buf325, *(short*)buf326, *(short*)buf327);
+    *(ushort2*)buf328 = clamp(*(ushort2*)buf329, *(ushort*)buf330, *(ushort*)buf331);
+    *(ushort3*)buf332 = clamp(*(ushort3*)buf333, *(ushort*)buf334, *(ushort*)buf335);
+    *(ushort4*)buf336 = clamp(*(ushort4*)buf337, *(ushort*)buf338, *(ushort*)buf339);
+    *(int2*)buf340 = clamp(*(int2*)buf341, *(int*)buf342, *(int*)buf343);
+    *(int3*)buf344 = clamp(*(int3*)buf345, *(int*)buf346, *(int*)buf347);
+    *(int4*)buf348 = clamp(*(int4*)buf349, *(int*)buf350, *(int*)buf351);
+    *(uint2*)buf352 = clamp(*(uint2*)buf353, *(uint*)buf354, *(uint*)buf355);
+    *(uint3*)buf356 = clamp(*(uint3*)buf357, *(uint*)buf358, *(uint*)buf359);
+    *(uint4*)buf360 = clamp(*(uint4*)buf361, *(uint*)buf362, *(uint*)buf363);
+    *(long2*)buf364 = clamp(*(long2*)buf365, *(long*)buf366, *(long*)buf367);
+    *(long3*)buf368 = clamp(*(long3*)buf369, *(long*)buf370, *(long*)buf371);
+    *(long4*)buf372 = clamp(*(long4*)buf373, *(long*)buf374, *(long*)buf375);
+    *(ulong2*)buf376 = clamp(*(ulong2*)buf377, *(ulong*)buf378, *(ulong*)buf379);
+    *(ulong3*)buf380 = clamp(*(ulong3*)buf381, *(ulong*)buf382, *(ulong*)buf383);
+    *(ulong4*)buf384 = clamp(*(ulong4*)buf385, *(ulong*)buf386, *(ulong*)buf387);
+    *(char*)buf388 = clz(*(char*)buf389);
+    *(char2*)buf390 = clz(*(char2*)buf391);
+    *(char3*)buf392 = clz(*(char3*)buf393);
+    *(char4*)buf394 = clz(*(char4*)buf395);
+    *(uchar*)buf396 = clz(*(uchar*)buf397);
+    *(uchar2*)buf398 = clz(*(uchar2*)buf399);
+    *(uchar3*)buf400 = clz(*(uchar3*)buf401);
+    *(uchar4*)buf402 = clz(*(uchar4*)buf403);
+    *(short*)buf404 = clz(*(short*)buf405);
+    *(short2*)buf406 = clz(*(short2*)buf407);
+    *(short3*)buf408 = clz(*(short3*)buf409);
+    *(short4*)buf410 = clz(*(short4*)buf411);
+    *(ushort*)buf412 = clz(*(ushort*)buf413);
+    *(ushort2*)buf414 = clz(*(ushort2*)buf415);
+    *(ushort3*)buf416 = clz(*(ushort3*)buf417);
+    *(ushort4*)buf418 = clz(*(ushort4*)buf419);
+    *(int*)buf420 = clz(*(int*)buf421);
+    *(int2*)buf422 = clz(*(int2*)buf423);
+    *(int3*)buf424 = clz(*(int3*)buf425);
+    *(int4*)buf426 = clz(*(int4*)buf427);
+    *(uint*)buf428 = clz(*(uint*)buf429);
+    *(uint2*)buf430 = clz(*(uint2*)buf431);
+    *(uint3*)buf432 = clz(*(uint3*)buf433);
+    *(uint4*)buf434 = clz(*(uint4*)buf435);
+    *(float2*)buf436 = convert_float2(*(float2*)buf437);
+    *(float3*)buf438 = convert_float3(*(float3*)buf439);
+    *(float4*)buf440 = convert_float4(*(float4*)buf441);
+    *(float2*)buf442 = convert_float2(*(char2*)buf443);
+    *(float3*)buf444 = convert_float3(*(char3*)buf445);
+    *(float4*)buf446 = convert_float4(*(char4*)buf447);
+    *(float2*)buf448 = convert_float2(*(uchar2*)buf449);
+    *(float3*)buf450 = convert_float3(*(uchar3*)buf451);
+    *(float4*)buf452 = convert_float4(*(uchar4*)buf453);
+    *(float2*)buf454 = convert_float2(*(short2*)buf455);
+    *(float3*)buf456 = convert_float3(*(short3*)buf457);
+    *(float4*)buf458 = convert_float4(*(short4*)buf459);
+    *(float2*)buf460 = convert_float2(*(ushort2*)buf461);
+    *(float3*)buf462 = convert_float3(*(ushort3*)buf463);
+    *(float4*)buf464 = convert_float4(*(ushort4*)buf465);
+    *(float2*)buf466 = convert_float2(*(int2*)buf467);
+    *(float3*)buf468 = convert_float3(*(int3*)buf469);
+    *(float4*)buf470 = convert_float4(*(int4*)buf471);
+    *(float2*)buf472 = convert_float2(*(uint2*)buf473);
+    *(float3*)buf474 = convert_float3(*(uint3*)buf475);
+    *(float4*)buf476 = convert_float4(*(uint4*)buf477);
+    *(char2*)buf478 = convert_char2(*(float2*)buf479);
+    *(char3*)buf480 = convert_char3(*(float3*)buf481);
+    *(char4*)buf482 = convert_char4(*(float4*)buf483);
+    *(char2*)buf484 = convert_char2(*(char2*)buf485);
+    *(char3*)buf486 = convert_char3(*(char3*)buf487);
+    *(char4*)buf488 = convert_char4(*(char4*)buf489);
+    *(char2*)buf490 = convert_char2(*(uchar2*)buf491);
+    *(char3*)buf492 = convert_char3(*(uchar3*)buf493);
+    *(char4*)buf494 = convert_char4(*(uchar4*)buf495);
+    *(char2*)buf496 = convert_char2(*(short2*)buf497);
+    *(char3*)buf498 = convert_char3(*(short3*)buf499);
+    *(char4*)buf500 = convert_char4(*(short4*)buf501);
+    *(char2*)buf502 = convert_char2(*(ushort2*)buf503);
+    *(char3*)buf504 = convert_char3(*(ushort3*)buf505);
+    *(char4*)buf506 = convert_char4(*(ushort4*)buf507);
+    *(char2*)buf508 = convert_char2(*(int2*)buf509);
+    *(char3*)buf510 = convert_char3(*(int3*)buf511);
+    *(char4*)buf512 = convert_char4(*(int4*)buf513);
+    *(char2*)buf514 = convert_char2(*(uint2*)buf515);
+    *(char3*)buf516 = convert_char3(*(uint3*)buf517);
+    *(char4*)buf518 = convert_char4(*(uint4*)buf519);
+    *(uchar2*)buf520 = convert_uchar2(*(float2*)buf521);
+    *(uchar3*)buf522 = convert_uchar3(*(float3*)buf523);
+    *(uchar4*)buf524 = convert_uchar4(*(float4*)buf525);
+    *(uchar2*)buf526 = convert_uchar2(*(char2*)buf527);
+    *(uchar3*)buf528 = convert_uchar3(*(char3*)buf529);
+    *(uchar4*)buf530 = convert_uchar4(*(char4*)buf531);
+    *(uchar2*)buf532 = convert_uchar2(*(uchar2*)buf533);
+    *(uchar3*)buf534 = convert_uchar3(*(uchar3*)buf535);
+    *(uchar4*)buf536 = convert_uchar4(*(uchar4*)buf537);
+    *(uchar2*)buf538 = convert_uchar2(*(short2*)buf539);
+    *(uchar3*)buf540 = convert_uchar3(*(short3*)buf541);
+    *(uchar4*)buf542 = convert_uchar4(*(short4*)buf543);
+    *(uchar2*)buf544 = convert_uchar2(*(ushort2*)buf545);
+    *(uchar3*)buf546 = convert_uchar3(*(ushort3*)buf547);
+    *(uchar4*)buf548 = convert_uchar4(*(ushort4*)buf549);
+    *(uchar2*)buf550 = convert_uchar2(*(int2*)buf551);
+    *(uchar3*)buf552 = convert_uchar3(*(int3*)buf553);
+    *(uchar4*)buf554 = convert_uchar4(*(int4*)buf555);
+    *(uchar2*)buf556 = convert_uchar2(*(uint2*)buf557);
+    *(uchar3*)buf558 = convert_uchar3(*(uint3*)buf559);
+    *(uchar4*)buf560 = convert_uchar4(*(uint4*)buf561);
+    *(short2*)buf562 = convert_short2(*(float2*)buf563);
+    *(short3*)buf564 = convert_short3(*(float3*)buf565);
+    *(short4*)buf566 = convert_short4(*(float4*)buf567);
+    *(short2*)buf568 = convert_short2(*(char2*)buf569);
+    *(short3*)buf570 = convert_short3(*(char3*)buf571);
+    *(short4*)buf572 = convert_short4(*(char4*)buf573);
+    *(short2*)buf574 = convert_short2(*(uchar2*)buf575);
+    *(short3*)buf576 = convert_short3(*(uchar3*)buf577);
+    *(short4*)buf578 = convert_short4(*(uchar4*)buf579);
+    *(short2*)buf580 = convert_short2(*(short2*)buf581);
+    *(short3*)buf582 = convert_short3(*(short3*)buf583);
+    *(short4*)buf584 = convert_short4(*(short4*)buf585);
+    *(short2*)buf586 = convert_short2(*(ushort2*)buf587);
+    *(short3*)buf588 = convert_short3(*(ushort3*)buf589);
+    *(short4*)buf590 = convert_short4(*(ushort4*)buf591);
+    *(short2*)buf592 = convert_short2(*(int2*)buf593);
+    *(short3*)buf594 = convert_short3(*(int3*)buf595);
+    *(short4*)buf596 = convert_short4(*(int4*)buf597);
+    *(short2*)buf598 = convert_short2(*(uint2*)buf599);
+    *(short3*)buf600 = convert_short3(*(uint3*)buf601);
+    *(short4*)buf602 = convert_short4(*(uint4*)buf603);
+    *(ushort2*)buf604 = convert_ushort2(*(float2*)buf605);
+    *(ushort3*)buf606 = convert_ushort3(*(float3*)buf607);
+    *(ushort4*)buf608 = convert_ushort4(*(float4*)buf609);
+    *(ushort2*)buf610 = convert_ushort2(*(char2*)buf611);
+    *(ushort3*)buf612 = convert_ushort3(*(char3*)buf613);
+    *(ushort4*)buf614 = convert_ushort4(*(char4*)buf615);
+    *(ushort2*)buf616 = convert_ushort2(*(uchar2*)buf617);
+    *(ushort3*)buf618 = convert_ushort3(*(uchar3*)buf619);
+    *(ushort4*)buf620 = convert_ushort4(*(uchar4*)buf621);
+    *(ushort2*)buf622 = convert_ushort2(*(short2*)buf623);
+    *(ushort3*)buf624 = convert_ushort3(*(short3*)buf625);
+    *(ushort4*)buf626 = convert_ushort4(*(short4*)buf627);
+    *(ushort2*)buf628 = convert_ushort2(*(ushort2*)buf629);
+    *(ushort3*)buf630 = convert_ushort3(*(ushort3*)buf631);
+    *(ushort4*)buf632 = convert_ushort4(*(ushort4*)buf633);
+    *(ushort2*)buf634 = convert_ushort2(*(int2*)buf635);
+    *(ushort3*)buf636 = convert_ushort3(*(int3*)buf637);
+    *(ushort4*)buf638 = convert_ushort4(*(int4*)buf639);
+    *(ushort2*)buf640 = convert_ushort2(*(uint2*)buf641);
+    *(ushort3*)buf642 = convert_ushort3(*(uint3*)buf643);
+    *(ushort4*)buf644 = convert_ushort4(*(uint4*)buf645);
+    *(int2*)buf646 = convert_int2(*(float2*)buf647);
+    *(int3*)buf648 = convert_int3(*(float3*)buf649);
+    *(int4*)buf650 = convert_int4(*(float4*)buf651);
+    *(int2*)buf652 = convert_int2(*(char2*)buf653);
+    *(int3*)buf654 = convert_int3(*(char3*)buf655);
+    *(int4*)buf656 = convert_int4(*(char4*)buf657);
+    *(int2*)buf658 = convert_int2(*(uchar2*)buf659);
+    *(int3*)buf660 = convert_int3(*(uchar3*)buf661);
+    *(int4*)buf662 = convert_int4(*(uchar4*)buf663);
+    *(int2*)buf664 = convert_int2(*(short2*)buf665);
+    *(int3*)buf666 = convert_int3(*(short3*)buf667);
+    *(int4*)buf668 = convert_int4(*(short4*)buf669);
+    *(int2*)buf670 = convert_int2(*(ushort2*)buf671);
+    *(int3*)buf672 = convert_int3(*(ushort3*)buf673);
+    *(int4*)buf674 = convert_int4(*(ushort4*)buf675);
+    *(int2*)buf676 = convert_int2(*(int2*)buf677);
+    *(int3*)buf678 = convert_int3(*(int3*)buf679);
+    *(int4*)buf680 = convert_int4(*(int4*)buf681);
+    *(int2*)buf682 = convert_int2(*(uint2*)buf683);
+    *(int3*)buf684 = convert_int3(*(uint3*)buf685);
+    *(int4*)buf686 = convert_int4(*(uint4*)buf687);
+    *(uint2*)buf688 = convert_uint2(*(float2*)buf689);
+    *(uint3*)buf690 = convert_uint3(*(float3*)buf691);
+    *(uint4*)buf692 = convert_uint4(*(float4*)buf693);
+    *(uint2*)buf694 = convert_uint2(*(char2*)buf695);
+    *(uint3*)buf696 = convert_uint3(*(char3*)buf697);
+    *(uint4*)buf698 = convert_uint4(*(char4*)buf699);
+    *(uint2*)buf700 = convert_uint2(*(uchar2*)buf701);
+    *(uint3*)buf702 = convert_uint3(*(uchar3*)buf703);
+    *(uint4*)buf704 = convert_uint4(*(uchar4*)buf705);
+    *(uint2*)buf706 = convert_uint2(*(short2*)buf707);
+    *(uint3*)buf708 = convert_uint3(*(short3*)buf709);
+    *(uint4*)buf710 = convert_uint4(*(short4*)buf711);
+    *(uint2*)buf712 = convert_uint2(*(ushort2*)buf713);
+    *(uint3*)buf714 = convert_uint3(*(ushort3*)buf715);
+    *(uint4*)buf716 = convert_uint4(*(ushort4*)buf717);
+    *(uint2*)buf718 = convert_uint2(*(int2*)buf719);
+    *(uint3*)buf720 = convert_uint3(*(int3*)buf721);
+    *(uint4*)buf722 = convert_uint4(*(int4*)buf723);
+    *(uint2*)buf724 = convert_uint2(*(uint2*)buf725);
+    *(uint3*)buf726 = convert_uint3(*(uint3*)buf727);
+    *(uint4*)buf728 = convert_uint4(*(uint4*)buf729);
+    *(double2*)buf730 = convert_double2(*(double2*)buf731);
+    *(double3*)buf732 = convert_double3(*(double3*)buf733);
+    *(double4*)buf734 = convert_double4(*(double4*)buf735);
+    *(double2*)buf736 = convert_double2(*(long2*)buf737);
+    *(double3*)buf738 = convert_double3(*(long3*)buf739);
+    *(double4*)buf740 = convert_double4(*(long4*)buf741);
+    *(double2*)buf742 = convert_double2(*(ulong2*)buf743);
+    *(double3*)buf744 = convert_double3(*(ulong3*)buf745);
+    *(double4*)buf746 = convert_double4(*(ulong4*)buf747);
+    *(long2*)buf748 = convert_long2(*(double2*)buf749);
+    *(long3*)buf750 = convert_long3(*(double3*)buf751);
+    *(long4*)buf752 = convert_long4(*(double4*)buf753);
+    *(long2*)buf754 = convert_long2(*(long2*)buf755);
+    *(long3*)buf756 = convert_long3(*(long3*)buf757);
+    *(long4*)buf758 = convert_long4(*(long4*)buf759);
+    *(long2*)buf760 = convert_long2(*(ulong2*)buf761);
+    *(long3*)buf762 = convert_long3(*(ulong3*)buf763);
+    *(long4*)buf764 = convert_long4(*(ulong4*)buf765);
+    *(ulong2*)buf766 = convert_ulong2(*(double2*)buf767);
+    *(ulong3*)buf768 = convert_ulong3(*(double3*)buf769);
+    *(ulong4*)buf770 = convert_ulong4(*(double4*)buf771);
+    *(ulong2*)buf772 = convert_ulong2(*(long2*)buf773);
+    *(ulong3*)buf774 = convert_ulong3(*(long3*)buf775);
+    *(ulong4*)buf776 = convert_ulong4(*(long4*)buf777);
+    *(ulong2*)buf778 = convert_ulong2(*(ulong2*)buf779);
+    *(ulong3*)buf780 = convert_ulong3(*(ulong3*)buf781);
+    *(ulong4*)buf782 = convert_ulong4(*(ulong4*)buf783);
+    *(float2*)buf784 = convert_float2(*(double2*)buf785);
+    *(float3*)buf786 = convert_float3(*(double3*)buf787);
+    *(float4*)buf788 = convert_float4(*(double4*)buf789);
+    *(float2*)buf790 = convert_float2(*(long2*)buf791);
+    *(float3*)buf792 = convert_float3(*(long3*)buf793);
+    *(float4*)buf794 = convert_float4(*(long4*)buf795);
+    *(float2*)buf796 = convert_float2(*(ulong2*)buf797);
+    *(float3*)buf798 = convert_float3(*(ulong3*)buf799);
+    *(float4*)buf800 = convert_float4(*(ulong4*)buf801);
+    *(char2*)buf802 = convert_char2(*(double2*)buf803);
+    *(char3*)buf804 = convert_char3(*(double3*)buf805);
+    *(char4*)buf806 = convert_char4(*(double4*)buf807);
+    *(char2*)buf808 = convert_char2(*(long2*)buf809);
+    *(char3*)buf810 = convert_char3(*(long3*)buf811);
+    *(char4*)buf812 = convert_char4(*(long4*)buf813);
+    *(char2*)buf814 = convert_char2(*(ulong2*)buf815);
+    *(char3*)buf816 = convert_char3(*(ulong3*)buf817);
+    *(char4*)buf818 = convert_char4(*(ulong4*)buf819);
+    *(uchar2*)buf820 = convert_uchar2(*(double2*)buf821);
+    *(uchar3*)buf822 = convert_uchar3(*(double3*)buf823);
+    *(uchar4*)buf824 = convert_uchar4(*(double4*)buf825);
+    *(uchar2*)buf826 = convert_uchar2(*(long2*)buf827);
+    *(uchar3*)buf828 = convert_uchar3(*(long3*)buf829);
+    *(uchar4*)buf830 = convert_uchar4(*(long4*)buf831);
+    *(uchar2*)buf832 = convert_uchar2(*(ulong2*)buf833);
+    *(uchar3*)buf834 = convert_uchar3(*(ulong3*)buf835);
+    *(uchar4*)buf836 = convert_uchar4(*(ulong4*)buf837);
+    *(short2*)buf838 = convert_short2(*(double2*)buf839);
+    *(short3*)buf840 = convert_short3(*(double3*)buf841);
+    *(short4*)buf842 = convert_short4(*(double4*)buf843);
+    *(short2*)buf844 = convert_short2(*(long2*)buf845);
+    *(short3*)buf846 = convert_short3(*(long3*)buf847);
+    *(short4*)buf848 = convert_short4(*(long4*)buf849);
+    *(short2*)buf850 = convert_short2(*(ulong2*)buf851);
+    *(short3*)buf852 = convert_short3(*(ulong3*)buf853);
+    *(short4*)buf854 = convert_short4(*(ulong4*)buf855);
+    *(ushort2*)buf856 = convert_ushort2(*(double2*)buf857);
+    *(ushort3*)buf858 = convert_ushort3(*(double3*)buf859);
+    *(ushort4*)buf860 = convert_ushort4(*(double4*)buf861);
+    *(ushort2*)buf862 = convert_ushort2(*(long2*)buf863);
+    *(ushort3*)buf864 = convert_ushort3(*(long3*)buf865);
+    *(ushort4*)buf866 = convert_ushort4(*(long4*)buf867);
+    *(ushort2*)buf868 = convert_ushort2(*(ulong2*)buf869);
+    *(ushort3*)buf870 = convert_ushort3(*(ulong3*)buf871);
+    *(ushort4*)buf872 = convert_ushort4(*(ulong4*)buf873);
+    *(int2*)buf874 = convert_int2(*(double2*)buf875);
+    *(int3*)buf876 = convert_int3(*(double3*)buf877);
+    *(int4*)buf878 = convert_int4(*(double4*)buf879);
+    *(int2*)buf880 = convert_int2(*(long2*)buf881);
+    *(int3*)buf882 = convert_int3(*(long3*)buf883);
+    *(int4*)buf884 = convert_int4(*(long4*)buf885);
+    *(int2*)buf886 = convert_int2(*(ulong2*)buf887);
+    *(int3*)buf888 = convert_int3(*(ulong3*)buf889);
+    *(int4*)buf890 = convert_int4(*(ulong4*)buf891);
+    *(uint2*)buf892 = convert_uint2(*(double2*)buf893);
+    *(uint3*)buf894 = convert_uint3(*(double3*)buf895);
+    *(uint4*)buf896 = convert_uint4(*(double4*)buf897);
+    *(uint2*)buf898 = convert_uint2(*(long2*)buf899);
+    *(uint3*)buf900 = convert_uint3(*(long3*)buf901);
+    *(uint4*)buf902 = convert_uint4(*(long4*)buf903);
+    *(uint2*)buf904 = convert_uint2(*(ulong2*)buf905);
+    *(uint3*)buf906 = convert_uint3(*(ulong3*)buf907);
+    *(uint4*)buf908 = convert_uint4(*(ulong4*)buf909);
+    *(double2*)buf910 = convert_double2(*(float2*)buf911);
+    *(double3*)buf912 = convert_double3(*(float3*)buf913);
+    *(double4*)buf914 = convert_double4(*(float4*)buf915);
+    *(double2*)buf916 = convert_double2(*(char2*)buf917);
+    *(double3*)buf918 = convert_double3(*(char3*)buf919);
+    *(double4*)buf920 = convert_double4(*(char4*)buf921);
+    *(double2*)buf922 = convert_double2(*(uchar2*)buf923);
+    *(double3*)buf924 = convert_double3(*(uchar3*)buf925);
+    *(double4*)buf926 = convert_double4(*(uchar4*)buf927);
+    *(double2*)buf928 = convert_double2(*(short2*)buf929);
+    *(double3*)buf930 = convert_double3(*(short3*)buf931);
+    *(double4*)buf932 = convert_double4(*(short4*)buf933);
+    *(double2*)buf934 = convert_double2(*(ushort2*)buf935);
+    *(double3*)buf936 = convert_double3(*(ushort3*)buf937);
+    *(double4*)buf938 = convert_double4(*(ushort4*)buf939);
+    *(double2*)buf940 = convert_double2(*(int2*)buf941);
+    *(double3*)buf942 = convert_double3(*(int3*)buf943);
+    *(double4*)buf944 = convert_double4(*(int4*)buf945);
+    *(double2*)buf946 = convert_double2(*(uint2*)buf947);
+    *(double3*)buf948 = convert_double3(*(uint3*)buf949);
+    *(double4*)buf950 = convert_double4(*(uint4*)buf951);
+    *(long2*)buf952 = convert_long2(*(float2*)buf953);
+    *(long3*)buf954 = convert_long3(*(float3*)buf955);
+    *(long4*)buf956 = convert_long4(*(float4*)buf957);
+    *(long2*)buf958 = convert_long2(*(char2*)buf959);
+    *(long3*)buf960 = convert_long3(*(char3*)buf961);
+    *(long4*)buf962 = convert_long4(*(char4*)buf963);
+    *(long2*)buf964 = convert_long2(*(uchar2*)buf965);
+    *(long3*)buf966 = convert_long3(*(uchar3*)buf967);
+    *(long4*)buf968 = convert_long4(*(uchar4*)buf969);
+    *(long2*)buf970 = convert_long2(*(short2*)buf971);
+    *(long3*)buf972 = convert_long3(*(short3*)buf973);
+    *(long4*)buf974 = convert_long4(*(short4*)buf975);
+    *(long2*)buf976 = convert_long2(*(ushort2*)buf977);
+    *(long3*)buf978 = convert_long3(*(ushort3*)buf979);
+    *(long4*)buf980 = convert_long4(*(ushort4*)buf981);
+    *(long2*)buf982 = convert_long2(*(int2*)buf983);
+    *(long3*)buf984 = convert_long3(*(int3*)buf985);
+    *(long4*)buf986 = convert_long4(*(int4*)buf987);
+    *(long2*)buf988 = convert_long2(*(uint2*)buf989);
+    *(long3*)buf990 = convert_long3(*(uint3*)buf991);
+    *(long4*)buf992 = convert_long4(*(uint4*)buf993);
+    *(ulong2*)buf994 = convert_ulong2(*(float2*)buf995);
+    *(ulong3*)buf996 = convert_ulong3(*(float3*)buf997);
+    *(ulong4*)buf998 = convert_ulong4(*(float4*)buf999);
+    *(ulong2*)buf1000 = convert_ulong2(*(char2*)buf1001);
+    *(ulong3*)buf1002 = convert_ulong3(*(char3*)buf1003);
+    *(ulong4*)buf1004 = convert_ulong4(*(char4*)buf1005);
+    *(ulong2*)buf1006 = convert_ulong2(*(uchar2*)buf1007);
+    *(ulong3*)buf1008 = convert_ulong3(*(uchar3*)buf1009);
+    *(ulong4*)buf1010 = convert_ulong4(*(uchar4*)buf1011);
+    *(ulong2*)buf1012 = convert_ulong2(*(short2*)buf1013);
+    *(ulong3*)buf1014 = convert_ulong3(*(short3*)buf1015);
+    *(ulong4*)buf1016 = convert_ulong4(*(short4*)buf1017);
+    *(ulong2*)buf1018 = convert_ulong2(*(ushort2*)buf1019);
+    *(ulong3*)buf1020 = convert_ulong3(*(ushort3*)buf1021);
+    *(ulong4*)buf1022 = convert_ulong4(*(ushort4*)buf1023);
+    *(ulong2*)buf1024 = convert_ulong2(*(int2*)buf1025);
+    *(ulong3*)buf1026 = convert_ulong3(*(int3*)buf1027);
+    *(ulong4*)buf1028 = convert_ulong4(*(int4*)buf1029);
+    *(ulong2*)buf1030 = convert_ulong2(*(uint2*)buf1031);
+    *(ulong3*)buf1032 = convert_ulong3(*(uint3*)buf1033);
+    *(ulong4*)buf1034 = convert_ulong4(*(uint4*)buf1035);
+    *(float*)buf1036 = copysign(*(float*)buf1037, *(float*)buf1038);
+    *(float2*)buf1039 = copysign(*(float2*)buf1040, *(float2*)buf1041);
+    *(float3*)buf1042 = copysign(*(float3*)buf1043, *(float3*)buf1044);
+    *(float4*)buf1045 = copysign(*(float4*)buf1046, *(float4*)buf1047);
+    *(float*)buf1048 = cos(*(float*)buf1049);
+    *(float2*)buf1050 = cos(*(float2*)buf1051);
+    *(float3*)buf1052 = cos(*(float3*)buf1053);
+    *(float4*)buf1054 = cos(*(float4*)buf1055);
+    *(float*)buf1056 = cosh(*(float*)buf1057);
+    *(float2*)buf1058 = cosh(*(float2*)buf1059);
+    *(float3*)buf1060 = cosh(*(float3*)buf1061);
+    *(float4*)buf1062 = cosh(*(float4*)buf1063);
+    *(float*)buf1064 = cospi(*(float*)buf1065);
+    *(float2*)buf1066 = cospi(*(float2*)buf1067);
+    *(float3*)buf1068 = cospi(*(float3*)buf1069);
+    *(float4*)buf1070 = cospi(*(float4*)buf1071);
+    *(float3*)buf1072 = cross(*(float3*)buf1073, *(float3*)buf1074);
+    *(float4*)buf1075 = cross(*(float4*)buf1076, *(float4*)buf1077);
+    *(float*)buf1078 = degrees(*(float*)buf1079);
+    *(float2*)buf1080 = degrees(*(float2*)buf1081);
+    *(float3*)buf1082 = degrees(*(float3*)buf1083);
+    *(float4*)buf1084 = degrees(*(float4*)buf1085);
+    *(float*)buf1086 = distance(*(float*)buf1087, *(float*)buf1088);
+    *(float*)buf1089 = distance(*(float2*)buf1090, *(float2*)buf1091);
+    *(float*)buf1092 = distance(*(float3*)buf1093, *(float3*)buf1094);
+    *(float*)buf1095 = distance(*(float4*)buf1096, *(float4*)buf1097);
+    *(float*)buf1098 = dot(*(float*)buf1099, *(float*)buf1100);
+    *(float*)buf1101 = dot(*(float2*)buf1102, *(float2*)buf1103);
+    *(float*)buf1104 = dot(*(float3*)buf1105, *(float3*)buf1106);
+    *(float*)buf1107 = dot(*(float4*)buf1108, *(float4*)buf1109);
+    *(float*)buf1110 = erf(*(float*)buf1111);
+    *(float2*)buf1112 = erf(*(float2*)buf1113);
+    *(float3*)buf1114 = erf(*(float3*)buf1115);
+    *(float4*)buf1116 = erf(*(float4*)buf1117);
+    *(float*)buf1118 = erfc(*(float*)buf1119);
+    *(float2*)buf1120 = erfc(*(float2*)buf1121);
+    *(float3*)buf1122 = erfc(*(float3*)buf1123);
+    *(float4*)buf1124 = erfc(*(float4*)buf1125);
+    *(float*)buf1126 = exp(*(float*)buf1127);
+    *(float2*)buf1128 = exp(*(float2*)buf1129);
+    *(float3*)buf1130 = exp(*(float3*)buf1131);
+    *(float4*)buf1132 = exp(*(float4*)buf1133);
+    *(float*)buf1134 = exp10(*(float*)buf1135);
+    *(float2*)buf1136 = exp10(*(float2*)buf1137);
+    *(float3*)buf1138 = exp10(*(float3*)buf1139);
+    *(float4*)buf1140 = exp10(*(float4*)buf1141);
+    *(float*)buf1142 = exp2(*(float*)buf1143);
+    *(float2*)buf1144 = exp2(*(float2*)buf1145);
+    *(float3*)buf1146 = exp2(*(float3*)buf1147);
+    *(float4*)buf1148 = exp2(*(float4*)buf1149);
+    *(float*)buf1150 = expm1(*(float*)buf1151);
+    *(float2*)buf1152 = expm1(*(float2*)buf1153);
+    *(float3*)buf1154 = expm1(*(float3*)buf1155);
+    *(float4*)buf1156 = expm1(*(float4*)buf1157);
+    *(float*)buf1158 = fabs(*(float*)buf1159);
+    *(float2*)buf1160 = fabs(*(float2*)buf1161);
+    *(float3*)buf1162 = fabs(*(float3*)buf1163);
+    *(float4*)buf1164 = fabs(*(float4*)buf1165);
+    *(float*)buf1166 = fast_distance(*(float*)buf1167, *(float*)buf1168);
+    *(float*)buf1169 = fast_distance(*(float2*)buf1170, *(float2*)buf1171);
+    *(float*)buf1172 = fast_distance(*(float3*)buf1173, *(float3*)buf1174);
+    *(float*)buf1175 = fast_distance(*(float4*)buf1176, *(float4*)buf1177);
+    *(float*)buf1178 = fast_length(*(float*)buf1179);
+    *(float*)buf1180 = fast_length(*(float2*)buf1181);
+    *(float*)buf1182 = fast_length(*(float3*)buf1183);
+    *(float*)buf1184 = fast_length(*(float4*)buf1185);
+    *(float*)buf1186 = fast_normalize(*(float*)buf1187);
+    *(float2*)buf1188 = fast_normalize(*(float2*)buf1189);
+    *(float3*)buf1190 = fast_normalize(*(float3*)buf1191);
+    *(float4*)buf1192 = fast_normalize(*(float4*)buf1193);
+    *(float*)buf1194 = fdim(*(float*)buf1195, *(float*)buf1196);
+    *(float2*)buf1197 = fdim(*(float2*)buf1198, *(float2*)buf1199);
+    *(float3*)buf1200 = fdim(*(float3*)buf1201, *(float3*)buf1202);
+    *(float4*)buf1203 = fdim(*(float4*)buf1204, *(float4*)buf1205);
+    *(float*)buf1206 = floor(*(float*)buf1207);
+    *(float2*)buf1208 = floor(*(float2*)buf1209);
+    *(float3*)buf1210 = floor(*(float3*)buf1211);
+    *(float4*)buf1212 = floor(*(float4*)buf1213);
+    *(float*)buf1214 = fma(*(float*)buf1215, *(float*)buf1216, *(float*)buf1217);
+    *(float2*)buf1218 = fma(*(float2*)buf1219, *(float2*)buf1220, *(float2*)buf1221);
+    *(float3*)buf1222 = fma(*(float3*)buf1223, *(float3*)buf1224, *(float3*)buf1225);
+    *(float4*)buf1226 = fma(*(float4*)buf1227, *(float4*)buf1228, *(float4*)buf1229);
+    *(float*)buf1230 = fmax(*(float*)buf1231, *(float*)buf1232);
+    *(float2*)buf1233 = fmax(*(float2*)buf1234, *(float2*)buf1235);
+    *(float3*)buf1236 = fmax(*(float3*)buf1237, *(float3*)buf1238);
+    *(float4*)buf1239 = fmax(*(float4*)buf1240, *(float4*)buf1241);
+    *(float2*)buf1242 = fmax(*(float2*)buf1243, *(float*)buf1244);
+    *(float3*)buf1245 = fmax(*(float3*)buf1246, *(float*)buf1247);
+    *(float4*)buf1248 = fmax(*(float4*)buf1249, *(float*)buf1250);
+    *(float*)buf1251 = fmin(*(float*)buf1252, *(float*)buf1253);
+    *(float2*)buf1254 = fmin(*(float2*)buf1255, *(float2*)buf1256);
+    *(float3*)buf1257 = fmin(*(float3*)buf1258, *(float3*)buf1259);
+    *(float4*)buf1260 = fmin(*(float4*)buf1261, *(float4*)buf1262);
+    *(float2*)buf1263 = fmin(*(float2*)buf1264, *(float*)buf1265);
+    *(float3*)buf1266 = fmin(*(float3*)buf1267, *(float*)buf1268);
+    *(float4*)buf1269 = fmin(*(float4*)buf1270, *(float*)buf1271);
+    *(float*)buf1272 = fmod(*(float*)buf1273, *(float*)buf1274);
+    *(float2*)buf1275 = fmod(*(float2*)buf1276, *(float2*)buf1277);
+    *(float3*)buf1278 = fmod(*(float3*)buf1279, *(float3*)buf1280);
+    *(float4*)buf1281 = fmod(*(float4*)buf1282, *(float4*)buf1283);
+    *(float*)buf1284 = fract(*(float*)buf1285, (float*) buf1286);
+    *(float2*)buf1287 = fract(*(float2*)buf1288, (float2*) buf1289);
+    *(float3*)buf1290 = fract(*(float3*)buf1291, (float3*) buf1292);
+    *(float4*)buf1293 = fract(*(float4*)buf1294, (float4*) buf1295);
+    *(float*)buf1296 = fract(*(float*)buf1297);
+    *(float2*)buf1298 = fract(*(float2*)buf1299);
+    *(float3*)buf1300 = fract(*(float3*)buf1301);
+    *(float4*)buf1302 = fract(*(float4*)buf1303);
+    *(float*)buf1304 = frexp(*(float*)buf1305, (int*) buf1306);
+    *(float2*)buf1307 = frexp(*(float2*)buf1308, (int2*) buf1309);
+    *(float3*)buf1310 = frexp(*(float3*)buf1311, (int3*) buf1312);
+    *(float4*)buf1313 = frexp(*(float4*)buf1314, (int4*) buf1315);
+    *(float*)buf1316 = half_recip(*(float*)buf1317);
+    *(float2*)buf1318 = half_recip(*(float2*)buf1319);
+    *(float3*)buf1320 = half_recip(*(float3*)buf1321);
+    *(float4*)buf1322 = half_recip(*(float4*)buf1323);
+    *(float*)buf1324 = half_rsqrt(*(float*)buf1325);
+    *(float2*)buf1326 = half_rsqrt(*(float2*)buf1327);
+    *(float3*)buf1328 = half_rsqrt(*(float3*)buf1329);
+    *(float4*)buf1330 = half_rsqrt(*(float4*)buf1331);
+    *(float*)buf1332 = half_sqrt(*(float*)buf1333);
+    *(float2*)buf1334 = half_sqrt(*(float2*)buf1335);
+    *(float3*)buf1336 = half_sqrt(*(float3*)buf1337);
+    *(float4*)buf1338 = half_sqrt(*(float4*)buf1339);
+    *(float*)buf1340 = hypot(*(float*)buf1341, *(float*)buf1342);
+    *(float2*)buf1343 = hypot(*(float2*)buf1344, *(float2*)buf1345);
+    *(float3*)buf1346 = hypot(*(float3*)buf1347, *(float3*)buf1348);
+    *(float4*)buf1349 = hypot(*(float4*)buf1350, *(float4*)buf1351);
+    *(int*)buf1352 = ilogb(*(float*)buf1353);
+    *(int2*)buf1354 = ilogb(*(float2*)buf1355);
+    *(int3*)buf1356 = ilogb(*(float3*)buf1357);
+    *(int4*)buf1358 = ilogb(*(float4*)buf1359);
+    *(float*)buf1360 = ldexp(*(float*)buf1361, *(int*)buf1362);
+    *(float2*)buf1363 = ldexp(*(float2*)buf1364, *(int2*)buf1365);
+    *(float3*)buf1366 = ldexp(*(float3*)buf1367, *(int3*)buf1368);
+    *(float4*)buf1369 = ldexp(*(float4*)buf1370, *(int4*)buf1371);
+    *(float2*)buf1372 = ldexp(*(float2*)buf1373, *(int*)buf1374);
+    *(float3*)buf1375 = ldexp(*(float3*)buf1376, *(int*)buf1377);
+    *(float4*)buf1378 = ldexp(*(float4*)buf1379, *(int*)buf1380);
+    *(float*)buf1381 = length(*(float*)buf1382);
+    *(float*)buf1383 = length(*(float2*)buf1384);
+    *(float*)buf1385 = length(*(float3*)buf1386);
+    *(float*)buf1387 = length(*(float4*)buf1388);
+    *(float*)buf1389 = lgamma(*(float*)buf1390);
+    *(float2*)buf1391 = lgamma(*(float2*)buf1392);
+    *(float3*)buf1393 = lgamma(*(float3*)buf1394);
+    *(float4*)buf1395 = lgamma(*(float4*)buf1396);
+    *(float*)buf1397 = lgamma(*(float*)buf1398, (int*) buf1399);
+    *(float2*)buf1400 = lgamma(*(float2*)buf1401, (int2*) buf1402);
+    *(float3*)buf1403 = lgamma(*(float3*)buf1404, (int3*) buf1405);
+    *(float4*)buf1406 = lgamma(*(float4*)buf1407, (int4*) buf1408);
+    *(float*)buf1409 = log(*(float*)buf1410);
+    *(float2*)buf1411 = log(*(float2*)buf1412);
+    *(float3*)buf1413 = log(*(float3*)buf1414);
+    *(float4*)buf1415 = log(*(float4*)buf1416);
+    *(float*)buf1417 = log10(*(float*)buf1418);
+    *(float2*)buf1419 = log10(*(float2*)buf1420);
+    *(float3*)buf1421 = log10(*(float3*)buf1422);
+    *(float4*)buf1423 = log10(*(float4*)buf1424);
+    *(float*)buf1425 = log1p(*(float*)buf1426);
+    *(float2*)buf1427 = log1p(*(float2*)buf1428);
+    *(float3*)buf1429 = log1p(*(float3*)buf1430);
+    *(float4*)buf1431 = log1p(*(float4*)buf1432);
+    *(float*)buf1433 = log2(*(float*)buf1434);
+    *(float2*)buf1435 = log2(*(float2*)buf1436);
+    *(float3*)buf1437 = log2(*(float3*)buf1438);
+    *(float4*)buf1439 = log2(*(float4*)buf1440);
+    *(float*)buf1441 = logb(*(float*)buf1442);
+    *(float2*)buf1443 = logb(*(float2*)buf1444);
+    *(float3*)buf1445 = logb(*(float3*)buf1446);
+    *(float4*)buf1447 = logb(*(float4*)buf1448);
+    *(float*)buf1449 = mad(*(float*)buf1450, *(float*)buf1451, *(float*)buf1452);
+    *(float2*)buf1453 = mad(*(float2*)buf1454, *(float2*)buf1455, *(float2*)buf1456);
+    *(float3*)buf1457 = mad(*(float3*)buf1458, *(float3*)buf1459, *(float3*)buf1460);
+    *(float4*)buf1461 = mad(*(float4*)buf1462, *(float4*)buf1463, *(float4*)buf1464);
+    *(float*)buf1465 = max(*(float*)buf1466, *(float*)buf1467);
+    *(float2*)buf1468 = max(*(float2*)buf1469, *(float2*)buf1470);
+    *(float3*)buf1471 = max(*(float3*)buf1472, *(float3*)buf1473);
+    *(float4*)buf1474 = max(*(float4*)buf1475, *(float4*)buf1476);
+    *(float2*)buf1477 = max(*(float2*)buf1478, *(float*)buf1479);
+    *(float3*)buf1480 = max(*(float3*)buf1481, *(float*)buf1482);
+    *(float4*)buf1483 = max(*(float4*)buf1484, *(float*)buf1485);
+    *(char*)buf1486 = max(*(char*)buf1487, *(char*)buf1488);
+    *(char2*)buf1489 = max(*(char2*)buf1490, *(char2*)buf1491);
+    *(char3*)buf1492 = max(*(char3*)buf1493, *(char3*)buf1494);
+    *(char4*)buf1495 = max(*(char4*)buf1496, *(char4*)buf1497);
+    *(uchar*)buf1498 = max(*(uchar*)buf1499, *(uchar*)buf1500);
+    *(uchar2*)buf1501 = max(*(uchar2*)buf1502, *(uchar2*)buf1503);
+    *(uchar3*)buf1504 = max(*(uchar3*)buf1505, *(uchar3*)buf1506);
+    *(uchar4*)buf1507 = max(*(uchar4*)buf1508, *(uchar4*)buf1509);
+    *(short*)buf1510 = max(*(short*)buf1511, *(short*)buf1512);
+    *(short2*)buf1513 = max(*(short2*)buf1514, *(short2*)buf1515);
+    *(short3*)buf1516 = max(*(short3*)buf1517, *(short3*)buf1518);
+    *(short4*)buf1519 = max(*(short4*)buf1520, *(short4*)buf1521);
+    *(ushort*)buf1522 = max(*(ushort*)buf1523, *(ushort*)buf1524);
+    *(ushort2*)buf1525 = max(*(ushort2*)buf1526, *(ushort2*)buf1527);
+    *(ushort3*)buf1528 = max(*(ushort3*)buf1529, *(ushort3*)buf1530);
+    *(ushort4*)buf1531 = max(*(ushort4*)buf1532, *(ushort4*)buf1533);
+    *(int*)buf1534 = max(*(int*)buf1535, *(int*)buf1536);
+    *(int2*)buf1537 = max(*(int2*)buf1538, *(int2*)buf1539);
+    *(int3*)buf1540 = max(*(int3*)buf1541, *(int3*)buf1542);
+    *(int4*)buf1543 = max(*(int4*)buf1544, *(int4*)buf1545);
+    *(uint*)buf1546 = max(*(uint*)buf1547, *(uint*)buf1548);
+    *(uint2*)buf1549 = max(*(uint2*)buf1550, *(uint2*)buf1551);
+    *(uint3*)buf1552 = max(*(uint3*)buf1553, *(uint3*)buf1554);
+    *(uint4*)buf1555 = max(*(uint4*)buf1556, *(uint4*)buf1557);
+    *(long*)buf1558 = max(*(long*)buf1559, *(long*)buf1560);
+    *(long2*)buf1561 = max(*(long2*)buf1562, *(long2*)buf1563);
+    *(long3*)buf1564 = max(*(long3*)buf1565, *(long3*)buf1566);
+    *(long4*)buf1567 = max(*(long4*)buf1568, *(long4*)buf1569);
+    *(ulong*)buf1570 = max(*(ulong*)buf1571, *(ulong*)buf1572);
+    *(ulong2*)buf1573 = max(*(ulong2*)buf1574, *(ulong2*)buf1575);
+    *(ulong3*)buf1576 = max(*(ulong3*)buf1577, *(ulong3*)buf1578);
+    *(ulong4*)buf1579 = max(*(ulong4*)buf1580, *(ulong4*)buf1581);
+    *(float*)buf1582 = min(*(float*)buf1583, *(float*)buf1584);
+    *(float2*)buf1585 = min(*(float2*)buf1586, *(float2*)buf1587);
+    *(float3*)buf1588 = min(*(float3*)buf1589, *(float3*)buf1590);
+    *(float4*)buf1591 = min(*(float4*)buf1592, *(float4*)buf1593);
+    *(float2*)buf1594 = min(*(float2*)buf1595, *(float*)buf1596);
+    *(float3*)buf1597 = min(*(float3*)buf1598, *(float*)buf1599);
+    *(float4*)buf1600 = min(*(float4*)buf1601, *(float*)buf1602);
+    *(char*)buf1603 = min(*(char*)buf1604, *(char*)buf1605);
+    *(char2*)buf1606 = min(*(char2*)buf1607, *(char2*)buf1608);
+    *(char3*)buf1609 = min(*(char3*)buf1610, *(char3*)buf1611);
+    *(char4*)buf1612 = min(*(char4*)buf1613, *(char4*)buf1614);
+    *(uchar*)buf1615 = min(*(uchar*)buf1616, *(uchar*)buf1617);
+    *(uchar2*)buf1618 = min(*(uchar2*)buf1619, *(uchar2*)buf1620);
+    *(uchar3*)buf1621 = min(*(uchar3*)buf1622, *(uchar3*)buf1623);
+    *(uchar4*)buf1624 = min(*(uchar4*)buf1625, *(uchar4*)buf1626);
+    *(short*)buf1627 = min(*(short*)buf1628, *(short*)buf1629);
+    *(short2*)buf1630 = min(*(short2*)buf1631, *(short2*)buf1632);
+    *(short3*)buf1633 = min(*(short3*)buf1634, *(short3*)buf1635);
+    *(short4*)buf1636 = min(*(short4*)buf1637, *(short4*)buf1638);
+    *(ushort*)buf1639 = min(*(ushort*)buf1640, *(ushort*)buf1641);
+    *(ushort2*)buf1642 = min(*(ushort2*)buf1643, *(ushort2*)buf1644);
+    *(ushort3*)buf1645 = min(*(ushort3*)buf1646, *(ushort3*)buf1647);
+    *(ushort4*)buf1648 = min(*(ushort4*)buf1649, *(ushort4*)buf1650);
+    *(int*)buf1651 = min(*(int*)buf1652, *(int*)buf1653);
+    *(int2*)buf1654 = min(*(int2*)buf1655, *(int2*)buf1656);
+    *(int3*)buf1657 = min(*(int3*)buf1658, *(int3*)buf1659);
+    *(int4*)buf1660 = min(*(int4*)buf1661, *(int4*)buf1662);
+    *(uint*)buf1663 = min(*(uint*)buf1664, *(uint*)buf1665);
+    *(uint2*)buf1666 = min(*(uint2*)buf1667, *(uint2*)buf1668);
+    *(uint3*)buf1669 = min(*(uint3*)buf1670, *(uint3*)buf1671);
+    *(uint4*)buf1672 = min(*(uint4*)buf1673, *(uint4*)buf1674);
+    *(long*)buf1675 = min(*(long*)buf1676, *(long*)buf1677);
+    *(long2*)buf1678 = min(*(long2*)buf1679, *(long2*)buf1680);
+    *(long3*)buf1681 = min(*(long3*)buf1682, *(long3*)buf1683);
+    *(long4*)buf1684 = min(*(long4*)buf1685, *(long4*)buf1686);
+    *(ulong*)buf1687 = min(*(ulong*)buf1688, *(ulong*)buf1689);
+    *(ulong2*)buf1690 = min(*(ulong2*)buf1691, *(ulong2*)buf1692);
+    *(ulong3*)buf1693 = min(*(ulong3*)buf1694, *(ulong3*)buf1695);
+    *(ulong4*)buf1696 = min(*(ulong4*)buf1697, *(ulong4*)buf1698);
+    *(float*)buf1699 = mix(*(float*)buf1700, *(float*)buf1701, *(float*)buf1702);
+    *(float2*)buf1703 = mix(*(float2*)buf1704, *(float2*)buf1705, *(float2*)buf1706);
+    *(float3*)buf1707 = mix(*(float3*)buf1708, *(float3*)buf1709, *(float3*)buf1710);
+    *(float4*)buf1711 = mix(*(float4*)buf1712, *(float4*)buf1713, *(float4*)buf1714);
+    *(float2*)buf1715 = mix(*(float2*)buf1716, *(float2*)buf1717, *(float*)buf1718);
+    *(float3*)buf1719 = mix(*(float3*)buf1720, *(float3*)buf1721, *(float*)buf1722);
+    *(float4*)buf1723 = mix(*(float4*)buf1724, *(float4*)buf1725, *(float*)buf1726);
+    *(float*)buf1727 = modf(*(float*)buf1728, (float*) buf1729);
+    *(float2*)buf1730 = modf(*(float2*)buf1731, (float2*) buf1732);
+    *(float3*)buf1733 = modf(*(float3*)buf1734, (float3*) buf1735);
+    *(float4*)buf1736 = modf(*(float4*)buf1737, (float4*) buf1738);
+    *(float*)buf1739 = nan(*(uint*)buf1740);
+    *(float*)buf1741 = native_acos(*(float*)buf1742);
+    *(float2*)buf1743 = native_acos(*(float2*)buf1744);
+    *(float3*)buf1745 = native_acos(*(float3*)buf1746);
+    *(float4*)buf1747 = native_acos(*(float4*)buf1748);
+    *(float*)buf1749 = native_acosh(*(float*)buf1750);
+    *(float2*)buf1751 = native_acosh(*(float2*)buf1752);
+    *(float3*)buf1753 = native_acosh(*(float3*)buf1754);
+    *(float4*)buf1755 = native_acosh(*(float4*)buf1756);
+    *(float*)buf1757 = native_acospi(*(float*)buf1758);
+    *(float2*)buf1759 = native_acospi(*(float2*)buf1760);
+    *(float3*)buf1761 = native_acospi(*(float3*)buf1762);
+    *(float4*)buf1763 = native_acospi(*(float4*)buf1764);
+    *(float*)buf1765 = native_asin(*(float*)buf1766);
+    *(float2*)buf1767 = native_asin(*(float2*)buf1768);
+    *(float3*)buf1769 = native_asin(*(float3*)buf1770);
+    *(float4*)buf1771 = native_asin(*(float4*)buf1772);
+    *(float*)buf1773 = native_asinh(*(float*)buf1774);
+    *(float2*)buf1775 = native_asinh(*(float2*)buf1776);
+    *(float3*)buf1777 = native_asinh(*(float3*)buf1778);
+    *(float4*)buf1779 = native_asinh(*(float4*)buf1780);
+    *(float*)buf1781 = native_asinpi(*(float*)buf1782);
+    *(float2*)buf1783 = native_asinpi(*(float2*)buf1784);
+    *(float3*)buf1785 = native_asinpi(*(float3*)buf1786);
+    *(float4*)buf1787 = native_asinpi(*(float4*)buf1788);
+    *(float*)buf1789 = native_atan(*(float*)buf1790);
+    *(float2*)buf1791 = native_atan(*(float2*)buf1792);
+    *(float3*)buf1793 = native_atan(*(float3*)buf1794);
+    *(float4*)buf1795 = native_atan(*(float4*)buf1796);
+    *(float*)buf1797 = native_atan2(*(float*)buf1798, *(float*)buf1799);
+    *(float2*)buf1800 = native_atan2(*(float2*)buf1801, *(float2*)buf1802);
+    *(float3*)buf1803 = native_atan2(*(float3*)buf1804, *(float3*)buf1805);
+    *(float4*)buf1806 = native_atan2(*(float4*)buf1807, *(float4*)buf1808);
+    *(float*)buf1809 = native_atan2pi(*(float*)buf1810, *(float*)buf1811);
+    *(float2*)buf1812 = native_atan2pi(*(float2*)buf1813, *(float2*)buf1814);
+    *(float3*)buf1815 = native_atan2pi(*(float3*)buf1816, *(float3*)buf1817);
+    *(float4*)buf1818 = native_atan2pi(*(float4*)buf1819, *(float4*)buf1820);
+    *(float*)buf1821 = native_atanh(*(float*)buf1822);
+    *(float2*)buf1823 = native_atanh(*(float2*)buf1824);
+    *(float3*)buf1825 = native_atanh(*(float3*)buf1826);
+    *(float4*)buf1827 = native_atanh(*(float4*)buf1828);
+    *(float*)buf1829 = native_atanpi(*(float*)buf1830);
+    *(float2*)buf1831 = native_atanpi(*(float2*)buf1832);
+    *(float3*)buf1833 = native_atanpi(*(float3*)buf1834);
+    *(float4*)buf1835 = native_atanpi(*(float4*)buf1836);
+    *(float*)buf1837 = native_cbrt(*(float*)buf1838);
+    *(float2*)buf1839 = native_cbrt(*(float2*)buf1840);
+    *(float3*)buf1841 = native_cbrt(*(float3*)buf1842);
+    *(float4*)buf1843 = native_cbrt(*(float4*)buf1844);
+    *(float*)buf1845 = native_cos(*(float*)buf1846);
+    *(float2*)buf1847 = native_cos(*(float2*)buf1848);
+    *(float3*)buf1849 = native_cos(*(float3*)buf1850);
+    *(float4*)buf1851 = native_cos(*(float4*)buf1852);
+    *(float*)buf1853 = native_cosh(*(float*)buf1854);
+    *(float2*)buf1855 = native_cosh(*(float2*)buf1856);
+    *(float3*)buf1857 = native_cosh(*(float3*)buf1858);
+    *(float4*)buf1859 = native_cosh(*(float4*)buf1860);
+    *(float*)buf1861 = native_cospi(*(float*)buf1862);
+    *(float2*)buf1863 = native_cospi(*(float2*)buf1864);
+    *(float3*)buf1865 = native_cospi(*(float3*)buf1866);
+    *(float4*)buf1867 = native_cospi(*(float4*)buf1868);
+    *(float*)buf1869 = native_distance(*(float*)buf1870, *(float*)buf1871);
+    *(float*)buf1872 = native_distance(*(float2*)buf1873, *(float2*)buf1874);
+    *(float*)buf1875 = native_distance(*(float3*)buf1876, *(float3*)buf1877);
+    *(float*)buf1878 = native_distance(*(float4*)buf1879, *(float4*)buf1880);
+    *(float*)buf1881 = native_divide(*(float*)buf1882, *(float*)buf1883);
+    *(float2*)buf1884 = native_divide(*(float2*)buf1885, *(float2*)buf1886);
+    *(float3*)buf1887 = native_divide(*(float3*)buf1888, *(float3*)buf1889);
+    *(float4*)buf1890 = native_divide(*(float4*)buf1891, *(float4*)buf1892);
+    *(float*)buf1893 = native_exp(*(float*)buf1894);
+    *(float2*)buf1895 = native_exp(*(float2*)buf1896);
+    *(float3*)buf1897 = native_exp(*(float3*)buf1898);
+    *(float4*)buf1899 = native_exp(*(float4*)buf1900);
+    *(float*)buf1901 = native_exp10(*(float*)buf1902);
+    *(float2*)buf1903 = native_exp10(*(float2*)buf1904);
+    *(float3*)buf1905 = native_exp10(*(float3*)buf1906);
+    *(float4*)buf1907 = native_exp10(*(float4*)buf1908);
+    *(float*)buf1909 = native_exp2(*(float*)buf1910);
+    *(float2*)buf1911 = native_exp2(*(float2*)buf1912);
+    *(float3*)buf1913 = native_exp2(*(float3*)buf1914);
+    *(float4*)buf1915 = native_exp2(*(float4*)buf1916);
+    *(float*)buf1917 = native_expm1(*(float*)buf1918);
+    *(float2*)buf1919 = native_expm1(*(float2*)buf1920);
+    *(float3*)buf1921 = native_expm1(*(float3*)buf1922);
+    *(float4*)buf1923 = native_expm1(*(float4*)buf1924);
+    *(float*)buf1925 = native_hypot(*(float*)buf1926, *(float*)buf1927);
+    *(float2*)buf1928 = native_hypot(*(float2*)buf1929, *(float2*)buf1930);
+    *(float3*)buf1931 = native_hypot(*(float3*)buf1932, *(float3*)buf1933);
+    *(float4*)buf1934 = native_hypot(*(float4*)buf1935, *(float4*)buf1936);
+    *(float*)buf1937 = native_length(*(float*)buf1938);
+    *(float*)buf1939 = native_length(*(float2*)buf1940);
+    *(float*)buf1941 = native_length(*(float3*)buf1942);
+    *(float*)buf1943 = native_length(*(float4*)buf1944);
+    *(float*)buf1945 = native_log(*(float*)buf1946);
+    *(float2*)buf1947 = native_log(*(float2*)buf1948);
+    *(float3*)buf1949 = native_log(*(float3*)buf1950);
+    *(float4*)buf1951 = native_log(*(float4*)buf1952);
+    *(float*)buf1953 = native_log10(*(float*)buf1954);
+    *(float2*)buf1955 = native_log10(*(float2*)buf1956);
+    *(float3*)buf1957 = native_log10(*(float3*)buf1958);
+    *(float4*)buf1959 = native_log10(*(float4*)buf1960);
+    *(float*)buf1961 = native_log1p(*(float*)buf1962);
+    *(float2*)buf1963 = native_log1p(*(float2*)buf1964);
+    *(float3*)buf1965 = native_log1p(*(float3*)buf1966);
+    *(float4*)buf1967 = native_log1p(*(float4*)buf1968);
+    *(float*)buf1969 = native_log2(*(float*)buf1970);
+    *(float2*)buf1971 = native_log2(*(float2*)buf1972);
+    *(float3*)buf1973 = native_log2(*(float3*)buf1974);
+    *(float4*)buf1975 = native_log2(*(float4*)buf1976);
+    *(float*)buf1977 = native_normalize(*(float*)buf1978);
+    *(float2*)buf1979 = native_normalize(*(float2*)buf1980);
+    *(float3*)buf1981 = native_normalize(*(float3*)buf1982);
+    *(float4*)buf1983 = native_normalize(*(float4*)buf1984);
+    *(float*)buf1985 = native_powr(*(float*)buf1986, *(float*)buf1987);
+    *(float2*)buf1988 = native_powr(*(float2*)buf1989, *(float2*)buf1990);
+    *(float3*)buf1991 = native_powr(*(float3*)buf1992, *(float3*)buf1993);
+    *(float4*)buf1994 = native_powr(*(float4*)buf1995, *(float4*)buf1996);
+    *(float*)buf1997 = native_recip(*(float*)buf1998);
+    *(float2*)buf1999 = native_recip(*(float2*)buf2000);
+    *(float3*)buf2001 = native_recip(*(float3*)buf2002);
+    *(float4*)buf2003 = native_recip(*(float4*)buf2004);
+    *(float*)buf2005 = native_rootn(*(float*)buf2006, *(int*)buf2007);
+    *(float2*)buf2008 = native_rootn(*(float2*)buf2009, *(int2*)buf2010);
+    *(float3*)buf2011 = native_rootn(*(float3*)buf2012, *(int3*)buf2013);
+    *(float4*)buf2014 = native_rootn(*(float4*)buf2015, *(int4*)buf2016);
+    *(float*)buf2017 = native_rsqrt(*(float*)buf2018);
+    *(float2*)buf2019 = native_rsqrt(*(float2*)buf2020);
+    *(float3*)buf2021 = native_rsqrt(*(float3*)buf2022);
+    *(float4*)buf2023 = native_rsqrt(*(float4*)buf2024);
+    *(float*)buf2025 = native_sin(*(float*)buf2026);
+    *(float2*)buf2027 = native_sin(*(float2*)buf2028);
+    *(float3*)buf2029 = native_sin(*(float3*)buf2030);
+    *(float4*)buf2031 = native_sin(*(float4*)buf2032);
+    *(float*)buf2033 = native_sincos(*(float*)buf2034, (float*) buf2035);
+    *(float2*)buf2036 = native_sincos(*(float2*)buf2037, (float2*) buf2038);
+    *(float3*)buf2039 = native_sincos(*(float3*)buf2040, (float3*) buf2041);
+    *(float4*)buf2042 = native_sincos(*(float4*)buf2043, (float4*) buf2044);
+    *(float*)buf2045 = native_sinh(*(float*)buf2046);
+    *(float2*)buf2047 = native_sinh(*(float2*)buf2048);
+    *(float3*)buf2049 = native_sinh(*(float3*)buf2050);
+    *(float4*)buf2051 = native_sinh(*(float4*)buf2052);
+    *(float*)buf2053 = native_sinpi(*(float*)buf2054);
+    *(float2*)buf2055 = native_sinpi(*(float2*)buf2056);
+    *(float3*)buf2057 = native_sinpi(*(float3*)buf2058);
+    *(float4*)buf2059 = native_sinpi(*(float4*)buf2060);
+    *(float*)buf2061 = native_sqrt(*(float*)buf2062);
+    *(float2*)buf2063 = native_sqrt(*(float2*)buf2064);
+    *(float3*)buf2065 = native_sqrt(*(float3*)buf2066);
+    *(float4*)buf2067 = native_sqrt(*(float4*)buf2068);
+    *(float*)buf2069 = native_tan(*(float*)buf2070);
+    *(float2*)buf2071 = native_tan(*(float2*)buf2072);
+    *(float3*)buf2073 = native_tan(*(float3*)buf2074);
+    *(float4*)buf2075 = native_tan(*(float4*)buf2076);
+    *(float*)buf2077 = native_tanh(*(float*)buf2078);
+    *(float2*)buf2079 = native_tanh(*(float2*)buf2080);
+    *(float3*)buf2081 = native_tanh(*(float3*)buf2082);
+    *(float4*)buf2083 = native_tanh(*(float4*)buf2084);
+    *(float*)buf2085 = native_tanpi(*(float*)buf2086);
+    *(float2*)buf2087 = native_tanpi(*(float2*)buf2088);
+    *(float3*)buf2089 = native_tanpi(*(float3*)buf2090);
+    *(float4*)buf2091 = native_tanpi(*(float4*)buf2092);
+    *(float*)buf2093 = nextafter(*(float*)buf2094, *(float*)buf2095);
+    *(float2*)buf2096 = nextafter(*(float2*)buf2097, *(float2*)buf2098);
+    *(float3*)buf2099 = nextafter(*(float3*)buf2100, *(float3*)buf2101);
+    *(float4*)buf2102 = nextafter(*(float4*)buf2103, *(float4*)buf2104);
+    *(float*)buf2105 = normalize(*(float*)buf2106);
+    *(float2*)buf2107 = normalize(*(float2*)buf2108);
+    *(float3*)buf2109 = normalize(*(float3*)buf2110);
+    *(float4*)buf2111 = normalize(*(float4*)buf2112);
+    *(float*)buf2113 = pow(*(float*)buf2114, *(float*)buf2115);
+    *(float2*)buf2116 = pow(*(float2*)buf2117, *(float2*)buf2118);
+    *(float3*)buf2119 = pow(*(float3*)buf2120, *(float3*)buf2121);
+    *(float4*)buf2122 = pow(*(float4*)buf2123, *(float4*)buf2124);
+    *(float*)buf2125 = pown(*(float*)buf2126, *(int*)buf2127);
+    *(float2*)buf2128 = pown(*(float2*)buf2129, *(int2*)buf2130);
+    *(float3*)buf2131 = pown(*(float3*)buf2132, *(int3*)buf2133);
+    *(float4*)buf2134 = pown(*(float4*)buf2135, *(int4*)buf2136);
+    *(float*)buf2137 = powr(*(float*)buf2138, *(float*)buf2139);
+    *(float2*)buf2140 = powr(*(float2*)buf2141, *(float2*)buf2142);
+    *(float3*)buf2143 = powr(*(float3*)buf2144, *(float3*)buf2145);
+    *(float4*)buf2146 = powr(*(float4*)buf2147, *(float4*)buf2148);
+    *(float*)buf2149 = radians(*(float*)buf2150);
+    *(float2*)buf2151 = radians(*(float2*)buf2152);
+    *(float3*)buf2153 = radians(*(float3*)buf2154);
+    *(float4*)buf2155 = radians(*(float4*)buf2156);
+    *(float*)buf2157 = remainder(*(float*)buf2158, *(float*)buf2159);
+    *(float2*)buf2160 = remainder(*(float2*)buf2161, *(float2*)buf2162);
+    *(float3*)buf2163 = remainder(*(float3*)buf2164, *(float3*)buf2165);
+    *(float4*)buf2166 = remainder(*(float4*)buf2167, *(float4*)buf2168);
+    *(float*)buf2169 = remquo(*(float*)buf2170, *(float*)buf2171, (int*) buf2172);
+    *(float2*)buf2173 = remquo(*(float2*)buf2174, *(float2*)buf2175, (int2*) buf2176);
+    *(float3*)buf2177 = remquo(*(float3*)buf2178, *(float3*)buf2179, (int3*) buf2180);
+    *(float4*)buf2181 = remquo(*(float4*)buf2182, *(float4*)buf2183, (int4*) buf2184);
+    *(float*)buf2185 = rint(*(float*)buf2186);
+    *(float2*)buf2187 = rint(*(float2*)buf2188);
+    *(float3*)buf2189 = rint(*(float3*)buf2190);
+    *(float4*)buf2191 = rint(*(float4*)buf2192);
+    *(float*)buf2193 = rootn(*(float*)buf2194, *(int*)buf2195);
+    *(float2*)buf2196 = rootn(*(float2*)buf2197, *(int2*)buf2198);
+    *(float3*)buf2199 = rootn(*(float3*)buf2200, *(int3*)buf2201);
+    *(float4*)buf2202 = rootn(*(float4*)buf2203, *(int4*)buf2204);
+    *(float*)buf2205 = round(*(float*)buf2206);
+    *(float2*)buf2207 = round(*(float2*)buf2208);
+    *(float3*)buf2209 = round(*(float3*)buf2210);
+    *(float4*)buf2211 = round(*(float4*)buf2212);
+    rsAllocationCopy1DRange(*(rs_allocation*)buf2213, *(uint32_t*)buf2214, *(uint32_t*)buf2215, *(uint32_t*)buf2216, *(rs_allocation*)buf2217, *(uint32_t*)buf2218, *(uint32_t*)buf2219);
+    rsAllocationCopy2DRange(*(rs_allocation*)buf2220, *(uint32_t*)buf2221, *(uint32_t*)buf2222, *(uint32_t*)buf2223, *(rs_allocation_cubemap_face*)buf2224, *(uint32_t*)buf2225, *(uint32_t*)buf2226, *(rs_allocation*)buf2227, *(uint32_t*)buf2228, *(uint32_t*)buf2229, *(uint32_t*)buf2230, *(rs_allocation_cubemap_face*)buf2231);
+    *(uint32_t*)buf2232 = rsAllocationGetDimFaces(*(rs_allocation*)buf2233);
+    *(uint32_t*)buf2234 = rsAllocationGetDimLOD(*(rs_allocation*)buf2235);
+    *(uint32_t*)buf2236 = rsAllocationGetDimX(*(rs_allocation*)buf2237);
+    *(uint32_t*)buf2238 = rsAllocationGetDimY(*(rs_allocation*)buf2239);
+    *(uint32_t*)buf2240 = rsAllocationGetDimZ(*(rs_allocation*)buf2241);
+    *(rs_element*)buf2242 = rsAllocationGetElement(*(rs_allocation*)buf2243);
+    rsAllocationIoReceive(*(rs_allocation*)buf2244);
+    rsAllocationIoSend(*(rs_allocation*)buf2245);
+    *(float2*)buf2246 = rsAllocationVLoadX_float2(*(rs_allocation*)buf2247, *(uint32_t*)buf2248);
+    *(float3*)buf2249 = rsAllocationVLoadX_float3(*(rs_allocation*)buf2250, *(uint32_t*)buf2251);
+    *(float4*)buf2252 = rsAllocationVLoadX_float4(*(rs_allocation*)buf2253, *(uint32_t*)buf2254);
+    *(double2*)buf2255 = rsAllocationVLoadX_double2(*(rs_allocation*)buf2256, *(uint32_t*)buf2257);
+    *(double3*)buf2258 = rsAllocationVLoadX_double3(*(rs_allocation*)buf2259, *(uint32_t*)buf2260);
+    *(double4*)buf2261 = rsAllocationVLoadX_double4(*(rs_allocation*)buf2262, *(uint32_t*)buf2263);
+    *(char2*)buf2264 = rsAllocationVLoadX_char2(*(rs_allocation*)buf2265, *(uint32_t*)buf2266);
+    *(char3*)buf2267 = rsAllocationVLoadX_char3(*(rs_allocation*)buf2268, *(uint32_t*)buf2269);
+    *(char4*)buf2270 = rsAllocationVLoadX_char4(*(rs_allocation*)buf2271, *(uint32_t*)buf2272);
+    *(uchar2*)buf2273 = rsAllocationVLoadX_uchar2(*(rs_allocation*)buf2274, *(uint32_t*)buf2275);
+    *(uchar3*)buf2276 = rsAllocationVLoadX_uchar3(*(rs_allocation*)buf2277, *(uint32_t*)buf2278);
+    *(uchar4*)buf2279 = rsAllocationVLoadX_uchar4(*(rs_allocation*)buf2280, *(uint32_t*)buf2281);
+    *(short2*)buf2282 = rsAllocationVLoadX_short2(*(rs_allocation*)buf2283, *(uint32_t*)buf2284);
+    *(short3*)buf2285 = rsAllocationVLoadX_short3(*(rs_allocation*)buf2286, *(uint32_t*)buf2287);
+    *(short4*)buf2288 = rsAllocationVLoadX_short4(*(rs_allocation*)buf2289, *(uint32_t*)buf2290);
+    *(ushort2*)buf2291 = rsAllocationVLoadX_ushort2(*(rs_allocation*)buf2292, *(uint32_t*)buf2293);
+    *(ushort3*)buf2294 = rsAllocationVLoadX_ushort3(*(rs_allocation*)buf2295, *(uint32_t*)buf2296);
+    *(ushort4*)buf2297 = rsAllocationVLoadX_ushort4(*(rs_allocation*)buf2298, *(uint32_t*)buf2299);
+    *(int2*)buf2300 = rsAllocationVLoadX_int2(*(rs_allocation*)buf2301, *(uint32_t*)buf2302);
+    *(int3*)buf2303 = rsAllocationVLoadX_int3(*(rs_allocation*)buf2304, *(uint32_t*)buf2305);
+    *(int4*)buf2306 = rsAllocationVLoadX_int4(*(rs_allocation*)buf2307, *(uint32_t*)buf2308);
+    *(uint2*)buf2309 = rsAllocationVLoadX_uint2(*(rs_allocation*)buf2310, *(uint32_t*)buf2311);
+    *(uint3*)buf2312 = rsAllocationVLoadX_uint3(*(rs_allocation*)buf2313, *(uint32_t*)buf2314);
+    *(uint4*)buf2315 = rsAllocationVLoadX_uint4(*(rs_allocation*)buf2316, *(uint32_t*)buf2317);
+    *(long2*)buf2318 = rsAllocationVLoadX_long2(*(rs_allocation*)buf2319, *(uint32_t*)buf2320);
+    *(long3*)buf2321 = rsAllocationVLoadX_long3(*(rs_allocation*)buf2322, *(uint32_t*)buf2323);
+    *(long4*)buf2324 = rsAllocationVLoadX_long4(*(rs_allocation*)buf2325, *(uint32_t*)buf2326);
+    *(ulong2*)buf2327 = rsAllocationVLoadX_ulong2(*(rs_allocation*)buf2328, *(uint32_t*)buf2329);
+    *(ulong3*)buf2330 = rsAllocationVLoadX_ulong3(*(rs_allocation*)buf2331, *(uint32_t*)buf2332);
+    *(ulong4*)buf2333 = rsAllocationVLoadX_ulong4(*(rs_allocation*)buf2334, *(uint32_t*)buf2335);
+    *(float2*)buf2336 = rsAllocationVLoadX_float2(*(rs_allocation*)buf2337, *(uint32_t*)buf2338, *(uint32_t*)buf2339);
+    *(float3*)buf2340 = rsAllocationVLoadX_float3(*(rs_allocation*)buf2341, *(uint32_t*)buf2342, *(uint32_t*)buf2343);
+    *(float4*)buf2344 = rsAllocationVLoadX_float4(*(rs_allocation*)buf2345, *(uint32_t*)buf2346, *(uint32_t*)buf2347);
+    *(double2*)buf2348 = rsAllocationVLoadX_double2(*(rs_allocation*)buf2349, *(uint32_t*)buf2350, *(uint32_t*)buf2351);
+    *(double3*)buf2352 = rsAllocationVLoadX_double3(*(rs_allocation*)buf2353, *(uint32_t*)buf2354, *(uint32_t*)buf2355);
+    *(double4*)buf2356 = rsAllocationVLoadX_double4(*(rs_allocation*)buf2357, *(uint32_t*)buf2358, *(uint32_t*)buf2359);
+    *(char2*)buf2360 = rsAllocationVLoadX_char2(*(rs_allocation*)buf2361, *(uint32_t*)buf2362, *(uint32_t*)buf2363);
+    *(char3*)buf2364 = rsAllocationVLoadX_char3(*(rs_allocation*)buf2365, *(uint32_t*)buf2366, *(uint32_t*)buf2367);
+    *(char4*)buf2368 = rsAllocationVLoadX_char4(*(rs_allocation*)buf2369, *(uint32_t*)buf2370, *(uint32_t*)buf2371);
+    *(uchar2*)buf2372 = rsAllocationVLoadX_uchar2(*(rs_allocation*)buf2373, *(uint32_t*)buf2374, *(uint32_t*)buf2375);
+    *(uchar3*)buf2376 = rsAllocationVLoadX_uchar3(*(rs_allocation*)buf2377, *(uint32_t*)buf2378, *(uint32_t*)buf2379);
+    *(uchar4*)buf2380 = rsAllocationVLoadX_uchar4(*(rs_allocation*)buf2381, *(uint32_t*)buf2382, *(uint32_t*)buf2383);
+    *(short2*)buf2384 = rsAllocationVLoadX_short2(*(rs_allocation*)buf2385, *(uint32_t*)buf2386, *(uint32_t*)buf2387);
+    *(short3*)buf2388 = rsAllocationVLoadX_short3(*(rs_allocation*)buf2389, *(uint32_t*)buf2390, *(uint32_t*)buf2391);
+    *(short4*)buf2392 = rsAllocationVLoadX_short4(*(rs_allocation*)buf2393, *(uint32_t*)buf2394, *(uint32_t*)buf2395);
+    *(ushort2*)buf2396 = rsAllocationVLoadX_ushort2(*(rs_allocation*)buf2397, *(uint32_t*)buf2398, *(uint32_t*)buf2399);
+    *(ushort3*)buf2400 = rsAllocationVLoadX_ushort3(*(rs_allocation*)buf2401, *(uint32_t*)buf2402, *(uint32_t*)buf2403);
+    *(ushort4*)buf2404 = rsAllocationVLoadX_ushort4(*(rs_allocation*)buf2405, *(uint32_t*)buf2406, *(uint32_t*)buf2407);
+    *(int2*)buf2408 = rsAllocationVLoadX_int2(*(rs_allocation*)buf2409, *(uint32_t*)buf2410, *(uint32_t*)buf2411);
+    *(int3*)buf2412 = rsAllocationVLoadX_int3(*(rs_allocation*)buf2413, *(uint32_t*)buf2414, *(uint32_t*)buf2415);
+    *(int4*)buf2416 = rsAllocationVLoadX_int4(*(rs_allocation*)buf2417, *(uint32_t*)buf2418, *(uint32_t*)buf2419);
+    *(uint2*)buf2420 = rsAllocationVLoadX_uint2(*(rs_allocation*)buf2421, *(uint32_t*)buf2422, *(uint32_t*)buf2423);
+    *(uint3*)buf2424 = rsAllocationVLoadX_uint3(*(rs_allocation*)buf2425, *(uint32_t*)buf2426, *(uint32_t*)buf2427);
+    *(uint4*)buf2428 = rsAllocationVLoadX_uint4(*(rs_allocation*)buf2429, *(uint32_t*)buf2430, *(uint32_t*)buf2431);
+    *(long2*)buf2432 = rsAllocationVLoadX_long2(*(rs_allocation*)buf2433, *(uint32_t*)buf2434, *(uint32_t*)buf2435);
+    *(long3*)buf2436 = rsAllocationVLoadX_long3(*(rs_allocation*)buf2437, *(uint32_t*)buf2438, *(uint32_t*)buf2439);
+    *(long4*)buf2440 = rsAllocationVLoadX_long4(*(rs_allocation*)buf2441, *(uint32_t*)buf2442, *(uint32_t*)buf2443);
+    *(ulong2*)buf2444 = rsAllocationVLoadX_ulong2(*(rs_allocation*)buf2445, *(uint32_t*)buf2446, *(uint32_t*)buf2447);
+    *(ulong3*)buf2448 = rsAllocationVLoadX_ulong3(*(rs_allocation*)buf2449, *(uint32_t*)buf2450, *(uint32_t*)buf2451);
+    *(ulong4*)buf2452 = rsAllocationVLoadX_ulong4(*(rs_allocation*)buf2453, *(uint32_t*)buf2454, *(uint32_t*)buf2455);
+    *(float2*)buf2456 = rsAllocationVLoadX_float2(*(rs_allocation*)buf2457, *(uint32_t*)buf2458, *(uint32_t*)buf2459, *(uint32_t*)buf2460);
+    *(float3*)buf2461 = rsAllocationVLoadX_float3(*(rs_allocation*)buf2462, *(uint32_t*)buf2463, *(uint32_t*)buf2464, *(uint32_t*)buf2465);
+    *(float4*)buf2466 = rsAllocationVLoadX_float4(*(rs_allocation*)buf2467, *(uint32_t*)buf2468, *(uint32_t*)buf2469, *(uint32_t*)buf2470);
+    *(double2*)buf2471 = rsAllocationVLoadX_double2(*(rs_allocation*)buf2472, *(uint32_t*)buf2473, *(uint32_t*)buf2474, *(uint32_t*)buf2475);
+    *(double3*)buf2476 = rsAllocationVLoadX_double3(*(rs_allocation*)buf2477, *(uint32_t*)buf2478, *(uint32_t*)buf2479, *(uint32_t*)buf2480);
+    *(double4*)buf2481 = rsAllocationVLoadX_double4(*(rs_allocation*)buf2482, *(uint32_t*)buf2483, *(uint32_t*)buf2484, *(uint32_t*)buf2485);
+    *(char2*)buf2486 = rsAllocationVLoadX_char2(*(rs_allocation*)buf2487, *(uint32_t*)buf2488, *(uint32_t*)buf2489, *(uint32_t*)buf2490);
+    *(char3*)buf2491 = rsAllocationVLoadX_char3(*(rs_allocation*)buf2492, *(uint32_t*)buf2493, *(uint32_t*)buf2494, *(uint32_t*)buf2495);
+    *(char4*)buf2496 = rsAllocationVLoadX_char4(*(rs_allocation*)buf2497, *(uint32_t*)buf2498, *(uint32_t*)buf2499, *(uint32_t*)buf2500);
+    *(uchar2*)buf2501 = rsAllocationVLoadX_uchar2(*(rs_allocation*)buf2502, *(uint32_t*)buf2503, *(uint32_t*)buf2504, *(uint32_t*)buf2505);
+    *(uchar3*)buf2506 = rsAllocationVLoadX_uchar3(*(rs_allocation*)buf2507, *(uint32_t*)buf2508, *(uint32_t*)buf2509, *(uint32_t*)buf2510);
+    *(uchar4*)buf2511 = rsAllocationVLoadX_uchar4(*(rs_allocation*)buf2512, *(uint32_t*)buf2513, *(uint32_t*)buf2514, *(uint32_t*)buf2515);
+    *(short2*)buf2516 = rsAllocationVLoadX_short2(*(rs_allocation*)buf2517, *(uint32_t*)buf2518, *(uint32_t*)buf2519, *(uint32_t*)buf2520);
+    *(short3*)buf2521 = rsAllocationVLoadX_short3(*(rs_allocation*)buf2522, *(uint32_t*)buf2523, *(uint32_t*)buf2524, *(uint32_t*)buf2525);
+    *(short4*)buf2526 = rsAllocationVLoadX_short4(*(rs_allocation*)buf2527, *(uint32_t*)buf2528, *(uint32_t*)buf2529, *(uint32_t*)buf2530);
+    *(ushort2*)buf2531 = rsAllocationVLoadX_ushort2(*(rs_allocation*)buf2532, *(uint32_t*)buf2533, *(uint32_t*)buf2534, *(uint32_t*)buf2535);
+    *(ushort3*)buf2536 = rsAllocationVLoadX_ushort3(*(rs_allocation*)buf2537, *(uint32_t*)buf2538, *(uint32_t*)buf2539, *(uint32_t*)buf2540);
+    *(ushort4*)buf2541 = rsAllocationVLoadX_ushort4(*(rs_allocation*)buf2542, *(uint32_t*)buf2543, *(uint32_t*)buf2544, *(uint32_t*)buf2545);
+    *(int2*)buf2546 = rsAllocationVLoadX_int2(*(rs_allocation*)buf2547, *(uint32_t*)buf2548, *(uint32_t*)buf2549, *(uint32_t*)buf2550);
+    *(int3*)buf2551 = rsAllocationVLoadX_int3(*(rs_allocation*)buf2552, *(uint32_t*)buf2553, *(uint32_t*)buf2554, *(uint32_t*)buf2555);
+    *(int4*)buf2556 = rsAllocationVLoadX_int4(*(rs_allocation*)buf2557, *(uint32_t*)buf2558, *(uint32_t*)buf2559, *(uint32_t*)buf2560);
+    *(uint2*)buf2561 = rsAllocationVLoadX_uint2(*(rs_allocation*)buf2562, *(uint32_t*)buf2563, *(uint32_t*)buf2564, *(uint32_t*)buf2565);
+    *(uint3*)buf2566 = rsAllocationVLoadX_uint3(*(rs_allocation*)buf2567, *(uint32_t*)buf2568, *(uint32_t*)buf2569, *(uint32_t*)buf2570);
+    *(uint4*)buf2571 = rsAllocationVLoadX_uint4(*(rs_allocation*)buf2572, *(uint32_t*)buf2573, *(uint32_t*)buf2574, *(uint32_t*)buf2575);
+    *(long2*)buf2576 = rsAllocationVLoadX_long2(*(rs_allocation*)buf2577, *(uint32_t*)buf2578, *(uint32_t*)buf2579, *(uint32_t*)buf2580);
+    *(long3*)buf2581 = rsAllocationVLoadX_long3(*(rs_allocation*)buf2582, *(uint32_t*)buf2583, *(uint32_t*)buf2584, *(uint32_t*)buf2585);
+    *(long4*)buf2586 = rsAllocationVLoadX_long4(*(rs_allocation*)buf2587, *(uint32_t*)buf2588, *(uint32_t*)buf2589, *(uint32_t*)buf2590);
+    *(ulong2*)buf2591 = rsAllocationVLoadX_ulong2(*(rs_allocation*)buf2592, *(uint32_t*)buf2593, *(uint32_t*)buf2594, *(uint32_t*)buf2595);
+    *(ulong3*)buf2596 = rsAllocationVLoadX_ulong3(*(rs_allocation*)buf2597, *(uint32_t*)buf2598, *(uint32_t*)buf2599, *(uint32_t*)buf2600);
+    *(ulong4*)buf2601 = rsAllocationVLoadX_ulong4(*(rs_allocation*)buf2602, *(uint32_t*)buf2603, *(uint32_t*)buf2604, *(uint32_t*)buf2605);
+    rsAllocationVStoreX_float2(*(rs_allocation*)buf2606, *(float2*)buf2607, *(uint32_t*)buf2608);
+    rsAllocationVStoreX_float3(*(rs_allocation*)buf2609, *(float3*)buf2610, *(uint32_t*)buf2611);
+    rsAllocationVStoreX_float4(*(rs_allocation*)buf2612, *(float4*)buf2613, *(uint32_t*)buf2614);
+    rsAllocationVStoreX_double2(*(rs_allocation*)buf2615, *(double2*)buf2616, *(uint32_t*)buf2617);
+    rsAllocationVStoreX_double3(*(rs_allocation*)buf2618, *(double3*)buf2619, *(uint32_t*)buf2620);
+    rsAllocationVStoreX_double4(*(rs_allocation*)buf2621, *(double4*)buf2622, *(uint32_t*)buf2623);
+    rsAllocationVStoreX_char2(*(rs_allocation*)buf2624, *(char2*)buf2625, *(uint32_t*)buf2626);
+    rsAllocationVStoreX_char3(*(rs_allocation*)buf2627, *(char3*)buf2628, *(uint32_t*)buf2629);
+    rsAllocationVStoreX_char4(*(rs_allocation*)buf2630, *(char4*)buf2631, *(uint32_t*)buf2632);
+    rsAllocationVStoreX_uchar2(*(rs_allocation*)buf2633, *(uchar2*)buf2634, *(uint32_t*)buf2635);
+    rsAllocationVStoreX_uchar3(*(rs_allocation*)buf2636, *(uchar3*)buf2637, *(uint32_t*)buf2638);
+    rsAllocationVStoreX_uchar4(*(rs_allocation*)buf2639, *(uchar4*)buf2640, *(uint32_t*)buf2641);
+    rsAllocationVStoreX_short2(*(rs_allocation*)buf2642, *(short2*)buf2643, *(uint32_t*)buf2644);
+    rsAllocationVStoreX_short3(*(rs_allocation*)buf2645, *(short3*)buf2646, *(uint32_t*)buf2647);
+    rsAllocationVStoreX_short4(*(rs_allocation*)buf2648, *(short4*)buf2649, *(uint32_t*)buf2650);
+    rsAllocationVStoreX_ushort2(*(rs_allocation*)buf2651, *(ushort2*)buf2652, *(uint32_t*)buf2653);
+    rsAllocationVStoreX_ushort3(*(rs_allocation*)buf2654, *(ushort3*)buf2655, *(uint32_t*)buf2656);
+    rsAllocationVStoreX_ushort4(*(rs_allocation*)buf2657, *(ushort4*)buf2658, *(uint32_t*)buf2659);
+    rsAllocationVStoreX_int2(*(rs_allocation*)buf2660, *(int2*)buf2661, *(uint32_t*)buf2662);
+    rsAllocationVStoreX_int3(*(rs_allocation*)buf2663, *(int3*)buf2664, *(uint32_t*)buf2665);
+    rsAllocationVStoreX_int4(*(rs_allocation*)buf2666, *(int4*)buf2667, *(uint32_t*)buf2668);
+    rsAllocationVStoreX_uint2(*(rs_allocation*)buf2669, *(uint2*)buf2670, *(uint32_t*)buf2671);
+    rsAllocationVStoreX_uint3(*(rs_allocation*)buf2672, *(uint3*)buf2673, *(uint32_t*)buf2674);
+    rsAllocationVStoreX_uint4(*(rs_allocation*)buf2675, *(uint4*)buf2676, *(uint32_t*)buf2677);
+    rsAllocationVStoreX_long2(*(rs_allocation*)buf2678, *(long2*)buf2679, *(uint32_t*)buf2680);
+    rsAllocationVStoreX_long3(*(rs_allocation*)buf2681, *(long3*)buf2682, *(uint32_t*)buf2683);
+    rsAllocationVStoreX_long4(*(rs_allocation*)buf2684, *(long4*)buf2685, *(uint32_t*)buf2686);
+    rsAllocationVStoreX_ulong2(*(rs_allocation*)buf2687, *(ulong2*)buf2688, *(uint32_t*)buf2689);
+    rsAllocationVStoreX_ulong3(*(rs_allocation*)buf2690, *(ulong3*)buf2691, *(uint32_t*)buf2692);
+    rsAllocationVStoreX_ulong4(*(rs_allocation*)buf2693, *(ulong4*)buf2694, *(uint32_t*)buf2695);
+    rsAllocationVStoreX_float2(*(rs_allocation*)buf2696, *(float2*)buf2697, *(uint32_t*)buf2698, *(uint32_t*)buf2699);
+    rsAllocationVStoreX_float3(*(rs_allocation*)buf2700, *(float3*)buf2701, *(uint32_t*)buf2702, *(uint32_t*)buf2703);
+    rsAllocationVStoreX_float4(*(rs_allocation*)buf2704, *(float4*)buf2705, *(uint32_t*)buf2706, *(uint32_t*)buf2707);
+    rsAllocationVStoreX_double2(*(rs_allocation*)buf2708, *(double2*)buf2709, *(uint32_t*)buf2710, *(uint32_t*)buf2711);
+    rsAllocationVStoreX_double3(*(rs_allocation*)buf2712, *(double3*)buf2713, *(uint32_t*)buf2714, *(uint32_t*)buf2715);
+    rsAllocationVStoreX_double4(*(rs_allocation*)buf2716, *(double4*)buf2717, *(uint32_t*)buf2718, *(uint32_t*)buf2719);
+    rsAllocationVStoreX_char2(*(rs_allocation*)buf2720, *(char2*)buf2721, *(uint32_t*)buf2722, *(uint32_t*)buf2723);
+    rsAllocationVStoreX_char3(*(rs_allocation*)buf2724, *(char3*)buf2725, *(uint32_t*)buf2726, *(uint32_t*)buf2727);
+    rsAllocationVStoreX_char4(*(rs_allocation*)buf2728, *(char4*)buf2729, *(uint32_t*)buf2730, *(uint32_t*)buf2731);
+    rsAllocationVStoreX_uchar2(*(rs_allocation*)buf2732, *(uchar2*)buf2733, *(uint32_t*)buf2734, *(uint32_t*)buf2735);
+    rsAllocationVStoreX_uchar3(*(rs_allocation*)buf2736, *(uchar3*)buf2737, *(uint32_t*)buf2738, *(uint32_t*)buf2739);
+    rsAllocationVStoreX_uchar4(*(rs_allocation*)buf2740, *(uchar4*)buf2741, *(uint32_t*)buf2742, *(uint32_t*)buf2743);
+    rsAllocationVStoreX_short2(*(rs_allocation*)buf2744, *(short2*)buf2745, *(uint32_t*)buf2746, *(uint32_t*)buf2747);
+    rsAllocationVStoreX_short3(*(rs_allocation*)buf2748, *(short3*)buf2749, *(uint32_t*)buf2750, *(uint32_t*)buf2751);
+    rsAllocationVStoreX_short4(*(rs_allocation*)buf2752, *(short4*)buf2753, *(uint32_t*)buf2754, *(uint32_t*)buf2755);
+    rsAllocationVStoreX_ushort2(*(rs_allocation*)buf2756, *(ushort2*)buf2757, *(uint32_t*)buf2758, *(uint32_t*)buf2759);
+    rsAllocationVStoreX_ushort3(*(rs_allocation*)buf2760, *(ushort3*)buf2761, *(uint32_t*)buf2762, *(uint32_t*)buf2763);
+    rsAllocationVStoreX_ushort4(*(rs_allocation*)buf2764, *(ushort4*)buf2765, *(uint32_t*)buf2766, *(uint32_t*)buf2767);
+    rsAllocationVStoreX_int2(*(rs_allocation*)buf2768, *(int2*)buf2769, *(uint32_t*)buf2770, *(uint32_t*)buf2771);
+    rsAllocationVStoreX_int3(*(rs_allocation*)buf2772, *(int3*)buf2773, *(uint32_t*)buf2774, *(uint32_t*)buf2775);
+    rsAllocationVStoreX_int4(*(rs_allocation*)buf2776, *(int4*)buf2777, *(uint32_t*)buf2778, *(uint32_t*)buf2779);
+    rsAllocationVStoreX_uint2(*(rs_allocation*)buf2780, *(uint2*)buf2781, *(uint32_t*)buf2782, *(uint32_t*)buf2783);
+    rsAllocationVStoreX_uint3(*(rs_allocation*)buf2784, *(uint3*)buf2785, *(uint32_t*)buf2786, *(uint32_t*)buf2787);
+    rsAllocationVStoreX_uint4(*(rs_allocation*)buf2788, *(uint4*)buf2789, *(uint32_t*)buf2790, *(uint32_t*)buf2791);
+    rsAllocationVStoreX_long2(*(rs_allocation*)buf2792, *(long2*)buf2793, *(uint32_t*)buf2794, *(uint32_t*)buf2795);
+    rsAllocationVStoreX_long3(*(rs_allocation*)buf2796, *(long3*)buf2797, *(uint32_t*)buf2798, *(uint32_t*)buf2799);
+    rsAllocationVStoreX_long4(*(rs_allocation*)buf2800, *(long4*)buf2801, *(uint32_t*)buf2802, *(uint32_t*)buf2803);
+    rsAllocationVStoreX_ulong2(*(rs_allocation*)buf2804, *(ulong2*)buf2805, *(uint32_t*)buf2806, *(uint32_t*)buf2807);
+    rsAllocationVStoreX_ulong3(*(rs_allocation*)buf2808, *(ulong3*)buf2809, *(uint32_t*)buf2810, *(uint32_t*)buf2811);
+    rsAllocationVStoreX_ulong4(*(rs_allocation*)buf2812, *(ulong4*)buf2813, *(uint32_t*)buf2814, *(uint32_t*)buf2815);
+    rsAllocationVStoreX_float2(*(rs_allocation*)buf2816, *(float2*)buf2817, *(uint32_t*)buf2818, *(uint32_t*)buf2819, *(uint32_t*)buf2820);
+    rsAllocationVStoreX_float3(*(rs_allocation*)buf2821, *(float3*)buf2822, *(uint32_t*)buf2823, *(uint32_t*)buf2824, *(uint32_t*)buf2825);
+    rsAllocationVStoreX_float4(*(rs_allocation*)buf2826, *(float4*)buf2827, *(uint32_t*)buf2828, *(uint32_t*)buf2829, *(uint32_t*)buf2830);
+    rsAllocationVStoreX_double2(*(rs_allocation*)buf2831, *(double2*)buf2832, *(uint32_t*)buf2833, *(uint32_t*)buf2834, *(uint32_t*)buf2835);
+    rsAllocationVStoreX_double3(*(rs_allocation*)buf2836, *(double3*)buf2837, *(uint32_t*)buf2838, *(uint32_t*)buf2839, *(uint32_t*)buf2840);
+    rsAllocationVStoreX_double4(*(rs_allocation*)buf2841, *(double4*)buf2842, *(uint32_t*)buf2843, *(uint32_t*)buf2844, *(uint32_t*)buf2845);
+    rsAllocationVStoreX_char2(*(rs_allocation*)buf2846, *(char2*)buf2847, *(uint32_t*)buf2848, *(uint32_t*)buf2849, *(uint32_t*)buf2850);
+    rsAllocationVStoreX_char3(*(rs_allocation*)buf2851, *(char3*)buf2852, *(uint32_t*)buf2853, *(uint32_t*)buf2854, *(uint32_t*)buf2855);
+    rsAllocationVStoreX_char4(*(rs_allocation*)buf2856, *(char4*)buf2857, *(uint32_t*)buf2858, *(uint32_t*)buf2859, *(uint32_t*)buf2860);
+    rsAllocationVStoreX_uchar2(*(rs_allocation*)buf2861, *(uchar2*)buf2862, *(uint32_t*)buf2863, *(uint32_t*)buf2864, *(uint32_t*)buf2865);
+    rsAllocationVStoreX_uchar3(*(rs_allocation*)buf2866, *(uchar3*)buf2867, *(uint32_t*)buf2868, *(uint32_t*)buf2869, *(uint32_t*)buf2870);
+    rsAllocationVStoreX_uchar4(*(rs_allocation*)buf2871, *(uchar4*)buf2872, *(uint32_t*)buf2873, *(uint32_t*)buf2874, *(uint32_t*)buf2875);
+    rsAllocationVStoreX_short2(*(rs_allocation*)buf2876, *(short2*)buf2877, *(uint32_t*)buf2878, *(uint32_t*)buf2879, *(uint32_t*)buf2880);
+    rsAllocationVStoreX_short3(*(rs_allocation*)buf2881, *(short3*)buf2882, *(uint32_t*)buf2883, *(uint32_t*)buf2884, *(uint32_t*)buf2885);
+    rsAllocationVStoreX_short4(*(rs_allocation*)buf2886, *(short4*)buf2887, *(uint32_t*)buf2888, *(uint32_t*)buf2889, *(uint32_t*)buf2890);
+    rsAllocationVStoreX_ushort2(*(rs_allocation*)buf2891, *(ushort2*)buf2892, *(uint32_t*)buf2893, *(uint32_t*)buf2894, *(uint32_t*)buf2895);
+    rsAllocationVStoreX_ushort3(*(rs_allocation*)buf2896, *(ushort3*)buf2897, *(uint32_t*)buf2898, *(uint32_t*)buf2899, *(uint32_t*)buf2900);
+    rsAllocationVStoreX_ushort4(*(rs_allocation*)buf2901, *(ushort4*)buf2902, *(uint32_t*)buf2903, *(uint32_t*)buf2904, *(uint32_t*)buf2905);
+    rsAllocationVStoreX_int2(*(rs_allocation*)buf2906, *(int2*)buf2907, *(uint32_t*)buf2908, *(uint32_t*)buf2909, *(uint32_t*)buf2910);
+    rsAllocationVStoreX_int3(*(rs_allocation*)buf2911, *(int3*)buf2912, *(uint32_t*)buf2913, *(uint32_t*)buf2914, *(uint32_t*)buf2915);
+    rsAllocationVStoreX_int4(*(rs_allocation*)buf2916, *(int4*)buf2917, *(uint32_t*)buf2918, *(uint32_t*)buf2919, *(uint32_t*)buf2920);
+    rsAllocationVStoreX_uint2(*(rs_allocation*)buf2921, *(uint2*)buf2922, *(uint32_t*)buf2923, *(uint32_t*)buf2924, *(uint32_t*)buf2925);
+    rsAllocationVStoreX_uint3(*(rs_allocation*)buf2926, *(uint3*)buf2927, *(uint32_t*)buf2928, *(uint32_t*)buf2929, *(uint32_t*)buf2930);
+    rsAllocationVStoreX_uint4(*(rs_allocation*)buf2931, *(uint4*)buf2932, *(uint32_t*)buf2933, *(uint32_t*)buf2934, *(uint32_t*)buf2935);
+    rsAllocationVStoreX_long2(*(rs_allocation*)buf2936, *(long2*)buf2937, *(uint32_t*)buf2938, *(uint32_t*)buf2939, *(uint32_t*)buf2940);
+    rsAllocationVStoreX_long3(*(rs_allocation*)buf2941, *(long3*)buf2942, *(uint32_t*)buf2943, *(uint32_t*)buf2944, *(uint32_t*)buf2945);
+    rsAllocationVStoreX_long4(*(rs_allocation*)buf2946, *(long4*)buf2947, *(uint32_t*)buf2948, *(uint32_t*)buf2949, *(uint32_t*)buf2950);
+    rsAllocationVStoreX_ulong2(*(rs_allocation*)buf2951, *(ulong2*)buf2952, *(uint32_t*)buf2953, *(uint32_t*)buf2954, *(uint32_t*)buf2955);
+    rsAllocationVStoreX_ulong3(*(rs_allocation*)buf2956, *(ulong3*)buf2957, *(uint32_t*)buf2958, *(uint32_t*)buf2959, *(uint32_t*)buf2960);
+    rsAllocationVStoreX_ulong4(*(rs_allocation*)buf2961, *(ulong4*)buf2962, *(uint32_t*)buf2963, *(uint32_t*)buf2964, *(uint32_t*)buf2965);
+    *(int32_t*)buf2966 = rsAtomicAdd((volatile int32_t*) buf2967, *(int32_t*)buf2968);
+    *(int32_t*)buf2969 = rsAtomicAdd((volatile uint32_t*) buf2970, *(uint32_t*)buf2971);
+    *(int32_t*)buf2972 = rsAtomicAnd((volatile int32_t*) buf2973, *(int32_t*)buf2974);
+    *(int32_t*)buf2975 = rsAtomicAnd((volatile uint32_t*) buf2976, *(uint32_t*)buf2977);
+    *(int32_t*)buf2978 = rsAtomicCas((volatile int32_t*) buf2979, *(int32_t*)buf2980, *(int32_t*)buf2981);
+    *(uint32_t*)buf2982 = rsAtomicCas((volatile uint32_t*) buf2983, *(uint32_t*)buf2984, *(uint32_t*)buf2985);
+    *(int32_t*)buf2986 = rsAtomicDec((volatile int32_t*) buf2987);
+    *(int32_t*)buf2988 = rsAtomicDec((volatile uint32_t*) buf2989);
+    *(int32_t*)buf2990 = rsAtomicInc((volatile int32_t*) buf2991);
+    *(int32_t*)buf2992 = rsAtomicInc((volatile uint32_t*) buf2993);
+    *(uint32_t*)buf2994 = rsAtomicMax((volatile uint32_t*) buf2995, *(uint32_t*)buf2996);
+    *(int32_t*)buf2997 = rsAtomicMax((volatile int32_t*) buf2998, *(int32_t*)buf2999);
+    *(uint32_t*)buf3000 = rsAtomicMin((volatile uint32_t*) buf3001, *(uint32_t*)buf3002);
+    *(int32_t*)buf3003 = rsAtomicMin((volatile int32_t*) buf3004, *(int32_t*)buf3005);
+    *(int32_t*)buf3006 = rsAtomicOr((volatile int32_t*) buf3007, *(int32_t*)buf3008);
+    *(int32_t*)buf3009 = rsAtomicOr((volatile uint32_t*) buf3010, *(uint32_t*)buf3011);
+    *(int32_t*)buf3012 = rsAtomicSub((volatile int32_t*) buf3013, *(int32_t*)buf3014);
+    *(int32_t*)buf3015 = rsAtomicSub((volatile uint32_t*) buf3016, *(uint32_t*)buf3017);
+    *(int32_t*)buf3018 = rsAtomicXor((volatile int32_t*) buf3019, *(int32_t*)buf3020);
+    *(int32_t*)buf3021 = rsAtomicXor((volatile uint32_t*) buf3022, *(uint32_t*)buf3023);
+    *(char*)buf3024 = rsClamp(*(char*)buf3025, *(char*)buf3026, *(char*)buf3027);
+    *(uchar*)buf3028 = rsClamp(*(uchar*)buf3029, *(uchar*)buf3030, *(uchar*)buf3031);
+    *(short*)buf3032 = rsClamp(*(short*)buf3033, *(short*)buf3034, *(short*)buf3035);
+    *(ushort*)buf3036 = rsClamp(*(ushort*)buf3037, *(ushort*)buf3038, *(ushort*)buf3039);
+    *(int*)buf3040 = rsClamp(*(int*)buf3041, *(int*)buf3042, *(int*)buf3043);
+    *(uint*)buf3044 = rsClamp(*(uint*)buf3045, *(uint*)buf3046, *(uint*)buf3047);
+    rsClearObject((rs_element*) buf3048);
+    rsClearObject((rs_type*) buf3049);
+    rsClearObject((rs_allocation*) buf3050);
+    rsClearObject((rs_sampler*) buf3051);
+    rsClearObject((rs_script*) buf3052);
+#ifndef __LP64__
+    rsClearObject((rs_mesh*) buf3053);
+    rsClearObject((rs_program_fragment*) buf3054);
+    rsClearObject((rs_program_vertex*) buf3055);
+    rsClearObject((rs_program_raster*) buf3056);
+    rsClearObject((rs_program_store*) buf3057);
+    rsClearObject((rs_font*) buf3058);
+#endif
+    rsDebug((const char*) buf3059, *(double*)buf3060);
+    rsDebug((const char*) buf3061, *(int*)buf3062);
+    rsDebug((const char*) buf3063, *(uint*)buf3064);
+    rsDebug((const char*) buf3065, *(long*)buf3066);
+    rsDebug((const char*) buf3067, *(ulong*)buf3068);
+    rsDebug((const char*) buf3069, *(int2*)buf3070);
+    rsDebug((const char*) buf3071, *(int3*)buf3072);
+    rsDebug((const char*) buf3073, *(int4*)buf3074);
+    rsDebug((const char*) buf3075, *(uint2*)buf3076);
+    rsDebug((const char*) buf3077, *(uint3*)buf3078);
+    rsDebug((const char*) buf3079, *(uint4*)buf3080);
+    rsDebug((const char*) buf3081, *(long2*)buf3082);
+    rsDebug((const char*) buf3083, *(long3*)buf3084);
+    rsDebug((const char*) buf3085, *(long4*)buf3086);
+    rsDebug((const char*) buf3087, *(ulong2*)buf3088);
+    rsDebug((const char*) buf3089, *(ulong3*)buf3090);
+    rsDebug((const char*) buf3091, *(ulong4*)buf3092);
+    rsDebug((const char*) buf3093, *(float*)buf3094);
+    rsDebug((const char*) buf3095, *(float2*)buf3096);
+    rsDebug((const char*) buf3097, *(float3*)buf3098);
+    rsDebug((const char*) buf3099, *(float4*)buf3100);
+    rsDebug((const char*) buf3101, *(char*)buf3102);
+    rsDebug((const char*) buf3103, *(char2*)buf3104);
+    rsDebug((const char*) buf3105, *(char3*)buf3106);
+    rsDebug((const char*) buf3107, *(char4*)buf3108);
+    rsDebug((const char*) buf3109, *(uchar*)buf3110);
+    rsDebug((const char*) buf3111, *(uchar2*)buf3112);
+    rsDebug((const char*) buf3113, *(uchar3*)buf3114);
+    rsDebug((const char*) buf3115, *(uchar4*)buf3116);
+    rsDebug((const char*) buf3117, *(short*)buf3118);
+    rsDebug((const char*) buf3119, *(short2*)buf3120);
+    rsDebug((const char*) buf3121, *(short3*)buf3122);
+    rsDebug((const char*) buf3123, *(short4*)buf3124);
+    rsDebug((const char*) buf3125, *(ushort*)buf3126);
+    rsDebug((const char*) buf3127, *(ushort2*)buf3128);
+    rsDebug((const char*) buf3129, *(ushort3*)buf3130);
+    rsDebug((const char*) buf3131, *(ushort4*)buf3132);
+    rsDebug((const char*) buf3133, *(float*)buf3134, *(float*)buf3135);
+    rsDebug((const char*) buf3136, *(float*)buf3137, *(float*)buf3138, *(float*)buf3139);
+    rsDebug((const char*) buf3140, *(float*)buf3141, *(float*)buf3142, *(float*)buf3143, *(float*)buf3144);
+    rsDebug((const char*) buf3145, *(long long*)buf3146);
+    rsDebug((const char*) buf3147, *(unsigned long long*)buf3148);
+    rsDebug((const char*) buf3149, (const void*) buf3150);
+    rsDebug((const char*) buf3151, (const rs_matrix4x4*) buf3152);
+    rsDebug((const char*) buf3153, (const rs_matrix3x3*) buf3154);
+    rsDebug((const char*) buf3155, (const rs_matrix2x2*) buf3156);
+    *(uint32_t*)buf3157 = rsElementGetBytesSize(*(rs_element*)buf3158);
+    *(rs_data_kind*)buf3159 = rsElementGetDataKind(*(rs_element*)buf3160);
+    *(rs_data_type*)buf3161 = rsElementGetDataType(*(rs_element*)buf3162);
+    *(rs_element*)buf3163 = rsElementGetSubElement(*(rs_element*)buf3164, *(uint32_t*)buf3165);
+    *(uint32_t*)buf3166 = rsElementGetSubElementArraySize(*(rs_element*)buf3167, *(uint32_t*)buf3168);
+    *(uint32_t*)buf3169 = rsElementGetSubElementCount(*(rs_element*)buf3170);
+    *(uint32_t*)buf3171 = rsElementGetSubElementName(*(rs_element*)buf3172, *(uint32_t*)buf3173, (char*) buf3174, *(uint32_t*)buf3175);
+    *(uint32_t*)buf3176 = rsElementGetSubElementNameLength(*(rs_element*)buf3177, *(uint32_t*)buf3178);
+    *(uint32_t*)buf3179 = rsElementGetSubElementOffsetBytes(*(rs_element*)buf3180, *(uint32_t*)buf3181);
+    *(uint32_t*)buf3182 = rsElementGetVectorSize(*(rs_element*)buf3183);
+    rsExtractFrustumPlanes((const rs_matrix4x4*) buf3184, (float4*) buf3185, (float4*) buf3186, (float4*) buf3187, (float4*) buf3188, (float4*) buf3189, (float4*) buf3190);
+    rsForEach(*(rs_script*)buf3191, *(rs_allocation*)buf3192, *(rs_allocation*)buf3193);
+    *(float*)buf3194 = rsFrac(*(float*)buf3195);
+    *(rs_allocation*)buf3196 = rsGetAllocation((const void*) buf3197);
+    *(float*)buf3198 = rsGetDt();
+    *(const void**)buf3199 = rsGetElementAt(*(rs_allocation*)buf3200, *(uint32_t*)buf3201);
+    *(const void**)buf3202 = rsGetElementAt(*(rs_allocation*)buf3203, *(uint32_t*)buf3204, *(uint32_t*)buf3205);
+    *(const void**)buf3206 = rsGetElementAt(*(rs_allocation*)buf3207, *(uint32_t*)buf3208, *(uint32_t*)buf3209, *(uint32_t*)buf3210);
+    *(float*)buf3211 = rsGetElementAt_float(*(rs_allocation*)buf3212, *(uint32_t*)buf3213);
+    *(float2*)buf3214 = rsGetElementAt_float2(*(rs_allocation*)buf3215, *(uint32_t*)buf3216);
+    *(float3*)buf3217 = rsGetElementAt_float3(*(rs_allocation*)buf3218, *(uint32_t*)buf3219);
+    *(float4*)buf3220 = rsGetElementAt_float4(*(rs_allocation*)buf3221, *(uint32_t*)buf3222);
+    *(double*)buf3223 = rsGetElementAt_double(*(rs_allocation*)buf3224, *(uint32_t*)buf3225);
+    *(double2*)buf3226 = rsGetElementAt_double2(*(rs_allocation*)buf3227, *(uint32_t*)buf3228);
+    *(double3*)buf3229 = rsGetElementAt_double3(*(rs_allocation*)buf3230, *(uint32_t*)buf3231);
+    *(double4*)buf3232 = rsGetElementAt_double4(*(rs_allocation*)buf3233, *(uint32_t*)buf3234);
+    *(char*)buf3235 = rsGetElementAt_char(*(rs_allocation*)buf3236, *(uint32_t*)buf3237);
+    *(char2*)buf3238 = rsGetElementAt_char2(*(rs_allocation*)buf3239, *(uint32_t*)buf3240);
+    *(char3*)buf3241 = rsGetElementAt_char3(*(rs_allocation*)buf3242, *(uint32_t*)buf3243);
+    *(char4*)buf3244 = rsGetElementAt_char4(*(rs_allocation*)buf3245, *(uint32_t*)buf3246);
+    *(uchar*)buf3247 = rsGetElementAt_uchar(*(rs_allocation*)buf3248, *(uint32_t*)buf3249);
+    *(uchar2*)buf3250 = rsGetElementAt_uchar2(*(rs_allocation*)buf3251, *(uint32_t*)buf3252);
+    *(uchar3*)buf3253 = rsGetElementAt_uchar3(*(rs_allocation*)buf3254, *(uint32_t*)buf3255);
+    *(uchar4*)buf3256 = rsGetElementAt_uchar4(*(rs_allocation*)buf3257, *(uint32_t*)buf3258);
+    *(short*)buf3259 = rsGetElementAt_short(*(rs_allocation*)buf3260, *(uint32_t*)buf3261);
+    *(short2*)buf3262 = rsGetElementAt_short2(*(rs_allocation*)buf3263, *(uint32_t*)buf3264);
+    *(short3*)buf3265 = rsGetElementAt_short3(*(rs_allocation*)buf3266, *(uint32_t*)buf3267);
+    *(short4*)buf3268 = rsGetElementAt_short4(*(rs_allocation*)buf3269, *(uint32_t*)buf3270);
+    *(ushort*)buf3271 = rsGetElementAt_ushort(*(rs_allocation*)buf3272, *(uint32_t*)buf3273);
+    *(ushort2*)buf3274 = rsGetElementAt_ushort2(*(rs_allocation*)buf3275, *(uint32_t*)buf3276);
+    *(ushort3*)buf3277 = rsGetElementAt_ushort3(*(rs_allocation*)buf3278, *(uint32_t*)buf3279);
+    *(ushort4*)buf3280 = rsGetElementAt_ushort4(*(rs_allocation*)buf3281, *(uint32_t*)buf3282);
+    *(int*)buf3283 = rsGetElementAt_int(*(rs_allocation*)buf3284, *(uint32_t*)buf3285);
+    *(int2*)buf3286 = rsGetElementAt_int2(*(rs_allocation*)buf3287, *(uint32_t*)buf3288);
+    *(int3*)buf3289 = rsGetElementAt_int3(*(rs_allocation*)buf3290, *(uint32_t*)buf3291);
+    *(int4*)buf3292 = rsGetElementAt_int4(*(rs_allocation*)buf3293, *(uint32_t*)buf3294);
+    *(uint*)buf3295 = rsGetElementAt_uint(*(rs_allocation*)buf3296, *(uint32_t*)buf3297);
+    *(uint2*)buf3298 = rsGetElementAt_uint2(*(rs_allocation*)buf3299, *(uint32_t*)buf3300);
+    *(uint3*)buf3301 = rsGetElementAt_uint3(*(rs_allocation*)buf3302, *(uint32_t*)buf3303);
+    *(uint4*)buf3304 = rsGetElementAt_uint4(*(rs_allocation*)buf3305, *(uint32_t*)buf3306);
+    *(long*)buf3307 = rsGetElementAt_long(*(rs_allocation*)buf3308, *(uint32_t*)buf3309);
+    *(long2*)buf3310 = rsGetElementAt_long2(*(rs_allocation*)buf3311, *(uint32_t*)buf3312);
+    *(long3*)buf3313 = rsGetElementAt_long3(*(rs_allocation*)buf3314, *(uint32_t*)buf3315);
+    *(long4*)buf3316 = rsGetElementAt_long4(*(rs_allocation*)buf3317, *(uint32_t*)buf3318);
+    *(ulong*)buf3319 = rsGetElementAt_ulong(*(rs_allocation*)buf3320, *(uint32_t*)buf3321);
+    *(ulong2*)buf3322 = rsGetElementAt_ulong2(*(rs_allocation*)buf3323, *(uint32_t*)buf3324);
+    *(ulong3*)buf3325 = rsGetElementAt_ulong3(*(rs_allocation*)buf3326, *(uint32_t*)buf3327);
+    *(ulong4*)buf3328 = rsGetElementAt_ulong4(*(rs_allocation*)buf3329, *(uint32_t*)buf3330);
+    *(float*)buf3331 = rsGetElementAt_float(*(rs_allocation*)buf3332, *(uint32_t*)buf3333, *(uint32_t*)buf3334);
+    *(float2*)buf3335 = rsGetElementAt_float2(*(rs_allocation*)buf3336, *(uint32_t*)buf3337, *(uint32_t*)buf3338);
+    *(float3*)buf3339 = rsGetElementAt_float3(*(rs_allocation*)buf3340, *(uint32_t*)buf3341, *(uint32_t*)buf3342);
+    *(float4*)buf3343 = rsGetElementAt_float4(*(rs_allocation*)buf3344, *(uint32_t*)buf3345, *(uint32_t*)buf3346);
+    *(double*)buf3347 = rsGetElementAt_double(*(rs_allocation*)buf3348, *(uint32_t*)buf3349, *(uint32_t*)buf3350);
+    *(double2*)buf3351 = rsGetElementAt_double2(*(rs_allocation*)buf3352, *(uint32_t*)buf3353, *(uint32_t*)buf3354);
+    *(double3*)buf3355 = rsGetElementAt_double3(*(rs_allocation*)buf3356, *(uint32_t*)buf3357, *(uint32_t*)buf3358);
+    *(double4*)buf3359 = rsGetElementAt_double4(*(rs_allocation*)buf3360, *(uint32_t*)buf3361, *(uint32_t*)buf3362);
+    *(char*)buf3363 = rsGetElementAt_char(*(rs_allocation*)buf3364, *(uint32_t*)buf3365, *(uint32_t*)buf3366);
+    *(char2*)buf3367 = rsGetElementAt_char2(*(rs_allocation*)buf3368, *(uint32_t*)buf3369, *(uint32_t*)buf3370);
+    *(char3*)buf3371 = rsGetElementAt_char3(*(rs_allocation*)buf3372, *(uint32_t*)buf3373, *(uint32_t*)buf3374);
+    *(char4*)buf3375 = rsGetElementAt_char4(*(rs_allocation*)buf3376, *(uint32_t*)buf3377, *(uint32_t*)buf3378);
+    *(uchar*)buf3379 = rsGetElementAt_uchar(*(rs_allocation*)buf3380, *(uint32_t*)buf3381, *(uint32_t*)buf3382);
+    *(uchar2*)buf3383 = rsGetElementAt_uchar2(*(rs_allocation*)buf3384, *(uint32_t*)buf3385, *(uint32_t*)buf3386);
+    *(uchar3*)buf3387 = rsGetElementAt_uchar3(*(rs_allocation*)buf3388, *(uint32_t*)buf3389, *(uint32_t*)buf3390);
+    *(uchar4*)buf3391 = rsGetElementAt_uchar4(*(rs_allocation*)buf3392, *(uint32_t*)buf3393, *(uint32_t*)buf3394);
+    *(short*)buf3395 = rsGetElementAt_short(*(rs_allocation*)buf3396, *(uint32_t*)buf3397, *(uint32_t*)buf3398);
+    *(short2*)buf3399 = rsGetElementAt_short2(*(rs_allocation*)buf3400, *(uint32_t*)buf3401, *(uint32_t*)buf3402);
+    *(short3*)buf3403 = rsGetElementAt_short3(*(rs_allocation*)buf3404, *(uint32_t*)buf3405, *(uint32_t*)buf3406);
+    *(short4*)buf3407 = rsGetElementAt_short4(*(rs_allocation*)buf3408, *(uint32_t*)buf3409, *(uint32_t*)buf3410);
+    *(ushort*)buf3411 = rsGetElementAt_ushort(*(rs_allocation*)buf3412, *(uint32_t*)buf3413, *(uint32_t*)buf3414);
+    *(ushort2*)buf3415 = rsGetElementAt_ushort2(*(rs_allocation*)buf3416, *(uint32_t*)buf3417, *(uint32_t*)buf3418);
+    *(ushort3*)buf3419 = rsGetElementAt_ushort3(*(rs_allocation*)buf3420, *(uint32_t*)buf3421, *(uint32_t*)buf3422);
+    *(ushort4*)buf3423 = rsGetElementAt_ushort4(*(rs_allocation*)buf3424, *(uint32_t*)buf3425, *(uint32_t*)buf3426);
+    *(int*)buf3427 = rsGetElementAt_int(*(rs_allocation*)buf3428, *(uint32_t*)buf3429, *(uint32_t*)buf3430);
+    *(int2*)buf3431 = rsGetElementAt_int2(*(rs_allocation*)buf3432, *(uint32_t*)buf3433, *(uint32_t*)buf3434);
+    *(int3*)buf3435 = rsGetElementAt_int3(*(rs_allocation*)buf3436, *(uint32_t*)buf3437, *(uint32_t*)buf3438);
+    *(int4*)buf3439 = rsGetElementAt_int4(*(rs_allocation*)buf3440, *(uint32_t*)buf3441, *(uint32_t*)buf3442);
+    *(uint*)buf3443 = rsGetElementAt_uint(*(rs_allocation*)buf3444, *(uint32_t*)buf3445, *(uint32_t*)buf3446);
+    *(uint2*)buf3447 = rsGetElementAt_uint2(*(rs_allocation*)buf3448, *(uint32_t*)buf3449, *(uint32_t*)buf3450);
+    *(uint3*)buf3451 = rsGetElementAt_uint3(*(rs_allocation*)buf3452, *(uint32_t*)buf3453, *(uint32_t*)buf3454);
+    *(uint4*)buf3455 = rsGetElementAt_uint4(*(rs_allocation*)buf3456, *(uint32_t*)buf3457, *(uint32_t*)buf3458);
+    *(long*)buf3459 = rsGetElementAt_long(*(rs_allocation*)buf3460, *(uint32_t*)buf3461, *(uint32_t*)buf3462);
+    *(long2*)buf3463 = rsGetElementAt_long2(*(rs_allocation*)buf3464, *(uint32_t*)buf3465, *(uint32_t*)buf3466);
+    *(long3*)buf3467 = rsGetElementAt_long3(*(rs_allocation*)buf3468, *(uint32_t*)buf3469, *(uint32_t*)buf3470);
+    *(long4*)buf3471 = rsGetElementAt_long4(*(rs_allocation*)buf3472, *(uint32_t*)buf3473, *(uint32_t*)buf3474);
+    *(ulong*)buf3475 = rsGetElementAt_ulong(*(rs_allocation*)buf3476, *(uint32_t*)buf3477, *(uint32_t*)buf3478);
+    *(ulong2*)buf3479 = rsGetElementAt_ulong2(*(rs_allocation*)buf3480, *(uint32_t*)buf3481, *(uint32_t*)buf3482);
+    *(ulong3*)buf3483 = rsGetElementAt_ulong3(*(rs_allocation*)buf3484, *(uint32_t*)buf3485, *(uint32_t*)buf3486);
+    *(ulong4*)buf3487 = rsGetElementAt_ulong4(*(rs_allocation*)buf3488, *(uint32_t*)buf3489, *(uint32_t*)buf3490);
+    *(float*)buf3491 = rsGetElementAt_float(*(rs_allocation*)buf3492, *(uint32_t*)buf3493, *(uint32_t*)buf3494, *(uint32_t*)buf3495);
+    *(float2*)buf3496 = rsGetElementAt_float2(*(rs_allocation*)buf3497, *(uint32_t*)buf3498, *(uint32_t*)buf3499, *(uint32_t*)buf3500);
+    *(float3*)buf3501 = rsGetElementAt_float3(*(rs_allocation*)buf3502, *(uint32_t*)buf3503, *(uint32_t*)buf3504, *(uint32_t*)buf3505);
+    *(float4*)buf3506 = rsGetElementAt_float4(*(rs_allocation*)buf3507, *(uint32_t*)buf3508, *(uint32_t*)buf3509, *(uint32_t*)buf3510);
+    *(double*)buf3511 = rsGetElementAt_double(*(rs_allocation*)buf3512, *(uint32_t*)buf3513, *(uint32_t*)buf3514, *(uint32_t*)buf3515);
+    *(double2*)buf3516 = rsGetElementAt_double2(*(rs_allocation*)buf3517, *(uint32_t*)buf3518, *(uint32_t*)buf3519, *(uint32_t*)buf3520);
+    *(double3*)buf3521 = rsGetElementAt_double3(*(rs_allocation*)buf3522, *(uint32_t*)buf3523, *(uint32_t*)buf3524, *(uint32_t*)buf3525);
+    *(double4*)buf3526 = rsGetElementAt_double4(*(rs_allocation*)buf3527, *(uint32_t*)buf3528, *(uint32_t*)buf3529, *(uint32_t*)buf3530);
+    *(char*)buf3531 = rsGetElementAt_char(*(rs_allocation*)buf3532, *(uint32_t*)buf3533, *(uint32_t*)buf3534, *(uint32_t*)buf3535);
+    *(char2*)buf3536 = rsGetElementAt_char2(*(rs_allocation*)buf3537, *(uint32_t*)buf3538, *(uint32_t*)buf3539, *(uint32_t*)buf3540);
+    *(char3*)buf3541 = rsGetElementAt_char3(*(rs_allocation*)buf3542, *(uint32_t*)buf3543, *(uint32_t*)buf3544, *(uint32_t*)buf3545);
+    *(char4*)buf3546 = rsGetElementAt_char4(*(rs_allocation*)buf3547, *(uint32_t*)buf3548, *(uint32_t*)buf3549, *(uint32_t*)buf3550);
+    *(uchar*)buf3551 = rsGetElementAt_uchar(*(rs_allocation*)buf3552, *(uint32_t*)buf3553, *(uint32_t*)buf3554, *(uint32_t*)buf3555);
+    *(uchar2*)buf3556 = rsGetElementAt_uchar2(*(rs_allocation*)buf3557, *(uint32_t*)buf3558, *(uint32_t*)buf3559, *(uint32_t*)buf3560);
+    *(uchar3*)buf3561 = rsGetElementAt_uchar3(*(rs_allocation*)buf3562, *(uint32_t*)buf3563, *(uint32_t*)buf3564, *(uint32_t*)buf3565);
+    *(uchar4*)buf3566 = rsGetElementAt_uchar4(*(rs_allocation*)buf3567, *(uint32_t*)buf3568, *(uint32_t*)buf3569, *(uint32_t*)buf3570);
+    *(short*)buf3571 = rsGetElementAt_short(*(rs_allocation*)buf3572, *(uint32_t*)buf3573, *(uint32_t*)buf3574, *(uint32_t*)buf3575);
+    *(short2*)buf3576 = rsGetElementAt_short2(*(rs_allocation*)buf3577, *(uint32_t*)buf3578, *(uint32_t*)buf3579, *(uint32_t*)buf3580);
+    *(short3*)buf3581 = rsGetElementAt_short3(*(rs_allocation*)buf3582, *(uint32_t*)buf3583, *(uint32_t*)buf3584, *(uint32_t*)buf3585);
+    *(short4*)buf3586 = rsGetElementAt_short4(*(rs_allocation*)buf3587, *(uint32_t*)buf3588, *(uint32_t*)buf3589, *(uint32_t*)buf3590);
+    *(ushort*)buf3591 = rsGetElementAt_ushort(*(rs_allocation*)buf3592, *(uint32_t*)buf3593, *(uint32_t*)buf3594, *(uint32_t*)buf3595);
+    *(ushort2*)buf3596 = rsGetElementAt_ushort2(*(rs_allocation*)buf3597, *(uint32_t*)buf3598, *(uint32_t*)buf3599, *(uint32_t*)buf3600);
+    *(ushort3*)buf3601 = rsGetElementAt_ushort3(*(rs_allocation*)buf3602, *(uint32_t*)buf3603, *(uint32_t*)buf3604, *(uint32_t*)buf3605);
+    *(ushort4*)buf3606 = rsGetElementAt_ushort4(*(rs_allocation*)buf3607, *(uint32_t*)buf3608, *(uint32_t*)buf3609, *(uint32_t*)buf3610);
+    *(int*)buf3611 = rsGetElementAt_int(*(rs_allocation*)buf3612, *(uint32_t*)buf3613, *(uint32_t*)buf3614, *(uint32_t*)buf3615);
+    *(int2*)buf3616 = rsGetElementAt_int2(*(rs_allocation*)buf3617, *(uint32_t*)buf3618, *(uint32_t*)buf3619, *(uint32_t*)buf3620);
+    *(int3*)buf3621 = rsGetElementAt_int3(*(rs_allocation*)buf3622, *(uint32_t*)buf3623, *(uint32_t*)buf3624, *(uint32_t*)buf3625);
+    *(int4*)buf3626 = rsGetElementAt_int4(*(rs_allocation*)buf3627, *(uint32_t*)buf3628, *(uint32_t*)buf3629, *(uint32_t*)buf3630);
+    *(uint*)buf3631 = rsGetElementAt_uint(*(rs_allocation*)buf3632, *(uint32_t*)buf3633, *(uint32_t*)buf3634, *(uint32_t*)buf3635);
+    *(uint2*)buf3636 = rsGetElementAt_uint2(*(rs_allocation*)buf3637, *(uint32_t*)buf3638, *(uint32_t*)buf3639, *(uint32_t*)buf3640);
+    *(uint3*)buf3641 = rsGetElementAt_uint3(*(rs_allocation*)buf3642, *(uint32_t*)buf3643, *(uint32_t*)buf3644, *(uint32_t*)buf3645);
+    *(uint4*)buf3646 = rsGetElementAt_uint4(*(rs_allocation*)buf3647, *(uint32_t*)buf3648, *(uint32_t*)buf3649, *(uint32_t*)buf3650);
+    *(long*)buf3651 = rsGetElementAt_long(*(rs_allocation*)buf3652, *(uint32_t*)buf3653, *(uint32_t*)buf3654, *(uint32_t*)buf3655);
+    *(long2*)buf3656 = rsGetElementAt_long2(*(rs_allocation*)buf3657, *(uint32_t*)buf3658, *(uint32_t*)buf3659, *(uint32_t*)buf3660);
+    *(long3*)buf3661 = rsGetElementAt_long3(*(rs_allocation*)buf3662, *(uint32_t*)buf3663, *(uint32_t*)buf3664, *(uint32_t*)buf3665);
+    *(long4*)buf3666 = rsGetElementAt_long4(*(rs_allocation*)buf3667, *(uint32_t*)buf3668, *(uint32_t*)buf3669, *(uint32_t*)buf3670);
+    *(ulong*)buf3671 = rsGetElementAt_ulong(*(rs_allocation*)buf3672, *(uint32_t*)buf3673, *(uint32_t*)buf3674, *(uint32_t*)buf3675);
+    *(ulong2*)buf3676 = rsGetElementAt_ulong2(*(rs_allocation*)buf3677, *(uint32_t*)buf3678, *(uint32_t*)buf3679, *(uint32_t*)buf3680);
+    *(ulong3*)buf3681 = rsGetElementAt_ulong3(*(rs_allocation*)buf3682, *(uint32_t*)buf3683, *(uint32_t*)buf3684, *(uint32_t*)buf3685);
+    *(ulong4*)buf3686 = rsGetElementAt_ulong4(*(rs_allocation*)buf3687, *(uint32_t*)buf3688, *(uint32_t*)buf3689, *(uint32_t*)buf3690);
+    *(uchar*)buf3691 = rsGetElementAtYuv_uchar_U(*(rs_allocation*)buf3692, *(uint32_t*)buf3693, *(uint32_t*)buf3694);
+    *(uchar*)buf3695 = rsGetElementAtYuv_uchar_V(*(rs_allocation*)buf3696, *(uint32_t*)buf3697, *(uint32_t*)buf3698);
+    *(uchar*)buf3699 = rsGetElementAtYuv_uchar_Y(*(rs_allocation*)buf3700, *(uint32_t*)buf3701, *(uint32_t*)buf3702);
+    *(bool*)buf3703 = rsIsObject(*(rs_element*)buf3704);
+    *(bool*)buf3705 = rsIsObject(*(rs_type*)buf3706);
+    *(bool*)buf3707 = rsIsObject(*(rs_allocation*)buf3708);
+    *(bool*)buf3709 = rsIsObject(*(rs_sampler*)buf3710);
+    *(bool*)buf3711 = rsIsObject(*(rs_script*)buf3712);
+#ifndef __LP64__
+    *(bool*)buf3713 = rsIsObject(*(rs_mesh*)buf3714);
+    *(bool*)buf3715 = rsIsObject(*(rs_program_fragment*)buf3716);
+    *(bool*)buf3717 = rsIsObject(*(rs_program_vertex*)buf3718);
+    *(bool*)buf3719 = rsIsObject(*(rs_program_raster*)buf3720);
+    *(bool*)buf3721 = rsIsObject(*(rs_program_store*)buf3722);
+    *(bool*)buf3723 = rsIsObject(*(rs_font*)buf3724);
+#endif
+    *(bool*)buf3725 = rsIsSphereInFrustum((float4*) buf3726, (float4*) buf3727, (float4*) buf3728, (float4*) buf3729, (float4*) buf3730, (float4*) buf3731, (float4*) buf3732);
+    *(rs_tm**)buf3733 = rsLocaltime((rs_tm*) buf3734, (const rs_time_t*) buf3735);
+    *(float*)buf3736 = rsMatrixGet((const rs_matrix4x4*) buf3737, *(uint32_t*)buf3738, *(uint32_t*)buf3739);
+    *(float*)buf3740 = rsMatrixGet((const rs_matrix3x3*) buf3741, *(uint32_t*)buf3742, *(uint32_t*)buf3743);
+    *(float*)buf3744 = rsMatrixGet((const rs_matrix2x2*) buf3745, *(uint32_t*)buf3746, *(uint32_t*)buf3747);
+    *(bool*)buf3748 = rsMatrixInverse((rs_matrix4x4*) buf3749);
+    *(bool*)buf3750 = rsMatrixInverseTranspose((rs_matrix4x4*) buf3751);
+    rsMatrixLoad((rs_matrix4x4*) buf3752, (const float*) buf3753);
+    rsMatrixLoad((rs_matrix3x3*) buf3754, (const float*) buf3755);
+    rsMatrixLoad((rs_matrix2x2*) buf3756, (const float*) buf3757);
+    rsMatrixLoad((rs_matrix4x4*) buf3758, (const rs_matrix4x4*) buf3759);
+    rsMatrixLoad((rs_matrix3x3*) buf3760, (const rs_matrix3x3*) buf3761);
+    rsMatrixLoad((rs_matrix2x2*) buf3762, (const rs_matrix2x2*) buf3763);
+    rsMatrixLoad((rs_matrix4x4*) buf3764, (const rs_matrix3x3*) buf3765);
+    rsMatrixLoad((rs_matrix4x4*) buf3766, (const rs_matrix2x2*) buf3767);
+    rsMatrixLoadFrustum((rs_matrix4x4*) buf3768, *(float*)buf3769, *(float*)buf3770, *(float*)buf3771, *(float*)buf3772, *(float*)buf3773, *(float*)buf3774);
+    rsMatrixLoadIdentity((rs_matrix4x4*) buf3775);
+    rsMatrixLoadIdentity((rs_matrix3x3*) buf3776);
+    rsMatrixLoadIdentity((rs_matrix2x2*) buf3777);
+    rsMatrixLoadMultiply((rs_matrix4x4*) buf3778, (const rs_matrix4x4*) buf3779, (const rs_matrix4x4*) buf3780);
+    rsMatrixLoadMultiply((rs_matrix3x3*) buf3781, (const rs_matrix3x3*) buf3782, (const rs_matrix3x3*) buf3783);
+    rsMatrixLoadMultiply((rs_matrix2x2*) buf3784, (const rs_matrix2x2*) buf3785, (const rs_matrix2x2*) buf3786);
+    rsMatrixLoadOrtho((rs_matrix4x4*) buf3787, *(float*)buf3788, *(float*)buf3789, *(float*)buf3790, *(float*)buf3791, *(float*)buf3792, *(float*)buf3793);
+    rsMatrixLoadPerspective((rs_matrix4x4*) buf3794, *(float*)buf3795, *(float*)buf3796, *(float*)buf3797, *(float*)buf3798);
+    rsMatrixLoadRotate((rs_matrix4x4*) buf3799, *(float*)buf3800, *(float*)buf3801, *(float*)buf3802, *(float*)buf3803);
+    rsMatrixLoadScale((rs_matrix4x4*) buf3804, *(float*)buf3805, *(float*)buf3806, *(float*)buf3807);
+    rsMatrixLoadTranslate((rs_matrix4x4*) buf3808, *(float*)buf3809, *(float*)buf3810, *(float*)buf3811);
+    rsMatrixMultiply((rs_matrix4x4*) buf3812, (const rs_matrix4x4*) buf3813);
+    rsMatrixMultiply((rs_matrix3x3*) buf3814, (const rs_matrix3x3*) buf3815);
+    rsMatrixMultiply((rs_matrix2x2*) buf3816, (const rs_matrix2x2*) buf3817);
+    *(float4*)buf3818 = rsMatrixMultiply((const rs_matrix4x4*) buf3819, *(float4*)buf3820);
+    *(float4*)buf3821 = rsMatrixMultiply((const rs_matrix4x4*) buf3822, *(float3*)buf3823);
+    *(float4*)buf3824 = rsMatrixMultiply((const rs_matrix4x4*) buf3825, *(float2*)buf3826);
+    *(float3*)buf3827 = rsMatrixMultiply((const rs_matrix3x3*) buf3828, *(float3*)buf3829);
+    *(float3*)buf3830 = rsMatrixMultiply((const rs_matrix3x3*) buf3831, *(float2*)buf3832);
+    *(float2*)buf3833 = rsMatrixMultiply((const rs_matrix2x2*) buf3834, *(float2*)buf3835);
+    rsMatrixRotate((rs_matrix4x4*) buf3836, *(float*)buf3837, *(float*)buf3838, *(float*)buf3839, *(float*)buf3840);
+    rsMatrixScale((rs_matrix4x4*) buf3841, *(float*)buf3842, *(float*)buf3843, *(float*)buf3844);
+    rsMatrixSet((rs_matrix4x4*) buf3845, *(uint32_t*)buf3846, *(uint32_t*)buf3847, *(float*)buf3848);
+    rsMatrixSet((rs_matrix3x3*) buf3849, *(uint32_t*)buf3850, *(uint32_t*)buf3851, *(float*)buf3852);
+    rsMatrixSet((rs_matrix2x2*) buf3853, *(uint32_t*)buf3854, *(uint32_t*)buf3855, *(float*)buf3856);
+    rsMatrixTranslate((rs_matrix4x4*) buf3857, *(float*)buf3858, *(float*)buf3859, *(float*)buf3860);
+    rsMatrixTranspose((rs_matrix4x4*) buf3861);
+    rsMatrixTranspose((rs_matrix3x3*) buf3862);
+    rsMatrixTranspose((rs_matrix2x2*) buf3863);
+    *(uchar4*)buf3864 = rsPackColorTo8888(*(float*)buf3865, *(float*)buf3866, *(float*)buf3867);
+    *(uchar4*)buf3868 = rsPackColorTo8888(*(float*)buf3869, *(float*)buf3870, *(float*)buf3871, *(float*)buf3872);
+    *(uchar4*)buf3873 = rsPackColorTo8888(*(float3*)buf3874);
+    *(uchar4*)buf3875 = rsPackColorTo8888(*(float4*)buf3876);
+    rsQuaternionAdd((rs_quaternion*) buf3877, (const rs_quaternion*) buf3878);
+    rsQuaternionConjugate((rs_quaternion*) buf3879);
+    *(float*)buf3880 = rsQuaternionDot((const rs_quaternion*) buf3881, (const rs_quaternion*) buf3882);
+    rsQuaternionGetMatrixUnit((rs_matrix4x4*) buf3883, (const rs_quaternion*) buf3884);
+    rsQuaternionLoadRotate((rs_quaternion*) buf3885, *(float*)buf3886, *(float*)buf3887, *(float*)buf3888, *(float*)buf3889);
+    rsQuaternionLoadRotateUnit((rs_quaternion*) buf3890, *(float*)buf3891, *(float*)buf3892, *(float*)buf3893, *(float*)buf3894);
+    rsQuaternionMultiply((rs_quaternion*) buf3895, *(float*)buf3896);
+    rsQuaternionMultiply((rs_quaternion*) buf3897, (const rs_quaternion*) buf3898);
+    rsQuaternionNormalize((rs_quaternion*) buf3899);
+    rsQuaternionSet((rs_quaternion*) buf3900, *(float*)buf3901, *(float*)buf3902, *(float*)buf3903, *(float*)buf3904);
+    rsQuaternionSet((rs_quaternion*) buf3905, (const rs_quaternion*) buf3906);
+    rsQuaternionSlerp((rs_quaternion*) buf3907, (const rs_quaternion*) buf3908, (const rs_quaternion*) buf3909, *(float*)buf3910);
+    *(int*)buf3911 = rsRand(*(int*)buf3912);
+    *(int*)buf3913 = rsRand(*(int*)buf3914, *(int*)buf3915);
+    *(float*)buf3916 = rsRand(*(float*)buf3917);
+    *(float*)buf3918 = rsRand(*(float*)buf3919, *(float*)buf3920);
+    *(float4*)buf3921 = rsSample(*(rs_allocation*)buf3922, *(rs_sampler*)buf3923, *(float*)buf3924);
+    *(float4*)buf3925 = rsSample(*(rs_allocation*)buf3926, *(rs_sampler*)buf3927, *(float*)buf3928, *(float*)buf3929);
+    *(float4*)buf3930 = rsSample(*(rs_allocation*)buf3931, *(rs_sampler*)buf3932, *(float2*)buf3933);
+    *(float4*)buf3934 = rsSample(*(rs_allocation*)buf3935, *(rs_sampler*)buf3936, *(float2*)buf3937, *(float*)buf3938);
+    *(float*)buf3939 = rsSamplerGetAnisotropy(*(rs_sampler*)buf3940);
+    *(rs_sampler_value*)buf3941 = rsSamplerGetMagnification(*(rs_sampler*)buf3942);
+    *(rs_sampler_value*)buf3943 = rsSamplerGetMinification(*(rs_sampler*)buf3944);
+    *(rs_sampler_value*)buf3945 = rsSamplerGetWrapS(*(rs_sampler*)buf3946);
+    *(rs_sampler_value*)buf3947 = rsSamplerGetWrapT(*(rs_sampler*)buf3948);
+    *(bool*)buf3949 = rsSendToClient(*(int*)buf3950);
+    *(bool*)buf3951 = rsSendToClient(*(int*)buf3952, (const void*) buf3953, *(uint*)buf3954);
+    rsSendToClientBlocking(*(int*)buf3955);
+    rsSendToClientBlocking(*(int*)buf3956, (const void*) buf3957, *(uint*)buf3958);
+    rsSetElementAt(*(rs_allocation*)buf3959, (void*) buf3960, *(uint32_t*)buf3961);
+    rsSetElementAt(*(rs_allocation*)buf3962, (void*) buf3963, *(uint32_t*)buf3964, *(uint32_t*)buf3965);
+    rsSetElementAt_float(*(rs_allocation*)buf3966, *(float*)buf3967, *(uint32_t*)buf3968);
+    rsSetElementAt_float2(*(rs_allocation*)buf3969, *(float2*)buf3970, *(uint32_t*)buf3971);
+    rsSetElementAt_float3(*(rs_allocation*)buf3972, *(float3*)buf3973, *(uint32_t*)buf3974);
+    rsSetElementAt_float4(*(rs_allocation*)buf3975, *(float4*)buf3976, *(uint32_t*)buf3977);
+    rsSetElementAt_double(*(rs_allocation*)buf3978, *(double*)buf3979, *(uint32_t*)buf3980);
+    rsSetElementAt_double2(*(rs_allocation*)buf3981, *(double2*)buf3982, *(uint32_t*)buf3983);
+    rsSetElementAt_double3(*(rs_allocation*)buf3984, *(double3*)buf3985, *(uint32_t*)buf3986);
+    rsSetElementAt_double4(*(rs_allocation*)buf3987, *(double4*)buf3988, *(uint32_t*)buf3989);
+    rsSetElementAt_char(*(rs_allocation*)buf3990, *(char*)buf3991, *(uint32_t*)buf3992);
+    rsSetElementAt_char2(*(rs_allocation*)buf3993, *(char2*)buf3994, *(uint32_t*)buf3995);
+    rsSetElementAt_char3(*(rs_allocation*)buf3996, *(char3*)buf3997, *(uint32_t*)buf3998);
+    rsSetElementAt_char4(*(rs_allocation*)buf3999, *(char4*)buf4000, *(uint32_t*)buf4001);
+    rsSetElementAt_uchar(*(rs_allocation*)buf4002, *(uchar*)buf4003, *(uint32_t*)buf4004);
+    rsSetElementAt_uchar2(*(rs_allocation*)buf4005, *(uchar2*)buf4006, *(uint32_t*)buf4007);
+    rsSetElementAt_uchar3(*(rs_allocation*)buf4008, *(uchar3*)buf4009, *(uint32_t*)buf4010);
+    rsSetElementAt_uchar4(*(rs_allocation*)buf4011, *(uchar4*)buf4012, *(uint32_t*)buf4013);
+    rsSetElementAt_short(*(rs_allocation*)buf4014, *(short*)buf4015, *(uint32_t*)buf4016);
+    rsSetElementAt_short2(*(rs_allocation*)buf4017, *(short2*)buf4018, *(uint32_t*)buf4019);
+    rsSetElementAt_short3(*(rs_allocation*)buf4020, *(short3*)buf4021, *(uint32_t*)buf4022);
+    rsSetElementAt_short4(*(rs_allocation*)buf4023, *(short4*)buf4024, *(uint32_t*)buf4025);
+    rsSetElementAt_ushort(*(rs_allocation*)buf4026, *(ushort*)buf4027, *(uint32_t*)buf4028);
+    rsSetElementAt_ushort2(*(rs_allocation*)buf4029, *(ushort2*)buf4030, *(uint32_t*)buf4031);
+    rsSetElementAt_ushort3(*(rs_allocation*)buf4032, *(ushort3*)buf4033, *(uint32_t*)buf4034);
+    rsSetElementAt_ushort4(*(rs_allocation*)buf4035, *(ushort4*)buf4036, *(uint32_t*)buf4037);
+    rsSetElementAt_int(*(rs_allocation*)buf4038, *(int*)buf4039, *(uint32_t*)buf4040);
+    rsSetElementAt_int2(*(rs_allocation*)buf4041, *(int2*)buf4042, *(uint32_t*)buf4043);
+    rsSetElementAt_int3(*(rs_allocation*)buf4044, *(int3*)buf4045, *(uint32_t*)buf4046);
+    rsSetElementAt_int4(*(rs_allocation*)buf4047, *(int4*)buf4048, *(uint32_t*)buf4049);
+    rsSetElementAt_uint(*(rs_allocation*)buf4050, *(uint*)buf4051, *(uint32_t*)buf4052);
+    rsSetElementAt_uint2(*(rs_allocation*)buf4053, *(uint2*)buf4054, *(uint32_t*)buf4055);
+    rsSetElementAt_uint3(*(rs_allocation*)buf4056, *(uint3*)buf4057, *(uint32_t*)buf4058);
+    rsSetElementAt_uint4(*(rs_allocation*)buf4059, *(uint4*)buf4060, *(uint32_t*)buf4061);
+    rsSetElementAt_long(*(rs_allocation*)buf4062, *(long*)buf4063, *(uint32_t*)buf4064);
+    rsSetElementAt_long2(*(rs_allocation*)buf4065, *(long2*)buf4066, *(uint32_t*)buf4067);
+    rsSetElementAt_long3(*(rs_allocation*)buf4068, *(long3*)buf4069, *(uint32_t*)buf4070);
+    rsSetElementAt_long4(*(rs_allocation*)buf4071, *(long4*)buf4072, *(uint32_t*)buf4073);
+    rsSetElementAt_ulong(*(rs_allocation*)buf4074, *(ulong*)buf4075, *(uint32_t*)buf4076);
+    rsSetElementAt_ulong2(*(rs_allocation*)buf4077, *(ulong2*)buf4078, *(uint32_t*)buf4079);
+    rsSetElementAt_ulong3(*(rs_allocation*)buf4080, *(ulong3*)buf4081, *(uint32_t*)buf4082);
+    rsSetElementAt_ulong4(*(rs_allocation*)buf4083, *(ulong4*)buf4084, *(uint32_t*)buf4085);
+    rsSetElementAt_float(*(rs_allocation*)buf4086, *(float*)buf4087, *(uint32_t*)buf4088, *(uint32_t*)buf4089);
+    rsSetElementAt_float2(*(rs_allocation*)buf4090, *(float2*)buf4091, *(uint32_t*)buf4092, *(uint32_t*)buf4093);
+    rsSetElementAt_float3(*(rs_allocation*)buf4094, *(float3*)buf4095, *(uint32_t*)buf4096, *(uint32_t*)buf4097);
+    rsSetElementAt_float4(*(rs_allocation*)buf4098, *(float4*)buf4099, *(uint32_t*)buf4100, *(uint32_t*)buf4101);
+    rsSetElementAt_double(*(rs_allocation*)buf4102, *(double*)buf4103, *(uint32_t*)buf4104, *(uint32_t*)buf4105);
+    rsSetElementAt_double2(*(rs_allocation*)buf4106, *(double2*)buf4107, *(uint32_t*)buf4108, *(uint32_t*)buf4109);
+    rsSetElementAt_double3(*(rs_allocation*)buf4110, *(double3*)buf4111, *(uint32_t*)buf4112, *(uint32_t*)buf4113);
+    rsSetElementAt_double4(*(rs_allocation*)buf4114, *(double4*)buf4115, *(uint32_t*)buf4116, *(uint32_t*)buf4117);
+    rsSetElementAt_char(*(rs_allocation*)buf4118, *(char*)buf4119, *(uint32_t*)buf4120, *(uint32_t*)buf4121);
+    rsSetElementAt_char2(*(rs_allocation*)buf4122, *(char2*)buf4123, *(uint32_t*)buf4124, *(uint32_t*)buf4125);
+    rsSetElementAt_char3(*(rs_allocation*)buf4126, *(char3*)buf4127, *(uint32_t*)buf4128, *(uint32_t*)buf4129);
+    rsSetElementAt_char4(*(rs_allocation*)buf4130, *(char4*)buf4131, *(uint32_t*)buf4132, *(uint32_t*)buf4133);
+    rsSetElementAt_uchar(*(rs_allocation*)buf4134, *(uchar*)buf4135, *(uint32_t*)buf4136, *(uint32_t*)buf4137);
+    rsSetElementAt_uchar2(*(rs_allocation*)buf4138, *(uchar2*)buf4139, *(uint32_t*)buf4140, *(uint32_t*)buf4141);
+    rsSetElementAt_uchar3(*(rs_allocation*)buf4142, *(uchar3*)buf4143, *(uint32_t*)buf4144, *(uint32_t*)buf4145);
+    rsSetElementAt_uchar4(*(rs_allocation*)buf4146, *(uchar4*)buf4147, *(uint32_t*)buf4148, *(uint32_t*)buf4149);
+    rsSetElementAt_short(*(rs_allocation*)buf4150, *(short*)buf4151, *(uint32_t*)buf4152, *(uint32_t*)buf4153);
+    rsSetElementAt_short2(*(rs_allocation*)buf4154, *(short2*)buf4155, *(uint32_t*)buf4156, *(uint32_t*)buf4157);
+    rsSetElementAt_short3(*(rs_allocation*)buf4158, *(short3*)buf4159, *(uint32_t*)buf4160, *(uint32_t*)buf4161);
+    rsSetElementAt_short4(*(rs_allocation*)buf4162, *(short4*)buf4163, *(uint32_t*)buf4164, *(uint32_t*)buf4165);
+    rsSetElementAt_ushort(*(rs_allocation*)buf4166, *(ushort*)buf4167, *(uint32_t*)buf4168, *(uint32_t*)buf4169);
+    rsSetElementAt_ushort2(*(rs_allocation*)buf4170, *(ushort2*)buf4171, *(uint32_t*)buf4172, *(uint32_t*)buf4173);
+    rsSetElementAt_ushort3(*(rs_allocation*)buf4174, *(ushort3*)buf4175, *(uint32_t*)buf4176, *(uint32_t*)buf4177);
+    rsSetElementAt_ushort4(*(rs_allocation*)buf4178, *(ushort4*)buf4179, *(uint32_t*)buf4180, *(uint32_t*)buf4181);
+    rsSetElementAt_int(*(rs_allocation*)buf4182, *(int*)buf4183, *(uint32_t*)buf4184, *(uint32_t*)buf4185);
+    rsSetElementAt_int2(*(rs_allocation*)buf4186, *(int2*)buf4187, *(uint32_t*)buf4188, *(uint32_t*)buf4189);
+    rsSetElementAt_int3(*(rs_allocation*)buf4190, *(int3*)buf4191, *(uint32_t*)buf4192, *(uint32_t*)buf4193);
+    rsSetElementAt_int4(*(rs_allocation*)buf4194, *(int4*)buf4195, *(uint32_t*)buf4196, *(uint32_t*)buf4197);
+    rsSetElementAt_uint(*(rs_allocation*)buf4198, *(uint*)buf4199, *(uint32_t*)buf4200, *(uint32_t*)buf4201);
+    rsSetElementAt_uint2(*(rs_allocation*)buf4202, *(uint2*)buf4203, *(uint32_t*)buf4204, *(uint32_t*)buf4205);
+    rsSetElementAt_uint3(*(rs_allocation*)buf4206, *(uint3*)buf4207, *(uint32_t*)buf4208, *(uint32_t*)buf4209);
+    rsSetElementAt_uint4(*(rs_allocation*)buf4210, *(uint4*)buf4211, *(uint32_t*)buf4212, *(uint32_t*)buf4213);
+    rsSetElementAt_long(*(rs_allocation*)buf4214, *(long*)buf4215, *(uint32_t*)buf4216, *(uint32_t*)buf4217);
+    rsSetElementAt_long2(*(rs_allocation*)buf4218, *(long2*)buf4219, *(uint32_t*)buf4220, *(uint32_t*)buf4221);
+    rsSetElementAt_long3(*(rs_allocation*)buf4222, *(long3*)buf4223, *(uint32_t*)buf4224, *(uint32_t*)buf4225);
+    rsSetElementAt_long4(*(rs_allocation*)buf4226, *(long4*)buf4227, *(uint32_t*)buf4228, *(uint32_t*)buf4229);
+    rsSetElementAt_ulong(*(rs_allocation*)buf4230, *(ulong*)buf4231, *(uint32_t*)buf4232, *(uint32_t*)buf4233);
+    rsSetElementAt_ulong2(*(rs_allocation*)buf4234, *(ulong2*)buf4235, *(uint32_t*)buf4236, *(uint32_t*)buf4237);
+    rsSetElementAt_ulong3(*(rs_allocation*)buf4238, *(ulong3*)buf4239, *(uint32_t*)buf4240, *(uint32_t*)buf4241);
+    rsSetElementAt_ulong4(*(rs_allocation*)buf4242, *(ulong4*)buf4243, *(uint32_t*)buf4244, *(uint32_t*)buf4245);
+    rsSetElementAt_float(*(rs_allocation*)buf4246, *(float*)buf4247, *(uint32_t*)buf4248, *(uint32_t*)buf4249, *(uint32_t*)buf4250);
+    rsSetElementAt_float2(*(rs_allocation*)buf4251, *(float2*)buf4252, *(uint32_t*)buf4253, *(uint32_t*)buf4254, *(uint32_t*)buf4255);
+    rsSetElementAt_float3(*(rs_allocation*)buf4256, *(float3*)buf4257, *(uint32_t*)buf4258, *(uint32_t*)buf4259, *(uint32_t*)buf4260);
+    rsSetElementAt_float4(*(rs_allocation*)buf4261, *(float4*)buf4262, *(uint32_t*)buf4263, *(uint32_t*)buf4264, *(uint32_t*)buf4265);
+    rsSetElementAt_double(*(rs_allocation*)buf4266, *(double*)buf4267, *(uint32_t*)buf4268, *(uint32_t*)buf4269, *(uint32_t*)buf4270);
+    rsSetElementAt_double2(*(rs_allocation*)buf4271, *(double2*)buf4272, *(uint32_t*)buf4273, *(uint32_t*)buf4274, *(uint32_t*)buf4275);
+    rsSetElementAt_double3(*(rs_allocation*)buf4276, *(double3*)buf4277, *(uint32_t*)buf4278, *(uint32_t*)buf4279, *(uint32_t*)buf4280);
+    rsSetElementAt_double4(*(rs_allocation*)buf4281, *(double4*)buf4282, *(uint32_t*)buf4283, *(uint32_t*)buf4284, *(uint32_t*)buf4285);
+    rsSetElementAt_char(*(rs_allocation*)buf4286, *(char*)buf4287, *(uint32_t*)buf4288, *(uint32_t*)buf4289, *(uint32_t*)buf4290);
+    rsSetElementAt_char2(*(rs_allocation*)buf4291, *(char2*)buf4292, *(uint32_t*)buf4293, *(uint32_t*)buf4294, *(uint32_t*)buf4295);
+    rsSetElementAt_char3(*(rs_allocation*)buf4296, *(char3*)buf4297, *(uint32_t*)buf4298, *(uint32_t*)buf4299, *(uint32_t*)buf4300);
+    rsSetElementAt_char4(*(rs_allocation*)buf4301, *(char4*)buf4302, *(uint32_t*)buf4303, *(uint32_t*)buf4304, *(uint32_t*)buf4305);
+    rsSetElementAt_uchar(*(rs_allocation*)buf4306, *(uchar*)buf4307, *(uint32_t*)buf4308, *(uint32_t*)buf4309, *(uint32_t*)buf4310);
+    rsSetElementAt_uchar2(*(rs_allocation*)buf4311, *(uchar2*)buf4312, *(uint32_t*)buf4313, *(uint32_t*)buf4314, *(uint32_t*)buf4315);
+    rsSetElementAt_uchar3(*(rs_allocation*)buf4316, *(uchar3*)buf4317, *(uint32_t*)buf4318, *(uint32_t*)buf4319, *(uint32_t*)buf4320);
+    rsSetElementAt_uchar4(*(rs_allocation*)buf4321, *(uchar4*)buf4322, *(uint32_t*)buf4323, *(uint32_t*)buf4324, *(uint32_t*)buf4325);
+    rsSetElementAt_short(*(rs_allocation*)buf4326, *(short*)buf4327, *(uint32_t*)buf4328, *(uint32_t*)buf4329, *(uint32_t*)buf4330);
+    rsSetElementAt_short2(*(rs_allocation*)buf4331, *(short2*)buf4332, *(uint32_t*)buf4333, *(uint32_t*)buf4334, *(uint32_t*)buf4335);
+    rsSetElementAt_short3(*(rs_allocation*)buf4336, *(short3*)buf4337, *(uint32_t*)buf4338, *(uint32_t*)buf4339, *(uint32_t*)buf4340);
+    rsSetElementAt_short4(*(rs_allocation*)buf4341, *(short4*)buf4342, *(uint32_t*)buf4343, *(uint32_t*)buf4344, *(uint32_t*)buf4345);
+    rsSetElementAt_ushort(*(rs_allocation*)buf4346, *(ushort*)buf4347, *(uint32_t*)buf4348, *(uint32_t*)buf4349, *(uint32_t*)buf4350);
+    rsSetElementAt_ushort2(*(rs_allocation*)buf4351, *(ushort2*)buf4352, *(uint32_t*)buf4353, *(uint32_t*)buf4354, *(uint32_t*)buf4355);
+    rsSetElementAt_ushort3(*(rs_allocation*)buf4356, *(ushort3*)buf4357, *(uint32_t*)buf4358, *(uint32_t*)buf4359, *(uint32_t*)buf4360);
+    rsSetElementAt_ushort4(*(rs_allocation*)buf4361, *(ushort4*)buf4362, *(uint32_t*)buf4363, *(uint32_t*)buf4364, *(uint32_t*)buf4365);
+    rsSetElementAt_int(*(rs_allocation*)buf4366, *(int*)buf4367, *(uint32_t*)buf4368, *(uint32_t*)buf4369, *(uint32_t*)buf4370);
+    rsSetElementAt_int2(*(rs_allocation*)buf4371, *(int2*)buf4372, *(uint32_t*)buf4373, *(uint32_t*)buf4374, *(uint32_t*)buf4375);
+    rsSetElementAt_int3(*(rs_allocation*)buf4376, *(int3*)buf4377, *(uint32_t*)buf4378, *(uint32_t*)buf4379, *(uint32_t*)buf4380);
+    rsSetElementAt_int4(*(rs_allocation*)buf4381, *(int4*)buf4382, *(uint32_t*)buf4383, *(uint32_t*)buf4384, *(uint32_t*)buf4385);
+    rsSetElementAt_uint(*(rs_allocation*)buf4386, *(uint*)buf4387, *(uint32_t*)buf4388, *(uint32_t*)buf4389, *(uint32_t*)buf4390);
+    rsSetElementAt_uint2(*(rs_allocation*)buf4391, *(uint2*)buf4392, *(uint32_t*)buf4393, *(uint32_t*)buf4394, *(uint32_t*)buf4395);
+    rsSetElementAt_uint3(*(rs_allocation*)buf4396, *(uint3*)buf4397, *(uint32_t*)buf4398, *(uint32_t*)buf4399, *(uint32_t*)buf4400);
+    rsSetElementAt_uint4(*(rs_allocation*)buf4401, *(uint4*)buf4402, *(uint32_t*)buf4403, *(uint32_t*)buf4404, *(uint32_t*)buf4405);
+    rsSetElementAt_long(*(rs_allocation*)buf4406, *(long*)buf4407, *(uint32_t*)buf4408, *(uint32_t*)buf4409, *(uint32_t*)buf4410);
+    rsSetElementAt_long2(*(rs_allocation*)buf4411, *(long2*)buf4412, *(uint32_t*)buf4413, *(uint32_t*)buf4414, *(uint32_t*)buf4415);
+    rsSetElementAt_long3(*(rs_allocation*)buf4416, *(long3*)buf4417, *(uint32_t*)buf4418, *(uint32_t*)buf4419, *(uint32_t*)buf4420);
+    rsSetElementAt_long4(*(rs_allocation*)buf4421, *(long4*)buf4422, *(uint32_t*)buf4423, *(uint32_t*)buf4424, *(uint32_t*)buf4425);
+    rsSetElementAt_ulong(*(rs_allocation*)buf4426, *(ulong*)buf4427, *(uint32_t*)buf4428, *(uint32_t*)buf4429, *(uint32_t*)buf4430);
+    rsSetElementAt_ulong2(*(rs_allocation*)buf4431, *(ulong2*)buf4432, *(uint32_t*)buf4433, *(uint32_t*)buf4434, *(uint32_t*)buf4435);
+    rsSetElementAt_ulong3(*(rs_allocation*)buf4436, *(ulong3*)buf4437, *(uint32_t*)buf4438, *(uint32_t*)buf4439, *(uint32_t*)buf4440);
+    rsSetElementAt_ulong4(*(rs_allocation*)buf4441, *(ulong4*)buf4442, *(uint32_t*)buf4443, *(uint32_t*)buf4444, *(uint32_t*)buf4445);
+    rsSetObject((rs_element*) buf4446, *(rs_element*)buf4447);
+    rsSetObject((rs_type*) buf4448, *(rs_type*)buf4449);
+    rsSetObject((rs_allocation*) buf4450, *(rs_allocation*)buf4451);
+    rsSetObject((rs_sampler*) buf4452, *(rs_sampler*)buf4453);
+    rsSetObject((rs_script*) buf4454, *(rs_script*)buf4455);
+#ifndef __LP64__
+    rsSetObject((rs_mesh*) buf4456, *(rs_mesh*)buf4457);
+    rsSetObject((rs_program_fragment*) buf4458, *(rs_program_fragment*)buf4459);
+    rsSetObject((rs_program_vertex*) buf4460, *(rs_program_vertex*)buf4461);
+    rsSetObject((rs_program_raster*) buf4462, *(rs_program_raster*)buf4463);
+    rsSetObject((rs_program_store*) buf4464, *(rs_program_store*)buf4465);
+    rsSetObject((rs_font*) buf4466, *(rs_font*)buf4467);
+#endif
+    *(rs_time_t*)buf4468 = rsTime((rs_time_t*) buf4469);
+    *(float4*)buf4470 = rsUnpackColor8888(*(uchar4*)buf4471);
+    *(int64_t*)buf4472 = rsUptimeMillis();
+    *(int64_t*)buf4473 = rsUptimeNanos();
+    *(float4*)buf4474 = rsYuvToRGBA_float4(*(uchar*)buf4475, *(uchar*)buf4476, *(uchar*)buf4477);
+    *(uchar4*)buf4478 = rsYuvToRGBA_uchar4(*(uchar*)buf4479, *(uchar*)buf4480, *(uchar*)buf4481);
+#ifndef __LP64__
+    rsgAllocationSyncAll(*(rs_allocation*)buf4482);
+#endif
+#ifndef __LP64__
+    rsgAllocationSyncAll(*(rs_allocation*)buf4483, *(rs_allocation_usage_type*)buf4484);
+#endif
+#ifndef __LP64__
+    rsgBindColorTarget(*(rs_allocation*)buf4485, *(uint*)buf4486);
+#endif
+#ifndef __LP64__
+    rsgBindConstant(*(rs_program_fragment*)buf4487, *(uint*)buf4488, *(rs_allocation*)buf4489);
+#endif
+#ifndef __LP64__
+    rsgBindConstant(*(rs_program_vertex*)buf4490, *(uint*)buf4491, *(rs_allocation*)buf4492);
+#endif
+#ifndef __LP64__
+    rsgBindDepthTarget(*(rs_allocation*)buf4493);
+#endif
+#ifndef __LP64__
+    rsgBindFont(*(rs_font*)buf4494);
+#endif
+#ifndef __LP64__
+    rsgBindProgramFragment(*(rs_program_fragment*)buf4495);
+#endif
+#ifndef __LP64__
+    rsgBindProgramRaster(*(rs_program_raster*)buf4496);
+#endif
+#ifndef __LP64__
+    rsgBindProgramStore(*(rs_program_store*)buf4497);
+#endif
+#ifndef __LP64__
+    rsgBindProgramVertex(*(rs_program_vertex*)buf4498);
+#endif
+#ifndef __LP64__
+    rsgBindSampler(*(rs_program_fragment*)buf4499, *(uint*)buf4500, *(rs_sampler*)buf4501);
+#endif
+#ifndef __LP64__
+    rsgBindTexture(*(rs_program_fragment*)buf4502, *(uint*)buf4503, *(rs_allocation*)buf4504);
+#endif
+#ifndef __LP64__
+    rsgClearAllRenderTargets();
+#endif
+#ifndef __LP64__
+    rsgClearColor(*(float*)buf4505, *(float*)buf4506, *(float*)buf4507, *(float*)buf4508);
+#endif
+#ifndef __LP64__
+    rsgClearColorTarget(*(uint*)buf4509);
+#endif
+#ifndef __LP64__
+    rsgClearDepth(*(float*)buf4510);
+#endif
+#ifndef __LP64__
+    rsgClearDepthTarget();
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf4511);
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf4512, *(uint*)buf4513);
+#endif
+#ifndef __LP64__
+    rsgDrawMesh(*(rs_mesh*)buf4514, *(uint*)buf4515, *(uint*)buf4516, *(uint*)buf4517);
+#endif
+#ifndef __LP64__
+    rsgDrawQuad(*(float*)buf4518, *(float*)buf4519, *(float*)buf4520, *(float*)buf4521, *(float*)buf4522, *(float*)buf4523, *(float*)buf4524, *(float*)buf4525, *(float*)buf4526, *(float*)buf4527, *(float*)buf4528, *(float*)buf4529);
+#endif
+#ifndef __LP64__
+    rsgDrawQuadTexCoords(*(float*)buf4530, *(float*)buf4531, *(float*)buf4532, *(float*)buf4533, *(float*)buf4534, *(float*)buf4535, *(float*)buf4536, *(float*)buf4537, *(float*)buf4538, *(float*)buf4539, *(float*)buf4540, *(float*)buf4541, *(float*)buf4542, *(float*)buf4543, *(float*)buf4544, *(float*)buf4545, *(float*)buf4546, *(float*)buf4547, *(float*)buf4548, *(float*)buf4549);
+#endif
+#ifndef __LP64__
+    rsgDrawRect(*(float*)buf4550, *(float*)buf4551, *(float*)buf4552, *(float*)buf4553, *(float*)buf4554);
+#endif
+#ifndef __LP64__
+    rsgDrawSpriteScreenspace(*(float*)buf4555, *(float*)buf4556, *(float*)buf4557, *(float*)buf4558, *(float*)buf4559);
+#endif
+#ifndef __LP64__
+    rsgDrawText((const char*) buf4560, *(int*)buf4561, *(int*)buf4562);
+#endif
+#ifndef __LP64__
+    rsgDrawText(*(rs_allocation*)buf4563, *(int*)buf4564, *(int*)buf4565);
+#endif
+#ifndef __LP64__
+    *(uint*)buf4566 = rsgFinish();
+#endif
+#ifndef __LP64__
+    rsgFontColor(*(float*)buf4567, *(float*)buf4568, *(float*)buf4569, *(float*)buf4570);
+#endif
+#ifndef __LP64__
+    *(uint*)buf4571 = rsgGetHeight();
+#endif
+#ifndef __LP64__
+    *(uint*)buf4572 = rsgGetWidth();
+#endif
+#ifndef __LP64__
+    rsgMeasureText((const char*) buf4573, (int*) buf4574, (int*) buf4575, (int*) buf4576, (int*) buf4577);
+#endif
+#ifndef __LP64__
+    rsgMeasureText(*(rs_allocation*)buf4578, (int*) buf4579, (int*) buf4580, (int*) buf4581, (int*) buf4582);
+#endif
+#ifndef __LP64__
+    rsgMeshComputeBoundingBox(*(rs_mesh*)buf4583, (float*) buf4584, (float*) buf4585, (float*) buf4586, (float*) buf4587, (float*) buf4588, (float*) buf4589);
+#endif
+#ifndef __LP64__
+    rsgMeshComputeBoundingBox(*(rs_mesh*)buf4590, (float3*) buf4591, (float3*) buf4592);
+#endif
+#ifndef __LP64__
+    *(rs_allocation*)buf4593 = rsgMeshGetIndexAllocation(*(rs_mesh*)buf4594, *(uint32_t*)buf4595);
+#endif
+#ifndef __LP64__
+    *(rs_primitive*)buf4596 = rsgMeshGetPrimitive(*(rs_mesh*)buf4597, *(uint32_t*)buf4598);
+#endif
+#ifndef __LP64__
+    *(uint32_t*)buf4599 = rsgMeshGetPrimitiveCount(*(rs_mesh*)buf4600);
+#endif
+#ifndef __LP64__
+    *(rs_allocation*)buf4601 = rsgMeshGetVertexAllocation(*(rs_mesh*)buf4602, *(uint32_t*)buf4603);
+#endif
+#ifndef __LP64__
+    *(uint32_t*)buf4604 = rsgMeshGetVertexAllocationCount(*(rs_mesh*)buf4605);
+#endif
+#ifndef __LP64__
+    rsgProgramFragmentConstantColor(*(rs_program_fragment*)buf4606, *(float*)buf4607, *(float*)buf4608, *(float*)buf4609, *(float*)buf4610);
+#endif
+#ifndef __LP64__
+    *(rs_cull_mode*)buf4611 = rsgProgramRasterGetCullMode(*(rs_program_raster*)buf4612);
+#endif
+#ifndef __LP64__
+    *(bool*)buf4613 = rsgProgramRasterIsPointSpriteEnabled(*(rs_program_raster*)buf4614);
+#endif
+#ifndef __LP64__
+    *(rs_blend_dst_func*)buf4615 = rsgProgramStoreGetBlendDstFunc(*(rs_program_store*)buf4616);
+#endif
+#ifndef __LP64__
+    *(rs_blend_src_func*)buf4617 = rsgProgramStoreGetBlendSrcFunc(*(rs_program_store*)buf4618);
+#endif
+#ifndef __LP64__
+    *(rs_depth_func*)buf4619 = rsgProgramStoreGetDepthFunc(*(rs_program_store*)buf4620);
+#endif
+#ifndef __LP64__
+    *(bool*)buf4621 = rsgProgramStoreIsColorMaskAlphaEnabled(*(rs_program_store*)buf4622);
+#endif
+#ifndef __LP64__
+    *(bool*)buf4623 = rsgProgramStoreIsColorMaskBlueEnabled(*(rs_program_store*)buf4624);
+#endif
+#ifndef __LP64__
+    *(bool*)buf4625 = rsgProgramStoreIsColorMaskGreenEnabled(*(rs_program_store*)buf4626);
+#endif
+#ifndef __LP64__
+    *(bool*)buf4627 = rsgProgramStoreIsColorMaskRedEnabled(*(rs_program_store*)buf4628);
+#endif
+#ifndef __LP64__
+    *(bool*)buf4629 = rsgProgramStoreIsDepthMaskEnabled(*(rs_program_store*)buf4630);
+#endif
+#ifndef __LP64__
+    *(bool*)buf4631 = rsgProgramStoreIsDitherEnabled(*(rs_program_store*)buf4632);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexGetProjectionMatrix((rs_matrix4x4*) buf4633);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadModelMatrix((const rs_matrix4x4*) buf4634);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadProjectionMatrix((const rs_matrix4x4*) buf4635);
+#endif
+#ifndef __LP64__
+    rsgProgramVertexLoadTextureMatrix((const rs_matrix4x4*) buf4636);
+#endif
+    *(float*)buf4637 = rsqrt(*(float*)buf4638);
+    *(float2*)buf4639 = rsqrt(*(float2*)buf4640);
+    *(float3*)buf4641 = rsqrt(*(float3*)buf4642);
+    *(float4*)buf4643 = rsqrt(*(float4*)buf4644);
+    *(float*)buf4645 = sign(*(float*)buf4646);
+    *(float2*)buf4647 = sign(*(float2*)buf4648);
+    *(float3*)buf4649 = sign(*(float3*)buf4650);
+    *(float4*)buf4651 = sign(*(float4*)buf4652);
+    *(float*)buf4653 = sin(*(float*)buf4654);
+    *(float2*)buf4655 = sin(*(float2*)buf4656);
+    *(float3*)buf4657 = sin(*(float3*)buf4658);
+    *(float4*)buf4659 = sin(*(float4*)buf4660);
+    *(float*)buf4661 = sincos(*(float*)buf4662, (float*) buf4663);
+    *(float2*)buf4664 = sincos(*(float2*)buf4665, (float2*) buf4666);
+    *(float3*)buf4667 = sincos(*(float3*)buf4668, (float3*) buf4669);
+    *(float4*)buf4670 = sincos(*(float4*)buf4671, (float4*) buf4672);
+    *(float*)buf4673 = sinh(*(float*)buf4674);
+    *(float2*)buf4675 = sinh(*(float2*)buf4676);
+    *(float3*)buf4677 = sinh(*(float3*)buf4678);
+    *(float4*)buf4679 = sinh(*(float4*)buf4680);
+    *(float*)buf4681 = sinpi(*(float*)buf4682);
+    *(float2*)buf4683 = sinpi(*(float2*)buf4684);
+    *(float3*)buf4685 = sinpi(*(float3*)buf4686);
+    *(float4*)buf4687 = sinpi(*(float4*)buf4688);
+    *(float*)buf4689 = sqrt(*(float*)buf4690);
+    *(float2*)buf4691 = sqrt(*(float2*)buf4692);
+    *(float3*)buf4693 = sqrt(*(float3*)buf4694);
+    *(float4*)buf4695 = sqrt(*(float4*)buf4696);
+    *(float*)buf4697 = step(*(float*)buf4698, *(float*)buf4699);
+    *(float2*)buf4700 = step(*(float2*)buf4701, *(float2*)buf4702);
+    *(float3*)buf4703 = step(*(float3*)buf4704, *(float3*)buf4705);
+    *(float4*)buf4706 = step(*(float4*)buf4707, *(float4*)buf4708);
+    *(float2*)buf4709 = step(*(float2*)buf4710, *(float*)buf4711);
+    *(float3*)buf4712 = step(*(float3*)buf4713, *(float*)buf4714);
+    *(float4*)buf4715 = step(*(float4*)buf4716, *(float*)buf4717);
+    *(float2*)buf4718 = step(*(float*)buf4719, *(float2*)buf4720);
+    *(float3*)buf4721 = step(*(float*)buf4722, *(float3*)buf4723);
+    *(float4*)buf4724 = step(*(float*)buf4725, *(float4*)buf4726);
+    *(float*)buf4727 = tan(*(float*)buf4728);
+    *(float2*)buf4729 = tan(*(float2*)buf4730);
+    *(float3*)buf4731 = tan(*(float3*)buf4732);
+    *(float4*)buf4733 = tan(*(float4*)buf4734);
+    *(float*)buf4735 = tanh(*(float*)buf4736);
+    *(float2*)buf4737 = tanh(*(float2*)buf4738);
+    *(float3*)buf4739 = tanh(*(float3*)buf4740);
+    *(float4*)buf4741 = tanh(*(float4*)buf4742);
+    *(float*)buf4743 = tanpi(*(float*)buf4744);
+    *(float2*)buf4745 = tanpi(*(float2*)buf4746);
+    *(float3*)buf4747 = tanpi(*(float3*)buf4748);
+    *(float4*)buf4749 = tanpi(*(float4*)buf4750);
+    *(float*)buf4751 = tgamma(*(float*)buf4752);
+    *(float2*)buf4753 = tgamma(*(float2*)buf4754);
+    *(float3*)buf4755 = tgamma(*(float3*)buf4756);
+    *(float4*)buf4757 = tgamma(*(float4*)buf4758);
+    *(float*)buf4759 = trunc(*(float*)buf4760);
+    *(float2*)buf4761 = trunc(*(float2*)buf4762);
+    *(float3*)buf4763 = trunc(*(float3*)buf4764);
+    *(float4*)buf4765 = trunc(*(float4*)buf4766);
+}
diff --git a/slang/tests/P_all_api_22/stderr.txt.expect b/slang/tests/P_all_api_22/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_all_api_22/stderr.txt.expect
diff --git a/slang/tests/P_all_api_22/stdout.txt.expect b/slang/tests/P_all_api_22/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_all_api_22/stdout.txt.expect
diff --git a/slang/tests/P_all_api_23/all23.rs b/slang/tests/P_all_api_23/all23.rs
new file mode 100644
index 0000000..cabfa44
--- /dev/null
+++ b/slang/tests/P_all_api_23/all23.rs
@@ -0,0 +1,6368 @@
+// -target-api 23 -Wno-deprecated-declarations
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Don't edit this file!  It is auto-generated by frameworks/rs/api/generate.sh.
+
+#pragma version(1)
+#pragma rs java_package_name(com.example.renderscript.testallapi)
+
+char buf0[200];
+char buf1[200];
+char buf2[200];
+char buf3[200];
+char buf4[200];
+char buf5[200];
+char buf6[200];
+char buf7[200];
+char buf8[200];
+char buf9[200];
+char buf10[200];
+char buf11[200];
+char buf12[200];
+char buf13[200];
+char buf14[200];
+char buf15[200];
+char buf16[200];
+char buf17[200];
+char buf18[200];
+char buf19[200];
+char buf20[200];
+char buf21[200];
+char buf22[200];
+char buf23[200];
+char buf24[200];
+char buf25[200];
+char buf26[200];
+char buf27[200];
+char buf28[200];
+char buf29[200];
+char buf30[200];
+char buf31[200];
+char buf32[200];
+char buf33[200];
+char buf34[200];
+char buf35[200];
+char buf36[200];
+char buf37[200];
+char buf38[200];
+char buf39[200];
+char buf40[200];
+char buf41[200];
+char buf42[200];
+char buf43[200];
+char buf44[200];
+char buf45[200];
+char buf46[200];
+char buf47[200];
+char buf48[200];
+char buf49[200];
+char buf50[200];
+char buf51[200];
+char buf52[200];
+char buf53[200];
+char buf54[200];
+char buf55[200];
+char buf56[200];
+char buf57[200];
+char buf58[200];
+char buf59[200];
+char buf60[200];
+char buf61[200];
+char buf62[200];
+char buf63[200];
+char buf64[200];
+char buf65[200];
+char buf66[200];
+char buf67[200];
+char buf68[200];
+char buf69[200];
+char buf70[200];
+char buf71[200];
+char buf72[200];
+char buf73[200];
+char buf74[200];
+char buf75[200];
+char buf76[200];
+char buf77[200];
+char buf78[200];
+char buf79[200];
+char buf80[200];
+char buf81[200];
+char buf82[200];
+char buf83[200];
+char buf84[200];
+char buf85[200];
+char buf86[200];
+char buf87[200];
+char buf88[200];
+char buf89[200];
+char buf90[200];
+char buf91[200];
+char buf92[200];
+char buf93[200];
+char buf94[200];
+char buf95[200];
+char buf96[200];
+char buf97[200];
+char buf98[200];
+char buf99[200];
+char buf100[200];
+char buf101[200];
+char buf102[200];
+char buf103[200];
+char buf104[200];
+char buf105[200];
+char buf106[200];
+char buf107[200];
+char buf108[200];
+char buf109[200];
+char buf110[200];
+char buf111[200];
+char buf112[200];
+char buf113[200];
+char buf114[200];
+char buf115[200];
+char buf116[200];
+char buf117[200];
+char buf118[200];
+char buf119[200];
+char buf120[200];
+char buf121[200];
+char buf122[200];
+char buf123[200];
+char buf124[200];
+char buf125[200];
+char buf126[200];
+char buf127[200];
+char buf128[200];
+char buf129[200];
+char buf130[200];
+char buf131[200];
+char buf132[200];
+char buf133[200];
+char buf134[200];
+char buf135[200];
+char buf136[200];
+char buf137[200];
+char buf138[200];
+char buf139[200];
+char buf140[200];
+char buf141[200];
+char buf142[200];
+char buf143[200];
+char buf144[200];
+char buf145[200];
+char buf146[200];
+char buf147[200];
+char buf148[200];
+char buf149[200];
+char buf150[200];
+char buf151[200];
+char buf152[200];
+char buf153[200];
+char buf154[200];
+char buf155[200];
+char buf156[200];
+char buf157[200];
+char buf158[200];
+char buf159[200];
+char buf160[200];
+char buf161[200];
+char buf162[200];
+char buf163[200];
+char buf164[200];
+char buf165[200];
+char buf166[200];
+char buf167[200];
+char buf168[200];
+char buf169[200];
+char buf170[200];
+char buf171[200];
+char buf172[200];
+char buf173[200];
+char buf174[200];
+char buf175[200];
+char buf176[200];
+char buf177[200];
+char buf178[200];
+char buf179[200];
+char buf180[200];
+char buf181[200];
+char buf182[200];
+char buf183[200];
+char buf184[200];
+char buf185[200];
+char buf186[200];
+char buf187[200];
+char buf188[200];
+char buf189[200];
+char buf190[200];
+char buf191[200];
+char buf192[200];
+char buf193[200];
+char buf194[200];
+char buf195[200];
+char buf196[200];
+char buf197[200];
+char buf198[200];
+char buf199[200];
+char buf200[200];
+char buf201[200];
+char buf202[200];
+char buf203[200];
+char buf204[200];
+char buf205[200];
+char buf206[200];
+char buf207[200];
+char buf208[200];
+char buf209[200];
+char buf210[200];
+char buf211[200];
+char buf212[200];
+char buf213[200];
+char buf214[200];
+char buf215[200];
+char buf216[200];
+char buf217[200];
+char buf218[200];
+char buf219[200];
+char buf220[200];
+char buf221[200];
+char buf222[200];
+char buf223[200];
+char buf224[200];
+char buf225[200];
+char buf226[200];
+char buf227[200];
+char buf228[200];
+char buf229[200];
+char buf230[200];
+char buf231[200];
+char buf232[200];
+char buf233[200];
+char buf234[200];
+char buf235[200];
+char buf236[200];
+char buf237[200];
+char buf238[200];
+char buf239[200];
+char buf240[200];
+char buf241[200];
+char buf242[200];
+char buf243[200];
+char buf244[200];
+char buf245[200];
+char buf246[200];
+char buf247[200];
+char buf248[200];
+char buf249[200];
+char buf250[200];
+char buf251[200];
+char buf252[200];
+char buf253[200];
+char buf254[200];
+char buf255[200];
+char buf256[200];
+char buf257[200];
+char buf258[200];
+char buf259[200];
+char buf260[200];
+char buf261[200];
+char buf262[200];
+char buf263[200];
+char buf264[200];
+char buf265[200];
+char buf266[200];
+char buf267[200];
+char buf268[200];
+char buf269[200];
+char buf270[200];
+char buf271[200];
+char buf272[200];
+char buf273[200];
+char buf274[200];
+char buf275[200];
+char buf276[200];
+char buf277[200];
+char buf278[200];
+char buf279[200];
+char buf280[200];
+char buf281[200];
+char buf282[200];
+char buf283[200];
+char buf284[200];
+char buf285[200];
+char buf286[200];
+char buf287[200];
+char buf288[200];
+char buf289[200];
+char buf290[200];
+char buf291[200];
+char buf292[200];
+char buf293[200];
+char buf294[200];
+char buf295[200];
+char buf296[200];
+char buf297[200];
+char buf298[200];
+char buf299[200];
+char buf300[200];
+char buf301[200];
+char buf302[200];
+char buf303[200];
+char buf304[200];
+char buf305[200];
+char buf306[200];
+char buf307[200];
+char buf308[200];
+char buf309[200];
+char buf310[200];
+char buf311[200];
+char buf312[200];
+char buf313[200];
+char buf314[200];
+char buf315[200];
+char buf316[200];
+char buf317[200];
+char buf318[200];
+char buf319[200];
+char buf320[200];
+char buf321[200];
+char buf322[200];
+char buf323[200];
+char buf324[200];
+char buf325[200];
+char buf326[200];
+char buf327[200];
+char buf328[200];
+char buf329[200];
+char buf330[200];
+char buf331[200];
+char buf332[200];
+char buf333[200];
+char buf334[200];
+char buf335[200];
+char buf336[200];
+char buf337[200];
+char buf338[200];
+char buf339[200];
+char buf340[200];
+char buf341[200];
+char buf342[200];
+char buf343[200];
+char buf344[200];
+char buf345[200];
+char buf346[200];
+char buf347[200];
+char buf348[200];
+char buf349[200];
+char buf350[200];
+char buf351[200];
+char buf352[200];
+char buf353[200];
+char buf354[200];
+char buf355[200];
+char buf356[200];
+char buf357[200];
+char buf358[200];
+char buf359[200];
+char buf360[200];
+char buf361[200];
+char buf362[200];
+char buf363[200];
+char buf364[200];
+char buf365[200];
+char buf366[200];
+char buf367[200];
+char buf368[200];
+char buf369[200];
+char buf370[200];
+char buf371[200];
+char buf372[200];
+char buf373[200];
+char buf374[200];
+char buf375[200];
+char buf376[200];
+char buf377[200];
+char buf378[200];
+char buf379[200];
+char buf380[200];
+char buf381[200];
+char buf382[200];
+char buf383[200];
+char buf384[200];
+char buf385[200];
+char buf386[200];
+char buf387[200];
+char buf388[200];
+char buf389[200];
+char buf390[200];
+char buf391[200];
+char buf392[200];
+char buf393[200];
+char buf394[200];
+char buf395[200];
+char buf396[200];
+char buf397[200];
+char buf398[200];
+char buf399[200];
+char buf400[200];
+char buf401[200];
+char buf402[200];
+char buf403[200];
+char buf404[200];
+char buf405[200];
+char buf406[200];
+char buf407[200];
+char buf408[200];
+char buf409[200];
+char buf410[200];
+char buf411[200];
+char buf412[200];
+char buf413[200];
+char buf414[200];
+char buf415[200];
+char buf416[200];
+char buf417[200];
+char buf418[200];
+char buf419[200];
+char buf420[200];
+char buf421[200];
+char buf422[200];
+char buf423[200];
+char buf424[200];
+char buf425[200];
+char buf426[200];
+char buf427[200];
+char buf428[200];
+char buf429[200];
+char buf430[200];
+char buf431[200];
+char buf432[200];
+char buf433[200];
+char buf434[200];
+char buf435[200];
+char buf436[200];
+char buf437[200];
+char buf438[200];
+char buf439[200];
+char buf440[200];
+char buf441[200];
+char buf442[200];
+char buf443[200];
+char buf444[200];
+char buf445[200];
+char buf446[200];
+char buf447[200];
+char buf448[200];
+char buf449[200];
+char buf450[200];
+char buf451[200];
+char buf452[200];
+char buf453[200];
+char buf454[200];
+char buf455[200];
+char buf456[200];
+char buf457[200];
+char buf458[200];
+char buf459[200];
+char buf460[200];
+char buf461[200];
+char buf462[200];
+char buf463[200];
+char buf464[200];
+char buf465[200];
+char buf466[200];
+char buf467[200];
+char buf468[200];
+char buf469[200];
+char buf470[200];
+char buf471[200];
+char buf472[200];
+char buf473[200];
+char buf474[200];
+char buf475[200];
+char buf476[200];
+char buf477[200];
+char buf478[200];
+char buf479[200];
+char buf480[200];
+char buf481[200];
+char buf482[200];
+char buf483[200];
+char buf484[200];
+char buf485[200];
+char buf486[200];
+char buf487[200];
+char buf488[200];
+char buf489[200];
+char buf490[200];
+char buf491[200];
+char buf492[200];
+char buf493[200];
+char buf494[200];
+char buf495[200];
+char buf496[200];
+char buf497[200];
+char buf498[200];
+char buf499[200];
+char buf500[200];
+char buf501[200];
+char buf502[200];
+char buf503[200];
+char buf504[200];
+char buf505[200];
+char buf506[200];
+char buf507[200];
+char buf508[200];
+char buf509[200];
+char buf510[200];
+char buf511[200];
+char buf512[200];
+char buf513[200];
+char buf514[200];
+char buf515[200];
+char buf516[200];
+char buf517[200];
+char buf518[200];
+char buf519[200];
+char buf520[200];
+char buf521[200];
+char buf522[200];
+char buf523[200];
+char buf524[200];
+char buf525[200];
+char buf526[200];
+char buf527[200];
+char buf528[200];
+char buf529[200];
+char buf530[200];
+char buf531[200];
+char buf532[200];
+char buf533[200];
+char buf534[200];
+char buf535[200];
+char buf536[200];
+char buf537[200];
+char buf538[200];
+char buf539[200];
+char buf540[200];
+char buf541[200];
+char buf542[200];
+char buf543[200];
+char buf544[200];
+char buf545[200];
+char buf546[200];
+char buf547[200];
+char buf548[200];
+char buf549[200];
+char buf550[200];
+char buf551[200];
+char buf552[200];
+char buf553[200];
+char buf554[200];
+char buf555[200];
+char buf556[200];
+char buf557[200];
+char buf558[200];
+char buf559[200];
+char buf560[200];
+char buf561[200];
+char buf562[200];
+char buf563[200];
+char buf564[200];
+char buf565[200];
+char buf566[200];
+char buf567[200];
+char buf568[200];
+char buf569[200];
+char buf570[200];
+char buf571[200];
+char buf572[200];
+char buf573[200];
+char buf574[200];
+char buf575[200];
+char buf576[200];
+char buf577[200];
+char buf578[200];
+char buf579[200];
+char buf580[200];
+char buf581[200];
+char buf582[200];
+char buf583[200];
+char buf584[200];
+char buf585[200];
+char buf586[200];
+char buf587[200];
+char buf588[200];
+char buf589[200];
+char buf590[200];
+char buf591[200];
+char buf592[200];
+char buf593[200];
+char buf594[200];
+char buf595[200];
+char buf596[200];
+char buf597[200];
+char buf598[200];
+char buf599[200];
+char buf600[200];
+char buf601[200];
+char buf602[200];
+char buf603[200];
+char buf604[200];
+char buf605[200];
+char buf606[200];
+char buf607[200];
+char buf608[200];
+char buf609[200];
+char buf610[200];
+char buf611[200];
+char buf612[200];
+char buf613[200];
+char buf614[200];
+char buf615[200];
+char buf616[200];
+char buf617[200];
+char buf618[200];
+char buf619[200];
+char buf620[200];
+char buf621[200];
+char buf622[200];
+char buf623[200];
+char buf624[200];
+char buf625[200];
+char buf626[200];
+char buf627[200];
+char buf628[200];
+char buf629[200];
+char buf630[200];
+char buf631[200];
+char buf632[200];
+char buf633[200];
+char buf634[200];
+char buf635[200];
+char buf636[200];
+char buf637[200];
+char buf638[200];
+char buf639[200];
+char buf640[200];
+char buf641[200];
+char buf642[200];
+char buf643[200];
+char buf644[200];
+char buf645[200];
+char buf646[200];
+char buf647[200];
+char buf648[200];
+char buf649[200];
+char buf650[200];
+char buf651[200];
+char buf652[200];
+char buf653[200];
+char buf654[200];
+char buf655[200];
+char buf656[200];
+char buf657[200];
+char buf658[200];
+char buf659[200];
+char buf660[200];
+char buf661[200];
+char buf662[200];
+char buf663[200];
+char buf664[200];
+char buf665[200];
+char buf666[200];
+char buf667[200];
+char buf668[200];
+char buf669[200];
+char buf670[200];
+char buf671[200];
+char buf672[200];
+char buf673[200];
+char buf674[200];
+char buf675[200];
+char buf676[200];
+char buf677[200];
+char buf678[200];
+char buf679[200];
+char buf680[200];
+char buf681[200];
+char buf682[200];
+char buf683[200];
+char buf684[200];
+char buf685[200];
+char buf686[200];
+char buf687[200];
+char buf688[200];
+char buf689[200];
+char buf690[200];
+char buf691[200];
+char buf692[200];
+char buf693[200];
+char buf694[200];
+char buf695[200];
+char buf696[200];
+char buf697[200];
+char buf698[200];
+char buf699[200];
+char buf700[200];
+char buf701[200];
+char buf702[200];
+char buf703[200];
+char buf704[200];
+char buf705[200];
+char buf706[200];
+char buf707[200];
+char buf708[200];
+char buf709[200];
+char buf710[200];
+char buf711[200];
+char buf712[200];
+char buf713[200];
+char buf714[200];
+char buf715[200];
+char buf716[200];
+char buf717[200];
+char buf718[200];
+char buf719[200];
+char buf720[200];
+char buf721[200];
+char buf722[200];
+char buf723[200];
+char buf724[200];
+char buf725[200];
+char buf726[200];
+char buf727[200];
+char buf728[200];
+char buf729[200];
+char buf730[200];
+char buf731[200];
+char buf732[200];
+char buf733[200];
+char buf734[200];
+char buf735[200];
+char buf736[200];
+char buf737[200];
+char buf738[200];
+char buf739[200];
+char buf740[200];
+char buf741[200];
+char buf742[200];
+char buf743[200];
+char buf744[200];
+char buf745[200];
+char buf746[200];
+char buf747[200];
+char buf748[200];
+char buf749[200];
+char buf750[200];
+char buf751[200];
+char buf752[200];
+char buf753[200];
+char buf754[200];
+char buf755[200];
+char buf756[200];
+char buf757[200];
+char buf758[200];
+char buf759[200];
+char buf760[200];
+char buf761[200];
+char buf762[200];
+char buf763[200];
+char buf764[200];
+char buf765[200];
+char buf766[200];
+char buf767[200];
+char buf768[200];
+char buf769[200];
+char buf770[200];
+char buf771[200];
+char buf772[200];
+char buf773[200];
+char buf774[200];
+char buf775[200];
+char buf776[200];
+char buf777[200];
+char buf778[200];
+char buf779[200];
+char buf780[200];
+char buf781[200];
+char buf782[200];
+char buf783[200];
+char buf784[200];
+char buf785[200];
+char buf786[200];
+char buf787[200];
+char buf788[200];
+char buf789[200];
+char buf790[200];
+char buf791[200];
+char buf792[200];
+char buf793[200];
+char buf794[200];
+char buf795[200];
+char buf796[200];
+char buf797[200];
+char buf798[200];
+char buf799[200];
+char buf800[200];
+char buf801[200];
+char buf802[200];
+char buf803[200];
+char buf804[200];
+char buf805[200];
+char buf806[200];
+char buf807[200];
+char buf808[200];
+char buf809[200];
+char buf810[200];
+char buf811[200];
+char buf812[200];
+char buf813[200];
+char buf814[200];
+char buf815[200];
+char buf816[200];
+char buf817[200];
+char buf818[200];
+char buf819[200];
+char buf820[200];
+char buf821[200];
+char buf822[200];
+char buf823[200];
+char buf824[200];
+char buf825[200];
+char buf826[200];
+char buf827[200];
+char buf828[200];
+char buf829[200];
+char buf830[200];
+char buf831[200];
+char buf832[200];
+char buf833[200];
+char buf834[200];
+char buf835[200];
+char buf836[200];
+char buf837[200];
+char buf838[200];
+char buf839[200];
+char buf840[200];
+char buf841[200];
+char buf842[200];
+char buf843[200];
+char buf844[200];
+char buf845[200];
+char buf846[200];
+char buf847[200];
+char buf848[200];
+char buf849[200];
+char buf850[200];
+char buf851[200];
+char buf852[200];
+char buf853[200];
+char buf854[200];
+char buf855[200];
+char buf856[200];
+char buf857[200];
+char buf858[200];
+char buf859[200];
+char buf860[200];
+char buf861[200];
+char buf862[200];
+char buf863[200];
+char buf864[200];
+char buf865[200];
+char buf866[200];
+char buf867[200];
+char buf868[200];
+char buf869[200];
+char buf870[200];
+char buf871[200];
+char buf872[200];
+char buf873[200];
+char buf874[200];
+char buf875[200];
+char buf876[200];
+char buf877[200];
+char buf878[200];
+char buf879[200];
+char buf880[200];
+char buf881[200];
+char buf882[200];
+char buf883[200];
+char buf884[200];
+char buf885[200];
+char buf886[200];
+char buf887[200];
+char buf888[200];
+char buf889[200];
+char buf890[200];
+char buf891[200];
+char buf892[200];
+char buf893[200];
+char buf894[200];
+char buf895[200];
+char buf896[200];
+char buf897[200];
+char buf898[200];
+char buf899[200];
+char buf900[200];
+char buf901[200];
+char buf902[200];
+char buf903[200];
+char buf904[200];
+char buf905[200];
+char buf906[200];
+char buf907[200];
+char buf908[200];
+char buf909[200];
+char buf910[200];
+char buf911[200];
+char buf912[200];
+char buf913[200];
+char buf914[200];
+char buf915[200];
+char buf916[200];
+char buf917[200];
+char buf918[200];
+char buf919[200];
+char buf920[200];
+char buf921[200];
+char buf922[200];
+char buf923[200];
+char buf924[200];
+char buf925[200];
+char buf926[200];
+char buf927[200];
+char buf928[200];
+char buf929[200];
+char buf930[200];
+char buf931[200];
+char buf932[200];
+char buf933[200];
+char buf934[200];
+char buf935[200];
+char buf936[200];
+char buf937[200];
+char buf938[200];
+char buf939[200];
+char buf940[200];
+char buf941[200];
+char buf942[200];
+char buf943[200];
+char buf944[200];
+char buf945[200];
+char buf946[200];
+char buf947[200];
+char buf948[200];
+char buf949[200];
+char buf950[200];
+char buf951[200];
+char buf952[200];
+char buf953[200];
+char buf954[200];
+char buf955[200];
+char buf956[200];
+char buf957[200];
+char buf958[200];
+char buf959[200];
+char buf960[200];
+char buf961[200];
+char buf962[200];
+char buf963[200];
+char buf964[200];
+char buf965[200];
+char buf966[200];
+char buf967[200];
+char buf968[200];
+char buf969[200];
+char buf970[200];
+char buf971[200];
+char buf972[200];
+char buf973[200];
+char buf974[200];
+char buf975[200];
+char buf976[200];
+char buf977[200];
+char buf978[200];
+char buf979[200];
+char buf980[200];
+char buf981[200];
+char buf982[200];
+char buf983[200];
+char buf984[200];
+char buf985[200];
+char buf986[200];
+char buf987[200];
+char buf988[200];
+char buf989[200];
+char buf990[200];
+char buf991[200];
+char buf992[200];
+char buf993[200];
+char buf994[200];
+char buf995[200];
+char buf996[200];
+char buf997[200];
+char buf998[200];
+char buf999[200];
+char buf1000[200];
+char buf1001[200];
+char buf1002[200];
+char buf1003[200];
+char buf1004[200];
+char buf1005[200];
+char buf1006[200];
+char buf1007[200];
+char buf1008[200];
+char buf1009[200];
+char buf1010[200];
+char buf1011[200];
+char buf1012[200];
+char buf1013[200];
+char buf1014[200];
+char buf1015[200];
+char buf1016[200];
+char buf1017[200];
+char buf1018[200];
+char buf1019[200];
+char buf1020[200];
+char buf1021[200];
+char buf1022[200];
+char buf1023[200];
+char buf1024[200];
+char buf1025[200];
+char buf1026[200];
+char buf1027[200];
+char buf1028[200];
+char buf1029[200];
+char buf1030[200];
+char buf1031[200];
+char buf1032[200];
+char buf1033[200];
+char buf1034[200];
+char buf1035[200];
+char buf1036[200];
+char buf1037[200];
+char buf1038[200];
+char buf1039[200];
+char buf1040[200];
+char buf1041[200];
+char buf1042[200];
+char buf1043[200];
+char buf1044[200];
+char buf1045[200];
+char buf1046[200];
+char buf1047[200];
+char buf1048[200];
+char buf1049[200];
+char buf1050[200];
+char buf1051[200];
+char buf1052[200];
+char buf1053[200];
+char buf1054[200];
+char buf1055[200];
+char buf1056[200];
+char buf1057[200];
+char buf1058[200];
+char buf1059[200];
+char buf1060[200];
+char buf1061[200];
+char buf1062[200];
+char buf1063[200];
+char buf1064[200];
+char buf1065[200];
+char buf1066[200];
+char buf1067[200];
+char buf1068[200];
+char buf1069[200];
+char buf1070[200];
+char buf1071[200];
+char buf1072[200];
+char buf1073[200];
+char buf1074[200];
+char buf1075[200];
+char buf1076[200];
+char buf1077[200];
+char buf1078[200];
+char buf1079[200];
+char buf1080[200];
+char buf1081[200];
+char buf1082[200];
+char buf1083[200];
+char buf1084[200];
+char buf1085[200];
+char buf1086[200];
+char buf1087[200];
+char buf1088[200];
+char buf1089[200];
+char buf1090[200];
+char buf1091[200];
+char buf1092[200];
+char buf1093[200];
+char buf1094[200];
+char buf1095[200];
+char buf1096[200];
+char buf1097[200];
+char buf1098[200];
+char buf1099[200];
+char buf1100[200];
+char buf1101[200];
+char buf1102[200];
+char buf1103[200];
+char buf1104[200];
+char buf1105[200];
+char buf1106[200];
+char buf1107[200];
+char buf1108[200];
+char buf1109[200];
+char buf1110[200];
+char buf1111[200];
+char buf1112[200];
+char buf1113[200];
+char buf1114[200];
+char buf1115[200];
+char buf1116[200];
+char buf1117[200];
+char buf1118[200];
+char buf1119[200];
+char buf1120[200];
+char buf1121[200];
+char buf1122[200];
+char buf1123[200];
+char buf1124[200];
+char buf1125[200];
+char buf1126[200];
+char buf1127[200];
+char buf1128[200];
+char buf1129[200];
+char buf1130[200];
+char buf1131[200];
+char buf1132[200];
+char buf1133[200];
+char buf1134[200];
+char buf1135[200];
+char buf1136[200];
+char buf1137[200];
+char buf1138[200];
+char buf1139[200];
+char buf1140[200];
+char buf1141[200];
+char buf1142[200];
+char buf1143[200];
+char buf1144[200];
+char buf1145[200];
+char buf1146[200];
+char buf1147[200];
+char buf1148[200];
+char buf1149[200];
+char buf1150[200];
+char buf1151[200];
+char buf1152[200];
+char buf1153[200];
+char buf1154[200];
+char buf1155[200];
+char buf1156[200];
+char buf1157[200];
+char buf1158[200];
+char buf1159[200];
+char buf1160[200];
+char buf1161[200];
+char buf1162[200];
+char buf1163[200];
+char buf1164[200];
+char buf1165[200];
+char buf1166[200];
+char buf1167[200];
+char buf1168[200];
+char buf1169[200];
+char buf1170[200];
+char buf1171[200];
+char buf1172[200];
+char buf1173[200];
+char buf1174[200];
+char buf1175[200];
+char buf1176[200];
+char buf1177[200];
+char buf1178[200];
+char buf1179[200];
+char buf1180[200];
+char buf1181[200];
+char buf1182[200];
+char buf1183[200];
+char buf1184[200];
+char buf1185[200];
+char buf1186[200];
+char buf1187[200];
+char buf1188[200];
+char buf1189[200];
+char buf1190[200];
+char buf1191[200];
+char buf1192[200];
+char buf1193[200];
+char buf1194[200];
+char buf1195[200];
+char buf1196[200];
+char buf1197[200];
+char buf1198[200];
+char buf1199[200];
+char buf1200[200];
+char buf1201[200];
+char buf1202[200];
+char buf1203[200];
+char buf1204[200];
+char buf1205[200];
+char buf1206[200];
+char buf1207[200];
+char buf1208[200];
+char buf1209[200];
+char buf1210[200];
+char buf1211[200];
+char buf1212[200];
+char buf1213[200];
+char buf1214[200];
+char buf1215[200];
+char buf1216[200];
+char buf1217[200];
+char buf1218[200];
+char buf1219[200];
+char buf1220[200];
+char buf1221[200];
+char buf1222[200];
+char buf1223[200];
+char buf1224[200];
+char buf1225[200];
+char buf1226[200];
+char buf1227[200];
+char buf1228[200];
+char buf1229[200];
+char buf1230[200];
+char buf1231[200];
+char buf1232[200];
+char buf1233[200];
+char buf1234[200];
+char buf1235[200];
+char buf1236[200];
+char buf1237[200];
+char buf1238[200];
+char buf1239[200];
+char buf1240[200];
+char buf1241[200];
+char buf1242[200];
+char buf1243[200];
+char buf1244[200];
+char buf1245[200];
+char buf1246[200];
+char buf1247[200];
+char buf1248[200];
+char buf1249[200];
+char buf1250[200];
+char buf1251[200];
+char buf1252[200];
+char buf1253[200];
+char buf1254[200];
+char buf1255[200];
+char buf1256[200];
+char buf1257[200];
+char buf1258[200];
+char buf1259[200];
+char buf1260[200];
+char buf1261[200];
+char buf1262[200];
+char buf1263[200];
+char buf1264[200];
+char buf1265[200];
+char buf1266[200];
+char buf1267[200];
+char buf1268[200];
+char buf1269[200];
+char buf1270[200];
+char buf1271[200];
+char buf1272[200];
+char buf1273[200];
+char buf1274[200];
+char buf1275[200];
+char buf1276[200];
+char buf1277[200];
+char buf1278[200];
+char buf1279[200];
+char buf1280[200];
+char buf1281[200];
+char buf1282[200];
+char buf1283[200];
+char buf1284[200];
+char buf1285[200];
+char buf1286[200];
+char buf1287[200];
+char buf1288[200];
+char buf1289[200];
+char buf1290[200];
+char buf1291[200];
+char buf1292[200];
+char buf1293[200];
+char buf1294[200];
+char buf1295[200];
+char buf1296[200];
+char buf1297[200];
+char buf1298[200];
+char buf1299[200];
+char buf1300[200];
+char buf1301[200];
+char buf1302[200];
+char buf1303[200];
+char buf1304[200];
+char buf1305[200];
+char buf1306[200];
+char buf1307[200];
+char buf1308[200];
+char buf1309[200];
+char buf1310[200];
+char buf1311[200];
+char buf1312[200];
+char buf1313[200];
+char buf1314[200];
+char buf1315[200];
+char buf1316[200];
+char buf1317[200];
+char buf1318[200];
+char buf1319[200];
+char buf1320[200];
+char buf1321[200];
+char buf1322[200];
+char buf1323[200];
+char buf1324[200];
+char buf1325[200];
+char buf1326[200];
+char buf1327[200];
+char buf1328[200];
+char buf1329[200];
+char buf1330[200];
+char buf1331[200];
+char buf1332[200];
+char buf1333[200];
+char buf1334[200];
+char buf1335[200];
+char buf1336[200];
+char buf1337[200];
+char buf1338[200];
+char buf1339[200];
+char buf1340[200];
+char buf1341[200];
+char buf1342[200];
+char buf1343[200];
+char buf1344[200];
+char buf1345[200];
+char buf1346[200];
+char buf1347[200];
+char buf1348[200];
+char buf1349[200];
+char buf1350[200];
+char buf1351[200];
+char buf1352[200];
+char buf1353[200];
+char buf1354[200];
+char buf1355[200];
+char buf1356[200];
+char buf1357[200];
+char buf1358[200];
+char buf1359[200];
+char buf1360[200];
+char buf1361[200];
+char buf1362[200];
+char buf1363[200];
+char buf1364[200];
+char buf1365[200];
+char buf1366[200];
+char buf1367[200];
+char buf1368[200];
+char buf1369[200];
+char buf1370[200];
+char buf1371[200];
+char buf1372[200];
+char buf1373[200];
+char buf1374[200];
+char buf1375[200];
+char buf1376[200];
+char buf1377[200];
+char buf1378[200];
+char buf1379[200];
+char buf1380[200];
+char buf1381[200];
+char buf1382[200];
+char buf1383[200];
+char buf1384[200];
+char buf1385[200];
+char buf1386[200];
+char buf1387[200];
+char buf1388[200];
+char buf1389[200];
+char buf1390[200];
+char buf1391[200];
+char buf1392[200];
+char buf1393[200];
+char buf1394[200];
+char buf1395[200];
+char buf1396[200];
+char buf1397[200];
+char buf1398[200];
+char buf1399[200];
+char buf1400[200];
+char buf1401[200];
+char buf1402[200];
+char buf1403[200];
+char buf1404[200];
+char buf1405[200];
+char buf1406[200];
+char buf1407[200];
+char buf1408[200];
+char buf1409[200];
+char buf1410[200];
+char buf1411[200];
+char buf1412[200];
+char buf1413[200];
+char buf1414[200];
+char buf1415[200];
+char buf1416[200];
+char buf1417[200];
+char buf1418[200];
+char buf1419[200];
+char buf1420[200];
+char buf1421[200];
+char buf1422[200];
+char buf1423[200];
+char buf1424[200];
+char buf1425[200];
+char buf1426[200];
+char buf1427[200];
+char buf1428[200];
+char buf1429[200];
+char buf1430[200];
+char buf1431[200];
+char buf1432[200];
+char buf1433[200];
+char buf1434[200];
+char buf1435[200];
+char buf1436[200];
+char buf1437[200];
+char buf1438[200];
+char buf1439[200];
+char buf1440[200];
+char buf1441[200];
+char buf1442[200];
+char buf1443[200];
+char buf1444[200];
+char buf1445[200];
+char buf1446[200];
+char buf1447[200];
+char buf1448[200];
+char buf1449[200];
+char buf1450[200];
+char buf1451[200];
+char buf1452[200];
+char buf1453[200];
+char buf1454[200];
+char buf1455[200];
+char buf1456[200];
+char buf1457[200];
+char buf1458[200];
+char buf1459[200];
+char buf1460[200];
+char buf1461[200];
+char buf1462[200];
+char buf1463[200];
+char buf1464[200];
+char buf1465[200];
+char buf1466[200];
+char buf1467[200];
+char buf1468[200];
+char buf1469[200];
+char buf1470[200];
+char buf1471[200];
+char buf1472[200];
+char buf1473[200];
+char buf1474[200];
+char buf1475[200];
+char buf1476[200];
+char buf1477[200];
+char buf1478[200];
+char buf1479[200];
+char buf1480[200];
+char buf1481[200];
+char buf1482[200];
+char buf1483[200];
+char buf1484[200];
+char buf1485[200];
+char buf1486[200];
+char buf1487[200];
+char buf1488[200];
+char buf1489[200];
+char buf1490[200];
+char buf1491[200];
+char buf1492[200];
+char buf1493[200];
+char buf1494[200];
+char buf1495[200];
+char buf1496[200];
+char buf1497[200];
+char buf1498[200];
+char buf1499[200];
+char buf1500[200];
+char buf1501[200];
+char buf1502[200];
+char buf1503[200];
+char buf1504[200];
+char buf1505[200];
+char buf1506[200];
+char buf1507[200];
+char buf1508[200];
+char buf1509[200];
+char buf1510[200];
+char buf1511[200];
+char buf1512[200];
+char buf1513[200];
+char buf1514[200];
+char buf1515[200];
+char buf1516[200];
+char buf1517[200];
+char buf1518[200];
+char buf1519[200];
+char buf1520[200];
+char buf1521[200];
+char buf1522[200];
+char buf1523[200];
+char buf1524[200];
+char buf1525[200];
+char buf1526[200];
+char buf1527[200];
+char buf1528[200];
+char buf1529[200];
+char buf1530[200];
+char buf1531[200];
+char buf1532[200];
+char buf1533[200];
+char buf1534[200];
+char buf1535[200];
+char buf1536[200];
+char buf1537[200];
+char buf1538[200];
+char buf1539[200];
+char buf1540[200];
+char buf1541[200];
+char buf1542[200];
+char buf1543[200];
+char buf1544[200];
+char buf1545[200];
+char buf1546[200];
+char buf1547[200];
+char buf1548[200];
+char buf1549[200];
+char buf1550[200];
+char buf1551[200];
+char buf1552[200];
+char buf1553[200];
+char buf1554[200];
+char buf1555[200];
+char buf1556[200];
+char buf1557[200];
+char buf1558[200];
+char buf1559[200];
+char buf1560[200];
+char buf1561[200];
+char buf1562[200];
+char buf1563[200];
+char buf1564[200];
+char buf1565[200];
+char buf1566[200];
+char buf1567[200];
+char buf1568[200];
+char buf1569[200];
+char buf1570[200];
+char buf1571[200];
+char buf1572[200];
+char buf1573[200];
+char buf1574[200];
+char buf1575[200];
+char buf1576[200];
+char buf1577[200];
+char buf1578[200];
+char buf1579[200];
+char buf1580[200];
+char buf1581[200];
+char buf1582[200];
+char buf1583[200];
+char buf1584[200];
+char buf1585[200];
+char buf1586[200];
+char buf1587[200];
+char buf1588[200];
+char buf1589[200];
+char buf1590[200];
+char buf1591[200];
+char buf1592[200];
+char buf1593[200];
+char buf1594[200];
+char buf1595[200];
+char buf1596[200];
+char buf1597[200];
+char buf1598[200];
+char buf1599[200];
+char buf1600[200];
+char buf1601[200];
+char buf1602[200];
+char buf1603[200];
+char buf1604[200];
+char buf1605[200];
+char buf1606[200];
+char buf1607[200];
+char buf1608[200];
+char buf1609[200];
+char buf1610[200];
+char buf1611[200];
+char buf1612[200];
+char buf1613[200];
+char buf1614[200];
+char buf1615[200];
+char buf1616[200];
+char buf1617[200];
+char buf1618[200];
+char buf1619[200];
+char buf1620[200];
+char buf1621[200];
+char buf1622[200];
+char buf1623[200];
+char buf1624[200];
+char buf1625[200];
+char buf1626[200];
+char buf1627[200];
+char buf1628[200];
+char buf1629[200];
+char buf1630[200];
+char buf1631[200];
+char buf1632[200];
+char buf1633[200];
+char buf1634[200];
+char buf1635[200];
+char buf1636[200];
+char buf1637[200];
+char buf1638[200];
+char buf1639[200];
+char buf1640[200];
+char buf1641[200];
+char buf1642[200];
+char buf1643[200];
+char buf1644[200];
+char buf1645[200];
+char buf1646[200];
+char buf1647[200];
+char buf1648[200];
+char buf1649[200];
+char buf1650[200];
+char buf1651[200];
+char buf1652[200];
+char buf1653[200];
+char buf1654[200];
+char buf1655[200];
+char buf1656[200];
+char buf1657[200];
+char buf1658[200];
+char buf1659[200];
+char buf1660[200];
+char buf1661[200];
+char buf1662[200];
+char buf1663[200];
+char buf1664[200];
+char buf1665[200];
+char buf1666[200];
+char buf1667[200];
+char buf1668[200];
+char buf1669[200];
+char buf1670[200];
+char buf1671[200];
+char buf1672[200];
+char buf1673[200];
+char buf1674[200];
+char buf1675[200];
+char buf1676[200];
+char buf1677[200];
+char buf1678[200];
+char buf1679[200];
+char buf1680[200];
+char buf1681[200];
+char buf1682[200];
+char buf1683[200];
+char buf1684[200];
+char buf1685[200];
+char buf1686[200];
+char buf1687[200];
+char buf1688[200];
+char buf1689[200];
+char buf1690[200];
+char buf1691[200];
+char buf1692[200];
+char buf1693[200];
+char buf1694[200];
+char buf1695[200];
+char buf1696[200];
+char buf1697[200];
+char buf1698[200];
+char buf1699[200];
+char buf1700[200];
+char buf1701[200];
+char buf1702[200];
+char buf1703[200];
+char buf1704[200];
+char buf1705[200];
+char buf1706[200];
+char buf1707[200];
+char buf1708[200];
+char buf1709[200];
+char buf1710[200];
+char buf1711[200];
+char buf1712[200];
+char buf1713[200];
+char buf1714[200];
+char buf1715[200];
+char buf1716[200];
+char buf1717[200];
+char buf1718[200];
+char buf1719[200];
+char buf1720[200];
+char buf1721[200];
+char buf1722[200];
+char buf1723[200];
+char buf1724[200];
+char buf1725[200];
+char buf1726[200];
+char buf1727[200];
+char buf1728[200];
+char buf1729[200];
+char buf1730[200];
+char buf1731[200];
+char buf1732[200];
+char buf1733[200];
+char buf1734[200];
+char buf1735[200];
+char buf1736[200];
+char buf1737[200];
+char buf1738[200];
+char buf1739[200];
+char buf1740[200];
+char buf1741[200];
+char buf1742[200];
+char buf1743[200];
+char buf1744[200];
+char buf1745[200];
+char buf1746[200];
+char buf1747[200];
+char buf1748[200];
+char buf1749[200];
+char buf1750[200];
+char buf1751[200];
+char buf1752[200];
+char buf1753[200];
+char buf1754[200];
+char buf1755[200];
+char buf1756[200];
+char buf1757[200];
+char buf1758[200];
+char buf1759[200];
+char buf1760[200];
+char buf1761[200];
+char buf1762[200];
+char buf1763[200];
+char buf1764[200];
+char buf1765[200];
+char buf1766[200];
+char buf1767[200];
+char buf1768[200];
+char buf1769[200];
+char buf1770[200];
+char buf1771[200];
+char buf1772[200];
+char buf1773[200];
+char buf1774[200];
+char buf1775[200];
+char buf1776[200];
+char buf1777[200];
+char buf1778[200];
+char buf1779[200];
+char buf1780[200];
+char buf1781[200];
+char buf1782[200];
+char buf1783[200];
+char buf1784[200];
+char buf1785[200];
+char buf1786[200];
+char buf1787[200];
+char buf1788[200];
+char buf1789[200];
+char buf1790[200];
+char buf1791[200];
+char buf1792[200];
+char buf1793[200];
+char buf1794[200];
+char buf1795[200];
+char buf1796[200];
+char buf1797[200];
+char buf1798[200];
+char buf1799[200];
+char buf1800[200];
+char buf1801[200];
+char buf1802[200];
+char buf1803[200];
+char buf1804[200];
+char buf1805[200];
+char buf1806[200];
+char buf1807[200];
+char buf1808[200];
+char buf1809[200];
+char buf1810[200];
+char buf1811[200];
+char buf1812[200];
+char buf1813[200];
+char buf1814[200];
+char buf1815[200];
+char buf1816[200];
+char buf1817[200];
+char buf1818[200];
+char buf1819[200];
+char buf1820[200];
+char buf1821[200];
+char buf1822[200];
+char buf1823[200];
+char buf1824[200];
+char buf1825[200];
+char buf1826[200];
+char buf1827[200];
+char buf1828[200];
+char buf1829[200];
+char buf1830[200];
+char buf1831[200];
+char buf1832[200];
+char buf1833[200];
+char buf1834[200];
+char buf1835[200];
+char buf1836[200];
+char buf1837[200];
+char buf1838[200];
+char buf1839[200];
+char buf1840[200];
+char buf1841[200];
+char buf1842[200];
+char buf1843[200];
+char buf1844[200];
+char buf1845[200];
+char buf1846[200];
+char buf1847[200];
+char buf1848[200];
+char buf1849[200];
+char buf1850[200];
+char buf1851[200];
+char buf1852[200];
+char buf1853[200];
+char buf1854[200];
+char buf1855[200];
+char buf1856[200];
+char buf1857[200];
+char buf1858[200];
+char buf1859[200];
+char buf1860[200];
+char buf1861[200];
+char buf1862[200];
+char buf1863[200];
+char buf1864[200];
+char buf1865[200];
+char buf1866[200];
+char buf1867[200];
+char buf1868[200];
+char buf1869[200];
+char buf1870[200];
+char buf1871[200];
+char buf1872[200];
+char buf1873[200];
+char buf1874[200];
+char buf1875[200];
+char buf1876[200];
+char buf1877[200];
+char buf1878[200];
+char buf1879[200];
+char buf1880[200];
+char buf1881[200];
+char buf1882[200];
+char buf1883[200];
+char buf1884[200];
+char buf1885[200];
+char buf1886[200];
+char buf1887[200];
+char buf1888[200];
+char buf1889[200];
+char buf1890[200];
+char buf1891[200];
+char buf1892[200];
+char buf1893[200];
+char buf1894[200];
+char buf1895[200];
+char buf1896[200];
+char buf1897[200];
+char buf1898[200];
+char buf1899[200];
+char buf1900[200];
+char buf1901[200];
+char buf1902[200];
+char buf1903[200];
+char buf1904[200];
+char buf1905[200];
+char buf1906[200];
+char buf1907[200];
+char buf1908[200];
+char buf1909[200];
+char buf1910[200];
+char buf1911[200];
+char buf1912[200];
+char buf1913[200];
+char buf1914[200];
+char buf1915[200];
+char buf1916[200];
+char buf1917[200];
+char buf1918[200];
+char buf1919[200];
+char buf1920[200];
+char buf1921[200];
+char buf1922[200];
+char buf1923[200];
+char buf1924[200];
+char buf1925[200];
+char buf1926[200];
+char buf1927[200];
+char buf1928[200];
+char buf1929[200];
+char buf1930[200];
+char buf1931[200];
+char buf1932[200];
+char buf1933[200];
+char buf1934[200];
+char buf1935[200];
+char buf1936[200];
+char buf1937[200];
+char buf1938[200];
+char buf1939[200];
+char buf1940[200];
+char buf1941[200];
+char buf1942[200];
+char buf1943[200];
+char buf1944[200];
+char buf1945[200];
+char buf1946[200];
+char buf1947[200];
+char buf1948[200];
+char buf1949[200];
+char buf1950[200];
+char buf1951[200];
+char buf1952[200];
+char buf1953[200];
+char buf1954[200];
+char buf1955[200];
+char buf1956[200];
+char buf1957[200];
+char buf1958[200];
+char buf1959[200];
+char buf1960[200];
+char buf1961[200];
+char buf1962[200];
+char buf1963[200];
+char buf1964[200];
+char buf1965[200];
+char buf1966[200];
+char buf1967[200];
+char buf1968[200];
+char buf1969[200];
+char buf1970[200];
+char buf1971[200];
+char buf1972[200];
+char buf1973[200];
+char buf1974[200];
+char buf1975[200];
+char buf1976[200];
+char buf1977[200];
+char buf1978[200];
+char buf1979[200];
+char buf1980[200];
+char buf1981[200];
+char buf1982[200];
+char buf1983[200];
+char buf1984[200];
+char buf1985[200];
+char buf1986[200];
+char buf1987[200];
+char buf1988[200];
+char buf1989[200];
+char buf1990[200];
+char buf1991[200];
+char buf1992[200];
+char buf1993[200];
+char buf1994[200];
+char buf1995[200];
+char buf1996[200];
+char buf1997[200];
+char buf1998[200];
+char buf1999[200];
+char buf2000[200];
+char buf2001[200];
+char buf2002[200];
+char buf2003[200];
+char buf2004[200];
+char buf2005[200];
+char buf2006[200];
+char buf2007[200];
+char buf2008[200];
+char buf2009[200];
+char buf2010[200];
+char buf2011[200];
+char buf2012[200];
+char buf2013[200];
+char buf2014[200];
+char buf2015[200];
+char buf2016[200];
+char buf2017[200];
+char buf2018[200];
+char buf2019[200];
+char buf2020[200];
+char buf2021[200];
+char buf2022[200];
+char buf2023[200];
+char buf2024[200];
+char buf2025[200];
+char buf2026[200];
+char buf2027[200];
+char buf2028[200];
+char buf2029[200];
+char buf2030[200];
+char buf2031[200];
+char buf2032[200];
+char buf2033[200];
+char buf2034[200];
+char buf2035[200];
+char buf2036[200];
+char buf2037[200];
+char buf2038[200];
+char buf2039[200];
+char buf2040[200];
+char buf2041[200];
+char buf2042[200];
+char buf2043[200];
+char buf2044[200];
+char buf2045[200];
+char buf2046[200];
+char buf2047[200];
+char buf2048[200];
+char buf2049[200];
+char buf2050[200];
+char buf2051[200];
+char buf2052[200];
+char buf2053[200];
+char buf2054[200];
+char buf2055[200];
+char buf2056[200];
+char buf2057[200];
+char buf2058[200];
+char buf2059[200];
+char buf2060[200];
+char buf2061[200];
+char buf2062[200];
+char buf2063[200];
+char buf2064[200];
+char buf2065[200];
+char buf2066[200];
+char buf2067[200];
+char buf2068[200];
+char buf2069[200];
+char buf2070[200];
+char buf2071[200];
+char buf2072[200];
+char buf2073[200];
+char buf2074[200];
+char buf2075[200];
+char buf2076[200];
+char buf2077[200];
+char buf2078[200];
+char buf2079[200];
+char buf2080[200];
+char buf2081[200];
+char buf2082[200];
+char buf2083[200];
+char buf2084[200];
+char buf2085[200];
+char buf2086[200];
+char buf2087[200];
+char buf2088[200];
+char buf2089[200];
+char buf2090[200];
+char buf2091[200];
+char buf2092[200];
+char buf2093[200];
+char buf2094[200];
+char buf2095[200];
+char buf2096[200];
+char buf2097[200];
+char buf2098[200];
+char buf2099[200];
+char buf2100[200];
+char buf2101[200];
+char buf2102[200];
+char buf2103[200];
+char buf2104[200];
+char buf2105[200];
+char buf2106[200];
+char buf2107[200];
+char buf2108[200];
+char buf2109[200];
+char buf2110[200];
+char buf2111[200];
+char buf2112[200];
+char buf2113[200];
+char buf2114[200];
+char buf2115[200];
+char buf2116[200];
+char buf2117[200];
+char buf2118[200];
+char buf2119[200];
+char buf2120[200];
+char buf2121[200];
+char buf2122[200];
+char buf2123[200];
+char buf2124[200];
+char buf2125[200];
+char buf2126[200];
+char buf2127[200];
+char buf2128[200];
+char buf2129[200];
+char buf2130[200];
+char buf2131[200];
+char buf2132[200];
+char buf2133[200];
+char buf2134[200];
+char buf2135[200];
+char buf2136[200];
+char buf2137[200];
+char buf2138[200];
+char buf2139[200];
+char buf2140[200];
+char buf2141[200];
+char buf2142[200];
+char buf2143[200];
+char buf2144[200];
+char buf2145[200];
+char buf2146[200];
+char buf2147[200];
+char buf2148[200];
+char buf2149[200];
+char buf2150[200];
+char buf2151[200];
+char buf2152[200];
+char buf2153[200];
+char buf2154[200];
+char buf2155[200];
+char buf2156[200];
+char buf2157[200];
+char buf2158[200];
+char buf2159[200];
+char buf2160[200];
+char buf2161[200];
+char buf2162[200];
+char buf2163[200];
+char buf2164[200];
+char buf2165[200];
+char buf2166[200];
+char buf2167[200];
+char buf2168[200];
+char buf2169[200];
+char buf2170[200];
+char buf2171[200];
+char buf2172[200];
+char buf2173[200];
+char buf2174[200];
+char buf2175[200];
+char buf2176[200];
+char buf2177[200];
+char buf2178[200];
+char buf2179[200];
+char buf2180[200];
+char buf2181[200];
+char buf2182[200];
+char buf2183[200];
+char buf2184[200];
+char buf2185[200];
+char buf2186[200];
+char buf2187[200];
+char buf2188[200];
+char buf2189[200];
+char buf2190[200];
+char buf2191[200];
+char buf2192[200];
+char buf2193[200];
+char buf2194[200];
+char buf2195[200];
+char buf2196[200];
+char buf2197[200];
+char buf2198[200];
+char buf2199[200];
+char buf2200[200];
+char buf2201[200];
+char buf2202[200];
+char buf2203[200];
+char buf2204[200];
+char buf2205[200];
+char buf2206[200];
+char buf2207[200];
+char buf2208[200];
+char buf2209[200];
+char buf2210[200];
+char buf2211[200];
+char buf2212[200];
+char buf2213[200];
+char buf2214[200];
+char buf2215[200];
+char buf2216[200];
+char buf2217[200];
+char buf2218[200];
+char buf2219[200];
+char buf2220[200];
+char buf2221[200];
+char buf2222[200];
+char buf2223[200];
+char buf2224[200];
+char buf2225[200];
+char buf2226[200];
+char buf2227[200];
+char buf2228[200];
+char buf2229[200];
+char buf2230[200];
+char buf2231[200];
+char buf2232[200];
+char buf2233[200];
+char buf2234[200];
+char buf2235[200];
+char buf2236[200];
+char buf2237[200];
+char buf2238[200];
+char buf2239[200];
+char buf2240[200];
+char buf2241[200];
+char buf2242[200];
+char buf2243[200];
+char buf2244[200];
+char buf2245[200];
+char buf2246[200];
+char buf2247[200];
+char buf2248[200];
+char buf2249[200];
+char buf2250[200];
+char buf2251[200];
+char buf2252[200];
+char buf2253[200];
+char buf2254[200];
+char buf2255[200];
+char buf2256[200];
+char buf2257[200];
+char buf2258[200];
+char buf2259[200];
+char buf2260[200];
+char buf2261[200];
+char buf2262[200];
+char buf2263[200];
+char buf2264[200];
+char buf2265[200];
+char buf2266[200];
+char buf2267[200];
+char buf2268[200];
+char buf2269[200];
+char buf2270[200];
+char buf2271[200];
+char buf2272[200];
+char buf2273[200];
+char buf2274[200];
+char buf2275[200];
+char buf2276[200];
+char buf2277[200];
+char buf2278[200];
+char buf2279[200];
+char buf2280[200];
+char buf2281[200];
+char buf2282[200];
+char buf2283[200];
+char buf2284[200];
+char buf2285[200];
+char buf2286[200];
+char buf2287[200];
+char buf2288[200];
+char buf2289[200];
+char buf2290[200];
+char buf2291[200];
+char buf2292[200];
+char buf2293[200];
+char buf2294[200];
+char buf2295[200];
+char buf2296[200];
+char buf2297[200];
+char buf2298[200];
+char buf2299[200];
+char buf2300[200];
+char buf2301[200];
+char buf2302[200];
+char buf2303[200];
+char buf2304[200];
+char buf2305[200];
+char buf2306[200];
+char buf2307[200];
+char buf2308[200];
+char buf2309[200];
+char buf2310[200];
+char buf2311[200];
+char buf2312[200];
+char buf2313[200];
+char buf2314[200];
+char buf2315[200];
+char buf2316[200];
+char buf2317[200];
+char buf2318[200];
+char buf2319[200];
+char buf2320[200];
+char buf2321[200];
+char buf2322[200];
+char buf2323[200];
+char buf2324[200];
+char buf2325[200];
+char buf2326[200];
+char buf2327[200];
+char buf2328[200];
+char buf2329[200];
+char buf2330[200];
+char buf2331[200];
+char buf2332[200];
+char buf2333[200];
+char buf2334[200];
+char buf2335[200];
+char buf2336[200];
+char buf2337[200];
+char buf2338[200];
+char buf2339[200];
+char buf2340[200];
+char buf2341[200];
+char buf2342[200];
+char buf2343[200];
+char buf2344[200];
+char buf2345[200];
+char buf2346[200];
+char buf2347[200];
+char buf2348[200];
+char buf2349[200];
+char buf2350[200];
+char buf2351[200];
+char buf2352[200];
+char buf2353[200];
+char buf2354[200];
+char buf2355[200];
+char buf2356[200];
+char buf2357[200];
+char buf2358[200];
+char buf2359[200];
+char buf2360[200];
+char buf2361[200];
+char buf2362[200];
+char buf2363[200];
+char buf2364[200];
+char buf2365[200];
+char buf2366[200];
+char buf2367[200];
+char buf2368[200];
+char buf2369[200];
+char buf2370[200];
+char buf2371[200];
+char buf2372[200];
+char buf2373[200];
+char buf2374[200];
+char buf2375[200];
+char buf2376[200];
+char buf2377[200];
+char buf2378[200];
+char buf2379[200];
+char buf2380[200];
+char buf2381[200];
+char buf2382[200];
+char buf2383[200];
+char buf2384[200];
+char buf2385[200];
+char buf2386[200];
+char buf2387[200];
+char buf2388[200];
+char buf2389[200];
+char buf2390[200];
+char buf2391[200];
+char buf2392[200];
+char buf2393[200];
+char buf2394[200];
+char buf2395[200];
+char buf2396[200];
+char buf2397[200];
+char buf2398[200];
+char buf2399[200];
+char buf2400[200];
+char buf2401[200];
+char buf2402[200];
+char buf2403[200];
+char buf2404[200];
+char buf2405[200];
+char buf2406[200];
+char buf2407[200];
+char buf2408[200];
+char buf2409[200];
+char buf2410[200];
+char buf2411[200];
+char buf2412[200];
+char buf2413[200];
+char buf2414[200];
+char buf2415[200];
+char buf2416[200];
+char buf2417[200];
+char buf2418[200];
+char buf2419[200];
+char buf2420[200];
+char buf2421[200];
+char buf2422[200];
+char buf2423[200];
+char buf2424[200];
+char buf2425[200];
+char buf2426[200];
+char buf2427[200];
+char buf2428[200];
+char buf2429[200];
+char buf2430[200];
+char buf2431[200];
+char buf2432[200];
+char buf2433[200];
+char buf2434[200];
+char buf2435[200];
+char buf2436[200];
+char buf2437[200];
+char buf2438[200];
+char buf2439[200];
+char buf2440[200];
+char buf2441[200];
+char buf2442[200];
+char buf2443[200];
+char buf2444[200];
+char buf2445[200];
+char buf2446[200];
+char buf2447[200];
+char buf2448[200];
+char buf2449[200];
+char buf2450[200];
+char buf2451[200];
+char buf2452[200];
+char buf2453[200];
+char buf2454[200];
+char buf2455[200];
+char buf2456[200];
+char buf2457[200];
+char buf2458[200];
+char buf2459[200];
+char buf2460[200];
+char buf2461[200];
+char buf2462[200];
+char buf2463[200];
+char buf2464[200];
+char buf2465[200];
+char buf2466[200];
+char buf2467[200];
+char buf2468[200];
+char buf2469[200];
+char buf2470[200];
+char buf2471[200];
+char buf2472[200];
+char buf2473[200];
+char buf2474[200];
+char buf2475[200];
+char buf2476[200];
+char buf2477[200];
+char buf2478[200];
+char buf2479[200];
+char buf2480[200];
+char buf2481[200];
+char buf2482[200];
+char buf2483[200];
+char buf2484[200];
+char buf2485[200];
+char buf2486[200];
+char buf2487[200];
+char buf2488[200];
+char buf2489[200];
+char buf2490[200];
+char buf2491[200];
+char buf2492[200];
+char buf2493[200];
+char buf2494[200];
+char buf2495[200];
+char buf2496[200];
+char buf2497[200];
+char buf2498[200];
+char buf2499[200];
+char buf2500[200];
+char buf2501[200];
+char buf2502[200];
+char buf2503[200];
+char buf2504[200];
+char buf2505[200];
+char buf2506[200];
+char buf2507[200];
+char buf2508[200];
+char buf2509[200];
+char buf2510[200];
+char buf2511[200];
+char buf2512[200];
+char buf2513[200];
+char buf2514[200];
+char buf2515[200];
+char buf2516[200];
+char buf2517[200];
+char buf2518[200];
+char buf2519[200];
+char buf2520[200];
+char buf2521[200];
+char buf2522[200];
+char buf2523[200];
+char buf2524[200];
+char buf2525[200];
+char buf2526[200];
+char buf2527[200];
+char buf2528[200];
+char buf2529[200];
+char buf2530[200];
+char buf2531[200];
+char buf2532[200];
+char buf2533[200];
+char buf2534[200];
+char buf2535[200];
+char buf2536[200];
+char buf2537[200];
+char buf2538[200];
+char buf2539[200];
+char buf2540[200];
+char buf2541[200];
+char buf2542[200];
+char buf2543[200];
+char buf2544[200];
+char buf2545[200];
+char buf2546[200];
+char buf2547[200];
+char buf2548[200];
+char buf2549[200];
+char buf2550[200];
+char buf2551[200];
+char buf2552[200];
+char buf2553[200];
+char buf2554[200];
+char buf2555[200];
+char buf2556[200];
+char buf2557[200];
+char buf2558[200];
+char buf2559[200];
+char buf2560[200];
+char buf2561[200];
+char buf2562[200];
+char buf2563[200];
+char buf2564[200];
+char buf2565[200];
+char buf2566[200];
+char buf2567[200];
+char buf2568[200];
+char buf2569[200];
+char buf2570[200];
+char buf2571[200];
+char buf2572[200];
+char buf2573[200];
+char buf2574[200];
+char buf2575[200];
+char buf2576[200];
+char buf2577[200];
+char buf2578[200];
+char buf2579[200];
+char buf2580[200];
+char buf2581[200];
+char buf2582[200];
+char buf2583[200];
+char buf2584[200];
+char buf2585[200];
+char buf2586[200];
+char buf2587[200];
+char buf2588[200];
+char buf2589[200];
+char buf2590[200];
+char buf2591[200];
+char buf2592[200];
+char buf2593[200];
+char buf2594[200];
+char buf2595[200];
+char buf2596[200];
+char buf2597[200];
+char buf2598[200];
+char buf2599[200];
+char buf2600[200];
+char buf2601[200];
+char buf2602[200];
+char buf2603[200];
+char buf2604[200];
+char buf2605[200];
+char buf2606[200];
+char buf2607[200];
+char buf2608[200];
+char buf2609[200];
+char buf2610[200];
+char buf2611[200];
+char buf2612[200];
+char buf2613[200];
+char buf2614[200];
+char buf2615[200];
+char buf2616[200];
+char buf2617[200];
+char buf2618[200];
+char buf2619[200];
+char buf2620[200];
+char buf2621[200];
+char buf2622[200];
+char buf2623[200];
+char buf2624[200];
+char buf2625[200];
+char buf2626[200];
+char buf2627[200];
+char buf2628[200];
+char buf2629[200];
+char buf2630[200];
+char buf2631[200];
+char buf2632[200];
+char buf2633[200];
+char buf2634[200];
+char buf2635[200];
+char buf2636[200];
+char buf2637[200];
+char buf2638[200];
+char buf2639[200];
+char buf2640[200];
+char buf2641[200];
+char buf2642[200];
+char buf2643[200];
+char buf2644[200];
+char buf2645[200];
+char buf2646[200];
+char buf2647[200];
+char buf2648[200];
+char buf2649[200];
+char buf2650[200];
+char buf2651[200];
+char buf2652[200];
+char buf2653[200];
+char buf2654[200];
+char buf2655[200];
+char buf2656[200];
+char buf2657[200];
+char buf2658[200];
+char buf2659[200];
+char buf2660[200];
+char buf2661[200];
+char buf2662[200];
+char buf2663[200];
+char buf2664[200];
+char buf2665[200];
+char buf2666[200];
+char buf2667[200];
+char buf2668[200];
+char buf2669[200];
+char buf2670[200];
+char buf2671[200];
+char buf2672[200];
+char buf2673[200];
+char buf2674[200];
+char buf2675[200];
+char buf2676[200];
+char buf2677[200];
+char buf2678[200];
+char buf2679[200];
+char buf2680[200];
+char buf2681[200];
+char buf2682[200];
+char buf2683[200];
+char buf2684[200];
+char buf2685[200];
+char buf2686[200];
+char buf2687[200];
+char buf2688[200];
+char buf2689[200];
+char buf2690[200];
+char buf2691[200];
+char buf2692[200];
+char buf2693[200];
+char buf2694[200];
+char buf2695[200];
+char buf2696[200];
+char buf2697[200];
+char buf2698[200];
+char buf2699[200];
+char buf2700[200];
+char buf2701[200];
+char buf2702[200];
+char buf2703[200];
+char buf2704[200];
+char buf2705[200];
+char buf2706[200];
+char buf2707[200];
+char buf2708[200];
+char buf2709[200];
+char buf2710[200];
+char buf2711[200];
+char buf2712[200];
+char buf2713[200];
+char buf2714[200];
+char buf2715[200];
+char buf2716[200];
+char buf2717[200];
+char buf2718[200];
+char buf2719[200];
+char buf2720[200];
+char buf2721[200];
+char buf2722[200];
+char buf2723[200];
+char buf2724[200];
+char buf2725[200];
+char buf2726[200];
+char buf2727[200];
+char buf2728[200];
+char buf2729[200];
+char buf2730[200];
+char buf2731[200];
+char buf2732[200];
+char buf2733[200];
+char buf2734[200];
+char buf2735[200];
+char buf2736[200];
+char buf2737[200];
+char buf2738[200];
+char buf2739[200];
+char buf2740[200];
+char buf2741[200];
+char buf2742[200];
+char buf2743[200];
+char buf2744[200];
+char buf2745[200];
+char buf2746[200];
+char buf2747[200];
+char buf2748[200];
+char buf2749[200];
+char buf2750[200];
+char buf2751[200];
+char buf2752[200];
+char buf2753[200];
+char buf2754[200];
+char buf2755[200];
+char buf2756[200];
+char buf2757[200];
+char buf2758[200];
+char buf2759[200];
+char buf2760[200];
+char buf2761[200];
+char buf2762[200];
+char buf2763[200];
+char buf2764[200];
+char buf2765[200];
+char buf2766[200];
+char buf2767[200];
+char buf2768[200];
+char buf2769[200];
+char buf2770[200];
+char buf2771[200];
+char buf2772[200];
+char buf2773[200];
+char buf2774[200];
+char buf2775[200];
+char buf2776[200];
+char buf2777[200];
+char buf2778[200];
+char buf2779[200];
+char buf2780[200];
+char buf2781[200];
+char buf2782[200];
+char buf2783[200];
+char buf2784[200];
+char buf2785[200];
+char buf2786[200];
+char buf2787[200];
+char buf2788[200];
+char buf2789[200];
+char buf2790[200];
+char buf2791[200];
+char buf2792[200];
+char buf2793[200];
+char buf2794[200];
+char buf2795[200];
+char buf2796[200];
+char buf2797[200];
+char buf2798[200];
+char buf2799[200];
+char buf2800[200];
+char buf2801[200];
+char buf2802[200];
+char buf2803[200];
+char buf2804[200];
+char buf2805[200];
+char buf2806[200];
+char buf2807[200];
+char buf2808[200];
+char buf2809[200];
+char buf2810[200];
+char buf2811[200];
+char buf2812[200];
+char buf2813[200];
+char buf2814[200];
+char buf2815[200];
+char buf2816[200];
+char buf2817[200];
+char buf2818[200];
+char buf2819[200];
+char buf2820[200];
+char buf2821[200];
+char buf2822[200];
+char buf2823[200];
+char buf2824[200];
+char buf2825[200];
+char buf2826[200];
+char buf2827[200];
+char buf2828[200];
+char buf2829[200];
+char buf2830[200];
+char buf2831[200];
+char buf2832[200];
+char buf2833[200];
+char buf2834[200];
+char buf2835[200];
+char buf2836[200];
+char buf2837[200];
+char buf2838[200];
+char buf2839[200];
+char buf2840[200];
+char buf2841[200];
+char buf2842[200];
+char buf2843[200];
+char buf2844[200];
+char buf2845[200];
+char buf2846[200];
+char buf2847[200];
+char buf2848[200];
+char buf2849[200];
+char buf2850[200];
+char buf2851[200];
+char buf2852[200];
+char buf2853[200];
+char buf2854[200];
+char buf2855[200];
+char buf2856[200];
+char buf2857[200];
+char buf2858[200];
+char buf2859[200];
+char buf2860[200];
+char buf2861[200];
+char buf2862[200];
+char buf2863[200];
+char buf2864[200];
+char buf2865[200];
+char buf2866[200];
+char buf2867[200];
+char buf2868[200];
+char buf2869[200];
+char buf2870[200];
+char buf2871[200];
+char buf2872[200];
+char buf2873[200];
+char buf2874[200];
+char buf2875[200];
+char buf2876[200];
+char buf2877[200];
+char buf2878[200];
+char buf2879[200];
+char buf2880[200];
+char buf2881[200];
+char buf2882[200];
+char buf2883[200];
+char buf2884[200];
+char buf2885[200];
+char buf2886[200];
+char buf2887[200];
+char buf2888[200];
+char buf2889[200];
+char buf2890[200];
+char buf2891[200];
+char buf2892[200];
+char buf2893[200];
+char buf2894[200];
+char buf2895[200];
+char buf2896[200];
+char buf2897[200];
+char buf2898[200];
+char buf2899[200];
+char buf2900[200];
+char buf2901[200];
+char buf2902[200];
+char buf2903[200];
+char buf2904[200];
+char buf2905[200];
+char buf2906[200];
+char buf2907[200];
+char buf2908[200];
+char buf2909[200];
+char buf2910[200];
+char buf2911[200];
+char buf2912[200];
+char buf2913[200];
+char buf2914[200];
+char buf2915[200];
+char buf2916[200];
+char buf2917[200];
+char buf2918[200];
+char buf2919[200];
+char buf2920[200];
+char buf2921[200];
+char buf2922[200];
+char buf2923[200];
+char buf2924[200];
+char buf2925[200];
+char buf2926[200];
+char buf2927[200];
+char buf2928[200];
+char buf2929[200];
+char buf2930[200];
+char buf2931[200];
+char buf2932[200];
+char buf2933[200];
+char buf2934[200];
+char buf2935[200];
+char buf2936[200];
+char buf2937[200];
+char buf2938[200];
+char buf2939[200];
+char buf2940[200];
+char buf2941[200];
+char buf2942[200];
+char buf2943[200];
+char buf2944[200];
+char buf2945[200];
+char buf2946[200];
+char buf2947[200];
+char buf2948[200];
+char buf2949[200];
+char buf2950[200];
+char buf2951[200];
+char buf2952[200];
+char buf2953[200];
+char buf2954[200];
+char buf2955[200];
+char buf2956[200];
+char buf2957[200];
+char buf2958[200];
+char buf2959[200];
+char buf2960[200];
+char buf2961[200];
+char buf2962[200];
+char buf2963[200];
+char buf2964[200];
+char buf2965[200];
+char buf2966[200];
+char buf2967[200];
+char buf2968[200];
+char buf2969[200];
+char buf2970[200];
+char buf2971[200];
+char buf2972[200];
+char buf2973[200];
+char buf2974[200];
+char buf2975[200];
+char buf2976[200];
+char buf2977[200];
+char buf2978[200];
+char buf2979[200];
+char buf2980[200];
+char buf2981[200];
+char buf2982[200];
+char buf2983[200];
+char buf2984[200];
+char buf2985[200];
+char buf2986[200];
+char buf2987[200];
+char buf2988[200];
+char buf2989[200];
+char buf2990[200];
+char buf2991[200];
+char buf2992[200];
+char buf2993[200];
+char buf2994[200];
+char buf2995[200];
+char buf2996[200];
+char buf2997[200];
+char buf2998[200];
+char buf2999[200];
+char buf3000[200];
+char buf3001[200];
+char buf3002[200];
+char buf3003[200];
+char buf3004[200];
+char buf3005[200];
+char buf3006[200];
+char buf3007[200];
+char buf3008[200];
+char buf3009[200];
+char buf3010[200];
+char buf3011[200];
+char buf3012[200];
+char buf3013[200];
+char buf3014[200];
+char buf3015[200];
+char buf3016[200];
+char buf3017[200];
+char buf3018[200];
+char buf3019[200];
+char buf3020[200];
+char buf3021[200];
+char buf3022[200];
+char buf3023[200];
+char buf3024[200];
+char buf3025[200];
+char buf3026[200];
+char buf3027[200];
+char buf3028[200];
+char buf3029[200];
+char buf3030[200];
+char buf3031[200];
+char buf3032[200];
+char buf3033[200];
+char buf3034[200];
+char buf3035[200];
+char buf3036[200];
+char buf3037[200];
+char buf3038[200];
+char buf3039[200];
+char buf3040[200];
+char buf3041[200];
+char buf3042[200];
+char buf3043[200];
+char buf3044[200];
+char buf3045[200];
+char buf3046[200];
+char buf3047[200];
+char buf3048[200];
+char buf3049[200];
+char buf3050[200];
+char buf3051[200];
+char buf3052[200];
+char buf3053[200];
+char buf3054[200];
+char buf3055[200];
+char buf3056[200];
+char buf3057[200];
+char buf3058[200];
+char buf3059[200];
+char buf3060[200];
+char buf3061[200];
+char buf3062[200];
+char buf3063[200];
+char buf3064[200];
+char buf3065[200];
+char buf3066[200];
+char buf3067[200];
+char buf3068[200];
+char buf3069[200];
+char buf3070[200];
+char buf3071[200];
+char buf3072[200];
+char buf3073[200];
+char buf3074[200];
+char buf3075[200];
+char buf3076[200];
+char buf3077[200];
+char buf3078[200];
+char buf3079[200];
+char buf3080[200];
+char buf3081[200];
+char buf3082[200];
+char buf3083[200];
+char buf3084[200];
+char buf3085[200];
+char buf3086[200];
+char buf3087[200];
+char buf3088[200];
+char buf3089[200];
+char buf3090[200];
+char buf3091[200];
+char buf3092[200];
+char buf3093[200];
+char buf3094[200];
+char buf3095[200];
+char buf3096[200];
+char buf3097[200];
+char buf3098[200];
+char buf3099[200];
+char buf3100[200];
+char buf3101[200];
+char buf3102[200];
+char buf3103[200];
+char buf3104[200];
+char buf3105[200];
+char buf3106[200];
+char buf3107[200];
+char buf3108[200];
+char buf3109[200];
+char buf3110[200];
+char buf3111[200];
+char buf3112[200];
+char buf3113[200];
+char buf3114[200];
+char buf3115[200];
+char buf3116[200];
+char buf3117[200];
+char buf3118[200];
+char buf3119[200];
+char buf3120[200];
+char buf3121[200];
+char buf3122[200];
+char buf3123[200];
+char buf3124[200];
+char buf3125[200];
+char buf3126[200];
+char buf3127[200];
+char buf3128[200];
+char buf3129[200];
+char buf3130[200];
+char buf3131[200];
+char buf3132[200];
+char buf3133[200];
+char buf3134[200];
+char buf3135[200];
+char buf3136[200];
+char buf3137[200];
+char buf3138[200];
+char buf3139[200];
+char buf3140[200];
+char buf3141[200];
+char buf3142[200];
+char buf3143[200];
+char buf3144[200];
+char buf3145[200];
+char buf3146[200];
+char buf3147[200];
+char buf3148[200];
+char buf3149[200];
+char buf3150[200];
+char buf3151[200];
+char buf3152[200];
+char buf3153[200];
+char buf3154[200];
+char buf3155[200];
+char buf3156[200];
+char buf3157[200];
+char buf3158[200];
+char buf3159[200];
+char buf3160[200];
+char buf3161[200];
+char buf3162[200];
+char buf3163[200];
+char buf3164[200];
+char buf3165[200];
+char buf3166[200];
+char buf3167[200];
+char buf3168[200];
+char buf3169[200];
+char buf3170[200];
+char buf3171[200];
+char buf3172[200];
+char buf3173[200];
+char buf3174[200];
+char buf3175[200];
+char buf3176[200];
+char buf3177[200];
+char buf3178[200];
+char buf3179[200];
+char buf3180[200];
+char buf3181[200];
+char buf3182[200];
+char buf3183[200];
+char buf3184[200];
+char buf3185[200];
+char buf3186[200];
+char buf3187[200];
+char buf3188[200];
+char buf3189[200];
+char buf3190[200];
+char buf3191[200];
+char buf3192[200];
+char buf3193[200];
+char buf3194[200];
+char buf3195[200];
+char buf3196[200];
+char buf3197[200];
+char buf3198[200];
+char buf3199[200];
+char buf3200[200];
+char buf3201[200];
+char buf3202[200];
+char buf3203[200];
+char buf3204[200];
+char buf3205[200];
+char buf3206[200];
+char buf3207[200];
+char buf3208[200];
+char buf3209[200];
+char buf3210[200];
+char buf3211[200];
+char buf3212[200];
+char buf3213[200];
+char buf3214[200];
+char buf3215[200];
+char buf3216[200];
+char buf3217[200];
+char buf3218[200];
+char buf3219[200];
+char buf3220[200];
+char buf3221[200];
+char buf3222[200];
+char buf3223[200];
+char buf3224[200];
+char buf3225[200];
+char buf3226[200];
+char buf3227[200];
+char buf3228[200];
+char buf3229[200];
+char buf3230[200];
+char buf3231[200];
+char buf3232[200];
+char buf3233[200];
+char buf3234[200];
+char buf3235[200];
+char buf3236[200];
+char buf3237[200];
+char buf3238[200];
+char buf3239[200];
+char buf3240[200];
+char buf3241[200];
+char buf3242[200];
+char buf3243[200];
+char buf3244[200];
+char buf3245[200];
+char buf3246[200];
+char buf3247[200];
+char buf3248[200];
+char buf3249[200];
+char buf3250[200];
+char buf3251[200];
+char buf3252[200];
+char buf3253[200];
+char buf3254[200];
+char buf3255[200];
+char buf3256[200];
+char buf3257[200];
+char buf3258[200];
+char buf3259[200];
+char buf3260[200];
+char buf3261[200];
+char buf3262[200];
+char buf3263[200];
+char buf3264[200];
+char buf3265[200];
+char buf3266[200];
+char buf3267[200];
+char buf3268[200];
+char buf3269[200];
+char buf3270[200];
+char buf3271[200];
+char buf3272[200];
+char buf3273[200];
+char buf3274[200];
+char buf3275[200];
+char buf3276[200];
+char buf3277[200];
+char buf3278[200];
+char buf3279[200];
+char buf3280[200];
+char buf3281[200];
+char buf3282[200];
+char buf3283[200];
+char buf3284[200];
+char buf3285[200];
+char buf3286[200];
+char buf3287[200];
+char buf3288[200];
+char buf3289[200];
+char buf3290[200];
+char buf3291[200];
+char buf3292[200];
+char buf3293[200];
+char buf3294[200];
+char buf3295[200];
+char buf3296[200];
+char buf3297[200];
+char buf3298[200];
+char buf3299[200];
+char buf3300[200];
+char buf3301[200];
+char buf3302[200];
+char buf3303[200];
+char buf3304[200];
+char buf3305[200];
+char buf3306[200];
+char buf3307[200];
+char buf3308[200];
+char buf3309[200];
+char buf3310[200];
+char buf3311[200];
+char buf3312[200];
+char buf3313[200];
+char buf3314[200];
+char buf3315[200];
+char buf3316[200];
+char buf3317[200];
+char buf3318[200];
+char buf3319[200];
+char buf3320[200];
+char buf3321[200];
+char buf3322[200];
+char buf3323[200];
+char buf3324[200];
+char buf3325[200];
+char buf3326[200];
+char buf3327[200];
+char buf3328[200];
+char buf3329[200];
+char buf3330[200];
+char buf3331[200];
+char buf3332[200];
+char buf3333[200];
+char buf3334[200];
+char buf3335[200];
+char buf3336[200];
+char buf3337[200];
+char buf3338[200];
+char buf3339[200];
+char buf3340[200];
+char buf3341[200];
+char buf3342[200];
+char buf3343[200];
+char buf3344[200];
+char buf3345[200];
+char buf3346[200];
+char buf3347[200];
+char buf3348[200];
+char buf3349[200];
+char buf3350[200];
+char buf3351[200];
+char buf3352[200];
+char buf3353[200];
+char buf3354[200];
+char buf3355[200];
+char buf3356[200];
+char buf3357[200];
+char buf3358[200];
+char buf3359[200];
+char buf3360[200];
+char buf3361[200];
+char buf3362[200];
+char buf3363[200];
+char buf3364[200];
+char buf3365[200];
+char buf3366[200];
+char buf3367[200];
+char buf3368[200];
+char buf3369[200];
+char buf3370[200];
+char buf3371[200];
+char buf3372[200];
+char buf3373[200];
+char buf3374[200];
+char buf3375[200];
+char buf3376[200];
+char buf3377[200];
+char buf3378[200];
+char buf3379[200];
+char buf3380[200];
+char buf3381[200];
+char buf3382[200];
+char buf3383[200];
+char buf3384[200];
+char buf3385[200];
+char buf3386[200];
+char buf3387[200];
+char buf3388[200];
+char buf3389[200];
+char buf3390[200];
+char buf3391[200];
+char buf3392[200];
+char buf3393[200];
+char buf3394[200];
+char buf3395[200];
+char buf3396[200];
+char buf3397[200];
+char buf3398[200];
+char buf3399[200];
+char buf3400[200];
+char buf3401[200];
+char buf3402[200];
+char buf3403[200];
+char buf3404[200];
+char buf3405[200];
+char buf3406[200];
+char buf3407[200];
+char buf3408[200];
+char buf3409[200];
+char buf3410[200];
+char buf3411[200];
+char buf3412[200];
+char buf3413[200];
+char buf3414[200];
+char buf3415[200];
+char buf3416[200];
+char buf3417[200];
+char buf3418[200];
+char buf3419[200];
+char buf3420[200];
+char buf3421[200];
+char buf3422[200];
+char buf3423[200];
+char buf3424[200];
+char buf3425[200];
+char buf3426[200];
+char buf3427[200];
+char buf3428[200];
+char buf3429[200];
+char buf3430[200];
+char buf3431[200];
+char buf3432[200];
+char buf3433[200];
+char buf3434[200];
+char buf3435[200];
+char buf3436[200];
+char buf3437[200];
+char buf3438[200];
+char buf3439[200];
+char buf3440[200];
+char buf3441[200];
+char buf3442[200];
+char buf3443[200];
+char buf3444[200];
+char buf3445[200];
+char buf3446[200];
+char buf3447[200];
+char buf3448[200];
+char buf3449[200];
+char buf3450[200];
+char buf3451[200];
+char buf3452[200];
+char buf3453[200];
+char buf3454[200];
+char buf3455[200];
+char buf3456[200];
+char buf3457[200];
+char buf3458[200];
+char buf3459[200];
+char buf3460[200];
+char buf3461[200];
+char buf3462[200];
+char buf3463[200];
+char buf3464[200];
+char buf3465[200];
+char buf3466[200];
+char buf3467[200];
+char buf3468[200];
+char buf3469[200];
+char buf3470[200];
+char buf3471[200];
+char buf3472[200];
+char buf3473[200];
+char buf3474[200];
+char buf3475[200];
+char buf3476[200];
+char buf3477[200];
+char buf3478[200];
+char buf3479[200];
+char buf3480[200];
+char buf3481[200];
+char buf3482[200];
+char buf3483[200];
+char buf3484[200];
+char buf3485[200];
+char buf3486[200];
+char buf3487[200];
+char buf3488[200];
+char buf3489[200];
+char buf3490[200];
+char buf3491[200];
+char buf3492[200];
+char buf3493[200];
+char buf3494[200];
+char buf3495[200];
+char buf3496[200];
+char buf3497[200];
+char buf3498[200];
+char buf3499[200];
+char buf3500[200];
+char buf3501[200];
+char buf3502[200];
+char buf3503[200];
+char buf3504[200];
+char buf3505[200];
+char buf3506[200];
+char buf3507[200];
+char buf3508[200];
+char buf3509[200];
+char buf3510[200];
+char buf3511[200];
+char buf3512[200];
+char buf3513[200];
+char buf3514[200];
+char buf3515[200];
+char buf3516[200];
+char buf3517[200];
+char buf3518[200];
+char buf3519[200];
+char buf3520[200];
+char buf3521[200];
+char buf3522[200];
+char buf3523[200];
+char buf3524[200];
+char buf3525[200];
+char buf3526[200];
+char buf3527[200];
+char buf3528[200];
+char buf3529[200];
+char buf3530[200];
+char buf3531[200];
+char buf3532[200];
+char buf3533[200];
+char buf3534[200];
+char buf3535[200];
+char buf3536[200];
+char buf3537[200];
+char buf3538[200];
+char buf3539[200];
+char buf3540[200];
+char buf3541[200];
+char buf3542[200];
+char buf3543[200];
+char buf3544[200];
+char buf3545[200];
+char buf3546[200];
+char buf3547[200];
+char buf3548[200];
+char buf3549[200];
+char buf3550[200];
+char buf3551[200];
+char buf3552[200];
+char buf3553[200];
+char buf3554[200];
+char buf3555[200];
+char buf3556[200];
+char buf3557[200];
+char buf3558[200];
+char buf3559[200];
+char buf3560[200];
+char buf3561[200];
+char buf3562[200];
+char buf3563[200];
+char buf3564[200];
+char buf3565[200];
+char buf3566[200];
+char buf3567[200];
+char buf3568[200];
+char buf3569[200];
+char buf3570[200];
+char buf3571[200];
+char buf3572[200];
+char buf3573[200];
+char buf3574[200];
+char buf3575[200];
+char buf3576[200];
+char buf3577[200];
+char buf3578[200];
+char buf3579[200];
+char buf3580[200];
+char buf3581[200];
+char buf3582[200];
+char buf3583[200];
+char buf3584[200];
+char buf3585[200];
+char buf3586[200];
+char buf3587[200];
+char buf3588[200];
+char buf3589[200];
+char buf3590[200];
+char buf3591[200];
+char buf3592[200];
+char buf3593[200];
+char buf3594[200];
+char buf3595[200];
+char buf3596[200];
+char buf3597[200];
+char buf3598[200];
+char buf3599[200];
+char buf3600[200];
+char buf3601[200];
+char buf3602[200];
+char buf3603[200];
+char buf3604[200];
+char buf3605[200];
+char buf3606[200];
+char buf3607[200];
+char buf3608[200];
+char buf3609[200];
+char buf3610[200];
+char buf3611[200];
+char buf3612[200];
+char buf3613[200];
+char buf3614[200];
+char buf3615[200];
+char buf3616[200];
+char buf3617[200];
+char buf3618[200];
+char buf3619[200];
+char buf3620[200];
+char buf3621[200];
+char buf3622[200];
+char buf3623[200];
+char buf3624[200];
+char buf3625[200];
+char buf3626[200];
+char buf3627[200];
+char buf3628[200];
+char buf3629[200];
+char buf3630[200];
+char buf3631[200];
+char buf3632[200];
+char buf3633[200];
+char buf3634[200];
+char buf3635[200];
+char buf3636[200];
+char buf3637[200];
+char buf3638[200];
+char buf3639[200];
+char buf3640[200];
+char buf3641[200];
+char buf3642[200];
+char buf3643[200];
+char buf3644[200];
+char buf3645[200];
+char buf3646[200];
+char buf3647[200];
+char buf3648[200];
+char buf3649[200];
+char buf3650[200];
+char buf3651[200];
+char buf3652[200];
+char buf3653[200];
+char buf3654[200];
+char buf3655[200];
+char buf3656[200];
+char buf3657[200];
+char buf3658[200];
+char buf3659[200];
+char buf3660[200];
+char buf3661[200];
+char buf3662[200];
+char buf3663[200];
+char buf3664[200];
+char buf3665[200];
+char buf3666[200];
+char buf3667[200];
+char buf3668[200];
+char buf3669[200];
+char buf3670[200];
+char buf3671[200];
+char buf3672[200];
+char buf3673[200];
+char buf3674[200];
+char buf3675[200];
+char buf3676[200];
+char buf3677[200];
+char buf3678[200];
+char buf3679[200];
+char buf3680[200];
+char buf3681[200];
+char buf3682[200];
+char buf3683[200];
+char buf3684[200];
+char buf3685[200];
+char buf3686[200];
+char buf3687[200];
+char buf3688[200];
+char buf3689[200];
+char buf3690[200];
+char buf3691[200];
+char buf3692[200];
+char buf3693[200];
+char buf3694[200];
+char buf3695[200];
+char buf3696[200];
+char buf3697[200];
+char buf3698[200];
+char buf3699[200];
+char buf3700[200];
+char buf3701[200];
+char buf3702[200];
+char buf3703[200];
+char buf3704[200];
+char buf3705[200];
+char buf3706[200];
+char buf3707[200];
+char buf3708[200];
+char buf3709[200];
+char buf3710[200];
+char buf3711[200];
+char buf3712[200];
+char buf3713[200];
+char buf3714[200];
+char buf3715[200];
+char buf3716[200];
+char buf3717[200];
+char buf3718[200];
+char buf3719[200];
+char buf3720[200];
+char buf3721[200];
+char buf3722[200];
+char buf3723[200];
+char buf3724[200];
+char buf3725[200];
+char buf3726[200];
+char buf3727[200];
+char buf3728[200];
+char buf3729[200];
+char buf3730[200];
+char buf3731[200];
+char buf3732[200];
+char buf3733[200];
+char buf3734[200];
+char buf3735[200];
+char buf3736[200];
+char buf3737[200];
+char buf3738[200];
+char buf3739[200];
+char buf3740[200];
+char buf3741[200];
+char buf3742[200];
+char buf3743[200];
+char buf3744[200];
+char buf3745[200];
+char buf3746[200];
+char buf3747[200];
+char buf3748[200];
+char buf3749[200];
+char buf3750[200];
+char buf3751[200];
+char buf3752[200];
+char buf3753[200];
+char buf3754[200];
+char buf3755[200];
+char buf3756[200];
+char buf3757[200];
+char buf3758[200];
+char buf3759[200];
+char buf3760[200];
+char buf3761[200];
+char buf3762[200];
+char buf3763[200];
+char buf3764[200];
+char buf3765[200];
+char buf3766[200];
+char buf3767[200];
+char buf3768[200];
+char buf3769[200];
+char buf3770[200];
+char buf3771[200];
+char buf3772[200];
+char buf3773[200];
+char buf3774[200];
+char buf3775[200];
+char buf3776[200];
+char buf3777[200];
+char buf3778[200];
+char buf3779[200];
+char buf3780[200];
+char buf3781[200];
+char buf3782[200];
+char buf3783[200];
+char buf3784[200];
+char buf3785[200];
+char buf3786[200];
+char buf3787[200];
+char buf3788[200];
+char buf3789[200];
+char buf3790[200];
+char buf3791[200];
+char buf3792[200];
+char buf3793[200];
+char buf3794[200];
+char buf3795[200];
+char buf3796[200];
+char buf3797[200];
+char buf3798[200];
+char buf3799[200];
+char buf3800[200];
+char buf3801[200];
+char buf3802[200];
+char buf3803[200];
+char buf3804[200];
+char buf3805[200];
+char buf3806[200];
+char buf3807[200];
+char buf3808[200];
+char buf3809[200];
+char buf3810[200];
+char buf3811[200];
+char buf3812[200];
+char buf3813[200];
+char buf3814[200];
+char buf3815[200];
+char buf3816[200];
+char buf3817[200];
+char buf3818[200];
+char buf3819[200];
+char buf3820[200];
+char buf3821[200];
+char buf3822[200];
+char buf3823[200];
+char buf3824[200];
+char buf3825[200];
+char buf3826[200];
+char buf3827[200];
+char buf3828[200];
+char buf3829[200];
+char buf3830[200];
+char buf3831[200];
+char buf3832[200];
+char buf3833[200];
+char buf3834[200];
+char buf3835[200];
+char buf3836[200];
+char buf3837[200];
+char buf3838[200];
+char buf3839[200];
+char buf3840[200];
+char buf3841[200];
+char buf3842[200];
+char buf3843[200];
+char buf3844[200];
+char buf3845[200];
+char buf3846[200];
+char buf3847[200];
+char buf3848[200];
+char buf3849[200];
+char buf3850[200];
+char buf3851[200];
+char buf3852[200];
+char buf3853[200];
+char buf3854[200];
+char buf3855[200];
+char buf3856[200];
+char buf3857[200];
+char buf3858[200];
+char buf3859[200];
+char buf3860[200];
+char buf3861[200];
+char buf3862[200];
+char buf3863[200];
+char buf3864[200];
+char buf3865[200];
+char buf3866[200];
+char buf3867[200];
+char buf3868[200];
+char buf3869[200];
+char buf3870[200];
+char buf3871[200];
+char buf3872[200];
+char buf3873[200];
+char buf3874[200];
+char buf3875[200];
+char buf3876[200];
+char buf3877[200];
+char buf3878[200];
+char buf3879[200];
+char buf3880[200];
+char buf3881[200];
+char buf3882[200];
+char buf3883[200];
+char buf3884[200];
+char buf3885[200];
+char buf3886[200];
+char buf3887[200];
+char buf3888[200];
+char buf3889[200];
+char buf3890[200];
+char buf3891[200];
+char buf3892[200];
+char buf3893[200];
+char buf3894[200];
+char buf3895[200];
+char buf3896[200];
+char buf3897[200];
+char buf3898[200];
+char buf3899[200];
+char buf3900[200];
+char buf3901[200];
+char buf3902[200];
+char buf3903[200];
+char buf3904[200];
+char buf3905[200];
+char buf3906[200];
+char buf3907[200];
+char buf3908[200];
+char buf3909[200];
+char buf3910[200];
+char buf3911[200];
+char buf3912[200];
+char buf3913[200];
+char buf3914[200];
+char buf3915[200];
+char buf3916[200];
+char buf3917[200];
+char buf3918[200];
+char buf3919[200];
+char buf3920[200];
+char buf3921[200];
+char buf3922[200];
+char buf3923[200];
+char buf3924[200];
+char buf3925[200];
+char buf3926[200];
+char buf3927[200];
+char buf3928[200];
+char buf3929[200];
+char buf3930[200];
+char buf3931[200];
+char buf3932[200];
+char buf3933[200];
+char buf3934[200];
+char buf3935[200];
+char buf3936[200];
+char buf3937[200];
+char buf3938[200];
+char buf3939[200];
+char buf3940[200];
+char buf3941[200];
+char buf3942[200];
+char buf3943[200];
+char buf3944[200];
+char buf3945[200];
+char buf3946[200];
+char buf3947[200];
+char buf3948[200];
+char buf3949[200];
+char buf3950[200];
+char buf3951[200];
+char buf3952[200];
+char buf3953[200];
+char buf3954[200];
+char buf3955[200];
+char buf3956[200];
+char buf3957[200];
+char buf3958[200];
+char buf3959[200];
+char buf3960[200];
+char buf3961[200];
+char buf3962[200];
+char buf3963[200];
+char buf3964[200];
+char buf3965[200];
+char buf3966[200];
+char buf3967[200];
+char buf3968[200];
+char buf3969[200];
+char buf3970[200];
+char buf3971[200];
+char buf3972[200];
+char buf3973[200];
+char buf3974[200];
+char buf3975[200];
+char buf3976[200];
+char buf3977[200];
+char buf3978[200];
+char buf3979[200];
+char buf3980[200];
+char buf3981[200];
+char buf3982[200];
+char buf3983[200];
+char buf3984[200];
+char buf3985[200];
+char buf3986[200];
+char buf3987[200];
+char buf3988[200];
+char buf3989[200];
+char buf3990[200];
+char buf3991[200];
+char buf3992[200];
+char buf3993[200];
+char buf3994[200];
+char buf3995[200];
+char buf3996[200];
+char buf3997[200];
+char buf3998[200];
+char buf3999[200];
+char buf4000[200];
+char buf4001[200];
+char buf4002[200];
+char buf4003[200];
+char buf4004[200];
+char buf4005[200];
+char buf4006[200];
+char buf4007[200];
+char buf4008[200];
+char buf4009[200];
+char buf4010[200];
+char buf4011[200];
+char buf4012[200];
+char buf4013[200];
+char buf4014[200];
+char buf4015[200];
+char buf4016[200];
+char buf4017[200];
+char buf4018[200];
+char buf4019[200];
+char buf4020[200];
+char buf4021[200];
+char buf4022[200];
+char buf4023[200];
+char buf4024[200];
+char buf4025[200];
+char buf4026[200];
+char buf4027[200];
+char buf4028[200];
+char buf4029[200];
+char buf4030[200];
+char buf4031[200];
+char buf4032[200];
+char buf4033[200];
+char buf4034[200];
+char buf4035[200];
+char buf4036[200];
+char buf4037[200];
+char buf4038[200];
+char buf4039[200];
+char buf4040[200];
+char buf4041[200];
+char buf4042[200];
+char buf4043[200];
+char buf4044[200];
+char buf4045[200];
+char buf4046[200];
+char buf4047[200];
+char buf4048[200];
+char buf4049[200];
+char buf4050[200];
+char buf4051[200];
+char buf4052[200];
+char buf4053[200];
+char buf4054[200];
+char buf4055[200];
+char buf4056[200];
+char buf4057[200];
+char buf4058[200];
+char buf4059[200];
+char buf4060[200];
+char buf4061[200];
+char buf4062[200];
+char buf4063[200];
+char buf4064[200];
+char buf4065[200];
+char buf4066[200];
+char buf4067[200];
+char buf4068[200];
+char buf4069[200];
+char buf4070[200];
+char buf4071[200];
+char buf4072[200];
+char buf4073[200];
+char buf4074[200];
+char buf4075[200];
+char buf4076[200];
+char buf4077[200];
+char buf4078[200];
+char buf4079[200];
+char buf4080[200];
+char buf4081[200];
+char buf4082[200];
+char buf4083[200];
+char buf4084[200];
+char buf4085[200];
+char buf4086[200];
+char buf4087[200];
+char buf4088[200];
+char buf4089[200];
+char buf4090[200];
+char buf4091[200];
+char buf4092[200];
+char buf4093[200];
+char buf4094[200];
+char buf4095[200];
+char buf4096[200];
+char buf4097[200];
+char buf4098[200];
+char buf4099[200];
+char buf4100[200];
+char buf4101[200];
+char buf4102[200];
+char buf4103[200];
+char buf4104[200];
+char buf4105[200];
+char buf4106[200];
+char buf4107[200];
+char buf4108[200];
+char buf4109[200];
+char buf4110[200];
+char buf4111[200];
+char buf4112[200];
+char buf4113[200];
+char buf4114[200];
+char buf4115[200];
+char buf4116[200];
+char buf4117[200];
+char buf4118[200];
+char buf4119[200];
+char buf4120[200];
+char buf4121[200];
+char buf4122[200];
+char buf4123[200];
+char buf4124[200];
+char buf4125[200];
+char buf4126[200];
+char buf4127[200];
+char buf4128[200];
+char buf4129[200];
+char buf4130[200];
+char buf4131[200];
+char buf4132[200];
+char buf4133[200];
+char buf4134[200];
+char buf4135[200];
+char buf4136[200];
+char buf4137[200];
+char buf4138[200];
+char buf4139[200];
+char buf4140[200];
+char buf4141[200];
+char buf4142[200];
+char buf4143[200];
+char buf4144[200];
+char buf4145[200];
+char buf4146[200];
+char buf4147[200];
+char buf4148[200];
+char buf4149[200];
+char buf4150[200];
+char buf4151[200];
+char buf4152[200];
+char buf4153[200];
+char buf4154[200];
+char buf4155[200];
+char buf4156[200];
+char buf4157[200];
+char buf4158[200];
+char buf4159[200];
+char buf4160[200];
+char buf4161[200];
+char buf4162[200];
+char buf4163[200];
+char buf4164[200];
+char buf4165[200];
+char buf4166[200];
+char buf4167[200];
+char buf4168[200];
+char buf4169[200];
+char buf4170[200];
+char buf4171[200];
+char buf4172[200];
+char buf4173[200];
+char buf4174[200];
+char buf4175[200];
+char buf4176[200];
+char buf4177[200];
+char buf4178[200];
+char buf4179[200];
+char buf4180[200];
+char buf4181[200];
+char buf4182[200];
+char buf4183[200];
+char buf4184[200];
+char buf4185[200];
+char buf4186[200];
+char buf4187[200];
+char buf4188[200];
+char buf4189[200];
+char buf4190[200];
+char buf4191[200];
+char buf4192[200];
+char buf4193[200];
+char buf4194[200];
+char buf4195[200];
+char buf4196[200];
+char buf4197[200];
+char buf4198[200];
+char buf4199[200];
+char buf4200[200];
+char buf4201[200];
+char buf4202[200];
+char buf4203[200];
+char buf4204[200];
+char buf4205[200];
+char buf4206[200];
+char buf4207[200];
+char buf4208[200];
+char buf4209[200];
+char buf4210[200];
+char buf4211[200];
+char buf4212[200];
+char buf4213[200];
+char buf4214[200];
+char buf4215[200];
+char buf4216[200];
+char buf4217[200];
+char buf4218[200];
+char buf4219[200];
+char buf4220[200];
+char buf4221[200];
+char buf4222[200];
+char buf4223[200];
+char buf4224[200];
+char buf4225[200];
+char buf4226[200];
+char buf4227[200];
+char buf4228[200];
+char buf4229[200];
+char buf4230[200];
+char buf4231[200];
+char buf4232[200];
+char buf4233[200];
+char buf4234[200];
+char buf4235[200];
+char buf4236[200];
+char buf4237[200];
+char buf4238[200];
+char buf4239[200];
+char buf4240[200];
+char buf4241[200];
+char buf4242[200];
+char buf4243[200];
+char buf4244[200];
+char buf4245[200];
+char buf4246[200];
+char buf4247[200];
+char buf4248[200];
+char buf4249[200];
+char buf4250[200];
+char buf4251[200];
+char buf4252[200];
+char buf4253[200];
+char buf4254[200];
+char buf4255[200];
+char buf4256[200];
+char buf4257[200];
+char buf4258[200];
+char buf4259[200];
+char buf4260[200];
+char buf4261[200];
+char buf4262[200];
+char buf4263[200];
+char buf4264[200];
+char buf4265[200];
+char buf4266[200];
+char buf4267[200];
+char buf4268[200];
+char buf4269[200];
+char buf4270[200];
+char buf4271[200];
+char buf4272[200];
+char buf4273[200];
+char buf4274[200];
+char buf4275[200];
+char buf4276[200];
+char buf4277[200];
+char buf4278[200];
+char buf4279[200];
+char buf4280[200];
+char buf4281[200];
+char buf4282[200];
+char buf4283[200];
+char buf4284[200];
+char buf4285[200];
+char buf4286[200];
+char buf4287[200];
+char buf4288[200];
+char buf4289[200];
+char buf4290[200];
+char buf4291[200];
+char buf4292[200];
+char buf4293[200];
+char buf4294[200];
+char buf4295[200];
+char buf4296[200];
+char buf4297[200];
+char buf4298[200];
+char buf4299[200];
+char buf4300[200];
+char buf4301[200];
+char buf4302[200];
+char buf4303[200];
+char buf4304[200];
+char buf4305[200];
+char buf4306[200];
+char buf4307[200];
+char buf4308[200];
+char buf4309[200];
+char buf4310[200];
+char buf4311[200];
+char buf4312[200];
+char buf4313[200];
+char buf4314[200];
+char buf4315[200];
+char buf4316[200];
+char buf4317[200];
+char buf4318[200];
+char buf4319[200];
+char buf4320[200];
+char buf4321[200];
+char buf4322[200];
+char buf4323[200];
+char buf4324[200];
+char buf4325[200];
+char buf4326[200];
+char buf4327[200];
+char buf4328[200];
+char buf4329[200];
+char buf4330[200];
+char buf4331[200];
+char buf4332[200];
+char buf4333[200];
+char buf4334[200];
+char buf4335[200];
+char buf4336[200];
+char buf4337[200];
+char buf4338[200];
+char buf4339[200];
+char buf4340[200];
+char buf4341[200];
+char buf4342[200];
+char buf4343[200];
+char buf4344[200];
+char buf4345[200];
+char buf4346[200];
+char buf4347[200];
+char buf4348[200];
+char buf4349[200];
+char buf4350[200];
+char buf4351[200];
+char buf4352[200];
+char buf4353[200];
+char buf4354[200];
+char buf4355[200];
+char buf4356[200];
+char buf4357[200];
+char buf4358[200];
+char buf4359[200];
+char buf4360[200];
+char buf4361[200];
+char buf4362[200];
+char buf4363[200];
+char buf4364[200];
+char buf4365[200];
+char buf4366[200];
+char buf4367[200];
+char buf4368[200];
+char buf4369[200];
+char buf4370[200];
+char buf4371[200];
+char buf4372[200];
+char buf4373[200];
+char buf4374[200];
+char buf4375[200];
+char buf4376[200];
+char buf4377[200];
+char buf4378[200];
+char buf4379[200];
+char buf4380[200];
+char buf4381[200];
+char buf4382[200];
+char buf4383[200];
+char buf4384[200];
+char buf4385[200];
+char buf4386[200];
+char buf4387[200];
+char buf4388[200];
+char buf4389[200];
+char buf4390[200];
+char buf4391[200];
+char buf4392[200];
+char buf4393[200];
+char buf4394[200];
+char buf4395[200];
+char buf4396[200];
+char buf4397[200];
+char buf4398[200];
+char buf4399[200];
+char buf4400[200];
+char buf4401[200];
+char buf4402[200];
+char buf4403[200];
+char buf4404[200];
+char buf4405[200];
+char buf4406[200];
+char buf4407[200];
+char buf4408[200];
+char buf4409[200];
+char buf4410[200];
+char buf4411[200];
+char buf4412[200];
+char buf4413[200];
+char buf4414[200];
+char buf4415[200];
+char buf4416[200];
+char buf4417[200];
+char buf4418[200];
+char buf4419[200];
+char buf4420[200];
+char buf4421[200];
+char buf4422[200];
+char buf4423[200];
+char buf4424[200];
+char buf4425[200];
+char buf4426[200];
+char buf4427[200];
+char buf4428[200];
+char buf4429[200];
+char buf4430[200];
+char buf4431[200];
+char buf4432[200];
+char buf4433[200];
+char buf4434[200];
+char buf4435[200];
+char buf4436[200];
+char buf4437[200];
+char buf4438[200];
+char buf4439[200];
+char buf4440[200];
+char buf4441[200];
+char buf4442[200];
+char buf4443[200];
+char buf4444[200];
+char buf4445[200];
+char buf4446[200];
+char buf4447[200];
+char buf4448[200];
+char buf4449[200];
+char buf4450[200];
+char buf4451[200];
+char buf4452[200];
+char buf4453[200];
+char buf4454[200];
+char buf4455[200];
+char buf4456[200];
+char buf4457[200];
+char buf4458[200];
+char buf4459[200];
+char buf4460[200];
+char buf4461[200];
+char buf4462[200];
+char buf4463[200];
+char buf4464[200];
+char buf4465[200];
+char buf4466[200];
+char buf4467[200];
+char buf4468[200];
+char buf4469[200];
+char buf4470[200];
+char buf4471[200];
+char buf4472[200];
+char buf4473[200];
+char buf4474[200];
+char buf4475[200];
+char buf4476[200];
+char buf4477[200];
+char buf4478[200];
+char buf4479[200];
+char buf4480[200];
+char buf4481[200];
+char buf4482[200];
+char buf4483[200];
+char buf4484[200];
+char buf4485[200];
+char buf4486[200];
+char buf4487[200];
+char buf4488[200];
+char buf4489[200];
+char buf4490[200];
+char buf4491[200];
+char buf4492[200];
+char buf4493[200];
+char buf4494[200];
+char buf4495[200];
+char buf4496[200];
+char buf4497[200];
+char buf4498[200];
+char buf4499[200];
+char buf4500[200];
+char buf4501[200];
+char buf4502[200];
+char buf4503[200];
+char buf4504[200];
+char buf4505[200];
+char buf4506[200];
+char buf4507[200];
+char buf4508[200];
+char buf4509[200];
+char buf4510[200];
+char buf4511[200];
+char buf4512[200];
+char buf4513[200];
+char buf4514[200];
+char buf4515[200];
+char buf4516[200];
+char buf4517[200];
+char buf4518[200];
+char buf4519[200];
+char buf4520[200];
+char buf4521[200];
+char buf4522[200];
+char buf4523[200];
+char buf4524[200];
+char buf4525[200];
+char buf4526[200];
+char buf4527[200];
+char buf4528[200];
+char buf4529[200];
+char buf4530[200];
+char buf4531[200];
+char buf4532[200];
+char buf4533[200];
+char buf4534[200];
+char buf4535[200];
+char buf4536[200];
+char buf4537[200];
+char buf4538[200];
+char buf4539[200];
+char buf4540[200];
+char buf4541[200];
+char buf4542[200];
+char buf4543[200];
+char buf4544[200];
+char buf4545[200];
+char buf4546[200];
+char buf4547[200];
+char buf4548[200];
+char buf4549[200];
+char buf4550[200];
+char buf4551[200];
+char buf4552[200];
+char buf4553[200];
+char buf4554[200];
+char buf4555[200];
+char buf4556[200];
+char buf4557[200];
+char buf4558[200];
+char buf4559[200];
+char buf4560[200];
+char buf4561[200];
+char buf4562[200];
+char buf4563[200];
+char buf4564[200];
+char buf4565[200];
+char buf4566[200];
+char buf4567[200];
+char buf4568[200];
+char buf4569[200];
+char buf4570[200];
+char buf4571[200];
+char buf4572[200];
+char buf4573[200];
+char buf4574[200];
+char buf4575[200];
+char buf4576[200];
+char buf4577[200];
+char buf4578[200];
+char buf4579[200];
+char buf4580[200];
+char buf4581[200];
+char buf4582[200];
+char buf4583[200];
+char buf4584[200];
+char buf4585[200];
+char buf4586[200];
+char buf4587[200];
+char buf4588[200];
+char buf4589[200];
+char buf4590[200];
+char buf4591[200];
+char buf4592[200];
+char buf4593[200];
+char buf4594[200];
+char buf4595[200];
+char buf4596[200];
+char buf4597[200];
+char buf4598[200];
+char buf4599[200];
+char buf4600[200];
+char buf4601[200];
+char buf4602[200];
+char buf4603[200];
+char buf4604[200];
+char buf4605[200];
+char buf4606[200];
+char buf4607[200];
+char buf4608[200];
+char buf4609[200];
+char buf4610[200];
+char buf4611[200];
+char buf4612[200];
+char buf4613[200];
+char buf4614[200];
+char buf4615[200];
+char buf4616[200];
+char buf4617[200];
+char buf4618[200];
+char buf4619[200];
+char buf4620[200];
+char buf4621[200];
+char buf4622[200];
+char buf4623[200];
+char buf4624[200];
+char buf4625[200];
+char buf4626[200];
+char buf4627[200];
+char buf4628[200];
+char buf4629[200];
+char buf4630[200];
+char buf4631[200];
+char buf4632[200];
+char buf4633[200];
+char buf4634[200];
+char buf4635[200];
+char buf4636[200];
+char buf4637[200];
+char buf4638[200];
+char buf4639[200];
+char buf4640[200];
+char buf4641[200];
+char buf4642[200];
+char buf4643[200];
+char buf4644[200];
+char buf4645[200];
+char buf4646[200];
+char buf4647[200];
+char buf4648[200];
+char buf4649[200];
+char buf4650[200];
+char buf4651[200];
+char buf4652[200];
+char buf4653[200];
+char buf4654[200];
+char buf4655[200];
+char buf4656[200];
+char buf4657[200];
+char buf4658[200];
+char buf4659[200];
+char buf4660[200];
+char buf4661[200];
+char buf4662[200];
+char buf4663[200];
+char buf4664[200];
+char buf4665[200];
+char buf4666[200];
+char buf4667[200];
+char buf4668[200];
+char buf4669[200];
+char buf4670[200];
+char buf4671[200];
+char buf4672[200];
+char buf4673[200];
+char buf4674[200];
+char buf4675[200];
+char buf4676[200];
+char buf4677[200];
+char buf4678[200];
+char buf4679[200];
+char buf4680[200];
+char buf4681[200];
+char buf4682[200];
+char buf4683[200];
+char buf4684[200];
+char buf4685[200];
+char buf4686[200];
+char buf4687[200];
+char buf4688[200];
+char buf4689[200];
+char buf4690[200];
+char buf4691[200];
+char buf4692[200];
+char buf4693[200];
+char buf4694[200];
+char buf4695[200];
+char buf4696[200];
+char buf4697[200];
+char buf4698[200];
+
+void RS_KERNEL test(int in, rs_kernel_context context) {
+    *(uchar*)buf0 = abs(*(char*)buf1);
+    *(uchar2*)buf2 = abs(*(char2*)buf3);
+    *(uchar3*)buf4 = abs(*(char3*)buf5);
+    *(uchar4*)buf6 = abs(*(char4*)buf7);
+    *(ushort*)buf8 = abs(*(short*)buf9);
+    *(ushort2*)buf10 = abs(*(short2*)buf11);
+    *(ushort3*)buf12 = abs(*(short3*)buf13);
+    *(ushort4*)buf14 = abs(*(short4*)buf15);
+    *(uint*)buf16 = abs(*(int*)buf17);
+    *(uint2*)buf18 = abs(*(int2*)buf19);
+    *(uint3*)buf20 = abs(*(int3*)buf21);
+    *(uint4*)buf22 = abs(*(int4*)buf23);
+    *(float*)buf24 = acos(*(float*)buf25);
+    *(float2*)buf26 = acos(*(float2*)buf27);
+    *(float3*)buf28 = acos(*(float3*)buf29);
+    *(float4*)buf30 = acos(*(float4*)buf31);
+    *(float*)buf32 = acosh(*(float*)buf33);
+    *(float2*)buf34 = acosh(*(float2*)buf35);
+    *(float3*)buf36 = acosh(*(float3*)buf37);
+    *(float4*)buf38 = acosh(*(float4*)buf39);
+    *(float*)buf40 = acospi(*(float*)buf41);
+    *(float2*)buf42 = acospi(*(float2*)buf43);
+    *(float3*)buf44 = acospi(*(float3*)buf45);
+    *(float4*)buf46 = acospi(*(float4*)buf47);
+    *(float*)buf48 = asin(*(float*)buf49);
+    *(float2*)buf50 = asin(*(float2*)buf51);
+    *(float3*)buf52 = asin(*(float3*)buf53);
+    *(float4*)buf54 = asin(*(float4*)buf55);
+    *(float*)buf56 = asinh(*(float*)buf57);
+    *(float2*)buf58 = asinh(*(float2*)buf59);
+    *(float3*)buf60 = asinh(*(float3*)buf61);
+    *(float4*)buf62 = asinh(*(float4*)buf63);
+    *(float*)buf64 = asinpi(*(float*)buf65);
+    *(float2*)buf66 = asinpi(*(float2*)buf67);
+    *(float3*)buf68 = asinpi(*(float3*)buf69);
+    *(float4*)buf70 = asinpi(*(float4*)buf71);
+    *(float*)buf72 = atan(*(float*)buf73);
+    *(float2*)buf74 = atan(*(float2*)buf75);
+    *(float3*)buf76 = atan(*(float3*)buf77);
+    *(float4*)buf78 = atan(*(float4*)buf79);
+    *(float*)buf80 = atan2(*(float*)buf81, *(float*)buf82);
+    *(float2*)buf83 = atan2(*(float2*)buf84, *(float2*)buf85);
+    *(float3*)buf86 = atan2(*(float3*)buf87, *(float3*)buf88);
+    *(float4*)buf89 = atan2(*(float4*)buf90, *(float4*)buf91);
+    *(float*)buf92 = atan2pi(*(float*)buf93, *(float*)buf94);
+    *(float2*)buf95 = atan2pi(*(float2*)buf96, *(float2*)buf97);
+    *(float3*)buf98 = atan2pi(*(float3*)buf99, *(float3*)buf100);
+    *(float4*)buf101 = atan2pi(*(float4*)buf102, *(float4*)buf103);
+    *(float*)buf104 = atanh(*(float*)buf105);
+    *(float2*)buf106 = atanh(*(float2*)buf107);
+    *(float3*)buf108 = atanh(*(float3*)buf109);
+    *(float4*)buf110 = atanh(*(float4*)buf111);
+    *(float*)buf112 = atanpi(*(float*)buf113);
+    *(float2*)buf114 = atanpi(*(float2*)buf115);
+    *(float3*)buf116 = atanpi(*(float3*)buf117);
+    *(float4*)buf118 = atanpi(*(float4*)buf119);
+    *(float*)buf120 = cbrt(*(float*)buf121);
+    *(float2*)buf122 = cbrt(*(float2*)buf123);
+    *(float3*)buf124 = cbrt(*(float3*)buf125);
+    *(float4*)buf126 = cbrt(*(float4*)buf127);
+    *(float*)buf128 = ceil(*(float*)buf129);
+    *(float2*)buf130 = ceil(*(float2*)buf131);
+    *(float3*)buf132 = ceil(*(float3*)buf133);
+    *(float4*)buf134 = ceil(*(float4*)buf135);
+    *(float*)buf136 = clamp(*(float*)buf137, *(float*)buf138, *(float*)buf139);
+    *(float2*)buf140 = clamp(*(float2*)buf141, *(float2*)buf142, *(float2*)buf143);
+    *(float3*)buf144 = clamp(*(float3*)buf145, *(float3*)buf146, *(float3*)buf147);
+    *(float4*)buf148 = clamp(*(float4*)buf149, *(float4*)buf150, *(float4*)buf151);
+    *(float2*)buf152 = clamp(*(float2*)buf153, *(float*)buf154, *(float*)buf155);
+    *(float3*)buf156 = clamp(*(float3*)buf157, *(float*)buf158, *(float*)buf159);
+    *(float4*)buf160 = clamp(*(float4*)buf161, *(float*)buf162, *(float*)buf163);
+    *(char*)buf164 = clamp(*(char*)buf165, *(char*)buf166, *(char*)buf167);
+    *(char2*)buf168 = clamp(*(char2*)buf169, *(char2*)buf170, *(char2*)buf171);
+    *(char3*)buf172 = clamp(*(char3*)buf173, *(char3*)buf174, *(char3*)buf175);
+    *(char4*)buf176 = clamp(*(char4*)buf177, *(char4*)buf178, *(char4*)buf179);
+    *(uchar*)buf180 = clamp(*(uchar*)buf181, *(uchar*)buf182, *(uchar*)buf183);
+    *(uchar2*)buf184 = clamp(*(uchar2*)buf185, *(uchar2*)buf186, *(uchar2*)buf187);
+    *(uchar3*)buf188 = clamp(*(uchar3*)buf189, *(uchar3*)buf190, *(uchar3*)buf191);
+    *(uchar4*)buf192 = clamp(*(uchar4*)buf193, *(uchar4*)buf194, *(uchar4*)buf195);
+    *(short*)buf196 = clamp(*(short*)buf197, *(short*)buf198, *(short*)buf199);
+    *(short2*)buf200 = clamp(*(short2*)buf201, *(short2*)buf202, *(short2*)buf203);
+    *(short3*)buf204 = clamp(*(short3*)buf205, *(short3*)buf206, *(short3*)buf207);
+    *(short4*)buf208 = clamp(*(short4*)buf209, *(short4*)buf210, *(short4*)buf211);
+    *(ushort*)buf212 = clamp(*(ushort*)buf213, *(ushort*)buf214, *(ushort*)buf215);
+    *(ushort2*)buf216 = clamp(*(ushort2*)buf217, *(ushort2*)buf218, *(ushort2*)buf219);
+    *(ushort3*)buf220 = clamp(*(ushort3*)buf221, *(ushort3*)buf222, *(ushort3*)buf223);
+    *(ushort4*)buf224 = clamp(*(ushort4*)buf225, *(ushort4*)buf226, *(ushort4*)buf227);
+    *(int*)buf228 = clamp(*(int*)buf229, *(int*)buf230, *(int*)buf231);
+    *(int2*)buf232 = clamp(*(int2*)buf233, *(int2*)buf234, *(int2*)buf235);
+    *(int3*)buf236 = clamp(*(int3*)buf237, *(int3*)buf238, *(int3*)buf239);
+    *(int4*)buf240 = clamp(*(int4*)buf241, *(int4*)buf242, *(int4*)buf243);
+    *(uint*)buf244 = clamp(*(uint*)buf245, *(uint*)buf246, *(uint*)buf247);
+    *(uint2*)buf248 = clamp(*(uint2*)buf249, *(uint2*)buf250, *(uint2*)buf251);
+    *(uint3*)buf252 = clamp(*(uint3*)buf253, *(uint3*)buf254, *(uint3*)buf255);
+    *(uint4*)buf256 = clamp(*(uint4*)buf257, *(uint4*)buf258, *(uint4*)buf259);
+    *(long*)buf260 = clamp(*(long*)buf261, *(long*)buf262, *(long*)buf263);
+    *(long2*)buf264 = clamp(*(long2*)buf265, *(long2*)buf266, *(long2*)buf267);
+    *(long3*)buf268 = clamp(*(long3*)buf269, *(long3*)buf270, *(long3*)buf271);
+    *(long4*)buf272 = clamp(*(long4*)buf273, *(long4*)buf274, *(long4*)buf275);
+    *(ulong*)buf276 = clamp(*(ulong*)buf277, *(ulong*)buf278, *(ulong*)buf279);
+    *(ulong2*)buf280 = clamp(*(ulong2*)buf281, *(ulong2*)buf282, *(ulong2*)buf283);
+    *(ulong3*)buf284 = clamp(*(ulong3*)buf285, *(ulong3*)buf286, *(ulong3*)buf287);
+    *(ulong4*)buf288 = clamp(*(ulong4*)buf289, *(ulong4*)buf290, *(ulong4*)buf291);
+    *(char2*)buf292 = clamp(*(char2*)buf293, *(char*)buf294, *(char*)buf295);
+    *(char3*)buf296 = clamp(*(char3*)buf297, *(char*)buf298, *(char*)buf299);
+    *(char4*)buf300 = clamp(*(char4*)buf301, *(char*)buf302, *(char*)buf303);
+    *(uchar2*)buf304 = clamp(*(uchar2*)buf305, *(uchar*)buf306, *(uchar*)buf307);
+    *(uchar3*)buf308 = clamp(*(uchar3*)buf309, *(uchar*)buf310, *(uchar*)buf311);
+    *(uchar4*)buf312 = clamp(*(uchar4*)buf313, *(uchar*)buf314, *(uchar*)buf315);
+    *(short2*)buf316 = clamp(*(short2*)buf317, *(short*)buf318, *(short*)buf319);
+    *(short3*)buf320 = clamp(*(short3*)buf321, *(short*)buf322, *(short*)buf323);
+    *(short4*)buf324 = clamp(*(short4*)buf325, *(short*)buf326, *(short*)buf327);
+    *(ushort2*)buf328 = clamp(*(ushort2*)buf329, *(ushort*)buf330, *(ushort*)buf331);
+    *(ushort3*)buf332 = clamp(*(ushort3*)buf333, *(ushort*)buf334, *(ushort*)buf335);
+    *(ushort4*)buf336 = clamp(*(ushort4*)buf337, *(ushort*)buf338, *(ushort*)buf339);
+    *(int2*)buf340 = clamp(*(int2*)buf341, *(int*)buf342, *(int*)buf343);
+    *(int3*)buf344 = clamp(*(int3*)buf345, *(int*)buf346, *(int*)buf347);
+    *(int4*)buf348 = clamp(*(int4*)buf349, *(int*)buf350, *(int*)buf351);
+    *(uint2*)buf352 = clamp(*(uint2*)buf353, *(uint*)buf354, *(uint*)buf355);
+    *(uint3*)buf356 = clamp(*(uint3*)buf357, *(uint*)buf358, *(uint*)buf359);
+    *(uint4*)buf360 = clamp(*(uint4*)buf361, *(uint*)buf362, *(uint*)buf363);
+    *(long2*)buf364 = clamp(*(long2*)buf365, *(long*)buf366, *(long*)buf367);
+    *(long3*)buf368 = clamp(*(long3*)buf369, *(long*)buf370, *(long*)buf371);
+    *(long4*)buf372 = clamp(*(long4*)buf373, *(long*)buf374, *(long*)buf375);
+    *(ulong2*)buf376 = clamp(*(ulong2*)buf377, *(ulong*)buf378, *(ulong*)buf379);
+    *(ulong3*)buf380 = clamp(*(ulong3*)buf381, *(ulong*)buf382, *(ulong*)buf383);
+    *(ulong4*)buf384 = clamp(*(ulong4*)buf385, *(ulong*)buf386, *(ulong*)buf387);
+    *(char*)buf388 = clz(*(char*)buf389);
+    *(char2*)buf390 = clz(*(char2*)buf391);
+    *(char3*)buf392 = clz(*(char3*)buf393);
+    *(char4*)buf394 = clz(*(char4*)buf395);
+    *(uchar*)buf396 = clz(*(uchar*)buf397);
+    *(uchar2*)buf398 = clz(*(uchar2*)buf399);
+    *(uchar3*)buf400 = clz(*(uchar3*)buf401);
+    *(uchar4*)buf402 = clz(*(uchar4*)buf403);
+    *(short*)buf404 = clz(*(short*)buf405);
+    *(short2*)buf406 = clz(*(short2*)buf407);
+    *(short3*)buf408 = clz(*(short3*)buf409);
+    *(short4*)buf410 = clz(*(short4*)buf411);
+    *(ushort*)buf412 = clz(*(ushort*)buf413);
+    *(ushort2*)buf414 = clz(*(ushort2*)buf415);
+    *(ushort3*)buf416 = clz(*(ushort3*)buf417);
+    *(ushort4*)buf418 = clz(*(ushort4*)buf419);
+    *(int*)buf420 = clz(*(int*)buf421);
+    *(int2*)buf422 = clz(*(int2*)buf423);
+    *(int3*)buf424 = clz(*(int3*)buf425);
+    *(int4*)buf426 = clz(*(int4*)buf427);
+    *(uint*)buf428 = clz(*(uint*)buf429);
+    *(uint2*)buf430 = clz(*(uint2*)buf431);
+    *(uint3*)buf432 = clz(*(uint3*)buf433);
+    *(uint4*)buf434 = clz(*(uint4*)buf435);
+    *(float2*)buf436 = convert_float2(*(float2*)buf437);
+    *(float3*)buf438 = convert_float3(*(float3*)buf439);
+    *(float4*)buf440 = convert_float4(*(float4*)buf441);
+    *(float2*)buf442 = convert_float2(*(char2*)buf443);
+    *(float3*)buf444 = convert_float3(*(char3*)buf445);
+    *(float4*)buf446 = convert_float4(*(char4*)buf447);
+    *(float2*)buf448 = convert_float2(*(uchar2*)buf449);
+    *(float3*)buf450 = convert_float3(*(uchar3*)buf451);
+    *(float4*)buf452 = convert_float4(*(uchar4*)buf453);
+    *(float2*)buf454 = convert_float2(*(short2*)buf455);
+    *(float3*)buf456 = convert_float3(*(short3*)buf457);
+    *(float4*)buf458 = convert_float4(*(short4*)buf459);
+    *(float2*)buf460 = convert_float2(*(ushort2*)buf461);
+    *(float3*)buf462 = convert_float3(*(ushort3*)buf463);
+    *(float4*)buf464 = convert_float4(*(ushort4*)buf465);
+    *(float2*)buf466 = convert_float2(*(int2*)buf467);
+    *(float3*)buf468 = convert_float3(*(int3*)buf469);
+    *(float4*)buf470 = convert_float4(*(int4*)buf471);
+    *(float2*)buf472 = convert_float2(*(uint2*)buf473);
+    *(float3*)buf474 = convert_float3(*(uint3*)buf475);
+    *(float4*)buf476 = convert_float4(*(uint4*)buf477);
+    *(char2*)buf478 = convert_char2(*(float2*)buf479);
+    *(char3*)buf480 = convert_char3(*(float3*)buf481);
+    *(char4*)buf482 = convert_char4(*(float4*)buf483);
+    *(char2*)buf484 = convert_char2(*(char2*)buf485);
+    *(char3*)buf486 = convert_char3(*(char3*)buf487);
+    *(char4*)buf488 = convert_char4(*(char4*)buf489);
+    *(char2*)buf490 = convert_char2(*(uchar2*)buf491);
+    *(char3*)buf492 = convert_char3(*(uchar3*)buf493);
+    *(char4*)buf494 = convert_char4(*(uchar4*)buf495);
+    *(char2*)buf496 = convert_char2(*(short2*)buf497);
+    *(char3*)buf498 = convert_char3(*(short3*)buf499);
+    *(char4*)buf500 = convert_char4(*(short4*)buf501);
+    *(char2*)buf502 = convert_char2(*(ushort2*)buf503);
+    *(char3*)buf504 = convert_char3(*(ushort3*)buf505);
+    *(char4*)buf506 = convert_char4(*(ushort4*)buf507);
+    *(char2*)buf508 = convert_char2(*(int2*)buf509);
+    *(char3*)buf510 = convert_char3(*(int3*)buf511);
+    *(char4*)buf512 = convert_char4(*(int4*)buf513);
+    *(char2*)buf514 = convert_char2(*(uint2*)buf515);
+    *(char3*)buf516 = convert_char3(*(uint3*)buf517);
+    *(char4*)buf518 = convert_char4(*(uint4*)buf519);
+    *(uchar2*)buf520 = convert_uchar2(*(float2*)buf521);
+    *(uchar3*)buf522 = convert_uchar3(*(float3*)buf523);
+    *(uchar4*)buf524 = convert_uchar4(*(float4*)buf525);
+    *(uchar2*)buf526 = convert_uchar2(*(char2*)buf527);
+    *(uchar3*)buf528 = convert_uchar3(*(char3*)buf529);
+    *(uchar4*)buf530 = convert_uchar4(*(char4*)buf531);
+    *(uchar2*)buf532 = convert_uchar2(*(uchar2*)buf533);
+    *(uchar3*)buf534 = convert_uchar3(*(uchar3*)buf535);
+    *(uchar4*)buf536 = convert_uchar4(*(uchar4*)buf537);
+    *(uchar2*)buf538 = convert_uchar2(*(short2*)buf539);
+    *(uchar3*)buf540 = convert_uchar3(*(short3*)buf541);
+    *(uchar4*)buf542 = convert_uchar4(*(short4*)buf543);
+    *(uchar2*)buf544 = convert_uchar2(*(ushort2*)buf545);
+    *(uchar3*)buf546 = convert_uchar3(*(ushort3*)buf547);
+    *(uchar4*)buf548 = convert_uchar4(*(ushort4*)buf549);
+    *(uchar2*)buf550 = convert_uchar2(*(int2*)buf551);
+    *(uchar3*)buf552 = convert_uchar3(*(int3*)buf553);
+    *(uchar4*)buf554 = convert_uchar4(*(int4*)buf555);
+    *(uchar2*)buf556 = convert_uchar2(*(uint2*)buf557);
+    *(uchar3*)buf558 = convert_uchar3(*(uint3*)buf559);
+    *(uchar4*)buf560 = convert_uchar4(*(uint4*)buf561);
+    *(short2*)buf562 = convert_short2(*(float2*)buf563);
+    *(short3*)buf564 = convert_short3(*(float3*)buf565);
+    *(short4*)buf566 = convert_short4(*(float4*)buf567);
+    *(short2*)buf568 = convert_short2(*(char2*)buf569);
+    *(short3*)buf570 = convert_short3(*(char3*)buf571);
+    *(short4*)buf572 = convert_short4(*(char4*)buf573);
+    *(short2*)buf574 = convert_short2(*(uchar2*)buf575);
+    *(short3*)buf576 = convert_short3(*(uchar3*)buf577);
+    *(short4*)buf578 = convert_short4(*(uchar4*)buf579);
+    *(short2*)buf580 = convert_short2(*(short2*)buf581);
+    *(short3*)buf582 = convert_short3(*(short3*)buf583);
+    *(short4*)buf584 = convert_short4(*(short4*)buf585);
+    *(short2*)buf586 = convert_short2(*(ushort2*)buf587);
+    *(short3*)buf588 = convert_short3(*(ushort3*)buf589);
+    *(short4*)buf590 = convert_short4(*(ushort4*)buf591);
+    *(short2*)buf592 = convert_short2(*(int2*)buf593);
+    *(short3*)buf594 = convert_short3(*(int3*)buf595);
+    *(short4*)buf596 = convert_short4(*(int4*)buf597);
+    *(short2*)buf598 = convert_short2(*(uint2*)buf599);
+    *(short3*)buf600 = convert_short3(*(uint3*)buf601);
+    *(short4*)buf602 = convert_short4(*(uint4*)buf603);
+    *(ushort2*)buf604 = convert_ushort2(*(float2*)buf605);
+    *(ushort3*)buf606 = convert_ushort3(*(float3*)buf607);
+    *(ushort4*)buf608 = convert_ushort4(*(float4*)buf609);
+    *(ushort2*)buf610 = convert_ushort2(*(char2*)buf611);
+    *(ushort3*)buf612 = convert_ushort3(*(char3*)buf613);
+    *(ushort4*)buf614 = convert_ushort4(*(char4*)buf615);
+    *(ushort2*)buf616 = convert_ushort2(*(uchar2*)buf617);
+    *(ushort3*)buf618 = convert_ushort3(*(uchar3*)buf619);
+    *(ushort4*)buf620 = convert_ushort4(*(uchar4*)buf621);
+    *(ushort2*)buf622 = convert_ushort2(*(short2*)buf623);
+    *(ushort3*)buf624 = convert_ushort3(*(short3*)buf625);
+    *(ushort4*)buf626 = convert_ushort4(*(short4*)buf627);
+    *(ushort2*)buf628 = convert_ushort2(*(ushort2*)buf629);
+    *(ushort3*)buf630 = convert_ushort3(*(ushort3*)buf631);
+    *(ushort4*)buf632 = convert_ushort4(*(ushort4*)buf633);
+    *(ushort2*)buf634 = convert_ushort2(*(int2*)buf635);
+    *(ushort3*)buf636 = convert_ushort3(*(int3*)buf637);
+    *(ushort4*)buf638 = convert_ushort4(*(int4*)buf639);
+    *(ushort2*)buf640 = convert_ushort2(*(uint2*)buf641);
+    *(ushort3*)buf642 = convert_ushort3(*(uint3*)buf643);
+    *(ushort4*)buf644 = convert_ushort4(*(uint4*)buf645);
+    *(int2*)buf646 = convert_int2(*(float2*)buf647);
+    *(int3*)buf648 = convert_int3(*(float3*)buf649);
+    *(int4*)buf650 = convert_int4(*(float4*)buf651);
+    *(int2*)buf652 = convert_int2(*(char2*)buf653);
+    *(int3*)buf654 = convert_int3(*(char3*)buf655);
+    *(int4*)buf656 = convert_int4(*(char4*)buf657);
+    *(int2*)buf658 = convert_int2(*(uchar2*)buf659);
+    *(int3*)buf660 = convert_int3(*(uchar3*)buf661);
+    *(int4*)buf662 = convert_int4(*(uchar4*)buf663);
+    *(int2*)buf664 = convert_int2(*(short2*)buf665);
+    *(int3*)buf666 = convert_int3(*(short3*)buf667);
+    *(int4*)buf668 = convert_int4(*(short4*)buf669);
+    *(int2*)buf670 = convert_int2(*(ushort2*)buf671);
+    *(int3*)buf672 = convert_int3(*(ushort3*)buf673);
+    *(int4*)buf674 = convert_int4(*(ushort4*)buf675);
+    *(int2*)buf676 = convert_int2(*(int2*)buf677);
+    *(int3*)buf678 = convert_int3(*(int3*)buf679);
+    *(int4*)buf680 = convert_int4(*(int4*)buf681);
+    *(int2*)buf682 = convert_int2(*(uint2*)buf683);
+    *(int3*)buf684 = convert_int3(*(uint3*)buf685);
+    *(int4*)buf686 = convert_int4(*(uint4*)buf687);
+    *(uint2*)buf688 = convert_uint2(*(float2*)buf689);
+    *(uint3*)buf690 = convert_uint3(*(float3*)buf691);
+    *(uint4*)buf692 = convert_uint4(*(float4*)buf693);
+    *(uint2*)buf694 = convert_uint2(*(char2*)buf695);
+    *(uint3*)buf696 = convert_uint3(*(char3*)buf697);
+    *(uint4*)buf698 = convert_uint4(*(char4*)buf699);
+    *(uint2*)buf700 = convert_uint2(*(uchar2*)buf701);
+    *(uint3*)buf702 = convert_uint3(*(uchar3*)buf703);
+    *(uint4*)buf704 = convert_uint4(*(uchar4*)buf705);
+    *(uint2*)buf706 = convert_uint2(*(short2*)buf707);
+    *(uint3*)buf708 = convert_uint3(*(short3*)buf709);
+    *(uint4*)buf710 = convert_uint4(*(short4*)buf711);
+    *(uint2*)buf712 = convert_uint2(*(ushort2*)buf713);
+    *(uint3*)buf714 = convert_uint3(*(ushort3*)buf715);
+    *(uint4*)buf716 = convert_uint4(*(ushort4*)buf717);
+    *(uint2*)buf718 = convert_uint2(*(int2*)buf719);
+    *(uint3*)buf720 = convert_uint3(*(int3*)buf721);
+    *(uint4*)buf722 = convert_uint4(*(int4*)buf723);
+    *(uint2*)buf724 = convert_uint2(*(uint2*)buf725);
+    *(uint3*)buf726 = convert_uint3(*(uint3*)buf727);
+    *(uint4*)buf728 = convert_uint4(*(uint4*)buf729);
+    *(double2*)buf730 = convert_double2(*(double2*)buf731);
+    *(double3*)buf732 = convert_double3(*(double3*)buf733);
+    *(double4*)buf734 = convert_double4(*(double4*)buf735);
+    *(double2*)buf736 = convert_double2(*(long2*)buf737);
+    *(double3*)buf738 = convert_double3(*(long3*)buf739);
+    *(double4*)buf740 = convert_double4(*(long4*)buf741);
+    *(double2*)buf742 = convert_double2(*(ulong2*)buf743);
+    *(double3*)buf744 = convert_double3(*(ulong3*)buf745);
+    *(double4*)buf746 = convert_double4(*(ulong4*)buf747);
+    *(long2*)buf748 = convert_long2(*(double2*)buf749);
+    *(long3*)buf750 = convert_long3(*(double3*)buf751);
+    *(long4*)buf752 = convert_long4(*(double4*)buf753);
+    *(long2*)buf754 = convert_long2(*(long2*)buf755);
+    *(long3*)buf756 = convert_long3(*(long3*)buf757);
+    *(long4*)buf758 = convert_long4(*(long4*)buf759);
+    *(long2*)buf760 = convert_long2(*(ulong2*)buf761);
+    *(long3*)buf762 = convert_long3(*(ulong3*)buf763);
+    *(long4*)buf764 = convert_long4(*(ulong4*)buf765);
+    *(ulong2*)buf766 = convert_ulong2(*(double2*)buf767);
+    *(ulong3*)buf768 = convert_ulong3(*(double3*)buf769);
+    *(ulong4*)buf770 = convert_ulong4(*(double4*)buf771);
+    *(ulong2*)buf772 = convert_ulong2(*(long2*)buf773);
+    *(ulong3*)buf774 = convert_ulong3(*(long3*)buf775);
+    *(ulong4*)buf776 = convert_ulong4(*(long4*)buf777);
+    *(ulong2*)buf778 = convert_ulong2(*(ulong2*)buf779);
+    *(ulong3*)buf780 = convert_ulong3(*(ulong3*)buf781);
+    *(ulong4*)buf782 = convert_ulong4(*(ulong4*)buf783);
+    *(float2*)buf784 = convert_float2(*(double2*)buf785);
+    *(float3*)buf786 = convert_float3(*(double3*)buf787);
+    *(float4*)buf788 = convert_float4(*(double4*)buf789);
+    *(float2*)buf790 = convert_float2(*(long2*)buf791);
+    *(float3*)buf792 = convert_float3(*(long3*)buf793);
+    *(float4*)buf794 = convert_float4(*(long4*)buf795);
+    *(float2*)buf796 = convert_float2(*(ulong2*)buf797);
+    *(float3*)buf798 = convert_float3(*(ulong3*)buf799);
+    *(float4*)buf800 = convert_float4(*(ulong4*)buf801);
+    *(char2*)buf802 = convert_char2(*(double2*)buf803);
+    *(char3*)buf804 = convert_char3(*(double3*)buf805);
+    *(char4*)buf806 = convert_char4(*(double4*)buf807);
+    *(char2*)buf808 = convert_char2(*(long2*)buf809);
+    *(char3*)buf810 = convert_char3(*(long3*)buf811);
+    *(char4*)buf812 = convert_char4(*(long4*)buf813);
+    *(char2*)buf814 = convert_char2(*(ulong2*)buf815);
+    *(char3*)buf816 = convert_char3(*(ulong3*)buf817);
+    *(char4*)buf818 = convert_char4(*(ulong4*)buf819);
+    *(uchar2*)buf820 = convert_uchar2(*(double2*)buf821);
+    *(uchar3*)buf822 = convert_uchar3(*(double3*)buf823);
+    *(uchar4*)buf824 = convert_uchar4(*(double4*)buf825);
+    *(uchar2*)buf826 = convert_uchar2(*(long2*)buf827);
+    *(uchar3*)buf828 = convert_uchar3(*(long3*)buf829);
+    *(uchar4*)buf830 = convert_uchar4(*(long4*)buf831);
+    *(uchar2*)buf832 = convert_uchar2(*(ulong2*)buf833);
+    *(uchar3*)buf834 = convert_uchar3(*(ulong3*)buf835);
+    *(uchar4*)buf836 = convert_uchar4(*(ulong4*)buf837);
+    *(short2*)buf838 = convert_short2(*(double2*)buf839);
+    *(short3*)buf840 = convert_short3(*(double3*)buf841);
+    *(short4*)buf842 = convert_short4(*(double4*)buf843);
+    *(short2*)buf844 = convert_short2(*(long2*)buf845);
+    *(short3*)buf846 = convert_short3(*(long3*)buf847);
+    *(short4*)buf848 = convert_short4(*(long4*)buf849);
+    *(short2*)buf850 = convert_short2(*(ulong2*)buf851);
+    *(short3*)buf852 = convert_short3(*(ulong3*)buf853);
+    *(short4*)buf854 = convert_short4(*(ulong4*)buf855);
+    *(ushort2*)buf856 = convert_ushort2(*(double2*)buf857);
+    *(ushort3*)buf858 = convert_ushort3(*(double3*)buf859);
+    *(ushort4*)buf860 = convert_ushort4(*(double4*)buf861);
+    *(ushort2*)buf862 = convert_ushort2(*(long2*)buf863);
+    *(ushort3*)buf864 = convert_ushort3(*(long3*)buf865);
+    *(ushort4*)buf866 = convert_ushort4(*(long4*)buf867);
+    *(ushort2*)buf868 = convert_ushort2(*(ulong2*)buf869);
+    *(ushort3*)buf870 = convert_ushort3(*(ulong3*)buf871);
+    *(ushort4*)buf872 = convert_ushort4(*(ulong4*)buf873);
+    *(int2*)buf874 = convert_int2(*(double2*)buf875);
+    *(int3*)buf876 = convert_int3(*(double3*)buf877);
+    *(int4*)buf878 = convert_int4(*(double4*)buf879);
+    *(int2*)buf880 = convert_int2(*(long2*)buf881);
+    *(int3*)buf882 = convert_int3(*(long3*)buf883);
+    *(int4*)buf884 = convert_int4(*(long4*)buf885);
+    *(int2*)buf886 = convert_int2(*(ulong2*)buf887);
+    *(int3*)buf888 = convert_int3(*(ulong3*)buf889);
+    *(int4*)buf890 = convert_int4(*(ulong4*)buf891);
+    *(uint2*)buf892 = convert_uint2(*(double2*)buf893);
+    *(uint3*)buf894 = convert_uint3(*(double3*)buf895);
+    *(uint4*)buf896 = convert_uint4(*(double4*)buf897);
+    *(uint2*)buf898 = convert_uint2(*(long2*)buf899);
+    *(uint3*)buf900 = convert_uint3(*(long3*)buf901);
+    *(uint4*)buf902 = convert_uint4(*(long4*)buf903);
+    *(uint2*)buf904 = convert_uint2(*(ulong2*)buf905);
+    *(uint3*)buf906 = convert_uint3(*(ulong3*)buf907);
+    *(uint4*)buf908 = convert_uint4(*(ulong4*)buf909);
+    *(double2*)buf910 = convert_double2(*(float2*)buf911);
+    *(double3*)buf912 = convert_double3(*(float3*)buf913);
+    *(double4*)buf914 = convert_double4(*(float4*)buf915);
+    *(double2*)buf916 = convert_double2(*(char2*)buf917);
+    *(double3*)buf918 = convert_double3(*(char3*)buf919);
+    *(double4*)buf920 = convert_double4(*(char4*)buf921);
+    *(double2*)buf922 = convert_double2(*(uchar2*)buf923);
+    *(double3*)buf924 = convert_double3(*(uchar3*)buf925);
+    *(double4*)buf926 = convert_double4(*(uchar4*)buf927);
+    *(double2*)buf928 = convert_double2(*(short2*)buf929);
+    *(double3*)buf930 = convert_double3(*(short3*)buf931);
+    *(double4*)buf932 = convert_double4(*(short4*)buf933);
+    *(double2*)buf934 = convert_double2(*(ushort2*)buf935);
+    *(double3*)buf936 = convert_double3(*(ushort3*)buf937);
+    *(double4*)buf938 = convert_double4(*(ushort4*)buf939);
+    *(double2*)buf940 = convert_double2(*(int2*)buf941);
+    *(double3*)buf942 = convert_double3(*(int3*)buf943);
+    *(double4*)buf944 = convert_double4(*(int4*)buf945);
+    *(double2*)buf946 = convert_double2(*(uint2*)buf947);
+    *(double3*)buf948 = convert_double3(*(uint3*)buf949);
+    *(double4*)buf950 = convert_double4(*(uint4*)buf951);
+    *(long2*)buf952 = convert_long2(*(float2*)buf953);
+    *(long3*)buf954 = convert_long3(*(float3*)buf955);
+    *(long4*)buf956 = convert_long4(*(float4*)buf957);
+    *(long2*)buf958 = convert_long2(*(char2*)buf959);
+    *(long3*)buf960 = convert_long3(*(char3*)buf961);
+    *(long4*)buf962 = convert_long4(*(char4*)buf963);
+    *(long2*)buf964 = convert_long2(*(uchar2*)buf965);
+    *(long3*)buf966 = convert_long3(*(uchar3*)buf967);
+    *(long4*)buf968 = convert_long4(*(uchar4*)buf969);
+    *(long2*)buf970 = convert_long2(*(short2*)buf971);
+    *(long3*)buf972 = convert_long3(*(short3*)buf973);
+    *(long4*)buf974 = convert_long4(*(short4*)buf975);
+    *(long2*)buf976 = convert_long2(*(ushort2*)buf977);
+    *(long3*)buf978 = convert_long3(*(ushort3*)buf979);
+    *(long4*)buf980 = convert_long4(*(ushort4*)buf981);
+    *(long2*)buf982 = convert_long2(*(int2*)buf983);
+    *(long3*)buf984 = convert_long3(*(int3*)buf985);
+    *(long4*)buf986 = convert_long4(*(int4*)buf987);
+    *(long2*)buf988 = convert_long2(*(uint2*)buf989);
+    *(long3*)buf990 = convert_long3(*(uint3*)buf991);
+    *(long4*)buf992 = convert_long4(*(uint4*)buf993);
+    *(ulong2*)buf994 = convert_ulong2(*(float2*)buf995);
+    *(ulong3*)buf996 = convert_ulong3(*(float3*)buf997);
+    *(ulong4*)buf998 = convert_ulong4(*(float4*)buf999);
+    *(ulong2*)buf1000 = convert_ulong2(*(char2*)buf1001);
+    *(ulong3*)buf1002 = convert_ulong3(*(char3*)buf1003);
+    *(ulong4*)buf1004 = convert_ulong4(*(char4*)buf1005);
+    *(ulong2*)buf1006 = convert_ulong2(*(uchar2*)buf1007);
+    *(ulong3*)buf1008 = convert_ulong3(*(uchar3*)buf1009);
+    *(ulong4*)buf1010 = convert_ulong4(*(uchar4*)buf1011);
+    *(ulong2*)buf1012 = convert_ulong2(*(short2*)buf1013);
+    *(ulong3*)buf1014 = convert_ulong3(*(short3*)buf1015);
+    *(ulong4*)buf1016 = convert_ulong4(*(short4*)buf1017);
+    *(ulong2*)buf1018 = convert_ulong2(*(ushort2*)buf1019);
+    *(ulong3*)buf1020 = convert_ulong3(*(ushort3*)buf1021);
+    *(ulong4*)buf1022 = convert_ulong4(*(ushort4*)buf1023);
+    *(ulong2*)buf1024 = convert_ulong2(*(int2*)buf1025);
+    *(ulong3*)buf1026 = convert_ulong3(*(int3*)buf1027);
+    *(ulong4*)buf1028 = convert_ulong4(*(int4*)buf1029);
+    *(ulong2*)buf1030 = convert_ulong2(*(uint2*)buf1031);
+    *(ulong3*)buf1032 = convert_ulong3(*(uint3*)buf1033);
+    *(ulong4*)buf1034 = convert_ulong4(*(uint4*)buf1035);
+    *(float*)buf1036 = copysign(*(float*)buf1037, *(float*)buf1038);
+    *(float2*)buf1039 = copysign(*(float2*)buf1040, *(float2*)buf1041);
+    *(float3*)buf1042 = copysign(*(float3*)buf1043, *(float3*)buf1044);
+    *(float4*)buf1045 = copysign(*(float4*)buf1046, *(float4*)buf1047);
+    *(float*)buf1048 = cos(*(float*)buf1049);
+    *(float2*)buf1050 = cos(*(float2*)buf1051);
+    *(float3*)buf1052 = cos(*(float3*)buf1053);
+    *(float4*)buf1054 = cos(*(float4*)buf1055);
+    *(float*)buf1056 = cosh(*(float*)buf1057);
+    *(float2*)buf1058 = cosh(*(float2*)buf1059);
+    *(float3*)buf1060 = cosh(*(float3*)buf1061);
+    *(float4*)buf1062 = cosh(*(float4*)buf1063);
+    *(float*)buf1064 = cospi(*(float*)buf1065);
+    *(float2*)buf1066 = cospi(*(float2*)buf1067);
+    *(float3*)buf1068 = cospi(*(float3*)buf1069);
+    *(float4*)buf1070 = cospi(*(float4*)buf1071);
+    *(float3*)buf1072 = cross(*(float3*)buf1073, *(float3*)buf1074);
+    *(float4*)buf1075 = cross(*(float4*)buf1076, *(float4*)buf1077);
+    *(float*)buf1078 = degrees(*(float*)buf1079);
+    *(float2*)buf1080 = degrees(*(float2*)buf1081);
+    *(float3*)buf1082 = degrees(*(float3*)buf1083);
+    *(float4*)buf1084 = degrees(*(float4*)buf1085);
+    *(float*)buf1086 = distance(*(float*)buf1087, *(float*)buf1088);
+    *(float*)buf1089 = distance(*(float2*)buf1090, *(float2*)buf1091);
+    *(float*)buf1092 = distance(*(float3*)buf1093, *(float3*)buf1094);
+    *(float*)buf1095 = distance(*(float4*)buf1096, *(float4*)buf1097);
+    *(float*)buf1098 = dot(*(float*)buf1099, *(float*)buf1100);
+    *(float*)buf1101 = dot(*(float2*)buf1102, *(float2*)buf1103);
+    *(float*)buf1104 = dot(*(float3*)buf1105, *(float3*)buf1106);
+    *(float*)buf1107 = dot(*(float4*)buf1108, *(float4*)buf1109);
+    *(float*)buf1110 = erf(*(float*)buf1111);
+    *(float2*)buf1112 = erf(*(float2*)buf1113);
+    *(float3*)buf1114 = erf(*(float3*)buf1115);
+    *(float4*)buf1116 = erf(*(float4*)buf1117);
+    *(float*)buf1118 = erfc(*(float*)buf1119);
+    *(float2*)buf1120 = erfc(*(float2*)buf1121);
+    *(float3*)buf1122 = erfc(*(float3*)buf1123);
+    *(float4*)buf1124 = erfc(*(float4*)buf1125);
+    *(float*)buf1126 = exp(*(float*)buf1127);
+    *(float2*)buf1128 = exp(*(float2*)buf1129);
+    *(float3*)buf1130 = exp(*(float3*)buf1131);
+    *(float4*)buf1132 = exp(*(float4*)buf1133);
+    *(float*)buf1134 = exp10(*(float*)buf1135);
+    *(float2*)buf1136 = exp10(*(float2*)buf1137);
+    *(float3*)buf1138 = exp10(*(float3*)buf1139);
+    *(float4*)buf1140 = exp10(*(float4*)buf1141);
+    *(float*)buf1142 = exp2(*(float*)buf1143);
+    *(float2*)buf1144 = exp2(*(float2*)buf1145);
+    *(float3*)buf1146 = exp2(*(float3*)buf1147);
+    *(float4*)buf1148 = exp2(*(float4*)buf1149);
+    *(float*)buf1150 = expm1(*(float*)buf1151);
+    *(float2*)buf1152 = expm1(*(float2*)buf1153);
+    *(float3*)buf1154 = expm1(*(float3*)buf1155);
+    *(float4*)buf1156 = expm1(*(float4*)buf1157);
+    *(float*)buf1158 = fabs(*(float*)buf1159);
+    *(float2*)buf1160 = fabs(*(float2*)buf1161);
+    *(float3*)buf1162 = fabs(*(float3*)buf1163);
+    *(float4*)buf1164 = fabs(*(float4*)buf1165);
+    *(float*)buf1166 = fast_distance(*(float*)buf1167, *(float*)buf1168);
+    *(float*)buf1169 = fast_distance(*(float2*)buf1170, *(float2*)buf1171);
+    *(float*)buf1172 = fast_distance(*(float3*)buf1173, *(float3*)buf1174);
+    *(float*)buf1175 = fast_distance(*(float4*)buf1176, *(float4*)buf1177);
+    *(float*)buf1178 = fast_length(*(float*)buf1179);
+    *(float*)buf1180 = fast_length(*(float2*)buf1181);
+    *(float*)buf1182 = fast_length(*(float3*)buf1183);
+    *(float*)buf1184 = fast_length(*(float4*)buf1185);
+    *(float*)buf1186 = fast_normalize(*(float*)buf1187);
+    *(float2*)buf1188 = fast_normalize(*(float2*)buf1189);
+    *(float3*)buf1190 = fast_normalize(*(float3*)buf1191);
+    *(float4*)buf1192 = fast_normalize(*(float4*)buf1193);
+    *(float*)buf1194 = fdim(*(float*)buf1195, *(float*)buf1196);
+    *(float2*)buf1197 = fdim(*(float2*)buf1198, *(float2*)buf1199);
+    *(float3*)buf1200 = fdim(*(float3*)buf1201, *(float3*)buf1202);
+    *(float4*)buf1203 = fdim(*(float4*)buf1204, *(float4*)buf1205);
+    *(float*)buf1206 = floor(*(float*)buf1207);
+    *(float2*)buf1208 = floor(*(float2*)buf1209);
+    *(float3*)buf1210 = floor(*(float3*)buf1211);
+    *(float4*)buf1212 = floor(*(float4*)buf1213);
+    *(float*)buf1214 = fma(*(float*)buf1215, *(float*)buf1216, *(float*)buf1217);
+    *(float2*)buf1218 = fma(*(float2*)buf1219, *(float2*)buf1220, *(float2*)buf1221);
+    *(float3*)buf1222 = fma(*(float3*)buf1223, *(float3*)buf1224, *(float3*)buf1225);
+    *(float4*)buf1226 = fma(*(float4*)buf1227, *(float4*)buf1228, *(float4*)buf1229);
+    *(float*)buf1230 = fmax(*(float*)buf1231, *(float*)buf1232);
+    *(float2*)buf1233 = fmax(*(float2*)buf1234, *(float2*)buf1235);
+    *(float3*)buf1236 = fmax(*(float3*)buf1237, *(float3*)buf1238);
+    *(float4*)buf1239 = fmax(*(float4*)buf1240, *(float4*)buf1241);
+    *(float2*)buf1242 = fmax(*(float2*)buf1243, *(float*)buf1244);
+    *(float3*)buf1245 = fmax(*(float3*)buf1246, *(float*)buf1247);
+    *(float4*)buf1248 = fmax(*(float4*)buf1249, *(float*)buf1250);
+    *(float*)buf1251 = fmin(*(float*)buf1252, *(float*)buf1253);
+    *(float2*)buf1254 = fmin(*(float2*)buf1255, *(float2*)buf1256);
+    *(float3*)buf1257 = fmin(*(float3*)buf1258, *(float3*)buf1259);
+    *(float4*)buf1260 = fmin(*(float4*)buf1261, *(float4*)buf1262);
+    *(float2*)buf1263 = fmin(*(float2*)buf1264, *(float*)buf1265);
+    *(float3*)buf1266 = fmin(*(float3*)buf1267, *(float*)buf1268);
+    *(float4*)buf1269 = fmin(*(float4*)buf1270, *(float*)buf1271);
+    *(float*)buf1272 = fmod(*(float*)buf1273, *(float*)buf1274);
+    *(float2*)buf1275 = fmod(*(float2*)buf1276, *(float2*)buf1277);
+    *(float3*)buf1278 = fmod(*(float3*)buf1279, *(float3*)buf1280);
+    *(float4*)buf1281 = fmod(*(float4*)buf1282, *(float4*)buf1283);
+    *(float*)buf1284 = fract(*(float*)buf1285, (float*) buf1286);
+    *(float2*)buf1287 = fract(*(float2*)buf1288, (float2*) buf1289);
+    *(float3*)buf1290 = fract(*(float3*)buf1291, (float3*) buf1292);
+    *(float4*)buf1293 = fract(*(float4*)buf1294, (float4*) buf1295);
+    *(float*)buf1296 = fract(*(float*)buf1297);
+    *(float2*)buf1298 = fract(*(float2*)buf1299);
+    *(float3*)buf1300 = fract(*(float3*)buf1301);
+    *(float4*)buf1302 = fract(*(float4*)buf1303);
+    *(float*)buf1304 = frexp(*(float*)buf1305, (int*) buf1306);
+    *(float2*)buf1307 = frexp(*(float2*)buf1308, (int2*) buf1309);
+    *(float3*)buf1310 = frexp(*(float3*)buf1311, (int3*) buf1312);
+    *(float4*)buf1313 = frexp(*(float4*)buf1314, (int4*) buf1315);
+    *(float*)buf1316 = half_recip(*(float*)buf1317);
+    *(float2*)buf1318 = half_recip(*(float2*)buf1319);
+    *(float3*)buf1320 = half_recip(*(float3*)buf1321);
+    *(float4*)buf1322 = half_recip(*(float4*)buf1323);
+    *(float*)buf1324 = half_rsqrt(*(float*)buf1325);
+    *(float2*)buf1326 = half_rsqrt(*(float2*)buf1327);
+    *(float3*)buf1328 = half_rsqrt(*(float3*)buf1329);
+    *(float4*)buf1330 = half_rsqrt(*(float4*)buf1331);
+    *(float*)buf1332 = half_sqrt(*(float*)buf1333);
+    *(float2*)buf1334 = half_sqrt(*(float2*)buf1335);
+    *(float3*)buf1336 = half_sqrt(*(float3*)buf1337);
+    *(float4*)buf1338 = half_sqrt(*(float4*)buf1339);
+    *(float*)buf1340 = hypot(*(float*)buf1341, *(float*)buf1342);
+    *(float2*)buf1343 = hypot(*(float2*)buf1344, *(float2*)buf1345);
+    *(float3*)buf1346 = hypot(*(float3*)buf1347, *(float3*)buf1348);
+    *(float4*)buf1349 = hypot(*(float4*)buf1350, *(float4*)buf1351);
+    *(int*)buf1352 = ilogb(*(float*)buf1353);
+    *(int2*)buf1354 = ilogb(*(float2*)buf1355);
+    *(int3*)buf1356 = ilogb(*(float3*)buf1357);
+    *(int4*)buf1358 = ilogb(*(float4*)buf1359);
+    *(float*)buf1360 = ldexp(*(float*)buf1361, *(int*)buf1362);
+    *(float2*)buf1363 = ldexp(*(float2*)buf1364, *(int2*)buf1365);
+    *(float3*)buf1366 = ldexp(*(float3*)buf1367, *(int3*)buf1368);
+    *(float4*)buf1369 = ldexp(*(float4*)buf1370, *(int4*)buf1371);
+    *(float2*)buf1372 = ldexp(*(float2*)buf1373, *(int*)buf1374);
+    *(float3*)buf1375 = ldexp(*(float3*)buf1376, *(int*)buf1377);
+    *(float4*)buf1378 = ldexp(*(float4*)buf1379, *(int*)buf1380);
+    *(float*)buf1381 = length(*(float*)buf1382);
+    *(float*)buf1383 = length(*(float2*)buf1384);
+    *(float*)buf1385 = length(*(float3*)buf1386);
+    *(float*)buf1387 = length(*(float4*)buf1388);
+    *(float*)buf1389 = lgamma(*(float*)buf1390);
+    *(float2*)buf1391 = lgamma(*(float2*)buf1392);
+    *(float3*)buf1393 = lgamma(*(float3*)buf1394);
+    *(float4*)buf1395 = lgamma(*(float4*)buf1396);
+    *(float*)buf1397 = lgamma(*(float*)buf1398, (int*) buf1399);
+    *(float2*)buf1400 = lgamma(*(float2*)buf1401, (int2*) buf1402);
+    *(float3*)buf1403 = lgamma(*(float3*)buf1404, (int3*) buf1405);
+    *(float4*)buf1406 = lgamma(*(float4*)buf1407, (int4*) buf1408);
+    *(float*)buf1409 = log(*(float*)buf1410);
+    *(float2*)buf1411 = log(*(float2*)buf1412);
+    *(float3*)buf1413 = log(*(float3*)buf1414);
+    *(float4*)buf1415 = log(*(float4*)buf1416);
+    *(float*)buf1417 = log10(*(float*)buf1418);
+    *(float2*)buf1419 = log10(*(float2*)buf1420);
+    *(float3*)buf1421 = log10(*(float3*)buf1422);
+    *(float4*)buf1423 = log10(*(float4*)buf1424);
+    *(float*)buf1425 = log1p(*(float*)buf1426);
+    *(float2*)buf1427 = log1p(*(float2*)buf1428);
+    *(float3*)buf1429 = log1p(*(float3*)buf1430);
+    *(float4*)buf1431 = log1p(*(float4*)buf1432);
+    *(float*)buf1433 = log2(*(float*)buf1434);
+    *(float2*)buf1435 = log2(*(float2*)buf1436);
+    *(float3*)buf1437 = log2(*(float3*)buf1438);
+    *(float4*)buf1439 = log2(*(float4*)buf1440);
+    *(float*)buf1441 = logb(*(float*)buf1442);
+    *(float2*)buf1443 = logb(*(float2*)buf1444);
+    *(float3*)buf1445 = logb(*(float3*)buf1446);
+    *(float4*)buf1447 = logb(*(float4*)buf1448);
+    *(float*)buf1449 = mad(*(float*)buf1450, *(float*)buf1451, *(float*)buf1452);
+    *(float2*)buf1453 = mad(*(float2*)buf1454, *(float2*)buf1455, *(float2*)buf1456);
+    *(float3*)buf1457 = mad(*(float3*)buf1458, *(float3*)buf1459, *(float3*)buf1460);
+    *(float4*)buf1461 = mad(*(float4*)buf1462, *(float4*)buf1463, *(float4*)buf1464);
+    *(float*)buf1465 = max(*(float*)buf1466, *(float*)buf1467);
+    *(float2*)buf1468 = max(*(float2*)buf1469, *(float2*)buf1470);
+    *(float3*)buf1471 = max(*(float3*)buf1472, *(float3*)buf1473);
+    *(float4*)buf1474 = max(*(float4*)buf1475, *(float4*)buf1476);
+    *(float2*)buf1477 = max(*(float2*)buf1478, *(float*)buf1479);
+    *(float3*)buf1480 = max(*(float3*)buf1481, *(float*)buf1482);
+    *(float4*)buf1483 = max(*(float4*)buf1484, *(float*)buf1485);
+    *(char*)buf1486 = max(*(char*)buf1487, *(char*)buf1488);
+    *(char2*)buf1489 = max(*(char2*)buf1490, *(char2*)buf1491);
+    *(char3*)buf1492 = max(*(char3*)buf1493, *(char3*)buf1494);
+    *(char4*)buf1495 = max(*(char4*)buf1496, *(char4*)buf1497);
+    *(uchar*)buf1498 = max(*(uchar*)buf1499, *(uchar*)buf1500);
+    *(uchar2*)buf1501 = max(*(uchar2*)buf1502, *(uchar2*)buf1503);
+    *(uchar3*)buf1504 = max(*(uchar3*)buf1505, *(uchar3*)buf1506);
+    *(uchar4*)buf1507 = max(*(uchar4*)buf1508, *(uchar4*)buf1509);
+    *(short*)buf1510 = max(*(short*)buf1511, *(short*)buf1512);
+    *(short2*)buf1513 = max(*(short2*)buf1514, *(short2*)buf1515);
+    *(short3*)buf1516 = max(*(short3*)buf1517, *(short3*)buf1518);
+    *(short4*)buf1519 = max(*(short4*)buf1520, *(short4*)buf1521);
+    *(ushort*)buf1522 = max(*(ushort*)buf1523, *(ushort*)buf1524);
+    *(ushort2*)buf1525 = max(*(ushort2*)buf1526, *(ushort2*)buf1527);
+    *(ushort3*)buf1528 = max(*(ushort3*)buf1529, *(ushort3*)buf1530);
+    *(ushort4*)buf1531 = max(*(ushort4*)buf1532, *(ushort4*)buf1533);
+    *(int*)buf1534 = max(*(int*)buf1535, *(int*)buf1536);
+    *(int2*)buf1537 = max(*(int2*)buf1538, *(int2*)buf1539);
+    *(int3*)buf1540 = max(*(int3*)buf1541, *(int3*)buf1542);
+    *(int4*)buf1543 = max(*(int4*)buf1544, *(int4*)buf1545);
+    *(uint*)buf1546 = max(*(uint*)buf1547, *(uint*)buf1548);
+    *(uint2*)buf1549 = max(*(uint2*)buf1550, *(uint2*)buf1551);
+    *(uint3*)buf1552 = max(*(uint3*)buf1553, *(uint3*)buf1554);
+    *(uint4*)buf1555 = max(*(uint4*)buf1556, *(uint4*)buf1557);
+    *(long*)buf1558 = max(*(long*)buf1559, *(long*)buf1560);
+    *(long2*)buf1561 = max(*(long2*)buf1562, *(long2*)buf1563);
+    *(long3*)buf1564 = max(*(long3*)buf1565, *(long3*)buf1566);
+    *(long4*)buf1567 = max(*(long4*)buf1568, *(long4*)buf1569);
+    *(ulong*)buf1570 = max(*(ulong*)buf1571, *(ulong*)buf1572);
+    *(ulong2*)buf1573 = max(*(ulong2*)buf1574, *(ulong2*)buf1575);
+    *(ulong3*)buf1576 = max(*(ulong3*)buf1577, *(ulong3*)buf1578);
+    *(ulong4*)buf1579 = max(*(ulong4*)buf1580, *(ulong4*)buf1581);
+    *(float*)buf1582 = min(*(float*)buf1583, *(float*)buf1584);
+    *(float2*)buf1585 = min(*(float2*)buf1586, *(float2*)buf1587);
+    *(float3*)buf1588 = min(*(float3*)buf1589, *(float3*)buf1590);
+    *(float4*)buf1591 = min(*(float4*)buf1592, *(float4*)buf1593);
+    *(float2*)buf1594 = min(*(float2*)buf1595, *(float*)buf1596);
+    *(float3*)buf1597 = min(*(float3*)buf1598, *(float*)buf1599);
+    *(float4*)buf1600 = min(*(float4*)buf1601, *(float*)buf1602);
+    *(char*)buf1603 = min(*(char*)buf1604, *(char*)buf1605);
+    *(char2*)buf1606 = min(*(char2*)buf1607, *(char2*)buf1608);
+    *(char3*)buf1609 = min(*(char3*)buf1610, *(char3*)buf1611);
+    *(char4*)buf1612 = min(*(char4*)buf1613, *(char4*)buf1614);
+    *(uchar*)buf1615 = min(*(uchar*)buf1616, *(uchar*)buf1617);
+    *(uchar2*)buf1618 = min(*(uchar2*)buf1619, *(uchar2*)buf1620);
+    *(uchar3*)buf1621 = min(*(uchar3*)buf1622, *(uchar3*)buf1623);
+    *(uchar4*)buf1624 = min(*(uchar4*)buf1625, *(uchar4*)buf1626);
+    *(short*)buf1627 = min(*(short*)buf1628, *(short*)buf1629);
+    *(short2*)buf1630 = min(*(short2*)buf1631, *(short2*)buf1632);
+    *(short3*)buf1633 = min(*(short3*)buf1634, *(short3*)buf1635);
+    *(short4*)buf1636 = min(*(short4*)buf1637, *(short4*)buf1638);
+    *(ushort*)buf1639 = min(*(ushort*)buf1640, *(ushort*)buf1641);
+    *(ushort2*)buf1642 = min(*(ushort2*)buf1643, *(ushort2*)buf1644);
+    *(ushort3*)buf1645 = min(*(ushort3*)buf1646, *(ushort3*)buf1647);
+    *(ushort4*)buf1648 = min(*(ushort4*)buf1649, *(ushort4*)buf1650);
+    *(int*)buf1651 = min(*(int*)buf1652, *(int*)buf1653);
+    *(int2*)buf1654 = min(*(int2*)buf1655, *(int2*)buf1656);
+    *(int3*)buf1657 = min(*(int3*)buf1658, *(int3*)buf1659);
+    *(int4*)buf1660 = min(*(int4*)buf1661, *(int4*)buf1662);
+    *(uint*)buf1663 = min(*(uint*)buf1664, *(uint*)buf1665);
+    *(uint2*)buf1666 = min(*(uint2*)buf1667, *(uint2*)buf1668);
+    *(uint3*)buf1669 = min(*(uint3*)buf1670, *(uint3*)buf1671);
+    *(uint4*)buf1672 = min(*(uint4*)buf1673, *(uint4*)buf1674);
+    *(long*)buf1675 = min(*(long*)buf1676, *(long*)buf1677);
+    *(long2*)buf1678 = min(*(long2*)buf1679, *(long2*)buf1680);
+    *(long3*)buf1681 = min(*(long3*)buf1682, *(long3*)buf1683);
+    *(long4*)buf1684 = min(*(long4*)buf1685, *(long4*)buf1686);
+    *(ulong*)buf1687 = min(*(ulong*)buf1688, *(ulong*)buf1689);
+    *(ulong2*)buf1690 = min(*(ulong2*)buf1691, *(ulong2*)buf1692);
+    *(ulong3*)buf1693 = min(*(ulong3*)buf1694, *(ulong3*)buf1695);
+    *(ulong4*)buf1696 = min(*(ulong4*)buf1697, *(ulong4*)buf1698);
+    *(float*)buf1699 = mix(*(float*)buf1700, *(float*)buf1701, *(float*)buf1702);
+    *(float2*)buf1703 = mix(*(float2*)buf1704, *(float2*)buf1705, *(float2*)buf1706);
+    *(float3*)buf1707 = mix(*(float3*)buf1708, *(float3*)buf1709, *(float3*)buf1710);
+    *(float4*)buf1711 = mix(*(float4*)buf1712, *(float4*)buf1713, *(float4*)buf1714);
+    *(float2*)buf1715 = mix(*(float2*)buf1716, *(float2*)buf1717, *(float*)buf1718);
+    *(float3*)buf1719 = mix(*(float3*)buf1720, *(float3*)buf1721, *(float*)buf1722);
+    *(float4*)buf1723 = mix(*(float4*)buf1724, *(float4*)buf1725, *(float*)buf1726);
+    *(float*)buf1727 = modf(*(float*)buf1728, (float*) buf1729);
+    *(float2*)buf1730 = modf(*(float2*)buf1731, (float2*) buf1732);
+    *(float3*)buf1733 = modf(*(float3*)buf1734, (float3*) buf1735);
+    *(float4*)buf1736 = modf(*(float4*)buf1737, (float4*) buf1738);
+    *(float*)buf1739 = nan(*(uint*)buf1740);
+    *(float*)buf1741 = native_acos(*(float*)buf1742);
+    *(float2*)buf1743 = native_acos(*(float2*)buf1744);
+    *(float3*)buf1745 = native_acos(*(float3*)buf1746);
+    *(float4*)buf1747 = native_acos(*(float4*)buf1748);
+    *(float*)buf1749 = native_acosh(*(float*)buf1750);
+    *(float2*)buf1751 = native_acosh(*(float2*)buf1752);
+    *(float3*)buf1753 = native_acosh(*(float3*)buf1754);
+    *(float4*)buf1755 = native_acosh(*(float4*)buf1756);
+    *(float*)buf1757 = native_acospi(*(float*)buf1758);
+    *(float2*)buf1759 = native_acospi(*(float2*)buf1760);
+    *(float3*)buf1761 = native_acospi(*(float3*)buf1762);
+    *(float4*)buf1763 = native_acospi(*(float4*)buf1764);
+    *(float*)buf1765 = native_asin(*(float*)buf1766);
+    *(float2*)buf1767 = native_asin(*(float2*)buf1768);
+    *(float3*)buf1769 = native_asin(*(float3*)buf1770);
+    *(float4*)buf1771 = native_asin(*(float4*)buf1772);
+    *(float*)buf1773 = native_asinh(*(float*)buf1774);
+    *(float2*)buf1775 = native_asinh(*(float2*)buf1776);
+    *(float3*)buf1777 = native_asinh(*(float3*)buf1778);
+    *(float4*)buf1779 = native_asinh(*(float4*)buf1780);
+    *(float*)buf1781 = native_asinpi(*(float*)buf1782);
+    *(float2*)buf1783 = native_asinpi(*(float2*)buf1784);
+    *(float3*)buf1785 = native_asinpi(*(float3*)buf1786);
+    *(float4*)buf1787 = native_asinpi(*(float4*)buf1788);
+    *(float*)buf1789 = native_atan(*(float*)buf1790);
+    *(float2*)buf1791 = native_atan(*(float2*)buf1792);
+    *(float3*)buf1793 = native_atan(*(float3*)buf1794);
+    *(float4*)buf1795 = native_atan(*(float4*)buf1796);
+    *(float*)buf1797 = native_atan2(*(float*)buf1798, *(float*)buf1799);
+    *(float2*)buf1800 = native_atan2(*(float2*)buf1801, *(float2*)buf1802);
+    *(float3*)buf1803 = native_atan2(*(float3*)buf1804, *(float3*)buf1805);
+    *(float4*)buf1806 = native_atan2(*(float4*)buf1807, *(float4*)buf1808);
+    *(float*)buf1809 = native_atan2pi(*(float*)buf1810, *(float*)buf1811);
+    *(float2*)buf1812 = native_atan2pi(*(float2*)buf1813, *(float2*)buf1814);
+    *(float3*)buf1815 = native_atan2pi(*(float3*)buf1816, *(float3*)buf1817);
+    *(float4*)buf1818 = native_atan2pi(*(float4*)buf1819, *(float4*)buf1820);
+    *(float*)buf1821 = native_atanh(*(float*)buf1822);
+    *(float2*)buf1823 = native_atanh(*(float2*)buf1824);
+    *(float3*)buf1825 = native_atanh(*(float3*)buf1826);
+    *(float4*)buf1827 = native_atanh(*(float4*)buf1828);
+    *(float*)buf1829 = native_atanpi(*(float*)buf1830);
+    *(float2*)buf1831 = native_atanpi(*(float2*)buf1832);
+    *(float3*)buf1833 = native_atanpi(*(float3*)buf1834);
+    *(float4*)buf1835 = native_atanpi(*(float4*)buf1836);
+    *(float*)buf1837 = native_cbrt(*(float*)buf1838);
+    *(float2*)buf1839 = native_cbrt(*(float2*)buf1840);
+    *(float3*)buf1841 = native_cbrt(*(float3*)buf1842);
+    *(float4*)buf1843 = native_cbrt(*(float4*)buf1844);
+    *(float*)buf1845 = native_cos(*(float*)buf1846);
+    *(float2*)buf1847 = native_cos(*(float2*)buf1848);
+    *(float3*)buf1849 = native_cos(*(float3*)buf1850);
+    *(float4*)buf1851 = native_cos(*(float4*)buf1852);
+    *(float*)buf1853 = native_cosh(*(float*)buf1854);
+    *(float2*)buf1855 = native_cosh(*(float2*)buf1856);
+    *(float3*)buf1857 = native_cosh(*(float3*)buf1858);
+    *(float4*)buf1859 = native_cosh(*(float4*)buf1860);
+    *(float*)buf1861 = native_cospi(*(float*)buf1862);
+    *(float2*)buf1863 = native_cospi(*(float2*)buf1864);
+    *(float3*)buf1865 = native_cospi(*(float3*)buf1866);
+    *(float4*)buf1867 = native_cospi(*(float4*)buf1868);
+    *(float*)buf1869 = native_distance(*(float*)buf1870, *(float*)buf1871);
+    *(float*)buf1872 = native_distance(*(float2*)buf1873, *(float2*)buf1874);
+    *(float*)buf1875 = native_distance(*(float3*)buf1876, *(float3*)buf1877);
+    *(float*)buf1878 = native_distance(*(float4*)buf1879, *(float4*)buf1880);
+    *(float*)buf1881 = native_divide(*(float*)buf1882, *(float*)buf1883);
+    *(float2*)buf1884 = native_divide(*(float2*)buf1885, *(float2*)buf1886);
+    *(float3*)buf1887 = native_divide(*(float3*)buf1888, *(float3*)buf1889);
+    *(float4*)buf1890 = native_divide(*(float4*)buf1891, *(float4*)buf1892);
+    *(float*)buf1893 = native_exp(*(float*)buf1894);
+    *(float2*)buf1895 = native_exp(*(float2*)buf1896);
+    *(float3*)buf1897 = native_exp(*(float3*)buf1898);
+    *(float4*)buf1899 = native_exp(*(float4*)buf1900);
+    *(float*)buf1901 = native_exp10(*(float*)buf1902);
+    *(float2*)buf1903 = native_exp10(*(float2*)buf1904);
+    *(float3*)buf1905 = native_exp10(*(float3*)buf1906);
+    *(float4*)buf1907 = native_exp10(*(float4*)buf1908);
+    *(float*)buf1909 = native_exp2(*(float*)buf1910);
+    *(float2*)buf1911 = native_exp2(*(float2*)buf1912);
+    *(float3*)buf1913 = native_exp2(*(float3*)buf1914);
+    *(float4*)buf1915 = native_exp2(*(float4*)buf1916);
+    *(float*)buf1917 = native_expm1(*(float*)buf1918);
+    *(float2*)buf1919 = native_expm1(*(float2*)buf1920);
+    *(float3*)buf1921 = native_expm1(*(float3*)buf1922);
+    *(float4*)buf1923 = native_expm1(*(float4*)buf1924);
+    *(float*)buf1925 = native_hypot(*(float*)buf1926, *(float*)buf1927);
+    *(float2*)buf1928 = native_hypot(*(float2*)buf1929, *(float2*)buf1930);
+    *(float3*)buf1931 = native_hypot(*(float3*)buf1932, *(float3*)buf1933);
+    *(float4*)buf1934 = native_hypot(*(float4*)buf1935, *(float4*)buf1936);
+    *(float*)buf1937 = native_length(*(float*)buf1938);
+    *(float*)buf1939 = native_length(*(float2*)buf1940);
+    *(float*)buf1941 = native_length(*(float3*)buf1942);
+    *(float*)buf1943 = native_length(*(float4*)buf1944);
+    *(float*)buf1945 = native_log(*(float*)buf1946);
+    *(float2*)buf1947 = native_log(*(float2*)buf1948);
+    *(float3*)buf1949 = native_log(*(float3*)buf1950);
+    *(float4*)buf1951 = native_log(*(float4*)buf1952);
+    *(float*)buf1953 = native_log10(*(float*)buf1954);
+    *(float2*)buf1955 = native_log10(*(float2*)buf1956);
+    *(float3*)buf1957 = native_log10(*(float3*)buf1958);
+    *(float4*)buf1959 = native_log10(*(float4*)buf1960);
+    *(float*)buf1961 = native_log1p(*(float*)buf1962);
+    *(float2*)buf1963 = native_log1p(*(float2*)buf1964);
+    *(float3*)buf1965 = native_log1p(*(float3*)buf1966);
+    *(float4*)buf1967 = native_log1p(*(float4*)buf1968);
+    *(float*)buf1969 = native_log2(*(float*)buf1970);
+    *(float2*)buf1971 = native_log2(*(float2*)buf1972);
+    *(float3*)buf1973 = native_log2(*(float3*)buf1974);
+    *(float4*)buf1975 = native_log2(*(float4*)buf1976);
+    *(float*)buf1977 = native_normalize(*(float*)buf1978);
+    *(float2*)buf1979 = native_normalize(*(float2*)buf1980);
+    *(float3*)buf1981 = native_normalize(*(float3*)buf1982);
+    *(float4*)buf1983 = native_normalize(*(float4*)buf1984);
+    *(float*)buf1985 = native_powr(*(float*)buf1986, *(float*)buf1987);
+    *(float2*)buf1988 = native_powr(*(float2*)buf1989, *(float2*)buf1990);
+    *(float3*)buf1991 = native_powr(*(float3*)buf1992, *(float3*)buf1993);
+    *(float4*)buf1994 = native_powr(*(float4*)buf1995, *(float4*)buf1996);
+    *(float*)buf1997 = native_recip(*(float*)buf1998);
+    *(float2*)buf1999 = native_recip(*(float2*)buf2000);
+    *(float3*)buf2001 = native_recip(*(float3*)buf2002);
+    *(float4*)buf2003 = native_recip(*(float4*)buf2004);
+    *(float*)buf2005 = native_rootn(*(float*)buf2006, *(int*)buf2007);
+    *(float2*)buf2008 = native_rootn(*(float2*)buf2009, *(int2*)buf2010);
+    *(float3*)buf2011 = native_rootn(*(float3*)buf2012, *(int3*)buf2013);
+    *(float4*)buf2014 = native_rootn(*(float4*)buf2015, *(int4*)buf2016);
+    *(float*)buf2017 = native_rsqrt(*(float*)buf2018);
+    *(float2*)buf2019 = native_rsqrt(*(float2*)buf2020);
+    *(float3*)buf2021 = native_rsqrt(*(float3*)buf2022);
+    *(float4*)buf2023 = native_rsqrt(*(float4*)buf2024);
+    *(float*)buf2025 = native_sin(*(float*)buf2026);
+    *(float2*)buf2027 = native_sin(*(float2*)buf2028);
+    *(float3*)buf2029 = native_sin(*(float3*)buf2030);
+    *(float4*)buf2031 = native_sin(*(float4*)buf2032);
+    *(float*)buf2033 = native_sincos(*(float*)buf2034, (float*) buf2035);
+    *(float2*)buf2036 = native_sincos(*(float2*)buf2037, (float2*) buf2038);
+    *(float3*)buf2039 = native_sincos(*(float3*)buf2040, (float3*) buf2041);
+    *(float4*)buf2042 = native_sincos(*(float4*)buf2043, (float4*) buf2044);
+    *(float*)buf2045 = native_sinh(*(float*)buf2046);
+    *(float2*)buf2047 = native_sinh(*(float2*)buf2048);
+    *(float3*)buf2049 = native_sinh(*(float3*)buf2050);
+    *(float4*)buf2051 = native_sinh(*(float4*)buf2052);
+    *(float*)buf2053 = native_sinpi(*(float*)buf2054);
+    *(float2*)buf2055 = native_sinpi(*(float2*)buf2056);
+    *(float3*)buf2057 = native_sinpi(*(float3*)buf2058);
+    *(float4*)buf2059 = native_sinpi(*(float4*)buf2060);
+    *(float*)buf2061 = native_sqrt(*(float*)buf2062);
+    *(float2*)buf2063 = native_sqrt(*(float2*)buf2064);
+    *(float3*)buf2065 = native_sqrt(*(float3*)buf2066);
+    *(float4*)buf2067 = native_sqrt(*(float4*)buf2068);
+    *(float*)buf2069 = native_tan(*(float*)buf2070);
+    *(float2*)buf2071 = native_tan(*(float2*)buf2072);
+    *(float3*)buf2073 = native_tan(*(float3*)buf2074);
+    *(float4*)buf2075 = native_tan(*(float4*)buf2076);
+    *(float*)buf2077 = native_tanh(*(float*)buf2078);
+    *(float2*)buf2079 = native_tanh(*(float2*)buf2080);
+    *(float3*)buf2081 = native_tanh(*(float3*)buf2082);
+    *(float4*)buf2083 = native_tanh(*(float4*)buf2084);
+    *(float*)buf2085 = native_tanpi(*(float*)buf2086);
+    *(float2*)buf2087 = native_tanpi(*(float2*)buf2088);
+    *(float3*)buf2089 = native_tanpi(*(float3*)buf2090);
+    *(float4*)buf2091 = native_tanpi(*(float4*)buf2092);
+    *(float*)buf2093 = nextafter(*(float*)buf2094, *(float*)buf2095);
+    *(float2*)buf2096 = nextafter(*(float2*)buf2097, *(float2*)buf2098);
+    *(float3*)buf2099 = nextafter(*(float3*)buf2100, *(float3*)buf2101);
+    *(float4*)buf2102 = nextafter(*(float4*)buf2103, *(float4*)buf2104);
+    *(float*)buf2105 = normalize(*(float*)buf2106);
+    *(float2*)buf2107 = normalize(*(float2*)buf2108);
+    *(float3*)buf2109 = normalize(*(float3*)buf2110);
+    *(float4*)buf2111 = normalize(*(float4*)buf2112);
+    *(float*)buf2113 = pow(*(float*)buf2114, *(float*)buf2115);
+    *(float2*)buf2116 = pow(*(float2*)buf2117, *(float2*)buf2118);
+    *(float3*)buf2119 = pow(*(float3*)buf2120, *(float3*)buf2121);
+    *(float4*)buf2122 = pow(*(float4*)buf2123, *(float4*)buf2124);
+    *(float*)buf2125 = pown(*(float*)buf2126, *(int*)buf2127);
+    *(float2*)buf2128 = pown(*(float2*)buf2129, *(int2*)buf2130);
+    *(float3*)buf2131 = pown(*(float3*)buf2132, *(int3*)buf2133);
+    *(float4*)buf2134 = pown(*(float4*)buf2135, *(int4*)buf2136);
+    *(float*)buf2137 = powr(*(float*)buf2138, *(float*)buf2139);
+    *(float2*)buf2140 = powr(*(float2*)buf2141, *(float2*)buf2142);
+    *(float3*)buf2143 = powr(*(float3*)buf2144, *(float3*)buf2145);
+    *(float4*)buf2146 = powr(*(float4*)buf2147, *(float4*)buf2148);
+    *(float*)buf2149 = radians(*(float*)buf2150);
+    *(float2*)buf2151 = radians(*(float2*)buf2152);
+    *(float3*)buf2153 = radians(*(float3*)buf2154);
+    *(float4*)buf2155 = radians(*(float4*)buf2156);
+    *(float*)buf2157 = remainder(*(float*)buf2158, *(float*)buf2159);
+    *(float2*)buf2160 = remainder(*(float2*)buf2161, *(float2*)buf2162);
+    *(float3*)buf2163 = remainder(*(float3*)buf2164, *(float3*)buf2165);
+    *(float4*)buf2166 = remainder(*(float4*)buf2167, *(float4*)buf2168);
+    *(float*)buf2169 = remquo(*(float*)buf2170, *(float*)buf2171, (int*) buf2172);
+    *(float2*)buf2173 = remquo(*(float2*)buf2174, *(float2*)buf2175, (int2*) buf2176);
+    *(float3*)buf2177 = remquo(*(float3*)buf2178, *(float3*)buf2179, (int3*) buf2180);
+    *(float4*)buf2181 = remquo(*(float4*)buf2182, *(float4*)buf2183, (int4*) buf2184);
+    *(float*)buf2185 = rint(*(float*)buf2186);
+    *(float2*)buf2187 = rint(*(float2*)buf2188);
+    *(float3*)buf2189 = rint(*(float3*)buf2190);
+    *(float4*)buf2191 = rint(*(float4*)buf2192);
+    *(float*)buf2193 = rootn(*(float*)buf2194, *(int*)buf2195);
+    *(float2*)buf2196 = rootn(*(float2*)buf2197, *(int2*)buf2198);
+    *(float3*)buf2199 = rootn(*(float3*)buf2200, *(int3*)buf2201);
+    *(float4*)buf2202 = rootn(*(float4*)buf2203, *(int4*)buf2204);
+    *(float*)buf2205 = round(*(float*)buf2206);
+    *(float2*)buf2207 = round(*(float2*)buf2208);
+    *(float3*)buf2209 = round(*(float3*)buf2210);
+    *(float4*)buf2211 = round(*(float4*)buf2212);
+    rsAllocationCopy1DRange(*(rs_allocation*)buf2213, *(uint32_t*)buf2214, *(uint32_t*)buf2215, *(uint32_t*)buf2216, *(rs_allocation*)buf2217, *(uint32_t*)buf2218, *(uint32_t*)buf2219);
+    rsAllocationCopy2DRange(*(rs_allocation*)buf2220, *(uint32_t*)buf2221, *(uint32_t*)buf2222, *(uint32_t*)buf2223, *(rs_allocation_cubemap_face*)buf2224, *(uint32_t*)buf2225, *(uint32_t*)buf2226, *(rs_allocation*)buf2227, *(uint32_t*)buf2228, *(uint32_t*)buf2229, *(uint32_t*)buf2230, *(rs_allocation_cubemap_face*)buf2231);
+    *(uint32_t*)buf2232 = rsAllocationGetDimFaces(*(rs_allocation*)buf2233);
+    *(uint32_t*)buf2234 = rsAllocationGetDimLOD(*(rs_allocation*)buf2235);
+    *(uint32_t*)buf2236 = rsAllocationGetDimX(*(rs_allocation*)buf2237);
+    *(uint32_t*)buf2238 = rsAllocationGetDimY(*(rs_allocation*)buf2239);
+    *(uint32_t*)buf2240 = rsAllocationGetDimZ(*(rs_allocation*)buf2241);
+    *(rs_element*)buf2242 = rsAllocationGetElement(*(rs_allocation*)buf2243);
+    rsAllocationIoReceive(*(rs_allocation*)buf2244);
+    rsAllocationIoSend(*(rs_allocation*)buf2245);
+    *(float2*)buf2246 = rsAllocationVLoadX_float2(*(rs_allocation*)buf2247, *(uint32_t*)buf2248);
+    *(float3*)buf2249 = rsAllocationVLoadX_float3(*(rs_allocation*)buf2250, *(uint32_t*)buf2251);
+    *(float4*)buf2252 = rsAllocationVLoadX_float4(*(rs_allocation*)buf2253, *(uint32_t*)buf2254);
+    *(double2*)buf2255 = rsAllocationVLoadX_double2(*(rs_allocation*)buf2256, *(uint32_t*)buf2257);
+    *(double3*)buf2258 = rsAllocationVLoadX_double3(*(rs_allocation*)buf2259, *(uint32_t*)buf2260);
+    *(double4*)buf2261 = rsAllocationVLoadX_double4(*(rs_allocation*)buf2262, *(uint32_t*)buf2263);
+    *(char2*)buf2264 = rsAllocationVLoadX_char2(*(rs_allocation*)buf2265, *(uint32_t*)buf2266);
+    *(char3*)buf2267 = rsAllocationVLoadX_char3(*(rs_allocation*)buf2268, *(uint32_t*)buf2269);
+    *(char4*)buf2270 = rsAllocationVLoadX_char4(*(rs_allocation*)buf2271, *(uint32_t*)buf2272);
+    *(uchar2*)buf2273 = rsAllocationVLoadX_uchar2(*(rs_allocation*)buf2274, *(uint32_t*)buf2275);
+    *(uchar3*)buf2276 = rsAllocationVLoadX_uchar3(*(rs_allocation*)buf2277, *(uint32_t*)buf2278);
+    *(uchar4*)buf2279 = rsAllocationVLoadX_uchar4(*(rs_allocation*)buf2280, *(uint32_t*)buf2281);
+    *(short2*)buf2282 = rsAllocationVLoadX_short2(*(rs_allocation*)buf2283, *(uint32_t*)buf2284);
+    *(short3*)buf2285 = rsAllocationVLoadX_short3(*(rs_allocation*)buf2286, *(uint32_t*)buf2287);
+    *(short4*)buf2288 = rsAllocationVLoadX_short4(*(rs_allocation*)buf2289, *(uint32_t*)buf2290);
+    *(ushort2*)buf2291 = rsAllocationVLoadX_ushort2(*(rs_allocation*)buf2292, *(uint32_t*)buf2293);
+    *(ushort3*)buf2294 = rsAllocationVLoadX_ushort3(*(rs_allocation*)buf2295, *(uint32_t*)buf2296);
+    *(ushort4*)buf2297 = rsAllocationVLoadX_ushort4(*(rs_allocation*)buf2298, *(uint32_t*)buf2299);
+    *(int2*)buf2300 = rsAllocationVLoadX_int2(*(rs_allocation*)buf2301, *(uint32_t*)buf2302);
+    *(int3*)buf2303 = rsAllocationVLoadX_int3(*(rs_allocation*)buf2304, *(uint32_t*)buf2305);
+    *(int4*)buf2306 = rsAllocationVLoadX_int4(*(rs_allocation*)buf2307, *(uint32_t*)buf2308);
+    *(uint2*)buf2309 = rsAllocationVLoadX_uint2(*(rs_allocation*)buf2310, *(uint32_t*)buf2311);
+    *(uint3*)buf2312 = rsAllocationVLoadX_uint3(*(rs_allocation*)buf2313, *(uint32_t*)buf2314);
+    *(uint4*)buf2315 = rsAllocationVLoadX_uint4(*(rs_allocation*)buf2316, *(uint32_t*)buf2317);
+    *(long2*)buf2318 = rsAllocationVLoadX_long2(*(rs_allocation*)buf2319, *(uint32_t*)buf2320);
+    *(long3*)buf2321 = rsAllocationVLoadX_long3(*(rs_allocation*)buf2322, *(uint32_t*)buf2323);
+    *(long4*)buf2324 = rsAllocationVLoadX_long4(*(rs_allocation*)buf2325, *(uint32_t*)buf2326);
+    *(ulong2*)buf2327 = rsAllocationVLoadX_ulong2(*(rs_allocation*)buf2328, *(uint32_t*)buf2329);
+    *(ulong3*)buf2330 = rsAllocationVLoadX_ulong3(*(rs_allocation*)buf2331, *(uint32_t*)buf2332);
+    *(ulong4*)buf2333 = rsAllocationVLoadX_ulong4(*(rs_allocation*)buf2334, *(uint32_t*)buf2335);
+    *(float2*)buf2336 = rsAllocationVLoadX_float2(*(rs_allocation*)buf2337, *(uint32_t*)buf2338, *(uint32_t*)buf2339);
+    *(float3*)buf2340 = rsAllocationVLoadX_float3(*(rs_allocation*)buf2341, *(uint32_t*)buf2342, *(uint32_t*)buf2343);
+    *(float4*)buf2344 = rsAllocationVLoadX_float4(*(rs_allocation*)buf2345, *(uint32_t*)buf2346, *(uint32_t*)buf2347);
+    *(double2*)buf2348 = rsAllocationVLoadX_double2(*(rs_allocation*)buf2349, *(uint32_t*)buf2350, *(uint32_t*)buf2351);
+    *(double3*)buf2352 = rsAllocationVLoadX_double3(*(rs_allocation*)buf2353, *(uint32_t*)buf2354, *(uint32_t*)buf2355);
+    *(double4*)buf2356 = rsAllocationVLoadX_double4(*(rs_allocation*)buf2357, *(uint32_t*)buf2358, *(uint32_t*)buf2359);
+    *(char2*)buf2360 = rsAllocationVLoadX_char2(*(rs_allocation*)buf2361, *(uint32_t*)buf2362, *(uint32_t*)buf2363);
+    *(char3*)buf2364 = rsAllocationVLoadX_char3(*(rs_allocation*)buf2365, *(uint32_t*)buf2366, *(uint32_t*)buf2367);
+    *(char4*)buf2368 = rsAllocationVLoadX_char4(*(rs_allocation*)buf2369, *(uint32_t*)buf2370, *(uint32_t*)buf2371);
+    *(uchar2*)buf2372 = rsAllocationVLoadX_uchar2(*(rs_allocation*)buf2373, *(uint32_t*)buf2374, *(uint32_t*)buf2375);
+    *(uchar3*)buf2376 = rsAllocationVLoadX_uchar3(*(rs_allocation*)buf2377, *(uint32_t*)buf2378, *(uint32_t*)buf2379);
+    *(uchar4*)buf2380 = rsAllocationVLoadX_uchar4(*(rs_allocation*)buf2381, *(uint32_t*)buf2382, *(uint32_t*)buf2383);
+    *(short2*)buf2384 = rsAllocationVLoadX_short2(*(rs_allocation*)buf2385, *(uint32_t*)buf2386, *(uint32_t*)buf2387);
+    *(short3*)buf2388 = rsAllocationVLoadX_short3(*(rs_allocation*)buf2389, *(uint32_t*)buf2390, *(uint32_t*)buf2391);
+    *(short4*)buf2392 = rsAllocationVLoadX_short4(*(rs_allocation*)buf2393, *(uint32_t*)buf2394, *(uint32_t*)buf2395);
+    *(ushort2*)buf2396 = rsAllocationVLoadX_ushort2(*(rs_allocation*)buf2397, *(uint32_t*)buf2398, *(uint32_t*)buf2399);
+    *(ushort3*)buf2400 = rsAllocationVLoadX_ushort3(*(rs_allocation*)buf2401, *(uint32_t*)buf2402, *(uint32_t*)buf2403);
+    *(ushort4*)buf2404 = rsAllocationVLoadX_ushort4(*(rs_allocation*)buf2405, *(uint32_t*)buf2406, *(uint32_t*)buf2407);
+    *(int2*)buf2408 = rsAllocationVLoadX_int2(*(rs_allocation*)buf2409, *(uint32_t*)buf2410, *(uint32_t*)buf2411);
+    *(int3*)buf2412 = rsAllocationVLoadX_int3(*(rs_allocation*)buf2413, *(uint32_t*)buf2414, *(uint32_t*)buf2415);
+    *(int4*)buf2416 = rsAllocationVLoadX_int4(*(rs_allocation*)buf2417, *(uint32_t*)buf2418, *(uint32_t*)buf2419);
+    *(uint2*)buf2420 = rsAllocationVLoadX_uint2(*(rs_allocation*)buf2421, *(uint32_t*)buf2422, *(uint32_t*)buf2423);
+    *(uint3*)buf2424 = rsAllocationVLoadX_uint3(*(rs_allocation*)buf2425, *(uint32_t*)buf2426, *(uint32_t*)buf2427);
+    *(uint4*)buf2428 = rsAllocationVLoadX_uint4(*(rs_allocation*)buf2429, *(uint32_t*)buf2430, *(uint32_t*)buf2431);
+    *(long2*)buf2432 = rsAllocationVLoadX_long2(*(rs_allocation*)buf2433, *(uint32_t*)buf2434, *(uint32_t*)buf2435);
+    *(long3*)buf2436 = rsAllocationVLoadX_long3(*(rs_allocation*)buf2437, *(uint32_t*)buf2438, *(uint32_t*)buf2439);
+    *(long4*)buf2440 = rsAllocationVLoadX_long4(*(rs_allocation*)buf2441, *(uint32_t*)buf2442, *(uint32_t*)buf2443);
+    *(ulong2*)buf2444 = rsAllocationVLoadX_ulong2(*(rs_allocation*)buf2445, *(uint32_t*)buf2446, *(uint32_t*)buf2447);
+    *(ulong3*)buf2448 = rsAllocationVLoadX_ulong3(*(rs_allocation*)buf2449, *(uint32_t*)buf2450, *(uint32_t*)buf2451);
+    *(ulong4*)buf2452 = rsAllocationVLoadX_ulong4(*(rs_allocation*)buf2453, *(uint32_t*)buf2454, *(uint32_t*)buf2455);
+    *(float2*)buf2456 = rsAllocationVLoadX_float2(*(rs_allocation*)buf2457, *(uint32_t*)buf2458, *(uint32_t*)buf2459, *(uint32_t*)buf2460);
+    *(float3*)buf2461 = rsAllocationVLoadX_float3(*(rs_allocation*)buf2462, *(uint32_t*)buf2463, *(uint32_t*)buf2464, *(uint32_t*)buf2465);
+    *(float4*)buf2466 = rsAllocationVLoadX_float4(*(rs_allocation*)buf2467, *(uint32_t*)buf2468, *(uint32_t*)buf2469, *(uint32_t*)buf2470);
+    *(double2*)buf2471 = rsAllocationVLoadX_double2(*(rs_allocation*)buf2472, *(uint32_t*)buf2473, *(uint32_t*)buf2474, *(uint32_t*)buf2475);
+    *(double3*)buf2476 = rsAllocationVLoadX_double3(*(rs_allocation*)buf2477, *(uint32_t*)buf2478, *(uint32_t*)buf2479, *(uint32_t*)buf2480);
+    *(double4*)buf2481 = rsAllocationVLoadX_double4(*(rs_allocation*)buf2482, *(uint32_t*)buf2483, *(uint32_t*)buf2484, *(uint32_t*)buf2485);
+    *(char2*)buf2486 = rsAllocationVLoadX_char2(*(rs_allocation*)buf2487, *(uint32_t*)buf2488, *(uint32_t*)buf2489, *(uint32_t*)buf2490);
+    *(char3*)buf2491 = rsAllocationVLoadX_char3(*(rs_allocation*)buf2492, *(uint32_t*)buf2493, *(uint32_t*)buf2494, *(uint32_t*)buf2495);
+    *(char4*)buf2496 = rsAllocationVLoadX_char4(*(rs_allocation*)buf2497, *(uint32_t*)buf2498, *(uint32_t*)buf2499, *(uint32_t*)buf2500);
+    *(uchar2*)buf2501 = rsAllocationVLoadX_uchar2(*(rs_allocation*)buf2502, *(uint32_t*)buf2503, *(uint32_t*)buf2504, *(uint32_t*)buf2505);
+    *(uchar3*)buf2506 = rsAllocationVLoadX_uchar3(*(rs_allocation*)buf2507, *(uint32_t*)buf2508, *(uint32_t*)buf2509, *(uint32_t*)buf2510);
+    *(uchar4*)buf2511 = rsAllocationVLoadX_uchar4(*(rs_allocation*)buf2512, *(uint32_t*)buf2513, *(uint32_t*)buf2514, *(uint32_t*)buf2515);
+    *(short2*)buf2516 = rsAllocationVLoadX_short2(*(rs_allocation*)buf2517, *(uint32_t*)buf2518, *(uint32_t*)buf2519, *(uint32_t*)buf2520);
+    *(short3*)buf2521 = rsAllocationVLoadX_short3(*(rs_allocation*)buf2522, *(uint32_t*)buf2523, *(uint32_t*)buf2524, *(uint32_t*)buf2525);
+    *(short4*)buf2526 = rsAllocationVLoadX_short4(*(rs_allocation*)buf2527, *(uint32_t*)buf2528, *(uint32_t*)buf2529, *(uint32_t*)buf2530);
+    *(ushort2*)buf2531 = rsAllocationVLoadX_ushort2(*(rs_allocation*)buf2532, *(uint32_t*)buf2533, *(uint32_t*)buf2534, *(uint32_t*)buf2535);
+    *(ushort3*)buf2536 = rsAllocationVLoadX_ushort3(*(rs_allocation*)buf2537, *(uint32_t*)buf2538, *(uint32_t*)buf2539, *(uint32_t*)buf2540);
+    *(ushort4*)buf2541 = rsAllocationVLoadX_ushort4(*(rs_allocation*)buf2542, *(uint32_t*)buf2543, *(uint32_t*)buf2544, *(uint32_t*)buf2545);
+    *(int2*)buf2546 = rsAllocationVLoadX_int2(*(rs_allocation*)buf2547, *(uint32_t*)buf2548, *(uint32_t*)buf2549, *(uint32_t*)buf2550);
+    *(int3*)buf2551 = rsAllocationVLoadX_int3(*(rs_allocation*)buf2552, *(uint32_t*)buf2553, *(uint32_t*)buf2554, *(uint32_t*)buf2555);
+    *(int4*)buf2556 = rsAllocationVLoadX_int4(*(rs_allocation*)buf2557, *(uint32_t*)buf2558, *(uint32_t*)buf2559, *(uint32_t*)buf2560);
+    *(uint2*)buf2561 = rsAllocationVLoadX_uint2(*(rs_allocation*)buf2562, *(uint32_t*)buf2563, *(uint32_t*)buf2564, *(uint32_t*)buf2565);
+    *(uint3*)buf2566 = rsAllocationVLoadX_uint3(*(rs_allocation*)buf2567, *(uint32_t*)buf2568, *(uint32_t*)buf2569, *(uint32_t*)buf2570);
+    *(uint4*)buf2571 = rsAllocationVLoadX_uint4(*(rs_allocation*)buf2572, *(uint32_t*)buf2573, *(uint32_t*)buf2574, *(uint32_t*)buf2575);
+    *(long2*)buf2576 = rsAllocationVLoadX_long2(*(rs_allocation*)buf2577, *(uint32_t*)buf2578, *(uint32_t*)buf2579, *(uint32_t*)buf2580);
+    *(long3*)buf2581 = rsAllocationVLoadX_long3(*(rs_allocation*)buf2582, *(uint32_t*)buf2583, *(uint32_t*)buf2584, *(uint32_t*)buf2585);
+    *(long4*)buf2586 = rsAllocationVLoadX_long4(*(rs_allocation*)buf2587, *(uint32_t*)buf2588, *(uint32_t*)buf2589, *(uint32_t*)buf2590);
+    *(ulong2*)buf2591 = rsAllocationVLoadX_ulong2(*(rs_allocation*)buf2592, *(uint32_t*)buf2593, *(uint32_t*)buf2594, *(uint32_t*)buf2595);
+    *(ulong3*)buf2596 = rsAllocationVLoadX_ulong3(*(rs_allocation*)buf2597, *(uint32_t*)buf2598, *(uint32_t*)buf2599, *(uint32_t*)buf2600);
+    *(ulong4*)buf2601 = rsAllocationVLoadX_ulong4(*(rs_allocation*)buf2602, *(uint32_t*)buf2603, *(uint32_t*)buf2604, *(uint32_t*)buf2605);
+    rsAllocationVStoreX_float2(*(rs_allocation*)buf2606, *(float2*)buf2607, *(uint32_t*)buf2608);
+    rsAllocationVStoreX_float3(*(rs_allocation*)buf2609, *(float3*)buf2610, *(uint32_t*)buf2611);
+    rsAllocationVStoreX_float4(*(rs_allocation*)buf2612, *(float4*)buf2613, *(uint32_t*)buf2614);
+    rsAllocationVStoreX_double2(*(rs_allocation*)buf2615, *(double2*)buf2616, *(uint32_t*)buf2617);
+    rsAllocationVStoreX_double3(*(rs_allocation*)buf2618, *(double3*)buf2619, *(uint32_t*)buf2620);
+    rsAllocationVStoreX_double4(*(rs_allocation*)buf2621, *(double4*)buf2622, *(uint32_t*)buf2623);
+    rsAllocationVStoreX_char2(*(rs_allocation*)buf2624, *(char2*)buf2625, *(uint32_t*)buf2626);
+    rsAllocationVStoreX_char3(*(rs_allocation*)buf2627, *(char3*)buf2628, *(uint32_t*)buf2629);
+    rsAllocationVStoreX_char4(*(rs_allocation*)buf2630, *(char4*)buf2631, *(uint32_t*)buf2632);
+    rsAllocationVStoreX_uchar2(*(rs_allocation*)buf2633, *(uchar2*)buf2634, *(uint32_t*)buf2635);
+    rsAllocationVStoreX_uchar3(*(rs_allocation*)buf2636, *(uchar3*)buf2637, *(uint32_t*)buf2638);
+    rsAllocationVStoreX_uchar4(*(rs_allocation*)buf2639, *(uchar4*)buf2640, *(uint32_t*)buf2641);
+    rsAllocationVStoreX_short2(*(rs_allocation*)buf2642, *(short2*)buf2643, *(uint32_t*)buf2644);
+    rsAllocationVStoreX_short3(*(rs_allocation*)buf2645, *(short3*)buf2646, *(uint32_t*)buf2647);
+    rsAllocationVStoreX_short4(*(rs_allocation*)buf2648, *(short4*)buf2649, *(uint32_t*)buf2650);
+    rsAllocationVStoreX_ushort2(*(rs_allocation*)buf2651, *(ushort2*)buf2652, *(uint32_t*)buf2653);
+    rsAllocationVStoreX_ushort3(*(rs_allocation*)buf2654, *(ushort3*)buf2655, *(uint32_t*)buf2656);
+    rsAllocationVStoreX_ushort4(*(rs_allocation*)buf2657, *(ushort4*)buf2658, *(uint32_t*)buf2659);
+    rsAllocationVStoreX_int2(*(rs_allocation*)buf2660, *(int2*)buf2661, *(uint32_t*)buf2662);
+    rsAllocationVStoreX_int3(*(rs_allocation*)buf2663, *(int3*)buf2664, *(uint32_t*)buf2665);
+    rsAllocationVStoreX_int4(*(rs_allocation*)buf2666, *(int4*)buf2667, *(uint32_t*)buf2668);
+    rsAllocationVStoreX_uint2(*(rs_allocation*)buf2669, *(uint2*)buf2670, *(uint32_t*)buf2671);
+    rsAllocationVStoreX_uint3(*(rs_allocation*)buf2672, *(uint3*)buf2673, *(uint32_t*)buf2674);
+    rsAllocationVStoreX_uint4(*(rs_allocation*)buf2675, *(uint4*)buf2676, *(uint32_t*)buf2677);
+    rsAllocationVStoreX_long2(*(rs_allocation*)buf2678, *(long2*)buf2679, *(uint32_t*)buf2680);
+    rsAllocationVStoreX_long3(*(rs_allocation*)buf2681, *(long3*)buf2682, *(uint32_t*)buf2683);
+    rsAllocationVStoreX_long4(*(rs_allocation*)buf2684, *(long4*)buf2685, *(uint32_t*)buf2686);
+    rsAllocationVStoreX_ulong2(*(rs_allocation*)buf2687, *(ulong2*)buf2688, *(uint32_t*)buf2689);
+    rsAllocationVStoreX_ulong3(*(rs_allocation*)buf2690, *(ulong3*)buf2691, *(uint32_t*)buf2692);
+    rsAllocationVStoreX_ulong4(*(rs_allocation*)buf2693, *(ulong4*)buf2694, *(uint32_t*)buf2695);
+    rsAllocationVStoreX_float2(*(rs_allocation*)buf2696, *(float2*)buf2697, *(uint32_t*)buf2698, *(uint32_t*)buf2699);
+    rsAllocationVStoreX_float3(*(rs_allocation*)buf2700, *(float3*)buf2701, *(uint32_t*)buf2702, *(uint32_t*)buf2703);
+    rsAllocationVStoreX_float4(*(rs_allocation*)buf2704, *(float4*)buf2705, *(uint32_t*)buf2706, *(uint32_t*)buf2707);
+    rsAllocationVStoreX_double2(*(rs_allocation*)buf2708, *(double2*)buf2709, *(uint32_t*)buf2710, *(uint32_t*)buf2711);
+    rsAllocationVStoreX_double3(*(rs_allocation*)buf2712, *(double3*)buf2713, *(uint32_t*)buf2714, *(uint32_t*)buf2715);
+    rsAllocationVStoreX_double4(*(rs_allocation*)buf2716, *(double4*)buf2717, *(uint32_t*)buf2718, *(uint32_t*)buf2719);
+    rsAllocationVStoreX_char2(*(rs_allocation*)buf2720, *(char2*)buf2721, *(uint32_t*)buf2722, *(uint32_t*)buf2723);
+    rsAllocationVStoreX_char3(*(rs_allocation*)buf2724, *(char3*)buf2725, *(uint32_t*)buf2726, *(uint32_t*)buf2727);
+    rsAllocationVStoreX_char4(*(rs_allocation*)buf2728, *(char4*)buf2729, *(uint32_t*)buf2730, *(uint32_t*)buf2731);
+    rsAllocationVStoreX_uchar2(*(rs_allocation*)buf2732, *(uchar2*)buf2733, *(uint32_t*)buf2734, *(uint32_t*)buf2735);
+    rsAllocationVStoreX_uchar3(*(rs_allocation*)buf2736, *(uchar3*)buf2737, *(uint32_t*)buf2738, *(uint32_t*)buf2739);
+    rsAllocationVStoreX_uchar4(*(rs_allocation*)buf2740, *(uchar4*)buf2741, *(uint32_t*)buf2742, *(uint32_t*)buf2743);
+    rsAllocationVStoreX_short2(*(rs_allocation*)buf2744, *(short2*)buf2745, *(uint32_t*)buf2746, *(uint32_t*)buf2747);
+    rsAllocationVStoreX_short3(*(rs_allocation*)buf2748, *(short3*)buf2749, *(uint32_t*)buf2750, *(uint32_t*)buf2751);
+    rsAllocationVStoreX_short4(*(rs_allocation*)buf2752, *(short4*)buf2753, *(uint32_t*)buf2754, *(uint32_t*)buf2755);
+    rsAllocationVStoreX_ushort2(*(rs_allocation*)buf2756, *(ushort2*)buf2757, *(uint32_t*)buf2758, *(uint32_t*)buf2759);
+    rsAllocationVStoreX_ushort3(*(rs_allocation*)buf2760, *(ushort3*)buf2761, *(uint32_t*)buf2762, *(uint32_t*)buf2763);
+    rsAllocationVStoreX_ushort4(*(rs_allocation*)buf2764, *(ushort4*)buf2765, *(uint32_t*)buf2766, *(uint32_t*)buf2767);
+    rsAllocationVStoreX_int2(*(rs_allocation*)buf2768, *(int2*)buf2769, *(uint32_t*)buf2770, *(uint32_t*)buf2771);
+    rsAllocationVStoreX_int3(*(rs_allocation*)buf2772, *(int3*)buf2773, *(uint32_t*)buf2774, *(uint32_t*)buf2775);
+    rsAllocationVStoreX_int4(*(rs_allocation*)buf2776, *(int4*)buf2777, *(uint32_t*)buf2778, *(uint32_t*)buf2779);
+    rsAllocationVStoreX_uint2(*(rs_allocation*)buf2780, *(uint2*)buf2781, *(uint32_t*)buf2782, *(uint32_t*)buf2783);
+    rsAllocationVStoreX_uint3(*(rs_allocation*)buf2784, *(uint3*)buf2785, *(uint32_t*)buf2786, *(uint32_t*)buf2787);
+    rsAllocationVStoreX_uint4(*(rs_allocation*)buf2788, *(uint4*)buf2789, *(uint32_t*)buf2790, *(uint32_t*)buf2791);
+    rsAllocationVStoreX_long2(*(rs_allocation*)buf2792, *(long2*)buf2793, *(uint32_t*)buf2794, *(uint32_t*)buf2795);
+    rsAllocationVStoreX_long3(*(rs_allocation*)buf2796, *(long3*)buf2797, *(uint32_t*)buf2798, *(uint32_t*)buf2799);
+    rsAllocationVStoreX_long4(*(rs_allocation*)buf2800, *(long4*)buf2801, *(uint32_t*)buf2802, *(uint32_t*)buf2803);
+    rsAllocationVStoreX_ulong2(*(rs_allocation*)buf2804, *(ulong2*)buf2805, *(uint32_t*)buf2806, *(uint32_t*)buf2807);
+    rsAllocationVStoreX_ulong3(*(rs_allocation*)buf2808, *(ulong3*)buf2809, *(uint32_t*)buf2810, *(uint32_t*)buf2811);
+    rsAllocationVStoreX_ulong4(*(rs_allocation*)buf2812, *(ulong4*)buf2813, *(uint32_t*)buf2814, *(uint32_t*)buf2815);
+    rsAllocationVStoreX_float2(*(rs_allocation*)buf2816, *(float2*)buf2817, *(uint32_t*)buf2818, *(uint32_t*)buf2819, *(uint32_t*)buf2820);
+    rsAllocationVStoreX_float3(*(rs_allocation*)buf2821, *(float3*)buf2822, *(uint32_t*)buf2823, *(uint32_t*)buf2824, *(uint32_t*)buf2825);
+    rsAllocationVStoreX_float4(*(rs_allocation*)buf2826, *(float4*)buf2827, *(uint32_t*)buf2828, *(uint32_t*)buf2829, *(uint32_t*)buf2830);
+    rsAllocationVStoreX_double2(*(rs_allocation*)buf2831, *(double2*)buf2832, *(uint32_t*)buf2833, *(uint32_t*)buf2834, *(uint32_t*)buf2835);
+    rsAllocationVStoreX_double3(*(rs_allocation*)buf2836, *(double3*)buf2837, *(uint32_t*)buf2838, *(uint32_t*)buf2839, *(uint32_t*)buf2840);
+    rsAllocationVStoreX_double4(*(rs_allocation*)buf2841, *(double4*)buf2842, *(uint32_t*)buf2843, *(uint32_t*)buf2844, *(uint32_t*)buf2845);
+    rsAllocationVStoreX_char2(*(rs_allocation*)buf2846, *(char2*)buf2847, *(uint32_t*)buf2848, *(uint32_t*)buf2849, *(uint32_t*)buf2850);
+    rsAllocationVStoreX_char3(*(rs_allocation*)buf2851, *(char3*)buf2852, *(uint32_t*)buf2853, *(uint32_t*)buf2854, *(uint32_t*)buf2855);
+    rsAllocationVStoreX_char4(*(rs_allocation*)buf2856, *(char4*)buf2857, *(uint32_t*)buf2858, *(uint32_t*)buf2859, *(uint32_t*)buf2860);
+    rsAllocationVStoreX_uchar2(*(rs_allocation*)buf2861, *(uchar2*)buf2862, *(uint32_t*)buf2863, *(uint32_t*)buf2864, *(uint32_t*)buf2865);
+    rsAllocationVStoreX_uchar3(*(rs_allocation*)buf2866, *(uchar3*)buf2867, *(uint32_t*)buf2868, *(uint32_t*)buf2869, *(uint32_t*)buf2870);
+    rsAllocationVStoreX_uchar4(*(rs_allocation*)buf2871, *(uchar4*)buf2872, *(uint32_t*)buf2873, *(uint32_t*)buf2874, *(uint32_t*)buf2875);
+    rsAllocationVStoreX_short2(*(rs_allocation*)buf2876, *(short2*)buf2877, *(uint32_t*)buf2878, *(uint32_t*)buf2879, *(uint32_t*)buf2880);
+    rsAllocationVStoreX_short3(*(rs_allocation*)buf2881, *(short3*)buf2882, *(uint32_t*)buf2883, *(uint32_t*)buf2884, *(uint32_t*)buf2885);
+    rsAllocationVStoreX_short4(*(rs_allocation*)buf2886, *(short4*)buf2887, *(uint32_t*)buf2888, *(uint32_t*)buf2889, *(uint32_t*)buf2890);
+    rsAllocationVStoreX_ushort2(*(rs_allocation*)buf2891, *(ushort2*)buf2892, *(uint32_t*)buf2893, *(uint32_t*)buf2894, *(uint32_t*)buf2895);
+    rsAllocationVStoreX_ushort3(*(rs_allocation*)buf2896, *(ushort3*)buf2897, *(uint32_t*)buf2898, *(uint32_t*)buf2899, *(uint32_t*)buf2900);
+    rsAllocationVStoreX_ushort4(*(rs_allocation*)buf2901, *(ushort4*)buf2902, *(uint32_t*)buf2903, *(uint32_t*)buf2904, *(uint32_t*)buf2905);
+    rsAllocationVStoreX_int2(*(rs_allocation*)buf2906, *(int2*)buf2907, *(uint32_t*)buf2908, *(uint32_t*)buf2909, *(uint32_t*)buf2910);
+    rsAllocationVStoreX_int3(*(rs_allocation*)buf2911, *(int3*)buf2912, *(uint32_t*)buf2913, *(uint32_t*)buf2914, *(uint32_t*)buf2915);
+    rsAllocationVStoreX_int4(*(rs_allocation*)buf2916, *(int4*)buf2917, *(uint32_t*)buf2918, *(uint32_t*)buf2919, *(uint32_t*)buf2920);
+    rsAllocationVStoreX_uint2(*(rs_allocation*)buf2921, *(uint2*)buf2922, *(uint32_t*)buf2923, *(uint32_t*)buf2924, *(uint32_t*)buf2925);
+    rsAllocationVStoreX_uint3(*(rs_allocation*)buf2926, *(uint3*)buf2927, *(uint32_t*)buf2928, *(uint32_t*)buf2929, *(uint32_t*)buf2930);
+    rsAllocationVStoreX_uint4(*(rs_allocation*)buf2931, *(uint4*)buf2932, *(uint32_t*)buf2933, *(uint32_t*)buf2934, *(uint32_t*)buf2935);
+    rsAllocationVStoreX_long2(*(rs_allocation*)buf2936, *(long2*)buf2937, *(uint32_t*)buf2938, *(uint32_t*)buf2939, *(uint32_t*)buf2940);
+    rsAllocationVStoreX_long3(*(rs_allocation*)buf2941, *(long3*)buf2942, *(uint32_t*)buf2943, *(uint32_t*)buf2944, *(uint32_t*)buf2945);
+    rsAllocationVStoreX_long4(*(rs_allocation*)buf2946, *(long4*)buf2947, *(uint32_t*)buf2948, *(uint32_t*)buf2949, *(uint32_t*)buf2950);
+    rsAllocationVStoreX_ulong2(*(rs_allocation*)buf2951, *(ulong2*)buf2952, *(uint32_t*)buf2953, *(uint32_t*)buf2954, *(uint32_t*)buf2955);
+    rsAllocationVStoreX_ulong3(*(rs_allocation*)buf2956, *(ulong3*)buf2957, *(uint32_t*)buf2958, *(uint32_t*)buf2959, *(uint32_t*)buf2960);
+    rsAllocationVStoreX_ulong4(*(rs_allocation*)buf2961, *(ulong4*)buf2962, *(uint32_t*)buf2963, *(uint32_t*)buf2964, *(uint32_t*)buf2965);
+    *(int32_t*)buf2966 = rsAtomicAdd((volatile int32_t*) buf2967, *(int32_t*)buf2968);
+    *(int32_t*)buf2969 = rsAtomicAdd((volatile uint32_t*) buf2970, *(uint32_t*)buf2971);
+    *(int32_t*)buf2972 = rsAtomicAnd((volatile int32_t*) buf2973, *(int32_t*)buf2974);
+    *(int32_t*)buf2975 = rsAtomicAnd((volatile uint32_t*) buf2976, *(uint32_t*)buf2977);
+    *(int32_t*)buf2978 = rsAtomicCas((volatile int32_t*) buf2979, *(int32_t*)buf2980, *(int32_t*)buf2981);
+    *(uint32_t*)buf2982 = rsAtomicCas((volatile uint32_t*) buf2983, *(uint32_t*)buf2984, *(uint32_t*)buf2985);
+    *(int32_t*)buf2986 = rsAtomicDec((volatile int32_t*) buf2987);
+    *(int32_t*)buf2988 = rsAtomicDec((volatile uint32_t*) buf2989);
+    *(int32_t*)buf2990 = rsAtomicInc((volatile int32_t*) buf2991);
+    *(int32_t*)buf2992 = rsAtomicInc((volatile uint32_t*) buf2993);
+    *(uint32_t*)buf2994 = rsAtomicMax((volatile uint32_t*) buf2995, *(uint32_t*)buf2996);
+    *(int32_t*)buf2997 = rsAtomicMax((volatile int32_t*) buf2998, *(int32_t*)buf2999);
+    *(uint32_t*)buf3000 = rsAtomicMin((volatile uint32_t*) buf3001, *(uint32_t*)buf3002);
+    *(int32_t*)buf3003 = rsAtomicMin((volatile int32_t*) buf3004, *(int32_t*)buf3005);
+    *(int32_t*)buf3006 = rsAtomicOr((volatile int32_t*) buf3007, *(int32_t*)buf3008);
+    *(int32_t*)buf3009 = rsAtomicOr((volatile uint32_t*) buf3010, *(uint32_t*)buf3011);
+    *(int32_t*)buf3012 = rsAtomicSub((volatile int32_t*) buf3013, *(int32_t*)buf3014);
+    *(int32_t*)buf3015 = rsAtomicSub((volatile uint32_t*) buf3016, *(uint32_t*)buf3017);
+    *(int32_t*)buf3018 = rsAtomicXor((volatile int32_t*) buf3019, *(int32_t*)buf3020);
+    *(int32_t*)buf3021 = rsAtomicXor((volatile uint32_t*) buf3022, *(uint32_t*)buf3023);
+    *(char*)buf3024 = rsClamp(*(char*)buf3025, *(char*)buf3026, *(char*)buf3027);
+    *(uchar*)buf3028 = rsClamp(*(uchar*)buf3029, *(uchar*)buf3030, *(uchar*)buf3031);
+    *(short*)buf3032 = rsClamp(*(short*)buf3033, *(short*)buf3034, *(short*)buf3035);
+    *(ushort*)buf3036 = rsClamp(*(ushort*)buf3037, *(ushort*)buf3038, *(ushort*)buf3039);
+    *(int*)buf3040 = rsClamp(*(int*)buf3041, *(int*)buf3042, *(int*)buf3043);
+    *(uint*)buf3044 = rsClamp(*(uint*)buf3045, *(uint*)buf3046, *(uint*)buf3047);
+    rsClearObject((rs_element*) buf3048);
+    rsClearObject((rs_type*) buf3049);
+    rsClearObject((rs_allocation*) buf3050);
+    rsClearObject((rs_sampler*) buf3051);
+    rsClearObject((rs_script*) buf3052);
+    rsDebug((const char*) buf3053, *(double*)buf3054);
+    rsDebug((const char*) buf3055, *(int*)buf3056);
+    rsDebug((const char*) buf3057, *(uint*)buf3058);
+    rsDebug((const char*) buf3059, *(long*)buf3060);
+    rsDebug((const char*) buf3061, *(ulong*)buf3062);
+    rsDebug((const char*) buf3063, *(int2*)buf3064);
+    rsDebug((const char*) buf3065, *(int3*)buf3066);
+    rsDebug((const char*) buf3067, *(int4*)buf3068);
+    rsDebug((const char*) buf3069, *(uint2*)buf3070);
+    rsDebug((const char*) buf3071, *(uint3*)buf3072);
+    rsDebug((const char*) buf3073, *(uint4*)buf3074);
+    rsDebug((const char*) buf3075, *(long2*)buf3076);
+    rsDebug((const char*) buf3077, *(long3*)buf3078);
+    rsDebug((const char*) buf3079, *(long4*)buf3080);
+    rsDebug((const char*) buf3081, *(ulong2*)buf3082);
+    rsDebug((const char*) buf3083, *(ulong3*)buf3084);
+    rsDebug((const char*) buf3085, *(ulong4*)buf3086);
+    rsDebug((const char*) buf3087, *(double2*)buf3088);
+    rsDebug((const char*) buf3089, *(double3*)buf3090);
+    rsDebug((const char*) buf3091, *(double4*)buf3092);
+    rsDebug((const char*) buf3093, *(float*)buf3094);
+    rsDebug((const char*) buf3095, *(float2*)buf3096);
+    rsDebug((const char*) buf3097, *(float3*)buf3098);
+    rsDebug((const char*) buf3099, *(float4*)buf3100);
+    rsDebug((const char*) buf3101, *(char*)buf3102);
+    rsDebug((const char*) buf3103, *(char2*)buf3104);
+    rsDebug((const char*) buf3105, *(char3*)buf3106);
+    rsDebug((const char*) buf3107, *(char4*)buf3108);
+    rsDebug((const char*) buf3109, *(uchar*)buf3110);
+    rsDebug((const char*) buf3111, *(uchar2*)buf3112);
+    rsDebug((const char*) buf3113, *(uchar3*)buf3114);
+    rsDebug((const char*) buf3115, *(uchar4*)buf3116);
+    rsDebug((const char*) buf3117, *(short*)buf3118);
+    rsDebug((const char*) buf3119, *(short2*)buf3120);
+    rsDebug((const char*) buf3121, *(short3*)buf3122);
+    rsDebug((const char*) buf3123, *(short4*)buf3124);
+    rsDebug((const char*) buf3125, *(ushort*)buf3126);
+    rsDebug((const char*) buf3127, *(ushort2*)buf3128);
+    rsDebug((const char*) buf3129, *(ushort3*)buf3130);
+    rsDebug((const char*) buf3131, *(ushort4*)buf3132);
+    rsDebug((const char*) buf3133, *(float*)buf3134, *(float*)buf3135);
+    rsDebug((const char*) buf3136, *(float*)buf3137, *(float*)buf3138, *(float*)buf3139);
+    rsDebug((const char*) buf3140, *(float*)buf3141, *(float*)buf3142, *(float*)buf3143, *(float*)buf3144);
+    rsDebug((const char*) buf3145, *(long long*)buf3146);
+    rsDebug((const char*) buf3147, *(unsigned long long*)buf3148);
+    rsDebug((const char*) buf3149, (const void*) buf3150);
+    rsDebug((const char*) buf3151, (const rs_matrix4x4*) buf3152);
+    rsDebug((const char*) buf3153, (const rs_matrix3x3*) buf3154);
+    rsDebug((const char*) buf3155, (const rs_matrix2x2*) buf3156);
+    *(uint32_t*)buf3157 = rsElementGetBytesSize(*(rs_element*)buf3158);
+    *(rs_data_kind*)buf3159 = rsElementGetDataKind(*(rs_element*)buf3160);
+    *(rs_data_type*)buf3161 = rsElementGetDataType(*(rs_element*)buf3162);
+    *(rs_element*)buf3163 = rsElementGetSubElement(*(rs_element*)buf3164, *(uint32_t*)buf3165);
+    *(uint32_t*)buf3166 = rsElementGetSubElementArraySize(*(rs_element*)buf3167, *(uint32_t*)buf3168);
+    *(uint32_t*)buf3169 = rsElementGetSubElementCount(*(rs_element*)buf3170);
+    *(uint32_t*)buf3171 = rsElementGetSubElementName(*(rs_element*)buf3172, *(uint32_t*)buf3173, (char*) buf3174, *(uint32_t*)buf3175);
+    *(uint32_t*)buf3176 = rsElementGetSubElementNameLength(*(rs_element*)buf3177, *(uint32_t*)buf3178);
+    *(uint32_t*)buf3179 = rsElementGetSubElementOffsetBytes(*(rs_element*)buf3180, *(uint32_t*)buf3181);
+    *(uint32_t*)buf3182 = rsElementGetVectorSize(*(rs_element*)buf3183);
+    rsExtractFrustumPlanes((const rs_matrix4x4*) buf3184, (float4*) buf3185, (float4*) buf3186, (float4*) buf3187, (float4*) buf3188, (float4*) buf3189, (float4*) buf3190);
+    rsForEach(*(rs_script*)buf3191, *(rs_allocation*)buf3192, *(rs_allocation*)buf3193);
+    *(float*)buf3194 = rsFrac(*(float*)buf3195);
+    *(rs_allocation*)buf3196 = rsGetAllocation((const void*) buf3197);
+    *(uint32_t*)buf3198 = rsGetArray0(context);
+    *(uint32_t*)buf3199 = rsGetArray1(context);
+    *(uint32_t*)buf3200 = rsGetArray2(context);
+    *(uint32_t*)buf3201 = rsGetArray3(context);
+    *(uint32_t*)buf3202 = rsGetDimArray0(context);
+    *(uint32_t*)buf3203 = rsGetDimArray1(context);
+    *(uint32_t*)buf3204 = rsGetDimArray2(context);
+    *(uint32_t*)buf3205 = rsGetDimArray3(context);
+    *(bool*)buf3206 = rsGetDimHasFaces(context);
+    *(uint32_t*)buf3207 = rsGetDimLod(context);
+    *(uint32_t*)buf3208 = rsGetDimX(context);
+    *(uint32_t*)buf3209 = rsGetDimY(context);
+    *(uint32_t*)buf3210 = rsGetDimZ(context);
+    *(float*)buf3211 = rsGetDt();
+    *(const void**)buf3212 = rsGetElementAt(*(rs_allocation*)buf3213, *(uint32_t*)buf3214);
+    *(const void**)buf3215 = rsGetElementAt(*(rs_allocation*)buf3216, *(uint32_t*)buf3217, *(uint32_t*)buf3218);
+    *(const void**)buf3219 = rsGetElementAt(*(rs_allocation*)buf3220, *(uint32_t*)buf3221, *(uint32_t*)buf3222, *(uint32_t*)buf3223);
+    *(float*)buf3224 = rsGetElementAt_float(*(rs_allocation*)buf3225, *(uint32_t*)buf3226);
+    *(float2*)buf3227 = rsGetElementAt_float2(*(rs_allocation*)buf3228, *(uint32_t*)buf3229);
+    *(float3*)buf3230 = rsGetElementAt_float3(*(rs_allocation*)buf3231, *(uint32_t*)buf3232);
+    *(float4*)buf3233 = rsGetElementAt_float4(*(rs_allocation*)buf3234, *(uint32_t*)buf3235);
+    *(double*)buf3236 = rsGetElementAt_double(*(rs_allocation*)buf3237, *(uint32_t*)buf3238);
+    *(double2*)buf3239 = rsGetElementAt_double2(*(rs_allocation*)buf3240, *(uint32_t*)buf3241);
+    *(double3*)buf3242 = rsGetElementAt_double3(*(rs_allocation*)buf3243, *(uint32_t*)buf3244);
+    *(double4*)buf3245 = rsGetElementAt_double4(*(rs_allocation*)buf3246, *(uint32_t*)buf3247);
+    *(char*)buf3248 = rsGetElementAt_char(*(rs_allocation*)buf3249, *(uint32_t*)buf3250);
+    *(char2*)buf3251 = rsGetElementAt_char2(*(rs_allocation*)buf3252, *(uint32_t*)buf3253);
+    *(char3*)buf3254 = rsGetElementAt_char3(*(rs_allocation*)buf3255, *(uint32_t*)buf3256);
+    *(char4*)buf3257 = rsGetElementAt_char4(*(rs_allocation*)buf3258, *(uint32_t*)buf3259);
+    *(uchar*)buf3260 = rsGetElementAt_uchar(*(rs_allocation*)buf3261, *(uint32_t*)buf3262);
+    *(uchar2*)buf3263 = rsGetElementAt_uchar2(*(rs_allocation*)buf3264, *(uint32_t*)buf3265);
+    *(uchar3*)buf3266 = rsGetElementAt_uchar3(*(rs_allocation*)buf3267, *(uint32_t*)buf3268);
+    *(uchar4*)buf3269 = rsGetElementAt_uchar4(*(rs_allocation*)buf3270, *(uint32_t*)buf3271);
+    *(short*)buf3272 = rsGetElementAt_short(*(rs_allocation*)buf3273, *(uint32_t*)buf3274);
+    *(short2*)buf3275 = rsGetElementAt_short2(*(rs_allocation*)buf3276, *(uint32_t*)buf3277);
+    *(short3*)buf3278 = rsGetElementAt_short3(*(rs_allocation*)buf3279, *(uint32_t*)buf3280);
+    *(short4*)buf3281 = rsGetElementAt_short4(*(rs_allocation*)buf3282, *(uint32_t*)buf3283);
+    *(ushort*)buf3284 = rsGetElementAt_ushort(*(rs_allocation*)buf3285, *(uint32_t*)buf3286);
+    *(ushort2*)buf3287 = rsGetElementAt_ushort2(*(rs_allocation*)buf3288, *(uint32_t*)buf3289);
+    *(ushort3*)buf3290 = rsGetElementAt_ushort3(*(rs_allocation*)buf3291, *(uint32_t*)buf3292);
+    *(ushort4*)buf3293 = rsGetElementAt_ushort4(*(rs_allocation*)buf3294, *(uint32_t*)buf3295);
+    *(int*)buf3296 = rsGetElementAt_int(*(rs_allocation*)buf3297, *(uint32_t*)buf3298);
+    *(int2*)buf3299 = rsGetElementAt_int2(*(rs_allocation*)buf3300, *(uint32_t*)buf3301);
+    *(int3*)buf3302 = rsGetElementAt_int3(*(rs_allocation*)buf3303, *(uint32_t*)buf3304);
+    *(int4*)buf3305 = rsGetElementAt_int4(*(rs_allocation*)buf3306, *(uint32_t*)buf3307);
+    *(uint*)buf3308 = rsGetElementAt_uint(*(rs_allocation*)buf3309, *(uint32_t*)buf3310);
+    *(uint2*)buf3311 = rsGetElementAt_uint2(*(rs_allocation*)buf3312, *(uint32_t*)buf3313);
+    *(uint3*)buf3314 = rsGetElementAt_uint3(*(rs_allocation*)buf3315, *(uint32_t*)buf3316);
+    *(uint4*)buf3317 = rsGetElementAt_uint4(*(rs_allocation*)buf3318, *(uint32_t*)buf3319);
+    *(long*)buf3320 = rsGetElementAt_long(*(rs_allocation*)buf3321, *(uint32_t*)buf3322);
+    *(long2*)buf3323 = rsGetElementAt_long2(*(rs_allocation*)buf3324, *(uint32_t*)buf3325);
+    *(long3*)buf3326 = rsGetElementAt_long3(*(rs_allocation*)buf3327, *(uint32_t*)buf3328);
+    *(long4*)buf3329 = rsGetElementAt_long4(*(rs_allocation*)buf3330, *(uint32_t*)buf3331);
+    *(ulong*)buf3332 = rsGetElementAt_ulong(*(rs_allocation*)buf3333, *(uint32_t*)buf3334);
+    *(ulong2*)buf3335 = rsGetElementAt_ulong2(*(rs_allocation*)buf3336, *(uint32_t*)buf3337);
+    *(ulong3*)buf3338 = rsGetElementAt_ulong3(*(rs_allocation*)buf3339, *(uint32_t*)buf3340);
+    *(ulong4*)buf3341 = rsGetElementAt_ulong4(*(rs_allocation*)buf3342, *(uint32_t*)buf3343);
+    *(float*)buf3344 = rsGetElementAt_float(*(rs_allocation*)buf3345, *(uint32_t*)buf3346, *(uint32_t*)buf3347);
+    *(float2*)buf3348 = rsGetElementAt_float2(*(rs_allocation*)buf3349, *(uint32_t*)buf3350, *(uint32_t*)buf3351);
+    *(float3*)buf3352 = rsGetElementAt_float3(*(rs_allocation*)buf3353, *(uint32_t*)buf3354, *(uint32_t*)buf3355);
+    *(float4*)buf3356 = rsGetElementAt_float4(*(rs_allocation*)buf3357, *(uint32_t*)buf3358, *(uint32_t*)buf3359);
+    *(double*)buf3360 = rsGetElementAt_double(*(rs_allocation*)buf3361, *(uint32_t*)buf3362, *(uint32_t*)buf3363);
+    *(double2*)buf3364 = rsGetElementAt_double2(*(rs_allocation*)buf3365, *(uint32_t*)buf3366, *(uint32_t*)buf3367);
+    *(double3*)buf3368 = rsGetElementAt_double3(*(rs_allocation*)buf3369, *(uint32_t*)buf3370, *(uint32_t*)buf3371);
+    *(double4*)buf3372 = rsGetElementAt_double4(*(rs_allocation*)buf3373, *(uint32_t*)buf3374, *(uint32_t*)buf3375);
+    *(char*)buf3376 = rsGetElementAt_char(*(rs_allocation*)buf3377, *(uint32_t*)buf3378, *(uint32_t*)buf3379);
+    *(char2*)buf3380 = rsGetElementAt_char2(*(rs_allocation*)buf3381, *(uint32_t*)buf3382, *(uint32_t*)buf3383);
+    *(char3*)buf3384 = rsGetElementAt_char3(*(rs_allocation*)buf3385, *(uint32_t*)buf3386, *(uint32_t*)buf3387);
+    *(char4*)buf3388 = rsGetElementAt_char4(*(rs_allocation*)buf3389, *(uint32_t*)buf3390, *(uint32_t*)buf3391);
+    *(uchar*)buf3392 = rsGetElementAt_uchar(*(rs_allocation*)buf3393, *(uint32_t*)buf3394, *(uint32_t*)buf3395);
+    *(uchar2*)buf3396 = rsGetElementAt_uchar2(*(rs_allocation*)buf3397, *(uint32_t*)buf3398, *(uint32_t*)buf3399);
+    *(uchar3*)buf3400 = rsGetElementAt_uchar3(*(rs_allocation*)buf3401, *(uint32_t*)buf3402, *(uint32_t*)buf3403);
+    *(uchar4*)buf3404 = rsGetElementAt_uchar4(*(rs_allocation*)buf3405, *(uint32_t*)buf3406, *(uint32_t*)buf3407);
+    *(short*)buf3408 = rsGetElementAt_short(*(rs_allocation*)buf3409, *(uint32_t*)buf3410, *(uint32_t*)buf3411);
+    *(short2*)buf3412 = rsGetElementAt_short2(*(rs_allocation*)buf3413, *(uint32_t*)buf3414, *(uint32_t*)buf3415);
+    *(short3*)buf3416 = rsGetElementAt_short3(*(rs_allocation*)buf3417, *(uint32_t*)buf3418, *(uint32_t*)buf3419);
+    *(short4*)buf3420 = rsGetElementAt_short4(*(rs_allocation*)buf3421, *(uint32_t*)buf3422, *(uint32_t*)buf3423);
+    *(ushort*)buf3424 = rsGetElementAt_ushort(*(rs_allocation*)buf3425, *(uint32_t*)buf3426, *(uint32_t*)buf3427);
+    *(ushort2*)buf3428 = rsGetElementAt_ushort2(*(rs_allocation*)buf3429, *(uint32_t*)buf3430, *(uint32_t*)buf3431);
+    *(ushort3*)buf3432 = rsGetElementAt_ushort3(*(rs_allocation*)buf3433, *(uint32_t*)buf3434, *(uint32_t*)buf3435);
+    *(ushort4*)buf3436 = rsGetElementAt_ushort4(*(rs_allocation*)buf3437, *(uint32_t*)buf3438, *(uint32_t*)buf3439);
+    *(int*)buf3440 = rsGetElementAt_int(*(rs_allocation*)buf3441, *(uint32_t*)buf3442, *(uint32_t*)buf3443);
+    *(int2*)buf3444 = rsGetElementAt_int2(*(rs_allocation*)buf3445, *(uint32_t*)buf3446, *(uint32_t*)buf3447);
+    *(int3*)buf3448 = rsGetElementAt_int3(*(rs_allocation*)buf3449, *(uint32_t*)buf3450, *(uint32_t*)buf3451);
+    *(int4*)buf3452 = rsGetElementAt_int4(*(rs_allocation*)buf3453, *(uint32_t*)buf3454, *(uint32_t*)buf3455);
+    *(uint*)buf3456 = rsGetElementAt_uint(*(rs_allocation*)buf3457, *(uint32_t*)buf3458, *(uint32_t*)buf3459);
+    *(uint2*)buf3460 = rsGetElementAt_uint2(*(rs_allocation*)buf3461, *(uint32_t*)buf3462, *(uint32_t*)buf3463);
+    *(uint3*)buf3464 = rsGetElementAt_uint3(*(rs_allocation*)buf3465, *(uint32_t*)buf3466, *(uint32_t*)buf3467);
+    *(uint4*)buf3468 = rsGetElementAt_uint4(*(rs_allocation*)buf3469, *(uint32_t*)buf3470, *(uint32_t*)buf3471);
+    *(long*)buf3472 = rsGetElementAt_long(*(rs_allocation*)buf3473, *(uint32_t*)buf3474, *(uint32_t*)buf3475);
+    *(long2*)buf3476 = rsGetElementAt_long2(*(rs_allocation*)buf3477, *(uint32_t*)buf3478, *(uint32_t*)buf3479);
+    *(long3*)buf3480 = rsGetElementAt_long3(*(rs_allocation*)buf3481, *(uint32_t*)buf3482, *(uint32_t*)buf3483);
+    *(long4*)buf3484 = rsGetElementAt_long4(*(rs_allocation*)buf3485, *(uint32_t*)buf3486, *(uint32_t*)buf3487);
+    *(ulong*)buf3488 = rsGetElementAt_ulong(*(rs_allocation*)buf3489, *(uint32_t*)buf3490, *(uint32_t*)buf3491);
+    *(ulong2*)buf3492 = rsGetElementAt_ulong2(*(rs_allocation*)buf3493, *(uint32_t*)buf3494, *(uint32_t*)buf3495);
+    *(ulong3*)buf3496 = rsGetElementAt_ulong3(*(rs_allocation*)buf3497, *(uint32_t*)buf3498, *(uint32_t*)buf3499);
+    *(ulong4*)buf3500 = rsGetElementAt_ulong4(*(rs_allocation*)buf3501, *(uint32_t*)buf3502, *(uint32_t*)buf3503);
+    *(float*)buf3504 = rsGetElementAt_float(*(rs_allocation*)buf3505, *(uint32_t*)buf3506, *(uint32_t*)buf3507, *(uint32_t*)buf3508);
+    *(float2*)buf3509 = rsGetElementAt_float2(*(rs_allocation*)buf3510, *(uint32_t*)buf3511, *(uint32_t*)buf3512, *(uint32_t*)buf3513);
+    *(float3*)buf3514 = rsGetElementAt_float3(*(rs_allocation*)buf3515, *(uint32_t*)buf3516, *(uint32_t*)buf3517, *(uint32_t*)buf3518);
+    *(float4*)buf3519 = rsGetElementAt_float4(*(rs_allocation*)buf3520, *(uint32_t*)buf3521, *(uint32_t*)buf3522, *(uint32_t*)buf3523);
+    *(double*)buf3524 = rsGetElementAt_double(*(rs_allocation*)buf3525, *(uint32_t*)buf3526, *(uint32_t*)buf3527, *(uint32_t*)buf3528);
+    *(double2*)buf3529 = rsGetElementAt_double2(*(rs_allocation*)buf3530, *(uint32_t*)buf3531, *(uint32_t*)buf3532, *(uint32_t*)buf3533);
+    *(double3*)buf3534 = rsGetElementAt_double3(*(rs_allocation*)buf3535, *(uint32_t*)buf3536, *(uint32_t*)buf3537, *(uint32_t*)buf3538);
+    *(double4*)buf3539 = rsGetElementAt_double4(*(rs_allocation*)buf3540, *(uint32_t*)buf3541, *(uint32_t*)buf3542, *(uint32_t*)buf3543);
+    *(char*)buf3544 = rsGetElementAt_char(*(rs_allocation*)buf3545, *(uint32_t*)buf3546, *(uint32_t*)buf3547, *(uint32_t*)buf3548);
+    *(char2*)buf3549 = rsGetElementAt_char2(*(rs_allocation*)buf3550, *(uint32_t*)buf3551, *(uint32_t*)buf3552, *(uint32_t*)buf3553);
+    *(char3*)buf3554 = rsGetElementAt_char3(*(rs_allocation*)buf3555, *(uint32_t*)buf3556, *(uint32_t*)buf3557, *(uint32_t*)buf3558);
+    *(char4*)buf3559 = rsGetElementAt_char4(*(rs_allocation*)buf3560, *(uint32_t*)buf3561, *(uint32_t*)buf3562, *(uint32_t*)buf3563);
+    *(uchar*)buf3564 = rsGetElementAt_uchar(*(rs_allocation*)buf3565, *(uint32_t*)buf3566, *(uint32_t*)buf3567, *(uint32_t*)buf3568);
+    *(uchar2*)buf3569 = rsGetElementAt_uchar2(*(rs_allocation*)buf3570, *(uint32_t*)buf3571, *(uint32_t*)buf3572, *(uint32_t*)buf3573);
+    *(uchar3*)buf3574 = rsGetElementAt_uchar3(*(rs_allocation*)buf3575, *(uint32_t*)buf3576, *(uint32_t*)buf3577, *(uint32_t*)buf3578);
+    *(uchar4*)buf3579 = rsGetElementAt_uchar4(*(rs_allocation*)buf3580, *(uint32_t*)buf3581, *(uint32_t*)buf3582, *(uint32_t*)buf3583);
+    *(short*)buf3584 = rsGetElementAt_short(*(rs_allocation*)buf3585, *(uint32_t*)buf3586, *(uint32_t*)buf3587, *(uint32_t*)buf3588);
+    *(short2*)buf3589 = rsGetElementAt_short2(*(rs_allocation*)buf3590, *(uint32_t*)buf3591, *(uint32_t*)buf3592, *(uint32_t*)buf3593);
+    *(short3*)buf3594 = rsGetElementAt_short3(*(rs_allocation*)buf3595, *(uint32_t*)buf3596, *(uint32_t*)buf3597, *(uint32_t*)buf3598);
+    *(short4*)buf3599 = rsGetElementAt_short4(*(rs_allocation*)buf3600, *(uint32_t*)buf3601, *(uint32_t*)buf3602, *(uint32_t*)buf3603);
+    *(ushort*)buf3604 = rsGetElementAt_ushort(*(rs_allocation*)buf3605, *(uint32_t*)buf3606, *(uint32_t*)buf3607, *(uint32_t*)buf3608);
+    *(ushort2*)buf3609 = rsGetElementAt_ushort2(*(rs_allocation*)buf3610, *(uint32_t*)buf3611, *(uint32_t*)buf3612, *(uint32_t*)buf3613);
+    *(ushort3*)buf3614 = rsGetElementAt_ushort3(*(rs_allocation*)buf3615, *(uint32_t*)buf3616, *(uint32_t*)buf3617, *(uint32_t*)buf3618);
+    *(ushort4*)buf3619 = rsGetElementAt_ushort4(*(rs_allocation*)buf3620, *(uint32_t*)buf3621, *(uint32_t*)buf3622, *(uint32_t*)buf3623);
+    *(int*)buf3624 = rsGetElementAt_int(*(rs_allocation*)buf3625, *(uint32_t*)buf3626, *(uint32_t*)buf3627, *(uint32_t*)buf3628);
+    *(int2*)buf3629 = rsGetElementAt_int2(*(rs_allocation*)buf3630, *(uint32_t*)buf3631, *(uint32_t*)buf3632, *(uint32_t*)buf3633);
+    *(int3*)buf3634 = rsGetElementAt_int3(*(rs_allocation*)buf3635, *(uint32_t*)buf3636, *(uint32_t*)buf3637, *(uint32_t*)buf3638);
+    *(int4*)buf3639 = rsGetElementAt_int4(*(rs_allocation*)buf3640, *(uint32_t*)buf3641, *(uint32_t*)buf3642, *(uint32_t*)buf3643);
+    *(uint*)buf3644 = rsGetElementAt_uint(*(rs_allocation*)buf3645, *(uint32_t*)buf3646, *(uint32_t*)buf3647, *(uint32_t*)buf3648);
+    *(uint2*)buf3649 = rsGetElementAt_uint2(*(rs_allocation*)buf3650, *(uint32_t*)buf3651, *(uint32_t*)buf3652, *(uint32_t*)buf3653);
+    *(uint3*)buf3654 = rsGetElementAt_uint3(*(rs_allocation*)buf3655, *(uint32_t*)buf3656, *(uint32_t*)buf3657, *(uint32_t*)buf3658);
+    *(uint4*)buf3659 = rsGetElementAt_uint4(*(rs_allocation*)buf3660, *(uint32_t*)buf3661, *(uint32_t*)buf3662, *(uint32_t*)buf3663);
+    *(long*)buf3664 = rsGetElementAt_long(*(rs_allocation*)buf3665, *(uint32_t*)buf3666, *(uint32_t*)buf3667, *(uint32_t*)buf3668);
+    *(long2*)buf3669 = rsGetElementAt_long2(*(rs_allocation*)buf3670, *(uint32_t*)buf3671, *(uint32_t*)buf3672, *(uint32_t*)buf3673);
+    *(long3*)buf3674 = rsGetElementAt_long3(*(rs_allocation*)buf3675, *(uint32_t*)buf3676, *(uint32_t*)buf3677, *(uint32_t*)buf3678);
+    *(long4*)buf3679 = rsGetElementAt_long4(*(rs_allocation*)buf3680, *(uint32_t*)buf3681, *(uint32_t*)buf3682, *(uint32_t*)buf3683);
+    *(ulong*)buf3684 = rsGetElementAt_ulong(*(rs_allocation*)buf3685, *(uint32_t*)buf3686, *(uint32_t*)buf3687, *(uint32_t*)buf3688);
+    *(ulong2*)buf3689 = rsGetElementAt_ulong2(*(rs_allocation*)buf3690, *(uint32_t*)buf3691, *(uint32_t*)buf3692, *(uint32_t*)buf3693);
+    *(ulong3*)buf3694 = rsGetElementAt_ulong3(*(rs_allocation*)buf3695, *(uint32_t*)buf3696, *(uint32_t*)buf3697, *(uint32_t*)buf3698);
+    *(ulong4*)buf3699 = rsGetElementAt_ulong4(*(rs_allocation*)buf3700, *(uint32_t*)buf3701, *(uint32_t*)buf3702, *(uint32_t*)buf3703);
+    *(half*)buf3704 = rsGetElementAt_half(*(rs_allocation*)buf3705, *(uint32_t*)buf3706);
+    *(half2*)buf3707 = rsGetElementAt_half2(*(rs_allocation*)buf3708, *(uint32_t*)buf3709);
+    *(half3*)buf3710 = rsGetElementAt_half3(*(rs_allocation*)buf3711, *(uint32_t*)buf3712);
+    *(half4*)buf3713 = rsGetElementAt_half4(*(rs_allocation*)buf3714, *(uint32_t*)buf3715);
+    *(half*)buf3716 = rsGetElementAt_half(*(rs_allocation*)buf3717, *(uint32_t*)buf3718, *(uint32_t*)buf3719);
+    *(half2*)buf3720 = rsGetElementAt_half2(*(rs_allocation*)buf3721, *(uint32_t*)buf3722, *(uint32_t*)buf3723);
+    *(half3*)buf3724 = rsGetElementAt_half3(*(rs_allocation*)buf3725, *(uint32_t*)buf3726, *(uint32_t*)buf3727);
+    *(half4*)buf3728 = rsGetElementAt_half4(*(rs_allocation*)buf3729, *(uint32_t*)buf3730, *(uint32_t*)buf3731);
+    *(half*)buf3732 = rsGetElementAt_half(*(rs_allocation*)buf3733, *(uint32_t*)buf3734, *(uint32_t*)buf3735, *(uint32_t*)buf3736);
+    *(half2*)buf3737 = rsGetElementAt_half2(*(rs_allocation*)buf3738, *(uint32_t*)buf3739, *(uint32_t*)buf3740, *(uint32_t*)buf3741);
+    *(half3*)buf3742 = rsGetElementAt_half3(*(rs_allocation*)buf3743, *(uint32_t*)buf3744, *(uint32_t*)buf3745, *(uint32_t*)buf3746);
+    *(half4*)buf3747 = rsGetElementAt_half4(*(rs_allocation*)buf3748, *(uint32_t*)buf3749, *(uint32_t*)buf3750, *(uint32_t*)buf3751);
+    *(uchar*)buf3752 = rsGetElementAtYuv_uchar_U(*(rs_allocation*)buf3753, *(uint32_t*)buf3754, *(uint32_t*)buf3755);
+    *(uchar*)buf3756 = rsGetElementAtYuv_uchar_V(*(rs_allocation*)buf3757, *(uint32_t*)buf3758, *(uint32_t*)buf3759);
+    *(uchar*)buf3760 = rsGetElementAtYuv_uchar_Y(*(rs_allocation*)buf3761, *(uint32_t*)buf3762, *(uint32_t*)buf3763);
+    *(rs_allocation_cubemap_face*)buf3764 = rsGetFace(context);
+    *(uint32_t*)buf3765 = rsGetLod(context);
+    *(bool*)buf3766 = rsIsObject(*(rs_element*)buf3767);
+    *(bool*)buf3768 = rsIsObject(*(rs_type*)buf3769);
+    *(bool*)buf3770 = rsIsObject(*(rs_allocation*)buf3771);
+    *(bool*)buf3772 = rsIsObject(*(rs_sampler*)buf3773);
+    *(bool*)buf3774 = rsIsObject(*(rs_script*)buf3775);
+    *(bool*)buf3776 = rsIsSphereInFrustum((float4*) buf3777, (float4*) buf3778, (float4*) buf3779, (float4*) buf3780, (float4*) buf3781, (float4*) buf3782, (float4*) buf3783);
+    *(rs_tm**)buf3784 = rsLocaltime((rs_tm*) buf3785, (const rs_time_t*) buf3786);
+    *(float*)buf3787 = rsMatrixGet((const rs_matrix4x4*) buf3788, *(uint32_t*)buf3789, *(uint32_t*)buf3790);
+    *(float*)buf3791 = rsMatrixGet((const rs_matrix3x3*) buf3792, *(uint32_t*)buf3793, *(uint32_t*)buf3794);
+    *(float*)buf3795 = rsMatrixGet((const rs_matrix2x2*) buf3796, *(uint32_t*)buf3797, *(uint32_t*)buf3798);
+    *(bool*)buf3799 = rsMatrixInverse((rs_matrix4x4*) buf3800);
+    *(bool*)buf3801 = rsMatrixInverseTranspose((rs_matrix4x4*) buf3802);
+    rsMatrixLoad((rs_matrix4x4*) buf3803, (const float*) buf3804);
+    rsMatrixLoad((rs_matrix3x3*) buf3805, (const float*) buf3806);
+    rsMatrixLoad((rs_matrix2x2*) buf3807, (const float*) buf3808);
+    rsMatrixLoad((rs_matrix4x4*) buf3809, (const rs_matrix4x4*) buf3810);
+    rsMatrixLoad((rs_matrix3x3*) buf3811, (const rs_matrix3x3*) buf3812);
+    rsMatrixLoad((rs_matrix2x2*) buf3813, (const rs_matrix2x2*) buf3814);
+    rsMatrixLoad((rs_matrix4x4*) buf3815, (const rs_matrix3x3*) buf3816);
+    rsMatrixLoad((rs_matrix4x4*) buf3817, (const rs_matrix2x2*) buf3818);
+    rsMatrixLoadFrustum((rs_matrix4x4*) buf3819, *(float*)buf3820, *(float*)buf3821, *(float*)buf3822, *(float*)buf3823, *(float*)buf3824, *(float*)buf3825);
+    rsMatrixLoadIdentity((rs_matrix4x4*) buf3826);
+    rsMatrixLoadIdentity((rs_matrix3x3*) buf3827);
+    rsMatrixLoadIdentity((rs_matrix2x2*) buf3828);
+    rsMatrixLoadMultiply((rs_matrix4x4*) buf3829, (const rs_matrix4x4*) buf3830, (const rs_matrix4x4*) buf3831);
+    rsMatrixLoadMultiply((rs_matrix3x3*) buf3832, (const rs_matrix3x3*) buf3833, (const rs_matrix3x3*) buf3834);
+    rsMatrixLoadMultiply((rs_matrix2x2*) buf3835, (const rs_matrix2x2*) buf3836, (const rs_matrix2x2*) buf3837);
+    rsMatrixLoadOrtho((rs_matrix4x4*) buf3838, *(float*)buf3839, *(float*)buf3840, *(float*)buf3841, *(float*)buf3842, *(float*)buf3843, *(float*)buf3844);
+    rsMatrixLoadPerspective((rs_matrix4x4*) buf3845, *(float*)buf3846, *(float*)buf3847, *(float*)buf3848, *(float*)buf3849);
+    rsMatrixLoadRotate((rs_matrix4x4*) buf3850, *(float*)buf3851, *(float*)buf3852, *(float*)buf3853, *(float*)buf3854);
+    rsMatrixLoadScale((rs_matrix4x4*) buf3855, *(float*)buf3856, *(float*)buf3857, *(float*)buf3858);
+    rsMatrixLoadTranslate((rs_matrix4x4*) buf3859, *(float*)buf3860, *(float*)buf3861, *(float*)buf3862);
+    rsMatrixMultiply((rs_matrix4x4*) buf3863, (const rs_matrix4x4*) buf3864);
+    rsMatrixMultiply((rs_matrix3x3*) buf3865, (const rs_matrix3x3*) buf3866);
+    rsMatrixMultiply((rs_matrix2x2*) buf3867, (const rs_matrix2x2*) buf3868);
+    *(float4*)buf3869 = rsMatrixMultiply((const rs_matrix4x4*) buf3870, *(float4*)buf3871);
+    *(float4*)buf3872 = rsMatrixMultiply((const rs_matrix4x4*) buf3873, *(float3*)buf3874);
+    *(float4*)buf3875 = rsMatrixMultiply((const rs_matrix4x4*) buf3876, *(float2*)buf3877);
+    *(float3*)buf3878 = rsMatrixMultiply((const rs_matrix3x3*) buf3879, *(float3*)buf3880);
+    *(float3*)buf3881 = rsMatrixMultiply((const rs_matrix3x3*) buf3882, *(float2*)buf3883);
+    *(float2*)buf3884 = rsMatrixMultiply((const rs_matrix2x2*) buf3885, *(float2*)buf3886);
+    rsMatrixRotate((rs_matrix4x4*) buf3887, *(float*)buf3888, *(float*)buf3889, *(float*)buf3890, *(float*)buf3891);
+    rsMatrixScale((rs_matrix4x4*) buf3892, *(float*)buf3893, *(float*)buf3894, *(float*)buf3895);
+    rsMatrixSet((rs_matrix4x4*) buf3896, *(uint32_t*)buf3897, *(uint32_t*)buf3898, *(float*)buf3899);
+    rsMatrixSet((rs_matrix3x3*) buf3900, *(uint32_t*)buf3901, *(uint32_t*)buf3902, *(float*)buf3903);
+    rsMatrixSet((rs_matrix2x2*) buf3904, *(uint32_t*)buf3905, *(uint32_t*)buf3906, *(float*)buf3907);
+    rsMatrixTranslate((rs_matrix4x4*) buf3908, *(float*)buf3909, *(float*)buf3910, *(float*)buf3911);
+    rsMatrixTranspose((rs_matrix4x4*) buf3912);
+    rsMatrixTranspose((rs_matrix3x3*) buf3913);
+    rsMatrixTranspose((rs_matrix2x2*) buf3914);
+    *(uchar4*)buf3915 = rsPackColorTo8888(*(float*)buf3916, *(float*)buf3917, *(float*)buf3918);
+    *(uchar4*)buf3919 = rsPackColorTo8888(*(float*)buf3920, *(float*)buf3921, *(float*)buf3922, *(float*)buf3923);
+    *(uchar4*)buf3924 = rsPackColorTo8888(*(float3*)buf3925);
+    *(uchar4*)buf3926 = rsPackColorTo8888(*(float4*)buf3927);
+    rsQuaternionAdd((rs_quaternion*) buf3928, (const rs_quaternion*) buf3929);
+    rsQuaternionConjugate((rs_quaternion*) buf3930);
+    *(float*)buf3931 = rsQuaternionDot((const rs_quaternion*) buf3932, (const rs_quaternion*) buf3933);
+    rsQuaternionGetMatrixUnit((rs_matrix4x4*) buf3934, (const rs_quaternion*) buf3935);
+    rsQuaternionLoadRotate((rs_quaternion*) buf3936, *(float*)buf3937, *(float*)buf3938, *(float*)buf3939, *(float*)buf3940);
+    rsQuaternionLoadRotateUnit((rs_quaternion*) buf3941, *(float*)buf3942, *(float*)buf3943, *(float*)buf3944, *(float*)buf3945);
+    rsQuaternionMultiply((rs_quaternion*) buf3946, *(float*)buf3947);
+    rsQuaternionMultiply((rs_quaternion*) buf3948, (const rs_quaternion*) buf3949);
+    rsQuaternionNormalize((rs_quaternion*) buf3950);
+    rsQuaternionSet((rs_quaternion*) buf3951, *(float*)buf3952, *(float*)buf3953, *(float*)buf3954, *(float*)buf3955);
+    rsQuaternionSet((rs_quaternion*) buf3956, (const rs_quaternion*) buf3957);
+    rsQuaternionSlerp((rs_quaternion*) buf3958, (const rs_quaternion*) buf3959, (const rs_quaternion*) buf3960, *(float*)buf3961);
+    *(int*)buf3962 = rsRand(*(int*)buf3963);
+    *(int*)buf3964 = rsRand(*(int*)buf3965, *(int*)buf3966);
+    *(float*)buf3967 = rsRand(*(float*)buf3968);
+    *(float*)buf3969 = rsRand(*(float*)buf3970, *(float*)buf3971);
+    *(float4*)buf3972 = rsSample(*(rs_allocation*)buf3973, *(rs_sampler*)buf3974, *(float*)buf3975);
+    *(float4*)buf3976 = rsSample(*(rs_allocation*)buf3977, *(rs_sampler*)buf3978, *(float*)buf3979, *(float*)buf3980);
+    *(float4*)buf3981 = rsSample(*(rs_allocation*)buf3982, *(rs_sampler*)buf3983, *(float2*)buf3984);
+    *(float4*)buf3985 = rsSample(*(rs_allocation*)buf3986, *(rs_sampler*)buf3987, *(float2*)buf3988, *(float*)buf3989);
+    *(float*)buf3990 = rsSamplerGetAnisotropy(*(rs_sampler*)buf3991);
+    *(rs_sampler_value*)buf3992 = rsSamplerGetMagnification(*(rs_sampler*)buf3993);
+    *(rs_sampler_value*)buf3994 = rsSamplerGetMinification(*(rs_sampler*)buf3995);
+    *(rs_sampler_value*)buf3996 = rsSamplerGetWrapS(*(rs_sampler*)buf3997);
+    *(rs_sampler_value*)buf3998 = rsSamplerGetWrapT(*(rs_sampler*)buf3999);
+    *(bool*)buf4000 = rsSendToClient(*(int*)buf4001);
+    *(bool*)buf4002 = rsSendToClient(*(int*)buf4003, (const void*) buf4004, *(uint*)buf4005);
+    rsSendToClientBlocking(*(int*)buf4006);
+    rsSendToClientBlocking(*(int*)buf4007, (const void*) buf4008, *(uint*)buf4009);
+    rsSetElementAt(*(rs_allocation*)buf4010, (void*) buf4011, *(uint32_t*)buf4012);
+    rsSetElementAt(*(rs_allocation*)buf4013, (void*) buf4014, *(uint32_t*)buf4015, *(uint32_t*)buf4016);
+    rsSetElementAt_float(*(rs_allocation*)buf4017, *(float*)buf4018, *(uint32_t*)buf4019);
+    rsSetElementAt_float2(*(rs_allocation*)buf4020, *(float2*)buf4021, *(uint32_t*)buf4022);
+    rsSetElementAt_float3(*(rs_allocation*)buf4023, *(float3*)buf4024, *(uint32_t*)buf4025);
+    rsSetElementAt_float4(*(rs_allocation*)buf4026, *(float4*)buf4027, *(uint32_t*)buf4028);
+    rsSetElementAt_double(*(rs_allocation*)buf4029, *(double*)buf4030, *(uint32_t*)buf4031);
+    rsSetElementAt_double2(*(rs_allocation*)buf4032, *(double2*)buf4033, *(uint32_t*)buf4034);
+    rsSetElementAt_double3(*(rs_allocation*)buf4035, *(double3*)buf4036, *(uint32_t*)buf4037);
+    rsSetElementAt_double4(*(rs_allocation*)buf4038, *(double4*)buf4039, *(uint32_t*)buf4040);
+    rsSetElementAt_char(*(rs_allocation*)buf4041, *(char*)buf4042, *(uint32_t*)buf4043);
+    rsSetElementAt_char2(*(rs_allocation*)buf4044, *(char2*)buf4045, *(uint32_t*)buf4046);
+    rsSetElementAt_char3(*(rs_allocation*)buf4047, *(char3*)buf4048, *(uint32_t*)buf4049);
+    rsSetElementAt_char4(*(rs_allocation*)buf4050, *(char4*)buf4051, *(uint32_t*)buf4052);
+    rsSetElementAt_uchar(*(rs_allocation*)buf4053, *(uchar*)buf4054, *(uint32_t*)buf4055);
+    rsSetElementAt_uchar2(*(rs_allocation*)buf4056, *(uchar2*)buf4057, *(uint32_t*)buf4058);
+    rsSetElementAt_uchar3(*(rs_allocation*)buf4059, *(uchar3*)buf4060, *(uint32_t*)buf4061);
+    rsSetElementAt_uchar4(*(rs_allocation*)buf4062, *(uchar4*)buf4063, *(uint32_t*)buf4064);
+    rsSetElementAt_short(*(rs_allocation*)buf4065, *(short*)buf4066, *(uint32_t*)buf4067);
+    rsSetElementAt_short2(*(rs_allocation*)buf4068, *(short2*)buf4069, *(uint32_t*)buf4070);
+    rsSetElementAt_short3(*(rs_allocation*)buf4071, *(short3*)buf4072, *(uint32_t*)buf4073);
+    rsSetElementAt_short4(*(rs_allocation*)buf4074, *(short4*)buf4075, *(uint32_t*)buf4076);
+    rsSetElementAt_ushort(*(rs_allocation*)buf4077, *(ushort*)buf4078, *(uint32_t*)buf4079);
+    rsSetElementAt_ushort2(*(rs_allocation*)buf4080, *(ushort2*)buf4081, *(uint32_t*)buf4082);
+    rsSetElementAt_ushort3(*(rs_allocation*)buf4083, *(ushort3*)buf4084, *(uint32_t*)buf4085);
+    rsSetElementAt_ushort4(*(rs_allocation*)buf4086, *(ushort4*)buf4087, *(uint32_t*)buf4088);
+    rsSetElementAt_int(*(rs_allocation*)buf4089, *(int*)buf4090, *(uint32_t*)buf4091);
+    rsSetElementAt_int2(*(rs_allocation*)buf4092, *(int2*)buf4093, *(uint32_t*)buf4094);
+    rsSetElementAt_int3(*(rs_allocation*)buf4095, *(int3*)buf4096, *(uint32_t*)buf4097);
+    rsSetElementAt_int4(*(rs_allocation*)buf4098, *(int4*)buf4099, *(uint32_t*)buf4100);
+    rsSetElementAt_uint(*(rs_allocation*)buf4101, *(uint*)buf4102, *(uint32_t*)buf4103);
+    rsSetElementAt_uint2(*(rs_allocation*)buf4104, *(uint2*)buf4105, *(uint32_t*)buf4106);
+    rsSetElementAt_uint3(*(rs_allocation*)buf4107, *(uint3*)buf4108, *(uint32_t*)buf4109);
+    rsSetElementAt_uint4(*(rs_allocation*)buf4110, *(uint4*)buf4111, *(uint32_t*)buf4112);
+    rsSetElementAt_long(*(rs_allocation*)buf4113, *(long*)buf4114, *(uint32_t*)buf4115);
+    rsSetElementAt_long2(*(rs_allocation*)buf4116, *(long2*)buf4117, *(uint32_t*)buf4118);
+    rsSetElementAt_long3(*(rs_allocation*)buf4119, *(long3*)buf4120, *(uint32_t*)buf4121);
+    rsSetElementAt_long4(*(rs_allocation*)buf4122, *(long4*)buf4123, *(uint32_t*)buf4124);
+    rsSetElementAt_ulong(*(rs_allocation*)buf4125, *(ulong*)buf4126, *(uint32_t*)buf4127);
+    rsSetElementAt_ulong2(*(rs_allocation*)buf4128, *(ulong2*)buf4129, *(uint32_t*)buf4130);
+    rsSetElementAt_ulong3(*(rs_allocation*)buf4131, *(ulong3*)buf4132, *(uint32_t*)buf4133);
+    rsSetElementAt_ulong4(*(rs_allocation*)buf4134, *(ulong4*)buf4135, *(uint32_t*)buf4136);
+    rsSetElementAt_float(*(rs_allocation*)buf4137, *(float*)buf4138, *(uint32_t*)buf4139, *(uint32_t*)buf4140);
+    rsSetElementAt_float2(*(rs_allocation*)buf4141, *(float2*)buf4142, *(uint32_t*)buf4143, *(uint32_t*)buf4144);
+    rsSetElementAt_float3(*(rs_allocation*)buf4145, *(float3*)buf4146, *(uint32_t*)buf4147, *(uint32_t*)buf4148);
+    rsSetElementAt_float4(*(rs_allocation*)buf4149, *(float4*)buf4150, *(uint32_t*)buf4151, *(uint32_t*)buf4152);
+    rsSetElementAt_double(*(rs_allocation*)buf4153, *(double*)buf4154, *(uint32_t*)buf4155, *(uint32_t*)buf4156);
+    rsSetElementAt_double2(*(rs_allocation*)buf4157, *(double2*)buf4158, *(uint32_t*)buf4159, *(uint32_t*)buf4160);
+    rsSetElementAt_double3(*(rs_allocation*)buf4161, *(double3*)buf4162, *(uint32_t*)buf4163, *(uint32_t*)buf4164);
+    rsSetElementAt_double4(*(rs_allocation*)buf4165, *(double4*)buf4166, *(uint32_t*)buf4167, *(uint32_t*)buf4168);
+    rsSetElementAt_char(*(rs_allocation*)buf4169, *(char*)buf4170, *(uint32_t*)buf4171, *(uint32_t*)buf4172);
+    rsSetElementAt_char2(*(rs_allocation*)buf4173, *(char2*)buf4174, *(uint32_t*)buf4175, *(uint32_t*)buf4176);
+    rsSetElementAt_char3(*(rs_allocation*)buf4177, *(char3*)buf4178, *(uint32_t*)buf4179, *(uint32_t*)buf4180);
+    rsSetElementAt_char4(*(rs_allocation*)buf4181, *(char4*)buf4182, *(uint32_t*)buf4183, *(uint32_t*)buf4184);
+    rsSetElementAt_uchar(*(rs_allocation*)buf4185, *(uchar*)buf4186, *(uint32_t*)buf4187, *(uint32_t*)buf4188);
+    rsSetElementAt_uchar2(*(rs_allocation*)buf4189, *(uchar2*)buf4190, *(uint32_t*)buf4191, *(uint32_t*)buf4192);
+    rsSetElementAt_uchar3(*(rs_allocation*)buf4193, *(uchar3*)buf4194, *(uint32_t*)buf4195, *(uint32_t*)buf4196);
+    rsSetElementAt_uchar4(*(rs_allocation*)buf4197, *(uchar4*)buf4198, *(uint32_t*)buf4199, *(uint32_t*)buf4200);
+    rsSetElementAt_short(*(rs_allocation*)buf4201, *(short*)buf4202, *(uint32_t*)buf4203, *(uint32_t*)buf4204);
+    rsSetElementAt_short2(*(rs_allocation*)buf4205, *(short2*)buf4206, *(uint32_t*)buf4207, *(uint32_t*)buf4208);
+    rsSetElementAt_short3(*(rs_allocation*)buf4209, *(short3*)buf4210, *(uint32_t*)buf4211, *(uint32_t*)buf4212);
+    rsSetElementAt_short4(*(rs_allocation*)buf4213, *(short4*)buf4214, *(uint32_t*)buf4215, *(uint32_t*)buf4216);
+    rsSetElementAt_ushort(*(rs_allocation*)buf4217, *(ushort*)buf4218, *(uint32_t*)buf4219, *(uint32_t*)buf4220);
+    rsSetElementAt_ushort2(*(rs_allocation*)buf4221, *(ushort2*)buf4222, *(uint32_t*)buf4223, *(uint32_t*)buf4224);
+    rsSetElementAt_ushort3(*(rs_allocation*)buf4225, *(ushort3*)buf4226, *(uint32_t*)buf4227, *(uint32_t*)buf4228);
+    rsSetElementAt_ushort4(*(rs_allocation*)buf4229, *(ushort4*)buf4230, *(uint32_t*)buf4231, *(uint32_t*)buf4232);
+    rsSetElementAt_int(*(rs_allocation*)buf4233, *(int*)buf4234, *(uint32_t*)buf4235, *(uint32_t*)buf4236);
+    rsSetElementAt_int2(*(rs_allocation*)buf4237, *(int2*)buf4238, *(uint32_t*)buf4239, *(uint32_t*)buf4240);
+    rsSetElementAt_int3(*(rs_allocation*)buf4241, *(int3*)buf4242, *(uint32_t*)buf4243, *(uint32_t*)buf4244);
+    rsSetElementAt_int4(*(rs_allocation*)buf4245, *(int4*)buf4246, *(uint32_t*)buf4247, *(uint32_t*)buf4248);
+    rsSetElementAt_uint(*(rs_allocation*)buf4249, *(uint*)buf4250, *(uint32_t*)buf4251, *(uint32_t*)buf4252);
+    rsSetElementAt_uint2(*(rs_allocation*)buf4253, *(uint2*)buf4254, *(uint32_t*)buf4255, *(uint32_t*)buf4256);
+    rsSetElementAt_uint3(*(rs_allocation*)buf4257, *(uint3*)buf4258, *(uint32_t*)buf4259, *(uint32_t*)buf4260);
+    rsSetElementAt_uint4(*(rs_allocation*)buf4261, *(uint4*)buf4262, *(uint32_t*)buf4263, *(uint32_t*)buf4264);
+    rsSetElementAt_long(*(rs_allocation*)buf4265, *(long*)buf4266, *(uint32_t*)buf4267, *(uint32_t*)buf4268);
+    rsSetElementAt_long2(*(rs_allocation*)buf4269, *(long2*)buf4270, *(uint32_t*)buf4271, *(uint32_t*)buf4272);
+    rsSetElementAt_long3(*(rs_allocation*)buf4273, *(long3*)buf4274, *(uint32_t*)buf4275, *(uint32_t*)buf4276);
+    rsSetElementAt_long4(*(rs_allocation*)buf4277, *(long4*)buf4278, *(uint32_t*)buf4279, *(uint32_t*)buf4280);
+    rsSetElementAt_ulong(*(rs_allocation*)buf4281, *(ulong*)buf4282, *(uint32_t*)buf4283, *(uint32_t*)buf4284);
+    rsSetElementAt_ulong2(*(rs_allocation*)buf4285, *(ulong2*)buf4286, *(uint32_t*)buf4287, *(uint32_t*)buf4288);
+    rsSetElementAt_ulong3(*(rs_allocation*)buf4289, *(ulong3*)buf4290, *(uint32_t*)buf4291, *(uint32_t*)buf4292);
+    rsSetElementAt_ulong4(*(rs_allocation*)buf4293, *(ulong4*)buf4294, *(uint32_t*)buf4295, *(uint32_t*)buf4296);
+    rsSetElementAt_float(*(rs_allocation*)buf4297, *(float*)buf4298, *(uint32_t*)buf4299, *(uint32_t*)buf4300, *(uint32_t*)buf4301);
+    rsSetElementAt_float2(*(rs_allocation*)buf4302, *(float2*)buf4303, *(uint32_t*)buf4304, *(uint32_t*)buf4305, *(uint32_t*)buf4306);
+    rsSetElementAt_float3(*(rs_allocation*)buf4307, *(float3*)buf4308, *(uint32_t*)buf4309, *(uint32_t*)buf4310, *(uint32_t*)buf4311);
+    rsSetElementAt_float4(*(rs_allocation*)buf4312, *(float4*)buf4313, *(uint32_t*)buf4314, *(uint32_t*)buf4315, *(uint32_t*)buf4316);
+    rsSetElementAt_double(*(rs_allocation*)buf4317, *(double*)buf4318, *(uint32_t*)buf4319, *(uint32_t*)buf4320, *(uint32_t*)buf4321);
+    rsSetElementAt_double2(*(rs_allocation*)buf4322, *(double2*)buf4323, *(uint32_t*)buf4324, *(uint32_t*)buf4325, *(uint32_t*)buf4326);
+    rsSetElementAt_double3(*(rs_allocation*)buf4327, *(double3*)buf4328, *(uint32_t*)buf4329, *(uint32_t*)buf4330, *(uint32_t*)buf4331);
+    rsSetElementAt_double4(*(rs_allocation*)buf4332, *(double4*)buf4333, *(uint32_t*)buf4334, *(uint32_t*)buf4335, *(uint32_t*)buf4336);
+    rsSetElementAt_char(*(rs_allocation*)buf4337, *(char*)buf4338, *(uint32_t*)buf4339, *(uint32_t*)buf4340, *(uint32_t*)buf4341);
+    rsSetElementAt_char2(*(rs_allocation*)buf4342, *(char2*)buf4343, *(uint32_t*)buf4344, *(uint32_t*)buf4345, *(uint32_t*)buf4346);
+    rsSetElementAt_char3(*(rs_allocation*)buf4347, *(char3*)buf4348, *(uint32_t*)buf4349, *(uint32_t*)buf4350, *(uint32_t*)buf4351);
+    rsSetElementAt_char4(*(rs_allocation*)buf4352, *(char4*)buf4353, *(uint32_t*)buf4354, *(uint32_t*)buf4355, *(uint32_t*)buf4356);
+    rsSetElementAt_uchar(*(rs_allocation*)buf4357, *(uchar*)buf4358, *(uint32_t*)buf4359, *(uint32_t*)buf4360, *(uint32_t*)buf4361);
+    rsSetElementAt_uchar2(*(rs_allocation*)buf4362, *(uchar2*)buf4363, *(uint32_t*)buf4364, *(uint32_t*)buf4365, *(uint32_t*)buf4366);
+    rsSetElementAt_uchar3(*(rs_allocation*)buf4367, *(uchar3*)buf4368, *(uint32_t*)buf4369, *(uint32_t*)buf4370, *(uint32_t*)buf4371);
+    rsSetElementAt_uchar4(*(rs_allocation*)buf4372, *(uchar4*)buf4373, *(uint32_t*)buf4374, *(uint32_t*)buf4375, *(uint32_t*)buf4376);
+    rsSetElementAt_short(*(rs_allocation*)buf4377, *(short*)buf4378, *(uint32_t*)buf4379, *(uint32_t*)buf4380, *(uint32_t*)buf4381);
+    rsSetElementAt_short2(*(rs_allocation*)buf4382, *(short2*)buf4383, *(uint32_t*)buf4384, *(uint32_t*)buf4385, *(uint32_t*)buf4386);
+    rsSetElementAt_short3(*(rs_allocation*)buf4387, *(short3*)buf4388, *(uint32_t*)buf4389, *(uint32_t*)buf4390, *(uint32_t*)buf4391);
+    rsSetElementAt_short4(*(rs_allocation*)buf4392, *(short4*)buf4393, *(uint32_t*)buf4394, *(uint32_t*)buf4395, *(uint32_t*)buf4396);
+    rsSetElementAt_ushort(*(rs_allocation*)buf4397, *(ushort*)buf4398, *(uint32_t*)buf4399, *(uint32_t*)buf4400, *(uint32_t*)buf4401);
+    rsSetElementAt_ushort2(*(rs_allocation*)buf4402, *(ushort2*)buf4403, *(uint32_t*)buf4404, *(uint32_t*)buf4405, *(uint32_t*)buf4406);
+    rsSetElementAt_ushort3(*(rs_allocation*)buf4407, *(ushort3*)buf4408, *(uint32_t*)buf4409, *(uint32_t*)buf4410, *(uint32_t*)buf4411);
+    rsSetElementAt_ushort4(*(rs_allocation*)buf4412, *(ushort4*)buf4413, *(uint32_t*)buf4414, *(uint32_t*)buf4415, *(uint32_t*)buf4416);
+    rsSetElementAt_int(*(rs_allocation*)buf4417, *(int*)buf4418, *(uint32_t*)buf4419, *(uint32_t*)buf4420, *(uint32_t*)buf4421);
+    rsSetElementAt_int2(*(rs_allocation*)buf4422, *(int2*)buf4423, *(uint32_t*)buf4424, *(uint32_t*)buf4425, *(uint32_t*)buf4426);
+    rsSetElementAt_int3(*(rs_allocation*)buf4427, *(int3*)buf4428, *(uint32_t*)buf4429, *(uint32_t*)buf4430, *(uint32_t*)buf4431);
+    rsSetElementAt_int4(*(rs_allocation*)buf4432, *(int4*)buf4433, *(uint32_t*)buf4434, *(uint32_t*)buf4435, *(uint32_t*)buf4436);
+    rsSetElementAt_uint(*(rs_allocation*)buf4437, *(uint*)buf4438, *(uint32_t*)buf4439, *(uint32_t*)buf4440, *(uint32_t*)buf4441);
+    rsSetElementAt_uint2(*(rs_allocation*)buf4442, *(uint2*)buf4443, *(uint32_t*)buf4444, *(uint32_t*)buf4445, *(uint32_t*)buf4446);
+    rsSetElementAt_uint3(*(rs_allocation*)buf4447, *(uint3*)buf4448, *(uint32_t*)buf4449, *(uint32_t*)buf4450, *(uint32_t*)buf4451);
+    rsSetElementAt_uint4(*(rs_allocation*)buf4452, *(uint4*)buf4453, *(uint32_t*)buf4454, *(uint32_t*)buf4455, *(uint32_t*)buf4456);
+    rsSetElementAt_long(*(rs_allocation*)buf4457, *(long*)buf4458, *(uint32_t*)buf4459, *(uint32_t*)buf4460, *(uint32_t*)buf4461);
+    rsSetElementAt_long2(*(rs_allocation*)buf4462, *(long2*)buf4463, *(uint32_t*)buf4464, *(uint32_t*)buf4465, *(uint32_t*)buf4466);
+    rsSetElementAt_long3(*(rs_allocation*)buf4467, *(long3*)buf4468, *(uint32_t*)buf4469, *(uint32_t*)buf4470, *(uint32_t*)buf4471);
+    rsSetElementAt_long4(*(rs_allocation*)buf4472, *(long4*)buf4473, *(uint32_t*)buf4474, *(uint32_t*)buf4475, *(uint32_t*)buf4476);
+    rsSetElementAt_ulong(*(rs_allocation*)buf4477, *(ulong*)buf4478, *(uint32_t*)buf4479, *(uint32_t*)buf4480, *(uint32_t*)buf4481);
+    rsSetElementAt_ulong2(*(rs_allocation*)buf4482, *(ulong2*)buf4483, *(uint32_t*)buf4484, *(uint32_t*)buf4485, *(uint32_t*)buf4486);
+    rsSetElementAt_ulong3(*(rs_allocation*)buf4487, *(ulong3*)buf4488, *(uint32_t*)buf4489, *(uint32_t*)buf4490, *(uint32_t*)buf4491);
+    rsSetElementAt_ulong4(*(rs_allocation*)buf4492, *(ulong4*)buf4493, *(uint32_t*)buf4494, *(uint32_t*)buf4495, *(uint32_t*)buf4496);
+    rsSetElementAt_half(*(rs_allocation*)buf4497, *(half*)buf4498, *(uint32_t*)buf4499);
+    rsSetElementAt_half2(*(rs_allocation*)buf4500, *(half2*)buf4501, *(uint32_t*)buf4502);
+    rsSetElementAt_half3(*(rs_allocation*)buf4503, *(half3*)buf4504, *(uint32_t*)buf4505);
+    rsSetElementAt_half4(*(rs_allocation*)buf4506, *(half4*)buf4507, *(uint32_t*)buf4508);
+    rsSetElementAt_half(*(rs_allocation*)buf4509, *(half*)buf4510, *(uint32_t*)buf4511, *(uint32_t*)buf4512);
+    rsSetElementAt_half2(*(rs_allocation*)buf4513, *(half2*)buf4514, *(uint32_t*)buf4515, *(uint32_t*)buf4516);
+    rsSetElementAt_half3(*(rs_allocation*)buf4517, *(half3*)buf4518, *(uint32_t*)buf4519, *(uint32_t*)buf4520);
+    rsSetElementAt_half4(*(rs_allocation*)buf4521, *(half4*)buf4522, *(uint32_t*)buf4523, *(uint32_t*)buf4524);
+    rsSetElementAt_half(*(rs_allocation*)buf4525, *(half*)buf4526, *(uint32_t*)buf4527, *(uint32_t*)buf4528, *(uint32_t*)buf4529);
+    rsSetElementAt_half2(*(rs_allocation*)buf4530, *(half2*)buf4531, *(uint32_t*)buf4532, *(uint32_t*)buf4533, *(uint32_t*)buf4534);
+    rsSetElementAt_half3(*(rs_allocation*)buf4535, *(half3*)buf4536, *(uint32_t*)buf4537, *(uint32_t*)buf4538, *(uint32_t*)buf4539);
+    rsSetElementAt_half4(*(rs_allocation*)buf4540, *(half4*)buf4541, *(uint32_t*)buf4542, *(uint32_t*)buf4543, *(uint32_t*)buf4544);
+    rsSetObject((rs_element*) buf4545, *(rs_element*)buf4546);
+    rsSetObject((rs_type*) buf4547, *(rs_type*)buf4548);
+    rsSetObject((rs_allocation*) buf4549, *(rs_allocation*)buf4550);
+    rsSetObject((rs_sampler*) buf4551, *(rs_sampler*)buf4552);
+    rsSetObject((rs_script*) buf4553, *(rs_script*)buf4554);
+    *(rs_time_t*)buf4555 = rsTime((rs_time_t*) buf4556);
+    *(float4*)buf4557 = rsUnpackColor8888(*(uchar4*)buf4558);
+    *(int64_t*)buf4559 = rsUptimeMillis();
+    *(int64_t*)buf4560 = rsUptimeNanos();
+    *(float4*)buf4561 = rsYuvToRGBA_float4(*(uchar*)buf4562, *(uchar*)buf4563, *(uchar*)buf4564);
+    *(uchar4*)buf4565 = rsYuvToRGBA_uchar4(*(uchar*)buf4566, *(uchar*)buf4567, *(uchar*)buf4568);
+    *(float*)buf4569 = rsqrt(*(float*)buf4570);
+    *(float2*)buf4571 = rsqrt(*(float2*)buf4572);
+    *(float3*)buf4573 = rsqrt(*(float3*)buf4574);
+    *(float4*)buf4575 = rsqrt(*(float4*)buf4576);
+    *(float*)buf4577 = sign(*(float*)buf4578);
+    *(float2*)buf4579 = sign(*(float2*)buf4580);
+    *(float3*)buf4581 = sign(*(float3*)buf4582);
+    *(float4*)buf4583 = sign(*(float4*)buf4584);
+    *(float*)buf4585 = sin(*(float*)buf4586);
+    *(float2*)buf4587 = sin(*(float2*)buf4588);
+    *(float3*)buf4589 = sin(*(float3*)buf4590);
+    *(float4*)buf4591 = sin(*(float4*)buf4592);
+    *(float*)buf4593 = sincos(*(float*)buf4594, (float*) buf4595);
+    *(float2*)buf4596 = sincos(*(float2*)buf4597, (float2*) buf4598);
+    *(float3*)buf4599 = sincos(*(float3*)buf4600, (float3*) buf4601);
+    *(float4*)buf4602 = sincos(*(float4*)buf4603, (float4*) buf4604);
+    *(float*)buf4605 = sinh(*(float*)buf4606);
+    *(float2*)buf4607 = sinh(*(float2*)buf4608);
+    *(float3*)buf4609 = sinh(*(float3*)buf4610);
+    *(float4*)buf4611 = sinh(*(float4*)buf4612);
+    *(float*)buf4613 = sinpi(*(float*)buf4614);
+    *(float2*)buf4615 = sinpi(*(float2*)buf4616);
+    *(float3*)buf4617 = sinpi(*(float3*)buf4618);
+    *(float4*)buf4619 = sinpi(*(float4*)buf4620);
+    *(float*)buf4621 = sqrt(*(float*)buf4622);
+    *(float2*)buf4623 = sqrt(*(float2*)buf4624);
+    *(float3*)buf4625 = sqrt(*(float3*)buf4626);
+    *(float4*)buf4627 = sqrt(*(float4*)buf4628);
+    *(float*)buf4629 = step(*(float*)buf4630, *(float*)buf4631);
+    *(float2*)buf4632 = step(*(float2*)buf4633, *(float2*)buf4634);
+    *(float3*)buf4635 = step(*(float3*)buf4636, *(float3*)buf4637);
+    *(float4*)buf4638 = step(*(float4*)buf4639, *(float4*)buf4640);
+    *(float2*)buf4641 = step(*(float2*)buf4642, *(float*)buf4643);
+    *(float3*)buf4644 = step(*(float3*)buf4645, *(float*)buf4646);
+    *(float4*)buf4647 = step(*(float4*)buf4648, *(float*)buf4649);
+    *(float2*)buf4650 = step(*(float*)buf4651, *(float2*)buf4652);
+    *(float3*)buf4653 = step(*(float*)buf4654, *(float3*)buf4655);
+    *(float4*)buf4656 = step(*(float*)buf4657, *(float4*)buf4658);
+    *(float*)buf4659 = tan(*(float*)buf4660);
+    *(float2*)buf4661 = tan(*(float2*)buf4662);
+    *(float3*)buf4663 = tan(*(float3*)buf4664);
+    *(float4*)buf4665 = tan(*(float4*)buf4666);
+    *(float*)buf4667 = tanh(*(float*)buf4668);
+    *(float2*)buf4669 = tanh(*(float2*)buf4670);
+    *(float3*)buf4671 = tanh(*(float3*)buf4672);
+    *(float4*)buf4673 = tanh(*(float4*)buf4674);
+    *(float*)buf4675 = tanpi(*(float*)buf4676);
+    *(float2*)buf4677 = tanpi(*(float2*)buf4678);
+    *(float3*)buf4679 = tanpi(*(float3*)buf4680);
+    *(float4*)buf4681 = tanpi(*(float4*)buf4682);
+    *(float*)buf4683 = tgamma(*(float*)buf4684);
+    *(float2*)buf4685 = tgamma(*(float2*)buf4686);
+    *(float3*)buf4687 = tgamma(*(float3*)buf4688);
+    *(float4*)buf4689 = tgamma(*(float4*)buf4690);
+    *(float*)buf4691 = trunc(*(float*)buf4692);
+    *(float2*)buf4693 = trunc(*(float2*)buf4694);
+    *(float3*)buf4695 = trunc(*(float3*)buf4696);
+    *(float4*)buf4697 = trunc(*(float4*)buf4698);
+}
diff --git a/slang/tests/P_all_api_23/stderr.txt.expect b/slang/tests/P_all_api_23/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_all_api_23/stderr.txt.expect
diff --git a/slang/tests/P_all_api_23/stdout.txt.expect b/slang/tests/P_all_api_23/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_all_api_23/stdout.txt.expect
diff --git a/slang/tests/P_alloc_in_struct/alloc_in_struct.rs b/slang/tests/P_alloc_in_struct/alloc_in_struct.rs
new file mode 100644
index 0000000..eaefd87
--- /dev/null
+++ b/slang/tests/P_alloc_in_struct/alloc_in_struct.rs
@@ -0,0 +1,7 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+struct s {
+    rs_allocation a;
+} myStruct;
+
diff --git a/slang/tests/P_alloc_in_struct/stderr.txt.expect b/slang/tests/P_alloc_in_struct/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_alloc_in_struct/stderr.txt.expect
diff --git a/slang/tests/P_alloc_in_struct/stdout.txt.expect b/slang/tests/P_alloc_in_struct/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_alloc_in_struct/stdout.txt.expect
diff --git a/slang/tests/P_array_cpp/array.rs b/slang/tests/P_array_cpp/array.rs
new file mode 100644
index 0000000..9a36c6d
--- /dev/null
+++ b/slang/tests/P_array_cpp/array.rs
@@ -0,0 +1,5 @@
+// -reflect-c++
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+float array[16];
diff --git a/slang/tests/P_array_cpp/stderr.txt.expect b/slang/tests/P_array_cpp/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_array_cpp/stderr.txt.expect
diff --git a/slang/tests/P_array_cpp/stdout.txt.expect b/slang/tests/P_array_cpp/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_array_cpp/stdout.txt.expect
diff --git a/slang/tests/P_array_init/array_init.rs b/slang/tests/P_array_init/array_init.rs
new file mode 100644
index 0000000..2a4fe0f
--- /dev/null
+++ b/slang/tests/P_array_init/array_init.rs
@@ -0,0 +1,22 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+const int ic = 99;
+
+int ica[2] = {ic, 1000};
+
+float fa[4] = {1.0, 9.9999f};
+double da[2] = {7.0, 8.88888};
+char ca[4] = {'a', 7, 'b', 'c'};
+short sa[4] = {1, 1, 2, 3};
+int ia[4] = {5, 8};
+long la[2] = {13, 21};
+long long lla[4] = {34};
+bool ba[3] = {true, false};
+
+// Clang should implicitly promote this type to have a constant size of 3.
+char implicitArray[] = { 'a', 'b', 'c' };
+
+// Clang should implicitly promote this type to have a constant size of 1.
+// Note that this creates a warning.
+char implicitArrayUninit[];
diff --git a/slang/tests/P_array_init/stderr.txt.expect b/slang/tests/P_array_init/stderr.txt.expect
new file mode 100644
index 0000000..387a51d
--- /dev/null
+++ b/slang/tests/P_array_init/stderr.txt.expect
@@ -0,0 +1 @@
+array_init.rs:22:6: warning: tentative array definition assumed to have one element
diff --git a/slang/tests/P_array_init/stdout.txt.expect b/slang/tests/P_array_init/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_array_init/stdout.txt.expect
diff --git a/slang/tests/P_compute/compute.rs b/slang/tests/P_compute/compute.rs
new file mode 100644
index 0000000..9ed58b8
--- /dev/null
+++ b/slang/tests/P_compute/compute.rs
@@ -0,0 +1,12 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void root(const int *ain, int *aout, const void *usrData,
+          uint32_t x, uint32_t y) {
+}
+
+void bar(int i, float f) {
+}
+
+void foo (int *p) {
+}
diff --git a/slang/tests/P_compute/stderr.txt.expect b/slang/tests/P_compute/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_compute/stderr.txt.expect
diff --git a/slang/tests/P_compute/stdout.txt.expect b/slang/tests/P_compute/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_compute/stdout.txt.expect
diff --git a/slang/tests/P_constant/constant.rs b/slang/tests/P_constant/constant.rs
new file mode 100644
index 0000000..4457e37
--- /dev/null
+++ b/slang/tests/P_constant/constant.rs
@@ -0,0 +1,22 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+const float floatTest = 1.99f;
+const double doubleTest = 2.05;
+const char charTest = -8;
+const short shortTest = -16;
+const int intTest = -32;
+const long longTest = 17179869184l; // 1 << 34
+const long long longlongTest = 68719476736l; // 1 << 36
+
+const uchar ucharTest = 8;
+const ushort ushortTest = 16;
+const uint uintTest = 32;
+const ulong ulongTest = 4611686018427387904L;
+const int64_t int64_tTest = -17179869184l; // - 1 << 34
+const uint64_t uint64_tTest = 117179869184l;
+
+const bool boolTest = true;
+
+extern const int i = 5;
+
diff --git a/slang/tests/P_constant/stderr.txt.expect b/slang/tests/P_constant/stderr.txt.expect
new file mode 100644
index 0000000..3728bee
--- /dev/null
+++ b/slang/tests/P_constant/stderr.txt.expect
@@ -0,0 +1 @@
+constant.rs:21:18: warning: 'extern' variable has an initializer
diff --git a/slang/tests/P_constant/stdout.txt.expect b/slang/tests/P_constant/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_constant/stdout.txt.expect
diff --git a/slang/tests/P_debug/debug.rs b/slang/tests/P_debug/debug.rs
new file mode 100644
index 0000000..69ede2a
--- /dev/null
+++ b/slang/tests/P_debug/debug.rs
@@ -0,0 +1,5 @@
+// -O0 -g
+#pragma version(1)
+#pragma rs java_package_name(android.renderscript.cts)
+
+int i;
diff --git a/slang/tests/P_debug/stderr.txt.expect b/slang/tests/P_debug/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_debug/stderr.txt.expect
diff --git a/slang/tests/P_debug/stdout.txt.expect b/slang/tests/P_debug/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_debug/stdout.txt.expect
diff --git a/slang/tests/P_dummy_root/dummy_root.rs b/slang/tests/P_dummy_root/dummy_root.rs
new file mode 100644
index 0000000..7731d94
--- /dev/null
+++ b/slang/tests/P_dummy_root/dummy_root.rs
@@ -0,0 +1,5 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void foo (int *p) {
+}
diff --git a/slang/tests/P_dummy_root/stderr.txt.expect b/slang/tests/P_dummy_root/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_dummy_root/stderr.txt.expect
diff --git a/slang/tests/P_dummy_root/stdout.txt.expect b/slang/tests/P_dummy_root/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_dummy_root/stdout.txt.expect
diff --git a/slang/tests/P_export_types/export_types.rs b/slang/tests/P_export_types/export_types.rs
new file mode 100644
index 0000000..8c725f1
--- /dev/null
+++ b/slang/tests/P_export_types/export_types.rs
@@ -0,0 +1,32 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+half h = (half) 1.2f;
+half2 h2 = {(half) 1.2f, (half) 2.3f};
+half3 h3 = {(half) 1.2f, (half) 2.3f, (half) 3.4f};
+half4 h4 = {(half) 1.2f, (half) 2.3f, (half) 3.4f, (half) 4.5f};
+float f = 9.9999f;
+double d = 7.0;
+char c = 'a';
+unsigned char uc = 'a';
+short s = 1;
+unsigned short us = 1;
+int i = 5;
+unsigned int ui;
+long l = 13;
+unsigned long ul = 13;
+long long ll = 34;
+unsigned long long ull = 34;
+bool b = true;
+
+rs_element element;
+rs_type type;
+rs_allocation allocation;
+rs_sampler sampler;
+rs_script script;
+rs_data_kind dk;
+rs_data_type dt;
+
+float *fp;
+int *ip;
+
diff --git a/slang/tests/P_export_types/stderr.txt.expect b/slang/tests/P_export_types/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_export_types/stderr.txt.expect
diff --git a/slang/tests/P_export_types/stdout.txt.expect b/slang/tests/P_export_types/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_export_types/stdout.txt.expect
diff --git a/slang/tests/P_export_types_v20/export_types.rs b/slang/tests/P_export_types_v20/export_types.rs
new file mode 100644
index 0000000..61d55e1
--- /dev/null
+++ b/slang/tests/P_export_types_v20/export_types.rs
@@ -0,0 +1,37 @@
+// -target-api 20
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+#include "rs_graphics.rsh"
+
+float f = 9.9999f;
+double d = 7.0;
+char c = 'a';
+unsigned char uc = 'a';
+short s = 1;
+unsigned short us = 1;
+int i = 5;
+unsigned int ui;
+long l = 13;
+unsigned long ul = 13;
+long long ll = 34;
+unsigned long long ull = 34;
+bool b = true;
+
+rs_element element;
+rs_type type;
+rs_allocation allocation;
+rs_sampler sampler;
+rs_script script;
+rs_mesh mesh;
+rs_program_fragment program_fragment;
+rs_program_vertex program_vertex;
+rs_program_raster program_raster;
+rs_program_store program_store;
+rs_font font;
+rs_data_kind dk;
+rs_data_type dt;
+
+float *fp;
+int *ip;
+
diff --git a/slang/tests/P_export_types_v20/stderr.txt.expect b/slang/tests/P_export_types_v20/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_export_types_v20/stderr.txt.expect
diff --git a/slang/tests/P_export_types_v20/stdout.txt.expect b/slang/tests/P_export_types_v20/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_export_types_v20/stdout.txt.expect
diff --git a/slang/tests/P_extern_const/extern_const.rs b/slang/tests/P_extern_const/extern_const.rs
new file mode 100644
index 0000000..e80906a
--- /dev/null
+++ b/slang/tests/P_extern_const/extern_const.rs
@@ -0,0 +1,7 @@
+// -I .
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+int __attribute__((kernel)) foo() {
+    return my_extern_const_in_header;
+}
diff --git a/slang/tests/P_extern_const/rs_core.rsh b/slang/tests/P_extern_const/rs_core.rsh
new file mode 100644
index 0000000..4332ed0
--- /dev/null
+++ b/slang/tests/P_extern_const/rs_core.rsh
@@ -0,0 +1,8 @@
+// Fake rs_core.rsh header file
+//
+// We use -I . to pick up this header file implicitly, instead of the proper
+// rs_core.rsh header file.
+
+// Declare an uninitialized external constant, which should be ok for our
+// official header files.
+extern const int my_extern_const_in_header;
diff --git a/slang/tests/P_extern_const/stderr.txt.expect b/slang/tests/P_extern_const/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_extern_const/stderr.txt.expect
diff --git a/slang/tests/P_extern_const/stdout.txt.expect b/slang/tests/P_extern_const/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_extern_const/stdout.txt.expect
diff --git a/slang/tests/P_float3/float3.rs b/slang/tests/P_float3/float3.rs
new file mode 100644
index 0000000..1255992
--- /dev/null
+++ b/slang/tests/P_float3/float3.rs
@@ -0,0 +1,11 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+float3 f;
+float3 f1[1];
+
+struct s {
+    float3 f;
+    float3 f1[1];
+} myStruct;
+
diff --git a/slang/tests/P_float3/stderr.txt.expect b/slang/tests/P_float3/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_float3/stderr.txt.expect
diff --git a/slang/tests/P_float3/stdout.txt.expect b/slang/tests/P_float3/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_float3/stdout.txt.expect
diff --git a/slang/tests/P_foreach/foreach.rs b/slang/tests/P_foreach/foreach.rs
new file mode 100644
index 0000000..c23fb81
--- /dev/null
+++ b/slang/tests/P_foreach/foreach.rs
@@ -0,0 +1,15 @@
+// -target-api 0
+#pragma version(1)
+#pragma rs java_package_name(com.example.foo)
+
+void oldFoo(const int* a, int *b) {
+  *b = *a;
+}
+
+int RS_KERNEL foo(int a) {
+  return a;
+}
+
+void testStart(rs_allocation in, rs_allocation out) {
+  rsForEach(foo, in, out);
+}
diff --git a/slang/tests/P_foreach/stderr.txt.expect b/slang/tests/P_foreach/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_foreach/stderr.txt.expect
diff --git a/slang/tests/P_foreach/stdout.txt.expect b/slang/tests/P_foreach/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_foreach/stdout.txt.expect
diff --git a/slang/tests/P_foreach_multi/foreach_multi.rs b/slang/tests/P_foreach_multi/foreach_multi.rs
new file mode 100644
index 0000000..e8a597e
--- /dev/null
+++ b/slang/tests/P_foreach_multi/foreach_multi.rs
@@ -0,0 +1,11 @@
+// -target-api 0
+#pragma version(1)
+#pragma rs java_package_name(com.example.foo)
+
+int RS_KERNEL foo(int a, int b) {
+  return a + b;
+}
+
+void testStart(rs_allocation in, rs_allocation out) {
+  rsForEach(foo, in, in, out);
+}
diff --git a/slang/tests/P_foreach_multi/stderr.txt.expect b/slang/tests/P_foreach_multi/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_foreach_multi/stderr.txt.expect
diff --git a/slang/tests/P_foreach_multi/stdout.txt.expect b/slang/tests/P_foreach_multi/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_foreach_multi/stdout.txt.expect
diff --git a/slang/tests/P_foreach_options/foreach_options.rs b/slang/tests/P_foreach_options/foreach_options.rs
new file mode 100644
index 0000000..cb15b73
--- /dev/null
+++ b/slang/tests/P_foreach_options/foreach_options.rs
@@ -0,0 +1,14 @@
+// -target-api 0
+#pragma version(1)
+#pragma rs java_package_name(com.example.foo)
+
+int RS_KERNEL foo(int a) {
+  return a;
+}
+
+void testStart(rs_allocation in, rs_allocation out) {
+  rs_script_call_t opts = {0};
+  opts.xStart=0;
+  opts.xEnd = 100;
+  rsForEach(foo, in, out);
+}
diff --git a/slang/tests/P_foreach_options/stderr.txt.expect b/slang/tests/P_foreach_options/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_foreach_options/stderr.txt.expect
diff --git a/slang/tests/P_foreach_options/stdout.txt.expect b/slang/tests/P_foreach_options/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_foreach_options/stdout.txt.expect
diff --git a/slang/tests/P_fp16/fp16.rs b/slang/tests/P_fp16/fp16.rs
new file mode 100644
index 0000000..074c988
--- /dev/null
+++ b/slang/tests/P_fp16/fp16.rs
@@ -0,0 +1,6 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+__fp16 RS_KERNEL foo(__fp16 a) {
+  return (a+1);
+}
diff --git a/slang/tests/P_fp16/stderr.txt.expect b/slang/tests/P_fp16/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_fp16/stderr.txt.expect
diff --git a/slang/tests/P_fp16/stdout.txt.expect b/slang/tests/P_fp16/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_fp16/stdout.txt.expect
diff --git a/slang/tests/P_fs_kernel/fs_kernel.fs b/slang/tests/P_fs_kernel/fs_kernel.fs
new file mode 100644
index 0000000..fbf9285
--- /dev/null
+++ b/slang/tests/P_fs_kernel/fs_kernel.fs
@@ -0,0 +1,18 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+int RS_KERNEL root(uint32_t ain) {
+  return 0;
+}
+
+void RS_KERNEL in_only(uint32_t ain) {
+}
+
+int RS_KERNEL out_only() {
+  return 0;
+}
+
+int RS_KERNEL everything(uint32_t ain, uint32_t x, uint32_t y) {
+  return 0;
+}
+
diff --git a/slang/tests/P_fs_kernel/stderr.txt.expect b/slang/tests/P_fs_kernel/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_fs_kernel/stderr.txt.expect
diff --git a/slang/tests/P_fs_kernel/stdout.txt.expect b/slang/tests/P_fs_kernel/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_fs_kernel/stdout.txt.expect
diff --git a/slang/tests/P_ignore_warnings/ignore_warnings.rs b/slang/tests/P_ignore_warnings/ignore_warnings.rs
new file mode 100644
index 0000000..76704d6
--- /dev/null
+++ b/slang/tests/P_ignore_warnings/ignore_warnings.rs
@@ -0,0 +1,7 @@
+// -w
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+static int foo() {
+}
+
diff --git a/slang/tests/P_ignore_warnings/stderr.txt.expect b/slang/tests/P_ignore_warnings/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_ignore_warnings/stderr.txt.expect
diff --git a/slang/tests/P_ignore_warnings/stdout.txt.expect b/slang/tests/P_ignore_warnings/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_ignore_warnings/stdout.txt.expect
diff --git a/slang/tests/P_invoke_half_parameter/invoke_half_parameter.rs b/slang/tests/P_invoke_half_parameter/invoke_half_parameter.rs
new file mode 100644
index 0000000..f68f742
--- /dev/null
+++ b/slang/tests/P_invoke_half_parameter/invoke_half_parameter.rs
@@ -0,0 +1,5 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void test(half h, half2 h2, half3 h3, half4 h4) {
+}
diff --git a/slang/tests/P_invoke_half_parameter/stderr.txt.expect b/slang/tests/P_invoke_half_parameter/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_invoke_half_parameter/stderr.txt.expect
diff --git a/slang/tests/P_invoke_half_parameter/stdout.txt.expect b/slang/tests/P_invoke_half_parameter/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_invoke_half_parameter/stdout.txt.expect
diff --git a/slang/tests/P_kernel/kernel.rs b/slang/tests/P_kernel/kernel.rs
new file mode 100644
index 0000000..fa962dd
--- /dev/null
+++ b/slang/tests/P_kernel/kernel.rs
@@ -0,0 +1,7 @@
+// -target-api 0
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+int RS_KERNEL add_foreach(int a, int b) {
+  return a + b;
+}
diff --git a/slang/tests/P_kernel/stderr.txt.expect b/slang/tests/P_kernel/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_kernel/stderr.txt.expect
diff --git a/slang/tests/P_kernel/stdout.txt.expect b/slang/tests/P_kernel/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_kernel/stdout.txt.expect
diff --git a/slang/tests/P_kernel_cpp/kernel_cpp.rs b/slang/tests/P_kernel_cpp/kernel_cpp.rs
new file mode 100644
index 0000000..9e582b3
--- /dev/null
+++ b/slang/tests/P_kernel_cpp/kernel_cpp.rs
@@ -0,0 +1,33 @@
+// -reflect-c++
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+//int2 i2;
+
+int i1 = 5;
+bool bt = true;
+bool bf = false;
+int2 i2 = 2;
+int3 i3 = {1, 2, 3};
+
+rs_allocation alloc;
+rs_element elem;
+rs_type type;
+rs_script script;
+rs_sampler sampler;
+
+int RS_KERNEL root(uint32_t ain) {
+  return 0;
+}
+
+void RS_KERNEL in_only(uint32_t ain) {
+}
+
+int RS_KERNEL out_only() {
+  return 0;
+}
+
+int RS_KERNEL everything(uint32_t ain, uint32_t x, uint32_t y) {
+  return 0;
+}
+
diff --git a/slang/tests/P_kernel_cpp/stderr.txt.expect b/slang/tests/P_kernel_cpp/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_kernel_cpp/stderr.txt.expect
diff --git a/slang/tests/P_kernel_cpp/stdout.txt.expect b/slang/tests/P_kernel_cpp/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_kernel_cpp/stdout.txt.expect
diff --git a/slang/tests/P_kernel_multi_in/kernel_multi_in.rs b/slang/tests/P_kernel_multi_in/kernel_multi_in.rs
new file mode 100644
index 0000000..f38757b
--- /dev/null
+++ b/slang/tests/P_kernel_multi_in/kernel_multi_in.rs
@@ -0,0 +1,7 @@
+// -target-api 0
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+int RS_KERNEL multi_in(uint32_t in0, uint32_t in1) {
+  return 0;
+}
diff --git a/slang/tests/P_kernel_multi_in/stderr.txt.expect b/slang/tests/P_kernel_multi_in/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_kernel_multi_in/stderr.txt.expect
diff --git a/slang/tests/P_kernel_multi_in/stdout.txt.expect b/slang/tests/P_kernel_multi_in/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_kernel_multi_in/stdout.txt.expect
diff --git a/slang/tests/P_kernel_noalloc/kernel_noalloc.rs b/slang/tests/P_kernel_noalloc/kernel_noalloc.rs
new file mode 100644
index 0000000..ab64847
--- /dev/null
+++ b/slang/tests/P_kernel_noalloc/kernel_noalloc.rs
@@ -0,0 +1,6 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void RS_KERNEL root(uint32_t x) {
+}
+
diff --git a/slang/tests/P_kernel_noalloc/stderr.txt.expect b/slang/tests/P_kernel_noalloc/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_kernel_noalloc/stderr.txt.expect
diff --git a/slang/tests/P_kernel_noalloc/stdout.txt.expect b/slang/tests/P_kernel_noalloc/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_kernel_noalloc/stdout.txt.expect
diff --git a/slang/tests/P_kernel_noalloc_noarg/kernel_noalloc_noarg.rs b/slang/tests/P_kernel_noalloc_noarg/kernel_noalloc_noarg.rs
new file mode 100644
index 0000000..e1ccb09
--- /dev/null
+++ b/slang/tests/P_kernel_noalloc_noarg/kernel_noalloc_noarg.rs
@@ -0,0 +1,6 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void RS_KERNEL root() {
+}
+
diff --git a/slang/tests/P_kernel_noalloc_noarg/stderr.txt.expect b/slang/tests/P_kernel_noalloc_noarg/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_kernel_noalloc_noarg/stderr.txt.expect
diff --git a/slang/tests/P_kernel_noalloc_noarg/stdout.txt.expect b/slang/tests/P_kernel_noalloc_noarg/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_kernel_noalloc_noarg/stdout.txt.expect
diff --git a/slang/tests/P_license/license.rs b/slang/tests/P_license/license.rs
new file mode 100644
index 0000000..0ee1ae6
--- /dev/null
+++ b/slang/tests/P_license/license.rs
@@ -0,0 +1,6 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+#pragma rs set_reflect_license("/* this is a test license */")
+
+float f;
+
diff --git a/slang/tests/P_license/stderr.txt.expect b/slang/tests/P_license/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_license/stderr.txt.expect
diff --git a/slang/tests/P_license/stdout.txt.expect b/slang/tests/P_license/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_license/stdout.txt.expect
diff --git a/slang/tests/P_local_ref_after_return/local_ref_after_return.rs b/slang/tests/P_local_ref_after_return/local_ref_after_return.rs
new file mode 100644
index 0000000..977fab7
--- /dev/null
+++ b/slang/tests/P_local_ref_after_return/local_ref_after_return.rs
@@ -0,0 +1,12 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+bool init = false;
+
+void foo() {
+    if (!init)
+        return;
+    rs_allocation a, b;
+    rsAllocationGetDimX(a);
+    return;
+}
diff --git a/slang/tests/P_local_ref_after_return/stderr.txt.expect b/slang/tests/P_local_ref_after_return/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_local_ref_after_return/stderr.txt.expect
diff --git a/slang/tests/P_local_ref_after_return/stdout.txt.expect b/slang/tests/P_local_ref_after_return/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_local_ref_after_return/stdout.txt.expect
diff --git a/slang/tests/P_long64/long64.rs b/slang/tests/P_long64/long64.rs
new file mode 100644
index 0000000..f530aa0
--- /dev/null
+++ b/slang/tests/P_long64/long64.rs
@@ -0,0 +1,4 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+long l = 1L << 32;
diff --git a/slang/tests/P_long64/stderr.txt.expect b/slang/tests/P_long64/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_long64/stderr.txt.expect
diff --git a/slang/tests/P_long64/stdout.txt.expect b/slang/tests/P_long64/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_long64/stdout.txt.expect
diff --git a/slang/tests/P_math_fp/math_fp.rs b/slang/tests/P_math_fp/math_fp.rs
new file mode 100644
index 0000000..0bedd6e
--- /dev/null
+++ b/slang/tests/P_math_fp/math_fp.rs
@@ -0,0 +1,146 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+int i;
+int2 i2;
+int3 i3;
+int4 i4;
+
+float f;
+float2 f2;
+float3 f3;
+float4 f4;
+
+#define TEST_FUNC_1(fnc)    \
+    f = fnc(f);             \
+    f2 = fnc(f2);           \
+    f3 = fnc(f3);           \
+    f4 = fnc(f4);
+
+#define TEST_FUNC_1_RI(fnc) \
+    i = fnc(f);             \
+    i2 = fnc(f2);           \
+    i3 = fnc(f3);           \
+    i4 = fnc(f4);
+
+#define TEST_FUNC_2(fnc)    \
+    f = fnc(f, f);          \
+    f2 = fnc(f2, f2);       \
+    f3 = fnc(f3, f3);       \
+    f4 = fnc(f4, f4);
+
+#define TEST_FUNC_2P(fnc)   \
+    f = fnc(f, &f);         \
+    f2 = fnc(f2, &f2);      \
+    f3 = fnc(f3, &f3);      \
+    f4 = fnc(f4, &f4);
+
+#define TEST_FUNC_2PI(fnc)  \
+    f = fnc(f, &i);         \
+    f2 = fnc(f2, &i2);      \
+    f3 = fnc(f3, &i3);      \
+    f4 = fnc(f4, &i4);
+
+#define TEST_FUNC_2F(fnc)   \
+    f = fnc(f, f);          \
+    f2 = fnc(f2, f2);       \
+    f3 = fnc(f3, f3);       \
+    f4 = fnc(f4, f4);
+
+#define TEST_FUNC_2I(fnc)   \
+    f = fnc(f, i);          \
+    f2 = fnc(f2, i);        \
+    f3 = fnc(f3, i);        \
+    f4 = fnc(f4, i);
+
+#define TEST_FUNC_2IN(fnc)  \
+    f = fnc(f, i);          \
+    f2 = fnc(f2, i2);       \
+    f3 = fnc(f3, i3);       \
+    f4 = fnc(f4, i4);
+
+#define TEST_FUNC_3(fnc)    \
+    f = fnc(f, f, f);       \
+    f2 = fnc(f2, f2, f2);   \
+    f3 = fnc(f3, f3, f3);   \
+    f4 = fnc(f4, f4, f4);
+
+#define TEST_FUNC_3PI(fnc)  \
+    f = fnc(f, f, &i);      \
+    f2 = fnc(f2, f2, &i2);  \
+    f3 = fnc(f3, f3, &i3);  \
+    f4 = fnc(f4, f4, &i4);
+
+void compile_all_math_fp_ops() {
+    TEST_FUNC_1(acos);
+    TEST_FUNC_1(acosh);
+    TEST_FUNC_1(acospi);
+    TEST_FUNC_1(asin);
+    TEST_FUNC_1(asinh);
+    TEST_FUNC_1(asinpi);
+    TEST_FUNC_1(atan);
+    TEST_FUNC_2(atan2);
+    TEST_FUNC_1(atanh);
+    TEST_FUNC_1(atanpi);
+    TEST_FUNC_2(atan2pi);
+    TEST_FUNC_1(cbrt);
+    TEST_FUNC_1(ceil);
+    TEST_FUNC_2(copysign);
+    TEST_FUNC_1(cos);
+    TEST_FUNC_1(cosh);
+    TEST_FUNC_1(cospi);
+    TEST_FUNC_1(erfc);
+    TEST_FUNC_1(erf);
+    TEST_FUNC_1(exp);
+    TEST_FUNC_1(exp2);
+    TEST_FUNC_1(exp10);
+    TEST_FUNC_1(expm1);
+    TEST_FUNC_1(fabs);
+    TEST_FUNC_2(fdim);
+    TEST_FUNC_1(floor);
+    TEST_FUNC_3(fma);
+    TEST_FUNC_2(fmax);
+    TEST_FUNC_2F(fmax);
+    TEST_FUNC_2(fmin);
+    TEST_FUNC_2F(fmin);
+    TEST_FUNC_2(fmod);
+    TEST_FUNC_2P(fract);
+    TEST_FUNC_2PI(frexp);
+    TEST_FUNC_2(hypot);
+    TEST_FUNC_1_RI(ilogb);
+    TEST_FUNC_2IN(ldexp);
+    TEST_FUNC_2I(ldexp);
+    TEST_FUNC_1(lgamma);
+    TEST_FUNC_2PI(lgamma);
+    TEST_FUNC_1(log);
+    TEST_FUNC_1(log2);
+    TEST_FUNC_1(log10);
+    TEST_FUNC_1(log1p);
+    TEST_FUNC_1(logb);
+    TEST_FUNC_3(mad);
+    TEST_FUNC_2P(modf);
+    //TEST_FUNC_1(nan);
+    TEST_FUNC_2(nextafter);
+    TEST_FUNC_2(pow);
+    TEST_FUNC_2I(pown);
+    TEST_FUNC_2(powr);
+    TEST_FUNC_2(remainder);
+    TEST_FUNC_3PI(remquo);
+    TEST_FUNC_1(rint);
+    TEST_FUNC_2I(rootn);
+    TEST_FUNC_1(round);
+    TEST_FUNC_1(rsqrt);
+    TEST_FUNC_1(sin);
+    TEST_FUNC_2P(sincos);
+    TEST_FUNC_1(sinh);
+    TEST_FUNC_1(sinpi);
+    TEST_FUNC_1(sqrt);
+    TEST_FUNC_1(tan);
+    TEST_FUNC_1(tanh);
+    TEST_FUNC_1(tanpi);
+    TEST_FUNC_1(tgamma);
+    TEST_FUNC_1(trunc);
+
+    return;
+}
+
diff --git a/slang/tests/P_math_fp/stderr.txt.expect b/slang/tests/P_math_fp/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_math_fp/stderr.txt.expect
diff --git a/slang/tests/P_math_fp/stdout.txt.expect b/slang/tests/P_math_fp/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_math_fp/stdout.txt.expect
diff --git a/slang/tests/P_math_int/math_int.rs b/slang/tests/P_math_int/math_int.rs
new file mode 100644
index 0000000..59ef57f
--- /dev/null
+++ b/slang/tests/P_math_int/math_int.rs
@@ -0,0 +1,89 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+uchar uc;
+uchar2 uc2;
+uchar3 uc3;
+uchar4 uc4;
+
+ushort us;
+ushort2 us2;
+ushort3 us3;
+ushort4 us4;
+
+uint ui;
+uint2 ui2;
+uint3 ui3;
+uint4 ui4;
+
+char c;
+char2 c2;
+char3 c3;
+char4 c4;
+
+short s;
+short2 s2;
+short3 s3;
+short4 s4;
+
+int i;
+int2 i2;
+int3 i3;
+int4 i4;
+
+float f;
+float2 f2;
+float3 f3;
+float4 f4;
+
+#define TEST4_1(ret, typ, fnc)  \
+    ret = fnc(typ);             \
+    ret##2 = fnc(typ##2);       \
+    ret##3 = fnc(typ##3);       \
+    ret##4 = fnc(typ##4);
+
+#define TEST4_2(typ, fnc)           \
+    typ = fnc(typ, typ);            \
+    typ##2 = fnc(typ##2, typ##2);   \
+    typ##3 = fnc(typ##3, typ##3);   \
+    typ##4 = fnc(typ##4, typ##4);
+
+#define TEST4_2S(typ, fnc)          \
+    typ = fnc(typ, typ);            \
+    typ##2 = fnc(typ##2, typ);      \
+    typ##3 = fnc(typ##3, typ);      \
+    typ##4 = fnc(typ##4, typ);
+
+#define TEST_UIFUNC_1(fnc)  \
+    TEST4_1(uc, c, fnc);    \
+    TEST4_1(us, s, fnc);    \
+    TEST4_1(ui, i, fnc);
+
+#define TEST_IFUNC_1(fnc)   \
+    TEST4_1(uc, uc, fnc);   \
+    TEST4_1(c, c, fnc);     \
+    TEST4_1(us, us, fnc);   \
+    TEST4_1(s, s, fnc);     \
+    TEST4_1(ui, ui, fnc);   \
+    TEST4_1(i, i, fnc);
+
+#define TEST_IFUNC_2(fnc)   \
+    TEST4_2(uc, fnc);       \
+    TEST4_2(c, fnc);        \
+    TEST4_2(us, fnc);       \
+    TEST4_2(s, fnc);        \
+    TEST4_2(ui, fnc);       \
+    TEST4_2(f, fnc);        \
+
+
+void compile_all_math_int_ops() {
+    TEST_UIFUNC_1(abs);
+    TEST_IFUNC_1(clz);
+    TEST_IFUNC_2(min);
+    TEST_IFUNC_2(max);
+    TEST4_2S(f, min);
+    TEST4_2S(f, max);
+
+    return;
+}
+
diff --git a/slang/tests/P_math_int/stderr.txt.expect b/slang/tests/P_math_int/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_math_int/stderr.txt.expect
diff --git a/slang/tests/P_math_int/stdout.txt.expect b/slang/tests/P_math_int/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_math_int/stdout.txt.expect
diff --git a/slang/tests/P_matrix_cpp/matrix.rs b/slang/tests/P_matrix_cpp/matrix.rs
new file mode 100644
index 0000000..4847b54
--- /dev/null
+++ b/slang/tests/P_matrix_cpp/matrix.rs
@@ -0,0 +1,5 @@
+// -reflect-c++
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+rs_matrix4x4 mat;
diff --git a/slang/tests/P_matrix_cpp/stderr.txt.expect b/slang/tests/P_matrix_cpp/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_matrix_cpp/stderr.txt.expect
diff --git a/slang/tests/P_matrix_cpp/stdout.txt.expect b/slang/tests/P_matrix_cpp/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_matrix_cpp/stdout.txt.expect
diff --git a/slang/tests/P_multi_in_target_version/multi_in_target_version.rs b/slang/tests/P_multi_in_target_version/multi_in_target_version.rs
new file mode 100644
index 0000000..2128778
--- /dev/null
+++ b/slang/tests/P_multi_in_target_version/multi_in_target_version.rs
@@ -0,0 +1,8 @@
+// -target-api 0
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+int RS_KERNEL root(uint32_t in0, uint32_t in1, int x, int y) {
+  return 0;
+}
+
diff --git a/slang/tests/P_multi_in_target_version/stderr.txt.expect b/slang/tests/P_multi_in_target_version/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_multi_in_target_version/stderr.txt.expect
diff --git a/slang/tests/P_multi_in_target_version/stdout.txt.expect b/slang/tests/P_multi_in_target_version/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_multi_in_target_version/stdout.txt.expect
diff --git a/slang/tests/P_odr_array/def1.rs b/slang/tests/P_odr_array/def1.rs
new file mode 100644
index 0000000..501a96b
--- /dev/null
+++ b/slang/tests/P_odr_array/def1.rs
@@ -0,0 +1,3 @@
+#include "inc.rsh"
+
+SameDefinition1 o1;
diff --git a/slang/tests/P_odr_array/def2.rs b/slang/tests/P_odr_array/def2.rs
new file mode 100644
index 0000000..501a96b
--- /dev/null
+++ b/slang/tests/P_odr_array/def2.rs
@@ -0,0 +1,3 @@
+#include "inc.rsh"
+
+SameDefinition1 o1;
diff --git a/slang/tests/P_odr_array/inc.rsh b/slang/tests/P_odr_array/inc.rsh
new file mode 100644
index 0000000..6374850
--- /dev/null
+++ b/slang/tests/P_odr_array/inc.rsh
@@ -0,0 +1,7 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+typedef struct SameDefinition1{
+    int i[2];
+} SameDefinition1;
+
diff --git a/slang/tests/P_odr_array/stderr.txt.expect b/slang/tests/P_odr_array/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_odr_array/stderr.txt.expect
diff --git a/slang/tests/P_odr_array/stdout.txt.expect b/slang/tests/P_odr_array/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_odr_array/stdout.txt.expect
diff --git a/slang/tests/P_one_definition_rule/def1.rs b/slang/tests/P_one_definition_rule/def1.rs
new file mode 100644
index 0000000..1e0cebe
--- /dev/null
+++ b/slang/tests/P_one_definition_rule/def1.rs
@@ -0,0 +1,16 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+typedef struct SameDefinition1{
+	int member1;
+	float member2;
+	int member3;
+	int member4;
+	float member5;
+	float member6;
+	int member7;
+	int member8;
+	int member9;
+} SameDefinition1;
+
+SameDefinition1 o1;
diff --git a/slang/tests/P_one_definition_rule/def2.rs b/slang/tests/P_one_definition_rule/def2.rs
new file mode 100644
index 0000000..1e0cebe
--- /dev/null
+++ b/slang/tests/P_one_definition_rule/def2.rs
@@ -0,0 +1,16 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+typedef struct SameDefinition1{
+	int member1;
+	float member2;
+	int member3;
+	int member4;
+	float member5;
+	float member6;
+	int member7;
+	int member8;
+	int member9;
+} SameDefinition1;
+
+SameDefinition1 o1;
diff --git a/slang/tests/P_one_definition_rule/stderr.txt.expect b/slang/tests/P_one_definition_rule/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_one_definition_rule/stderr.txt.expect
diff --git a/slang/tests/P_one_definition_rule/stdout.txt.expect b/slang/tests/P_one_definition_rule/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_one_definition_rule/stdout.txt.expect
diff --git a/slang/tests/P_ooo_compute/ooo_compute.rs b/slang/tests/P_ooo_compute/ooo_compute.rs
new file mode 100644
index 0000000..961bcd2
--- /dev/null
+++ b/slang/tests/P_ooo_compute/ooo_compute.rs
@@ -0,0 +1,13 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void bar(int i, float f) {
+}
+
+void foo (int *p) {
+}
+
+void root(const int *ain, int *aout, const void *usrData,
+          uint32_t x, uint32_t y) {
+}
+
diff --git a/slang/tests/P_ooo_compute/stderr.txt.expect b/slang/tests/P_ooo_compute/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_ooo_compute/stderr.txt.expect
diff --git a/slang/tests/P_ooo_compute/stdout.txt.expect b/slang/tests/P_ooo_compute/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_ooo_compute/stdout.txt.expect
diff --git a/slang/tests/P_overload/overload.rs b/slang/tests/P_overload/overload.rs
new file mode 100644
index 0000000..ba3be6e
--- /dev/null
+++ b/slang/tests/P_overload/overload.rs
@@ -0,0 +1,9 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void __attribute__((overloadable)) foo(int i) {
+}
+
+void __attribute__((overloadable)) foo(float f) {
+}
+
diff --git a/slang/tests/P_overload/stderr.txt.expect b/slang/tests/P_overload/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_overload/stderr.txt.expect
diff --git a/slang/tests/P_overload/stdout.txt.expect b/slang/tests/P_overload/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_overload/stdout.txt.expect
diff --git a/slang/tests/P_redefine_RS_VERSION/redefine_RS_VERSION.rs b/slang/tests/P_redefine_RS_VERSION/redefine_RS_VERSION.rs
new file mode 100644
index 0000000..08f96ab
--- /dev/null
+++ b/slang/tests/P_redefine_RS_VERSION/redefine_RS_VERSION.rs
@@ -0,0 +1,5 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+#define RS_VERSION 1
+
diff --git a/slang/tests/P_redefine_RS_VERSION/stderr.txt.expect b/slang/tests/P_redefine_RS_VERSION/stderr.txt.expect
new file mode 100644
index 0000000..7af3b00
--- /dev/null
+++ b/slang/tests/P_redefine_RS_VERSION/stderr.txt.expect
@@ -0,0 +1,2 @@
+redefine_RS_VERSION.rs:4:9: warning: 'RS_VERSION' macro redefined
+<built-in>:1:9: note: previous definition is here
diff --git a/slang/tests/P_redefine_RS_VERSION/stdout.txt.expect b/slang/tests/P_redefine_RS_VERSION/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_redefine_RS_VERSION/stdout.txt.expect
diff --git a/slang/tests/P_reduce_general_accumulator/ScriptC_reduce_general_accumulator.java.expect b/slang/tests/P_reduce_general_accumulator/ScriptC_reduce_general_accumulator.java.expect
new file mode 100644
index 0000000..c39ce7c
--- /dev/null
+++ b/slang/tests/P_reduce_general_accumulator/ScriptC_reduce_general_accumulator.java.expect
@@ -0,0 +1,3381 @@
+/*
+ * Copyright (C) 2011-2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * This file is auto-generated. DO NOT MODIFY!
+ * The source Renderscript file: reduce_general_accumulator.rs
+ */
+
+package accumulator;
+
+import android.renderscript.*;
+import accumulator.reduce_general_accumulatorBitCode;
+
+/**
+ * @hide
+ */
+public class ScriptC_reduce_general_accumulator extends ScriptC {
+    private static final String __rs_resource_name = "reduce_general_accumulator";
+    // Constructor
+    public  ScriptC_reduce_general_accumulator(RenderScript rs) {
+        super(rs,
+              __rs_resource_name,
+              reduce_general_accumulatorBitCode.getBitCode32(),
+              reduce_general_accumulatorBitCode.getBitCode64());
+        mRSLocal = rs;
+        __I32 = Element.I32(rs);
+    }
+
+    private Element __I32;
+    private RenderScript mRSLocal;
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_int {
+        public int get() {
+            if (!mGotResult) {
+                int[] outArray = new int[1];
+                mOut.copyTo(outArray);
+                mResult = outArray[0];
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_int(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private int mResult;
+    }
+
+    private final static int mExportReduceIdx_my_half = 0;
+    // in1 = "val"
+    public result_int reduce_my_half(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_half(Allocation ain1) {
+        return reduce_my_half(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_half(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2 = 1;
+    // in1 = "val"
+    public result_int reduce_my_half2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_half2(Allocation ain1) {
+        return reduce_my_half2(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_half2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4 = 2;
+    // in1 = "val"
+    public result_int reduce_my_half4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_half4(Allocation ain1) {
+        return reduce_my_half4(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_half4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_half = 3;
+    // in1 = "val"
+    public result_int reduce_my_array_half(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_half(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_half(Allocation ain1) {
+        return reduce_my_array_half(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_half(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_half, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_half2 = 4;
+    // in1 = "val"
+    public result_int reduce_my_array_half2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_half2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_half2(Allocation ain1) {
+        return reduce_my_array_half2(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_half2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_half2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_half4 = 5;
+    // in1 = "val"
+    public result_int reduce_my_array_half4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_half4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_half4(Allocation ain1) {
+        return reduce_my_array_half4(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_half4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_half4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float = 6;
+    // in1 = "val"
+    public result_int reduce_my_float(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_float(Allocation ain1) {
+        return reduce_my_float(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_float(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2 = 7;
+    // in1 = "val"
+    public result_int reduce_my_float2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_float2(Allocation ain1) {
+        return reduce_my_float2(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_float2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4 = 8;
+    // in1 = "val"
+    public result_int reduce_my_float4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_float4(Allocation ain1) {
+        return reduce_my_float4(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_float4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_float = 9;
+    // in1 = "val"
+    public result_int reduce_my_array_float(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_float(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_float(Allocation ain1) {
+        return reduce_my_array_float(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_float(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_float, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_float2 = 10;
+    // in1 = "val"
+    public result_int reduce_my_array_float2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_float2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_float2(Allocation ain1) {
+        return reduce_my_array_float2(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_float2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_float2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_float4 = 11;
+    // in1 = "val"
+    public result_int reduce_my_array_float4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_float4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_float4(Allocation ain1) {
+        return reduce_my_array_float4(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_float4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_float4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double = 12;
+    // in1 = "val"
+    public result_int reduce_my_double(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_double(Allocation ain1) {
+        return reduce_my_double(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_double(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double2 = 13;
+    // in1 = "val"
+    public result_int reduce_my_double2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_double2(Allocation ain1) {
+        return reduce_my_double2(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_double2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double4 = 14;
+    // in1 = "val"
+    public result_int reduce_my_double4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_double4(Allocation ain1) {
+        return reduce_my_double4(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_double4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_double = 15;
+    // in1 = "val"
+    public result_int reduce_my_array_double(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_double(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_double(Allocation ain1) {
+        return reduce_my_array_double(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_double(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_double, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_double2 = 16;
+    // in1 = "val"
+    public result_int reduce_my_array_double2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_double2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_double2(Allocation ain1) {
+        return reduce_my_array_double2(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_double2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_double2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_double4 = 17;
+    // in1 = "val"
+    public result_int reduce_my_array_double4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_double4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_double4(Allocation ain1) {
+        return reduce_my_array_double4(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_double4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_double4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char = 18;
+    // in1 = "val"
+    public result_int reduce_my_char(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_char(Allocation ain1) {
+        return reduce_my_char(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_char(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2 = 19;
+    // in1 = "val"
+    public result_int reduce_my_char2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_char2(Allocation ain1) {
+        return reduce_my_char2(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_char2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4 = 20;
+    // in1 = "val"
+    public result_int reduce_my_char4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_char4(Allocation ain1) {
+        return reduce_my_char4(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_char4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_char = 21;
+    // in1 = "val"
+    public result_int reduce_my_array_char(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_char(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_char(Allocation ain1) {
+        return reduce_my_array_char(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_char(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_char, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_char2 = 22;
+    // in1 = "val"
+    public result_int reduce_my_array_char2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_char2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_char2(Allocation ain1) {
+        return reduce_my_array_char2(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_char2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_char2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_char4 = 23;
+    // in1 = "val"
+    public result_int reduce_my_array_char4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_char4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_char4(Allocation ain1) {
+        return reduce_my_array_char4(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_char4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_char4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short = 24;
+    // in1 = "val"
+    public result_int reduce_my_short(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_short(Allocation ain1) {
+        return reduce_my_short(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_short(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2 = 25;
+    // in1 = "val"
+    public result_int reduce_my_short2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_short2(Allocation ain1) {
+        return reduce_my_short2(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_short2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4 = 26;
+    // in1 = "val"
+    public result_int reduce_my_short4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_short4(Allocation ain1) {
+        return reduce_my_short4(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_short4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_short = 27;
+    // in1 = "val"
+    public result_int reduce_my_array_short(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_short(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_short(Allocation ain1) {
+        return reduce_my_array_short(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_short(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_short, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_short2 = 28;
+    // in1 = "val"
+    public result_int reduce_my_array_short2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_short2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_short2(Allocation ain1) {
+        return reduce_my_array_short2(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_short2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_short2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_short4 = 29;
+    // in1 = "val"
+    public result_int reduce_my_array_short4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_short4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_short4(Allocation ain1) {
+        return reduce_my_array_short4(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_short4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_short4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int = 30;
+    // in1 = "val"
+    public result_int reduce_my_int(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_int(Allocation ain1) {
+        return reduce_my_int(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_int(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int2 = 31;
+    // in1 = "val"
+    public result_int reduce_my_int2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_int2(Allocation ain1) {
+        return reduce_my_int2(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_int2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int4 = 32;
+    // in1 = "val"
+    public result_int reduce_my_int4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_int4(Allocation ain1) {
+        return reduce_my_int4(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_int4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_int = 33;
+    // in1 = "val"
+    public result_int reduce_my_array_int(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_int(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_int(Allocation ain1) {
+        return reduce_my_array_int(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_int(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_int, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_int2 = 34;
+    // in1 = "val"
+    public result_int reduce_my_array_int2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_int2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_int2(Allocation ain1) {
+        return reduce_my_array_int2(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_int2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_int2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_int4 = 35;
+    // in1 = "val"
+    public result_int reduce_my_array_int4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_int4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_int4(Allocation ain1) {
+        return reduce_my_array_int4(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_int4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_int4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long = 36;
+    // in1 = "val"
+    public result_int reduce_my_long(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_long(Allocation ain1) {
+        return reduce_my_long(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_long(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long2 = 37;
+    // in1 = "val"
+    public result_int reduce_my_long2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_long2(Allocation ain1) {
+        return reduce_my_long2(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_long2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long4 = 38;
+    // in1 = "val"
+    public result_int reduce_my_long4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_long4(Allocation ain1) {
+        return reduce_my_long4(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_long4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_long = 39;
+    // in1 = "val"
+    public result_int reduce_my_array_long(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_long(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_long(Allocation ain1) {
+        return reduce_my_array_long(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_long(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_long, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_long2 = 40;
+    // in1 = "val"
+    public result_int reduce_my_array_long2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_long2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_long2(Allocation ain1) {
+        return reduce_my_array_long2(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_long2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_long2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_long4 = 41;
+    // in1 = "val"
+    public result_int reduce_my_array_long4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_long4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_long4(Allocation ain1) {
+        return reduce_my_array_long4(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_long4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_long4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar = 42;
+    // in1 = "val"
+    public result_int reduce_my_uchar(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_uchar(Allocation ain1) {
+        return reduce_my_uchar(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_uchar(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2 = 43;
+    // in1 = "val"
+    public result_int reduce_my_uchar2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_uchar2(Allocation ain1) {
+        return reduce_my_uchar2(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_uchar2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4 = 44;
+    // in1 = "val"
+    public result_int reduce_my_uchar4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_uchar4(Allocation ain1) {
+        return reduce_my_uchar4(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_uchar4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_uchar = 45;
+    // in1 = "val"
+    public result_int reduce_my_array_uchar(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_uchar(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_uchar(Allocation ain1) {
+        return reduce_my_array_uchar(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_uchar(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_uchar, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_uchar2 = 46;
+    // in1 = "val"
+    public result_int reduce_my_array_uchar2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_uchar2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_uchar2(Allocation ain1) {
+        return reduce_my_array_uchar2(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_uchar2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_uchar2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_uchar4 = 47;
+    // in1 = "val"
+    public result_int reduce_my_array_uchar4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_uchar4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_uchar4(Allocation ain1) {
+        return reduce_my_array_uchar4(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_uchar4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_uchar4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort = 48;
+    // in1 = "val"
+    public result_int reduce_my_ushort(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_ushort(Allocation ain1) {
+        return reduce_my_ushort(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_ushort(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2 = 49;
+    // in1 = "val"
+    public result_int reduce_my_ushort2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_ushort2(Allocation ain1) {
+        return reduce_my_ushort2(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_ushort2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4 = 50;
+    // in1 = "val"
+    public result_int reduce_my_ushort4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_ushort4(Allocation ain1) {
+        return reduce_my_ushort4(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_ushort4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_ushort = 51;
+    // in1 = "val"
+    public result_int reduce_my_array_ushort(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_ushort(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_ushort(Allocation ain1) {
+        return reduce_my_array_ushort(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_ushort(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_ushort, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_ushort2 = 52;
+    // in1 = "val"
+    public result_int reduce_my_array_ushort2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_ushort2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_ushort2(Allocation ain1) {
+        return reduce_my_array_ushort2(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_ushort2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_ushort2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_ushort4 = 53;
+    // in1 = "val"
+    public result_int reduce_my_array_ushort4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_ushort4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_ushort4(Allocation ain1) {
+        return reduce_my_array_ushort4(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_ushort4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_ushort4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint = 54;
+    // in1 = "val"
+    public result_int reduce_my_uint(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_uint(Allocation ain1) {
+        return reduce_my_uint(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_uint(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint2 = 55;
+    // in1 = "val"
+    public result_int reduce_my_uint2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_uint2(Allocation ain1) {
+        return reduce_my_uint2(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_uint2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint4 = 56;
+    // in1 = "val"
+    public result_int reduce_my_uint4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_uint4(Allocation ain1) {
+        return reduce_my_uint4(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_uint4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_uint = 57;
+    // in1 = "val"
+    public result_int reduce_my_array_uint(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_uint(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_uint(Allocation ain1) {
+        return reduce_my_array_uint(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_uint(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_uint, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_uint2 = 58;
+    // in1 = "val"
+    public result_int reduce_my_array_uint2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_uint2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_uint2(Allocation ain1) {
+        return reduce_my_array_uint2(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_uint2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_uint2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_uint4 = 59;
+    // in1 = "val"
+    public result_int reduce_my_array_uint4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_uint4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_uint4(Allocation ain1) {
+        return reduce_my_array_uint4(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_uint4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_uint4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong = 60;
+    // in1 = "val"
+    public result_int reduce_my_ulong(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_ulong(Allocation ain1) {
+        return reduce_my_ulong(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_ulong(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong2 = 61;
+    // in1 = "val"
+    public result_int reduce_my_ulong2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_ulong2(Allocation ain1) {
+        return reduce_my_ulong2(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_ulong2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong4 = 62;
+    // in1 = "val"
+    public result_int reduce_my_ulong4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_ulong4(Allocation ain1) {
+        return reduce_my_ulong4(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_ulong4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_ulong = 63;
+    // in1 = "val"
+    public result_int reduce_my_array_ulong(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_ulong(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_ulong(Allocation ain1) {
+        return reduce_my_array_ulong(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_ulong(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_ulong, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_ulong2 = 64;
+    // in1 = "val"
+    public result_int reduce_my_array_ulong2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_ulong2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_ulong2(Allocation ain1) {
+        return reduce_my_array_ulong2(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_ulong2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_ulong2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_ulong4 = 65;
+    // in1 = "val"
+    public result_int reduce_my_array_ulong4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_ulong4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_ulong4(Allocation ain1) {
+        return reduce_my_array_ulong4(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_ulong4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_ulong4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool = 66;
+    // in1 = "val"
+    public result_int reduce_my_bool(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_bool(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_bool(Allocation ain1) {
+        return reduce_my_bool(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_bool(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_bool = 67;
+    // in1 = "val"
+    public result_int reduce_my_array_bool(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_bool(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_bool(Allocation ain1) {
+        return reduce_my_array_bool(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_bool(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_bool, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2 = 68;
+    // in1 = "val"
+    public result_int reduce_my_rs_matrix2x2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_rs_matrix2x2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_rs_matrix2x2(Allocation ain1) {
+        return reduce_my_rs_matrix2x2(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_rs_matrix2x2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_rs_matrix2x2 = 69;
+    // in1 = "val"
+    public result_int reduce_my_array_rs_matrix2x2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_rs_matrix2x2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_rs_matrix2x2(Allocation ain1) {
+        return reduce_my_array_rs_matrix2x2(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_rs_matrix2x2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_rs_matrix2x2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix3x3 = 70;
+    // in1 = "val"
+    public result_int reduce_my_rs_matrix3x3(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_rs_matrix3x3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_rs_matrix3x3(Allocation ain1) {
+        return reduce_my_rs_matrix3x3(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_rs_matrix3x3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix3x3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_rs_matrix3x3 = 71;
+    // in1 = "val"
+    public result_int reduce_my_array_rs_matrix3x3(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_rs_matrix3x3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_rs_matrix3x3(Allocation ain1) {
+        return reduce_my_array_rs_matrix3x3(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_rs_matrix3x3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_rs_matrix3x3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix4x4 = 72;
+    // in1 = "val"
+    public result_int reduce_my_rs_matrix4x4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_rs_matrix4x4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_rs_matrix4x4(Allocation ain1) {
+        return reduce_my_rs_matrix4x4(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_rs_matrix4x4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix4x4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_rs_matrix4x4 = 73;
+    // in1 = "val"
+    public result_int reduce_my_array_rs_matrix4x4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_rs_matrix4x4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_rs_matrix4x4(Allocation ain1) {
+        return reduce_my_array_rs_matrix4x4(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_rs_matrix4x4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_rs_matrix4x4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_for_each_strategy_t = 74;
+    // in1 = "val"
+    public result_int reduce_my_rs_for_each_strategy_t(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_rs_for_each_strategy_t(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_rs_for_each_strategy_t(Allocation ain1) {
+        return reduce_my_rs_for_each_strategy_t(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_rs_for_each_strategy_t(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_for_each_strategy_t, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_rs_for_each_strategy_t = 75;
+    // in1 = "val"
+    public result_int reduce_my_array_rs_for_each_strategy_t(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_rs_for_each_strategy_t(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_rs_for_each_strategy_t(Allocation ain1) {
+        return reduce_my_array_rs_for_each_strategy_t(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_rs_for_each_strategy_t(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_rs_for_each_strategy_t, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_script_call_t = 76;
+    // in1 = "val"
+    public result_int reduce_my_rs_script_call_t(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_rs_script_call_t(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_rs_script_call_t(Allocation ain1) {
+        return reduce_my_rs_script_call_t(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_rs_script_call_t(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_script_call_t, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_rs_script_call_t = 77;
+    // in1 = "val"
+    public result_int reduce_my_array_rs_script_call_t(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_rs_script_call_t(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_rs_script_call_t(Allocation ain1) {
+        return reduce_my_array_rs_script_call_t(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_rs_script_call_t(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_rs_script_call_t, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_time_t = 78;
+    // in1 = "val"
+    public result_int reduce_my_rs_time_t(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_rs_time_t(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_rs_time_t(Allocation ain1) {
+        return reduce_my_rs_time_t(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_rs_time_t(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_time_t, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_rs_time_t = 79;
+    // in1 = "val"
+    public result_int reduce_my_array_rs_time_t(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_rs_time_t(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_rs_time_t(Allocation ain1) {
+        return reduce_my_array_rs_time_t(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_rs_time_t(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_rs_time_t, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_tm = 80;
+    // in1 = "val"
+    public result_int reduce_my_rs_tm(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_rs_tm(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_rs_tm(Allocation ain1) {
+        return reduce_my_rs_tm(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_rs_tm(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_tm, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_rs_tm = 81;
+    // in1 = "val"
+    public result_int reduce_my_array_rs_tm(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_rs_tm(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_rs_tm(Allocation ain1) {
+        return reduce_my_array_rs_tm(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_rs_tm(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_rs_tm, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyEnum = 82;
+    // in1 = "val"
+    public result_int reduce_my_MyEnum(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_MyEnum(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_MyEnum(Allocation ain1) {
+        return reduce_my_MyEnum(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_MyEnum(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyEnum, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_MyEnum = 83;
+    // in1 = "val"
+    public result_int reduce_my_array_MyEnum(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_MyEnum(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_MyEnum(Allocation ain1) {
+        return reduce_my_array_MyEnum(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_MyEnum(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_MyEnum, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyPtrArray = 84;
+    // in1 = "val"
+    public result_int reduce_my_MyPtrArray(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_MyPtrArray(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_MyPtrArray(Allocation ain1) {
+        return reduce_my_MyPtrArray(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_MyPtrArray(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyPtrArray, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_MyPtrArray = 85;
+    // in1 = "val"
+    public result_int reduce_my_array_MyPtrArray(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_MyPtrArray(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_MyPtrArray(Allocation ain1) {
+        return reduce_my_array_MyPtrArray(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_MyPtrArray(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_MyPtrArray, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyPtrFn = 86;
+    // in1 = "val"
+    public result_int reduce_my_MyPtrFn(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_MyPtrFn(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_MyPtrFn(Allocation ain1) {
+        return reduce_my_MyPtrFn(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_MyPtrFn(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyPtrFn, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_MyPtrFn = 87;
+    // in1 = "val"
+    public result_int reduce_my_array_MyPtrFn(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_MyPtrFn(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_MyPtrFn(Allocation ain1) {
+        return reduce_my_array_MyPtrFn(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_MyPtrFn(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_MyPtrFn, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyPtrIncomplete = 88;
+    // in1 = "val"
+    public result_int reduce_my_MyPtrIncomplete(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_MyPtrIncomplete(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_MyPtrIncomplete(Allocation ain1) {
+        return reduce_my_MyPtrIncomplete(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_MyPtrIncomplete(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyPtrIncomplete, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_MyPtrIncomplete = 89;
+    // in1 = "val"
+    public result_int reduce_my_array_MyPtrIncomplete(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_MyPtrIncomplete(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_MyPtrIncomplete(Allocation ain1) {
+        return reduce_my_array_MyPtrIncomplete(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_MyPtrIncomplete(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_MyPtrIncomplete, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyPtrShort = 90;
+    // in1 = "val"
+    public result_int reduce_my_MyPtrShort(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_MyPtrShort(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_MyPtrShort(Allocation ain1) {
+        return reduce_my_MyPtrShort(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_MyPtrShort(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyPtrShort, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_MyPtrShort = 91;
+    // in1 = "val"
+    public result_int reduce_my_array_MyPtrShort(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_MyPtrShort(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_MyPtrShort(Allocation ain1) {
+        return reduce_my_array_MyPtrShort(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_MyPtrShort(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_MyPtrShort, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyPtrVoid = 92;
+    // in1 = "val"
+    public result_int reduce_my_MyPtrVoid(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_MyPtrVoid(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_MyPtrVoid(Allocation ain1) {
+        return reduce_my_MyPtrVoid(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_MyPtrVoid(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyPtrVoid, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_MyPtrVoid = 93;
+    // in1 = "val"
+    public result_int reduce_my_array_MyPtrVoid(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_MyPtrVoid(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_MyPtrVoid(Allocation ain1) {
+        return reduce_my_array_MyPtrVoid(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_MyPtrVoid(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_MyPtrVoid, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct = 94;
+    // in1 = "val"
+    public result_int reduce_my_MyStruct(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_MyStruct(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_MyStruct(Allocation ain1) {
+        return reduce_my_MyStruct(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_MyStruct(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_MyStruct = 95;
+    // in1 = "val"
+    public result_int reduce_my_array_MyStruct(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_MyStruct(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_MyStruct(Allocation ain1) {
+        return reduce_my_array_MyStruct(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_MyStruct(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_MyStruct, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyUnion = 96;
+    // in1 = "val"
+    public result_int reduce_my_MyUnion(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_MyUnion(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_MyUnion(Allocation ain1) {
+        return reduce_my_MyUnion(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_MyUnion(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyUnion, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_MyUnion = 97;
+    // in1 = "val"
+    public result_int reduce_my_array_MyUnion(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_MyUnion(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_MyUnion(Allocation ain1) {
+        return reduce_my_array_MyUnion(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_MyUnion(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_MyUnion, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyBlob = 98;
+    // in1 = "val"
+    public result_int reduce_my_MyBlob(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_MyBlob(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_MyBlob(Allocation ain1) {
+        return reduce_my_MyBlob(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_MyBlob(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyBlob, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_MyBlob = 99;
+    // in1 = "val"
+    public result_int reduce_my_array_MyBlob(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_array_MyBlob(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_MyBlob(Allocation ain1) {
+        return reduce_my_array_MyBlob(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_array_MyBlob(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_MyBlob, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+}
+
diff --git a/slang/tests/P_reduce_general_accumulator/gen-accumulator.pl b/slang/tests/P_reduce_general_accumulator/gen-accumulator.pl
new file mode 100755
index 0000000..46329e8
--- /dev/null
+++ b/slang/tests/P_reduce_general_accumulator/gen-accumulator.pl
@@ -0,0 +1,66 @@
+#!/usr/bin/perl -w
+
+# Generate trivial test cases to exercise accumulator types.
+
+use strict;
+
+my @basicTypesVectorable = ("half", "float", "double",
+                            "char", "short", "int", "long",
+                            "uchar", "ushort", "uint", "ulong");
+my @basicTypesUnvectorable = ("bool",
+                              "rs_matrix2x2", "rs_matrix3x3", "rs_matrix4x4",
+                              "rs_for_each_strategy_t", "rs_script_call_t", "rs_time_t", "rs_tm",
+                              "MyEnum",
+                              "MyPtrArray", "MyPtrFn", "MyPtrIncomplete", "MyPtrShort", "MyPtrVoid",
+                              "MyStruct", "MyUnion",
+                              "MyBlob");
+my @basicTypes = (@basicTypesVectorable, @basicTypesUnvectorable);
+
+# 1 signifies non-vector
+# 3 is not supported for exported types
+my @vecLengths = (1, 2, 4);
+
+print "// -target-api 0 -Wall -Werror\n";
+print "#pragma version(1)\n";
+print "#pragma rs java_package_name(accumulator)\n\n";
+print "// This test case was created by $0.\n";
+print "// It exercises various legal accumulator types, so that we can ensure\n";
+print "// (a) We do not choke when compiling them\n";
+print "// (b) They do not inhibit reflection\n";
+print "\n// One example enum type\n";
+print "typedef enum { E1, E2, E3 } MyEnum;\n";
+print "\n// Example pointer types\n";
+print "typedef float (*MyPtrArray)[3][11];\n";
+print "typedef int (*MyPtrFn)(double);\n";
+print "typedef struct Incomplete *MyPtrIncomplete;\n";
+print "typedef volatile short *MyPtrShort;\n";
+print "typedef const void *MyPtrVoid;\n";
+print "\n// One example struct type\n";
+print "typedef struct { float f; double d; char *c; } MyStruct;\n";
+print "\n// One example union type\n";
+print "typedef union { int i; long l; int a[5]; } MyUnion;\n";
+print "\n// One example of a more-complicated type\n";
+print "typedef struct { MyEnum e1, e2; MyPtrIncomplete p; MyStruct s; MyUnion u; } MyBlob;\n";
+
+foreach my $basicType (@basicTypes) {
+  for (my $isArray = 0; $isArray <= 1; ++$isArray) {
+    foreach my $vecLen (@vecLengths) {
+
+      next if ($vecLen > 1) && !grep(/^${basicType}$/, @basicTypesVectorable);
+
+      my $eltName = $basicType;
+      $eltName .= $vecLen if ($vecLen > 1);
+      my $resultName = ($isArray ? "array_${eltName}" : $eltName);
+      my $reduceName = "my_${resultName}";
+      my $accumName = "${reduceName}_accum";
+      my $combName = "${reduceName}_comb";
+      my $outName = "${reduceName}_out";
+      print "\n";
+      print "#pragma rs reduce(${reduceName}) accumulator(${accumName}) combiner(${combName}) outconverter(${outName})\n";
+      print "typedef ${eltName} ${resultName}[7];\n" if ($isArray);
+      print "static void ${accumName}(${resultName} *accum, int val) { }\n";
+      print "static void ${combName}(${resultName} *accum, const ${resultName} *other) { }\n";
+      print "static void ${outName}(int *out, const ${resultName} *accum) { }\n";
+    }
+  }
+}
diff --git a/slang/tests/P_reduce_general_accumulator/reduce_general_accumulator.rs b/slang/tests/P_reduce_general_accumulator/reduce_general_accumulator.rs
new file mode 100644
index 0000000..cec196d
--- /dev/null
+++ b/slang/tests/P_reduce_general_accumulator/reduce_general_accumulator.rs
@@ -0,0 +1,577 @@
+// -target-api 0 -Wall -Werror
+#pragma version(1)
+#pragma rs java_package_name(accumulator)
+
+// This test case was created by ./gen-accumulator.pl.
+// It exercises various legal accumulator types, so that we can ensure
+// (a) We do not choke when compiling them
+// (b) They do not inhibit reflection
+
+// One example enum type
+typedef enum { E1, E2, E3 } MyEnum;
+
+// Example pointer types
+typedef float (*MyPtrArray)[3][11];
+typedef int (*MyPtrFn)(double);
+typedef struct Incomplete *MyPtrIncomplete;
+typedef volatile short *MyPtrShort;
+typedef const void *MyPtrVoid;
+
+// One example struct type
+typedef struct { float f; double d; char *c; } MyStruct;
+
+// One example union type
+typedef union { int i; long l; int a[5]; } MyUnion;
+
+// One example of a more-complicated type
+typedef struct { MyEnum e1, e2; MyPtrIncomplete p; MyStruct s; MyUnion u; } MyBlob;
+
+#pragma rs reduce(my_half) accumulator(my_half_accum) combiner(my_half_comb) outconverter(my_half_out)
+static void my_half_accum(half *accum, int val) { }
+static void my_half_comb(half *accum, const half *other) { }
+static void my_half_out(int *out, const half *accum) { }
+
+#pragma rs reduce(my_half2) accumulator(my_half2_accum) combiner(my_half2_comb) outconverter(my_half2_out)
+static void my_half2_accum(half2 *accum, int val) { }
+static void my_half2_comb(half2 *accum, const half2 *other) { }
+static void my_half2_out(int *out, const half2 *accum) { }
+
+#pragma rs reduce(my_half4) accumulator(my_half4_accum) combiner(my_half4_comb) outconverter(my_half4_out)
+static void my_half4_accum(half4 *accum, int val) { }
+static void my_half4_comb(half4 *accum, const half4 *other) { }
+static void my_half4_out(int *out, const half4 *accum) { }
+
+#pragma rs reduce(my_array_half) accumulator(my_array_half_accum) combiner(my_array_half_comb) outconverter(my_array_half_out)
+typedef half array_half[7];
+static void my_array_half_accum(array_half *accum, int val) { }
+static void my_array_half_comb(array_half *accum, const array_half *other) { }
+static void my_array_half_out(int *out, const array_half *accum) { }
+
+#pragma rs reduce(my_array_half2) accumulator(my_array_half2_accum) combiner(my_array_half2_comb) outconverter(my_array_half2_out)
+typedef half2 array_half2[7];
+static void my_array_half2_accum(array_half2 *accum, int val) { }
+static void my_array_half2_comb(array_half2 *accum, const array_half2 *other) { }
+static void my_array_half2_out(int *out, const array_half2 *accum) { }
+
+#pragma rs reduce(my_array_half4) accumulator(my_array_half4_accum) combiner(my_array_half4_comb) outconverter(my_array_half4_out)
+typedef half4 array_half4[7];
+static void my_array_half4_accum(array_half4 *accum, int val) { }
+static void my_array_half4_comb(array_half4 *accum, const array_half4 *other) { }
+static void my_array_half4_out(int *out, const array_half4 *accum) { }
+
+#pragma rs reduce(my_float) accumulator(my_float_accum) combiner(my_float_comb) outconverter(my_float_out)
+static void my_float_accum(float *accum, int val) { }
+static void my_float_comb(float *accum, const float *other) { }
+static void my_float_out(int *out, const float *accum) { }
+
+#pragma rs reduce(my_float2) accumulator(my_float2_accum) combiner(my_float2_comb) outconverter(my_float2_out)
+static void my_float2_accum(float2 *accum, int val) { }
+static void my_float2_comb(float2 *accum, const float2 *other) { }
+static void my_float2_out(int *out, const float2 *accum) { }
+
+#pragma rs reduce(my_float4) accumulator(my_float4_accum) combiner(my_float4_comb) outconverter(my_float4_out)
+static void my_float4_accum(float4 *accum, int val) { }
+static void my_float4_comb(float4 *accum, const float4 *other) { }
+static void my_float4_out(int *out, const float4 *accum) { }
+
+#pragma rs reduce(my_array_float) accumulator(my_array_float_accum) combiner(my_array_float_comb) outconverter(my_array_float_out)
+typedef float array_float[7];
+static void my_array_float_accum(array_float *accum, int val) { }
+static void my_array_float_comb(array_float *accum, const array_float *other) { }
+static void my_array_float_out(int *out, const array_float *accum) { }
+
+#pragma rs reduce(my_array_float2) accumulator(my_array_float2_accum) combiner(my_array_float2_comb) outconverter(my_array_float2_out)
+typedef float2 array_float2[7];
+static void my_array_float2_accum(array_float2 *accum, int val) { }
+static void my_array_float2_comb(array_float2 *accum, const array_float2 *other) { }
+static void my_array_float2_out(int *out, const array_float2 *accum) { }
+
+#pragma rs reduce(my_array_float4) accumulator(my_array_float4_accum) combiner(my_array_float4_comb) outconverter(my_array_float4_out)
+typedef float4 array_float4[7];
+static void my_array_float4_accum(array_float4 *accum, int val) { }
+static void my_array_float4_comb(array_float4 *accum, const array_float4 *other) { }
+static void my_array_float4_out(int *out, const array_float4 *accum) { }
+
+#pragma rs reduce(my_double) accumulator(my_double_accum) combiner(my_double_comb) outconverter(my_double_out)
+static void my_double_accum(double *accum, int val) { }
+static void my_double_comb(double *accum, const double *other) { }
+static void my_double_out(int *out, const double *accum) { }
+
+#pragma rs reduce(my_double2) accumulator(my_double2_accum) combiner(my_double2_comb) outconverter(my_double2_out)
+static void my_double2_accum(double2 *accum, int val) { }
+static void my_double2_comb(double2 *accum, const double2 *other) { }
+static void my_double2_out(int *out, const double2 *accum) { }
+
+#pragma rs reduce(my_double4) accumulator(my_double4_accum) combiner(my_double4_comb) outconverter(my_double4_out)
+static void my_double4_accum(double4 *accum, int val) { }
+static void my_double4_comb(double4 *accum, const double4 *other) { }
+static void my_double4_out(int *out, const double4 *accum) { }
+
+#pragma rs reduce(my_array_double) accumulator(my_array_double_accum) combiner(my_array_double_comb) outconverter(my_array_double_out)
+typedef double array_double[7];
+static void my_array_double_accum(array_double *accum, int val) { }
+static void my_array_double_comb(array_double *accum, const array_double *other) { }
+static void my_array_double_out(int *out, const array_double *accum) { }
+
+#pragma rs reduce(my_array_double2) accumulator(my_array_double2_accum) combiner(my_array_double2_comb) outconverter(my_array_double2_out)
+typedef double2 array_double2[7];
+static void my_array_double2_accum(array_double2 *accum, int val) { }
+static void my_array_double2_comb(array_double2 *accum, const array_double2 *other) { }
+static void my_array_double2_out(int *out, const array_double2 *accum) { }
+
+#pragma rs reduce(my_array_double4) accumulator(my_array_double4_accum) combiner(my_array_double4_comb) outconverter(my_array_double4_out)
+typedef double4 array_double4[7];
+static void my_array_double4_accum(array_double4 *accum, int val) { }
+static void my_array_double4_comb(array_double4 *accum, const array_double4 *other) { }
+static void my_array_double4_out(int *out, const array_double4 *accum) { }
+
+#pragma rs reduce(my_char) accumulator(my_char_accum) combiner(my_char_comb) outconverter(my_char_out)
+static void my_char_accum(char *accum, int val) { }
+static void my_char_comb(char *accum, const char *other) { }
+static void my_char_out(int *out, const char *accum) { }
+
+#pragma rs reduce(my_char2) accumulator(my_char2_accum) combiner(my_char2_comb) outconverter(my_char2_out)
+static void my_char2_accum(char2 *accum, int val) { }
+static void my_char2_comb(char2 *accum, const char2 *other) { }
+static void my_char2_out(int *out, const char2 *accum) { }
+
+#pragma rs reduce(my_char4) accumulator(my_char4_accum) combiner(my_char4_comb) outconverter(my_char4_out)
+static void my_char4_accum(char4 *accum, int val) { }
+static void my_char4_comb(char4 *accum, const char4 *other) { }
+static void my_char4_out(int *out, const char4 *accum) { }
+
+#pragma rs reduce(my_array_char) accumulator(my_array_char_accum) combiner(my_array_char_comb) outconverter(my_array_char_out)
+typedef char array_char[7];
+static void my_array_char_accum(array_char *accum, int val) { }
+static void my_array_char_comb(array_char *accum, const array_char *other) { }
+static void my_array_char_out(int *out, const array_char *accum) { }
+
+#pragma rs reduce(my_array_char2) accumulator(my_array_char2_accum) combiner(my_array_char2_comb) outconverter(my_array_char2_out)
+typedef char2 array_char2[7];
+static void my_array_char2_accum(array_char2 *accum, int val) { }
+static void my_array_char2_comb(array_char2 *accum, const array_char2 *other) { }
+static void my_array_char2_out(int *out, const array_char2 *accum) { }
+
+#pragma rs reduce(my_array_char4) accumulator(my_array_char4_accum) combiner(my_array_char4_comb) outconverter(my_array_char4_out)
+typedef char4 array_char4[7];
+static void my_array_char4_accum(array_char4 *accum, int val) { }
+static void my_array_char4_comb(array_char4 *accum, const array_char4 *other) { }
+static void my_array_char4_out(int *out, const array_char4 *accum) { }
+
+#pragma rs reduce(my_short) accumulator(my_short_accum) combiner(my_short_comb) outconverter(my_short_out)
+static void my_short_accum(short *accum, int val) { }
+static void my_short_comb(short *accum, const short *other) { }
+static void my_short_out(int *out, const short *accum) { }
+
+#pragma rs reduce(my_short2) accumulator(my_short2_accum) combiner(my_short2_comb) outconverter(my_short2_out)
+static void my_short2_accum(short2 *accum, int val) { }
+static void my_short2_comb(short2 *accum, const short2 *other) { }
+static void my_short2_out(int *out, const short2 *accum) { }
+
+#pragma rs reduce(my_short4) accumulator(my_short4_accum) combiner(my_short4_comb) outconverter(my_short4_out)
+static void my_short4_accum(short4 *accum, int val) { }
+static void my_short4_comb(short4 *accum, const short4 *other) { }
+static void my_short4_out(int *out, const short4 *accum) { }
+
+#pragma rs reduce(my_array_short) accumulator(my_array_short_accum) combiner(my_array_short_comb) outconverter(my_array_short_out)
+typedef short array_short[7];
+static void my_array_short_accum(array_short *accum, int val) { }
+static void my_array_short_comb(array_short *accum, const array_short *other) { }
+static void my_array_short_out(int *out, const array_short *accum) { }
+
+#pragma rs reduce(my_array_short2) accumulator(my_array_short2_accum) combiner(my_array_short2_comb) outconverter(my_array_short2_out)
+typedef short2 array_short2[7];
+static void my_array_short2_accum(array_short2 *accum, int val) { }
+static void my_array_short2_comb(array_short2 *accum, const array_short2 *other) { }
+static void my_array_short2_out(int *out, const array_short2 *accum) { }
+
+#pragma rs reduce(my_array_short4) accumulator(my_array_short4_accum) combiner(my_array_short4_comb) outconverter(my_array_short4_out)
+typedef short4 array_short4[7];
+static void my_array_short4_accum(array_short4 *accum, int val) { }
+static void my_array_short4_comb(array_short4 *accum, const array_short4 *other) { }
+static void my_array_short4_out(int *out, const array_short4 *accum) { }
+
+#pragma rs reduce(my_int) accumulator(my_int_accum) combiner(my_int_comb) outconverter(my_int_out)
+static void my_int_accum(int *accum, int val) { }
+static void my_int_comb(int *accum, const int *other) { }
+static void my_int_out(int *out, const int *accum) { }
+
+#pragma rs reduce(my_int2) accumulator(my_int2_accum) combiner(my_int2_comb) outconverter(my_int2_out)
+static void my_int2_accum(int2 *accum, int val) { }
+static void my_int2_comb(int2 *accum, const int2 *other) { }
+static void my_int2_out(int *out, const int2 *accum) { }
+
+#pragma rs reduce(my_int4) accumulator(my_int4_accum) combiner(my_int4_comb) outconverter(my_int4_out)
+static void my_int4_accum(int4 *accum, int val) { }
+static void my_int4_comb(int4 *accum, const int4 *other) { }
+static void my_int4_out(int *out, const int4 *accum) { }
+
+#pragma rs reduce(my_array_int) accumulator(my_array_int_accum) combiner(my_array_int_comb) outconverter(my_array_int_out)
+typedef int array_int[7];
+static void my_array_int_accum(array_int *accum, int val) { }
+static void my_array_int_comb(array_int *accum, const array_int *other) { }
+static void my_array_int_out(int *out, const array_int *accum) { }
+
+#pragma rs reduce(my_array_int2) accumulator(my_array_int2_accum) combiner(my_array_int2_comb) outconverter(my_array_int2_out)
+typedef int2 array_int2[7];
+static void my_array_int2_accum(array_int2 *accum, int val) { }
+static void my_array_int2_comb(array_int2 *accum, const array_int2 *other) { }
+static void my_array_int2_out(int *out, const array_int2 *accum) { }
+
+#pragma rs reduce(my_array_int4) accumulator(my_array_int4_accum) combiner(my_array_int4_comb) outconverter(my_array_int4_out)
+typedef int4 array_int4[7];
+static void my_array_int4_accum(array_int4 *accum, int val) { }
+static void my_array_int4_comb(array_int4 *accum, const array_int4 *other) { }
+static void my_array_int4_out(int *out, const array_int4 *accum) { }
+
+#pragma rs reduce(my_long) accumulator(my_long_accum) combiner(my_long_comb) outconverter(my_long_out)
+static void my_long_accum(long *accum, int val) { }
+static void my_long_comb(long *accum, const long *other) { }
+static void my_long_out(int *out, const long *accum) { }
+
+#pragma rs reduce(my_long2) accumulator(my_long2_accum) combiner(my_long2_comb) outconverter(my_long2_out)
+static void my_long2_accum(long2 *accum, int val) { }
+static void my_long2_comb(long2 *accum, const long2 *other) { }
+static void my_long2_out(int *out, const long2 *accum) { }
+
+#pragma rs reduce(my_long4) accumulator(my_long4_accum) combiner(my_long4_comb) outconverter(my_long4_out)
+static void my_long4_accum(long4 *accum, int val) { }
+static void my_long4_comb(long4 *accum, const long4 *other) { }
+static void my_long4_out(int *out, const long4 *accum) { }
+
+#pragma rs reduce(my_array_long) accumulator(my_array_long_accum) combiner(my_array_long_comb) outconverter(my_array_long_out)
+typedef long array_long[7];
+static void my_array_long_accum(array_long *accum, int val) { }
+static void my_array_long_comb(array_long *accum, const array_long *other) { }
+static void my_array_long_out(int *out, const array_long *accum) { }
+
+#pragma rs reduce(my_array_long2) accumulator(my_array_long2_accum) combiner(my_array_long2_comb) outconverter(my_array_long2_out)
+typedef long2 array_long2[7];
+static void my_array_long2_accum(array_long2 *accum, int val) { }
+static void my_array_long2_comb(array_long2 *accum, const array_long2 *other) { }
+static void my_array_long2_out(int *out, const array_long2 *accum) { }
+
+#pragma rs reduce(my_array_long4) accumulator(my_array_long4_accum) combiner(my_array_long4_comb) outconverter(my_array_long4_out)
+typedef long4 array_long4[7];
+static void my_array_long4_accum(array_long4 *accum, int val) { }
+static void my_array_long4_comb(array_long4 *accum, const array_long4 *other) { }
+static void my_array_long4_out(int *out, const array_long4 *accum) { }
+
+#pragma rs reduce(my_uchar) accumulator(my_uchar_accum) combiner(my_uchar_comb) outconverter(my_uchar_out)
+static void my_uchar_accum(uchar *accum, int val) { }
+static void my_uchar_comb(uchar *accum, const uchar *other) { }
+static void my_uchar_out(int *out, const uchar *accum) { }
+
+#pragma rs reduce(my_uchar2) accumulator(my_uchar2_accum) combiner(my_uchar2_comb) outconverter(my_uchar2_out)
+static void my_uchar2_accum(uchar2 *accum, int val) { }
+static void my_uchar2_comb(uchar2 *accum, const uchar2 *other) { }
+static void my_uchar2_out(int *out, const uchar2 *accum) { }
+
+#pragma rs reduce(my_uchar4) accumulator(my_uchar4_accum) combiner(my_uchar4_comb) outconverter(my_uchar4_out)
+static void my_uchar4_accum(uchar4 *accum, int val) { }
+static void my_uchar4_comb(uchar4 *accum, const uchar4 *other) { }
+static void my_uchar4_out(int *out, const uchar4 *accum) { }
+
+#pragma rs reduce(my_array_uchar) accumulator(my_array_uchar_accum) combiner(my_array_uchar_comb) outconverter(my_array_uchar_out)
+typedef uchar array_uchar[7];
+static void my_array_uchar_accum(array_uchar *accum, int val) { }
+static void my_array_uchar_comb(array_uchar *accum, const array_uchar *other) { }
+static void my_array_uchar_out(int *out, const array_uchar *accum) { }
+
+#pragma rs reduce(my_array_uchar2) accumulator(my_array_uchar2_accum) combiner(my_array_uchar2_comb) outconverter(my_array_uchar2_out)
+typedef uchar2 array_uchar2[7];
+static void my_array_uchar2_accum(array_uchar2 *accum, int val) { }
+static void my_array_uchar2_comb(array_uchar2 *accum, const array_uchar2 *other) { }
+static void my_array_uchar2_out(int *out, const array_uchar2 *accum) { }
+
+#pragma rs reduce(my_array_uchar4) accumulator(my_array_uchar4_accum) combiner(my_array_uchar4_comb) outconverter(my_array_uchar4_out)
+typedef uchar4 array_uchar4[7];
+static void my_array_uchar4_accum(array_uchar4 *accum, int val) { }
+static void my_array_uchar4_comb(array_uchar4 *accum, const array_uchar4 *other) { }
+static void my_array_uchar4_out(int *out, const array_uchar4 *accum) { }
+
+#pragma rs reduce(my_ushort) accumulator(my_ushort_accum) combiner(my_ushort_comb) outconverter(my_ushort_out)
+static void my_ushort_accum(ushort *accum, int val) { }
+static void my_ushort_comb(ushort *accum, const ushort *other) { }
+static void my_ushort_out(int *out, const ushort *accum) { }
+
+#pragma rs reduce(my_ushort2) accumulator(my_ushort2_accum) combiner(my_ushort2_comb) outconverter(my_ushort2_out)
+static void my_ushort2_accum(ushort2 *accum, int val) { }
+static void my_ushort2_comb(ushort2 *accum, const ushort2 *other) { }
+static void my_ushort2_out(int *out, const ushort2 *accum) { }
+
+#pragma rs reduce(my_ushort4) accumulator(my_ushort4_accum) combiner(my_ushort4_comb) outconverter(my_ushort4_out)
+static void my_ushort4_accum(ushort4 *accum, int val) { }
+static void my_ushort4_comb(ushort4 *accum, const ushort4 *other) { }
+static void my_ushort4_out(int *out, const ushort4 *accum) { }
+
+#pragma rs reduce(my_array_ushort) accumulator(my_array_ushort_accum) combiner(my_array_ushort_comb) outconverter(my_array_ushort_out)
+typedef ushort array_ushort[7];
+static void my_array_ushort_accum(array_ushort *accum, int val) { }
+static void my_array_ushort_comb(array_ushort *accum, const array_ushort *other) { }
+static void my_array_ushort_out(int *out, const array_ushort *accum) { }
+
+#pragma rs reduce(my_array_ushort2) accumulator(my_array_ushort2_accum) combiner(my_array_ushort2_comb) outconverter(my_array_ushort2_out)
+typedef ushort2 array_ushort2[7];
+static void my_array_ushort2_accum(array_ushort2 *accum, int val) { }
+static void my_array_ushort2_comb(array_ushort2 *accum, const array_ushort2 *other) { }
+static void my_array_ushort2_out(int *out, const array_ushort2 *accum) { }
+
+#pragma rs reduce(my_array_ushort4) accumulator(my_array_ushort4_accum) combiner(my_array_ushort4_comb) outconverter(my_array_ushort4_out)
+typedef ushort4 array_ushort4[7];
+static void my_array_ushort4_accum(array_ushort4 *accum, int val) { }
+static void my_array_ushort4_comb(array_ushort4 *accum, const array_ushort4 *other) { }
+static void my_array_ushort4_out(int *out, const array_ushort4 *accum) { }
+
+#pragma rs reduce(my_uint) accumulator(my_uint_accum) combiner(my_uint_comb) outconverter(my_uint_out)
+static void my_uint_accum(uint *accum, int val) { }
+static void my_uint_comb(uint *accum, const uint *other) { }
+static void my_uint_out(int *out, const uint *accum) { }
+
+#pragma rs reduce(my_uint2) accumulator(my_uint2_accum) combiner(my_uint2_comb) outconverter(my_uint2_out)
+static void my_uint2_accum(uint2 *accum, int val) { }
+static void my_uint2_comb(uint2 *accum, const uint2 *other) { }
+static void my_uint2_out(int *out, const uint2 *accum) { }
+
+#pragma rs reduce(my_uint4) accumulator(my_uint4_accum) combiner(my_uint4_comb) outconverter(my_uint4_out)
+static void my_uint4_accum(uint4 *accum, int val) { }
+static void my_uint4_comb(uint4 *accum, const uint4 *other) { }
+static void my_uint4_out(int *out, const uint4 *accum) { }
+
+#pragma rs reduce(my_array_uint) accumulator(my_array_uint_accum) combiner(my_array_uint_comb) outconverter(my_array_uint_out)
+typedef uint array_uint[7];
+static void my_array_uint_accum(array_uint *accum, int val) { }
+static void my_array_uint_comb(array_uint *accum, const array_uint *other) { }
+static void my_array_uint_out(int *out, const array_uint *accum) { }
+
+#pragma rs reduce(my_array_uint2) accumulator(my_array_uint2_accum) combiner(my_array_uint2_comb) outconverter(my_array_uint2_out)
+typedef uint2 array_uint2[7];
+static void my_array_uint2_accum(array_uint2 *accum, int val) { }
+static void my_array_uint2_comb(array_uint2 *accum, const array_uint2 *other) { }
+static void my_array_uint2_out(int *out, const array_uint2 *accum) { }
+
+#pragma rs reduce(my_array_uint4) accumulator(my_array_uint4_accum) combiner(my_array_uint4_comb) outconverter(my_array_uint4_out)
+typedef uint4 array_uint4[7];
+static void my_array_uint4_accum(array_uint4 *accum, int val) { }
+static void my_array_uint4_comb(array_uint4 *accum, const array_uint4 *other) { }
+static void my_array_uint4_out(int *out, const array_uint4 *accum) { }
+
+#pragma rs reduce(my_ulong) accumulator(my_ulong_accum) combiner(my_ulong_comb) outconverter(my_ulong_out)
+static void my_ulong_accum(ulong *accum, int val) { }
+static void my_ulong_comb(ulong *accum, const ulong *other) { }
+static void my_ulong_out(int *out, const ulong *accum) { }
+
+#pragma rs reduce(my_ulong2) accumulator(my_ulong2_accum) combiner(my_ulong2_comb) outconverter(my_ulong2_out)
+static void my_ulong2_accum(ulong2 *accum, int val) { }
+static void my_ulong2_comb(ulong2 *accum, const ulong2 *other) { }
+static void my_ulong2_out(int *out, const ulong2 *accum) { }
+
+#pragma rs reduce(my_ulong4) accumulator(my_ulong4_accum) combiner(my_ulong4_comb) outconverter(my_ulong4_out)
+static void my_ulong4_accum(ulong4 *accum, int val) { }
+static void my_ulong4_comb(ulong4 *accum, const ulong4 *other) { }
+static void my_ulong4_out(int *out, const ulong4 *accum) { }
+
+#pragma rs reduce(my_array_ulong) accumulator(my_array_ulong_accum) combiner(my_array_ulong_comb) outconverter(my_array_ulong_out)
+typedef ulong array_ulong[7];
+static void my_array_ulong_accum(array_ulong *accum, int val) { }
+static void my_array_ulong_comb(array_ulong *accum, const array_ulong *other) { }
+static void my_array_ulong_out(int *out, const array_ulong *accum) { }
+
+#pragma rs reduce(my_array_ulong2) accumulator(my_array_ulong2_accum) combiner(my_array_ulong2_comb) outconverter(my_array_ulong2_out)
+typedef ulong2 array_ulong2[7];
+static void my_array_ulong2_accum(array_ulong2 *accum, int val) { }
+static void my_array_ulong2_comb(array_ulong2 *accum, const array_ulong2 *other) { }
+static void my_array_ulong2_out(int *out, const array_ulong2 *accum) { }
+
+#pragma rs reduce(my_array_ulong4) accumulator(my_array_ulong4_accum) combiner(my_array_ulong4_comb) outconverter(my_array_ulong4_out)
+typedef ulong4 array_ulong4[7];
+static void my_array_ulong4_accum(array_ulong4 *accum, int val) { }
+static void my_array_ulong4_comb(array_ulong4 *accum, const array_ulong4 *other) { }
+static void my_array_ulong4_out(int *out, const array_ulong4 *accum) { }
+
+#pragma rs reduce(my_bool) accumulator(my_bool_accum) combiner(my_bool_comb) outconverter(my_bool_out)
+static void my_bool_accum(bool *accum, int val) { }
+static void my_bool_comb(bool *accum, const bool *other) { }
+static void my_bool_out(int *out, const bool *accum) { }
+
+#pragma rs reduce(my_array_bool) accumulator(my_array_bool_accum) combiner(my_array_bool_comb) outconverter(my_array_bool_out)
+typedef bool array_bool[7];
+static void my_array_bool_accum(array_bool *accum, int val) { }
+static void my_array_bool_comb(array_bool *accum, const array_bool *other) { }
+static void my_array_bool_out(int *out, const array_bool *accum) { }
+
+#pragma rs reduce(my_rs_matrix2x2) accumulator(my_rs_matrix2x2_accum) combiner(my_rs_matrix2x2_comb) outconverter(my_rs_matrix2x2_out)
+static void my_rs_matrix2x2_accum(rs_matrix2x2 *accum, int val) { }
+static void my_rs_matrix2x2_comb(rs_matrix2x2 *accum, const rs_matrix2x2 *other) { }
+static void my_rs_matrix2x2_out(int *out, const rs_matrix2x2 *accum) { }
+
+#pragma rs reduce(my_array_rs_matrix2x2) accumulator(my_array_rs_matrix2x2_accum) combiner(my_array_rs_matrix2x2_comb) outconverter(my_array_rs_matrix2x2_out)
+typedef rs_matrix2x2 array_rs_matrix2x2[7];
+static void my_array_rs_matrix2x2_accum(array_rs_matrix2x2 *accum, int val) { }
+static void my_array_rs_matrix2x2_comb(array_rs_matrix2x2 *accum, const array_rs_matrix2x2 *other) { }
+static void my_array_rs_matrix2x2_out(int *out, const array_rs_matrix2x2 *accum) { }
+
+#pragma rs reduce(my_rs_matrix3x3) accumulator(my_rs_matrix3x3_accum) combiner(my_rs_matrix3x3_comb) outconverter(my_rs_matrix3x3_out)
+static void my_rs_matrix3x3_accum(rs_matrix3x3 *accum, int val) { }
+static void my_rs_matrix3x3_comb(rs_matrix3x3 *accum, const rs_matrix3x3 *other) { }
+static void my_rs_matrix3x3_out(int *out, const rs_matrix3x3 *accum) { }
+
+#pragma rs reduce(my_array_rs_matrix3x3) accumulator(my_array_rs_matrix3x3_accum) combiner(my_array_rs_matrix3x3_comb) outconverter(my_array_rs_matrix3x3_out)
+typedef rs_matrix3x3 array_rs_matrix3x3[7];
+static void my_array_rs_matrix3x3_accum(array_rs_matrix3x3 *accum, int val) { }
+static void my_array_rs_matrix3x3_comb(array_rs_matrix3x3 *accum, const array_rs_matrix3x3 *other) { }
+static void my_array_rs_matrix3x3_out(int *out, const array_rs_matrix3x3 *accum) { }
+
+#pragma rs reduce(my_rs_matrix4x4) accumulator(my_rs_matrix4x4_accum) combiner(my_rs_matrix4x4_comb) outconverter(my_rs_matrix4x4_out)
+static void my_rs_matrix4x4_accum(rs_matrix4x4 *accum, int val) { }
+static void my_rs_matrix4x4_comb(rs_matrix4x4 *accum, const rs_matrix4x4 *other) { }
+static void my_rs_matrix4x4_out(int *out, const rs_matrix4x4 *accum) { }
+
+#pragma rs reduce(my_array_rs_matrix4x4) accumulator(my_array_rs_matrix4x4_accum) combiner(my_array_rs_matrix4x4_comb) outconverter(my_array_rs_matrix4x4_out)
+typedef rs_matrix4x4 array_rs_matrix4x4[7];
+static void my_array_rs_matrix4x4_accum(array_rs_matrix4x4 *accum, int val) { }
+static void my_array_rs_matrix4x4_comb(array_rs_matrix4x4 *accum, const array_rs_matrix4x4 *other) { }
+static void my_array_rs_matrix4x4_out(int *out, const array_rs_matrix4x4 *accum) { }
+
+#pragma rs reduce(my_rs_for_each_strategy_t) accumulator(my_rs_for_each_strategy_t_accum) combiner(my_rs_for_each_strategy_t_comb) outconverter(my_rs_for_each_strategy_t_out)
+static void my_rs_for_each_strategy_t_accum(rs_for_each_strategy_t *accum, int val) { }
+static void my_rs_for_each_strategy_t_comb(rs_for_each_strategy_t *accum, const rs_for_each_strategy_t *other) { }
+static void my_rs_for_each_strategy_t_out(int *out, const rs_for_each_strategy_t *accum) { }
+
+#pragma rs reduce(my_array_rs_for_each_strategy_t) accumulator(my_array_rs_for_each_strategy_t_accum) combiner(my_array_rs_for_each_strategy_t_comb) outconverter(my_array_rs_for_each_strategy_t_out)
+typedef rs_for_each_strategy_t array_rs_for_each_strategy_t[7];
+static void my_array_rs_for_each_strategy_t_accum(array_rs_for_each_strategy_t *accum, int val) { }
+static void my_array_rs_for_each_strategy_t_comb(array_rs_for_each_strategy_t *accum, const array_rs_for_each_strategy_t *other) { }
+static void my_array_rs_for_each_strategy_t_out(int *out, const array_rs_for_each_strategy_t *accum) { }
+
+#pragma rs reduce(my_rs_script_call_t) accumulator(my_rs_script_call_t_accum) combiner(my_rs_script_call_t_comb) outconverter(my_rs_script_call_t_out)
+static void my_rs_script_call_t_accum(rs_script_call_t *accum, int val) { }
+static void my_rs_script_call_t_comb(rs_script_call_t *accum, const rs_script_call_t *other) { }
+static void my_rs_script_call_t_out(int *out, const rs_script_call_t *accum) { }
+
+#pragma rs reduce(my_array_rs_script_call_t) accumulator(my_array_rs_script_call_t_accum) combiner(my_array_rs_script_call_t_comb) outconverter(my_array_rs_script_call_t_out)
+typedef rs_script_call_t array_rs_script_call_t[7];
+static void my_array_rs_script_call_t_accum(array_rs_script_call_t *accum, int val) { }
+static void my_array_rs_script_call_t_comb(array_rs_script_call_t *accum, const array_rs_script_call_t *other) { }
+static void my_array_rs_script_call_t_out(int *out, const array_rs_script_call_t *accum) { }
+
+#pragma rs reduce(my_rs_time_t) accumulator(my_rs_time_t_accum) combiner(my_rs_time_t_comb) outconverter(my_rs_time_t_out)
+static void my_rs_time_t_accum(rs_time_t *accum, int val) { }
+static void my_rs_time_t_comb(rs_time_t *accum, const rs_time_t *other) { }
+static void my_rs_time_t_out(int *out, const rs_time_t *accum) { }
+
+#pragma rs reduce(my_array_rs_time_t) accumulator(my_array_rs_time_t_accum) combiner(my_array_rs_time_t_comb) outconverter(my_array_rs_time_t_out)
+typedef rs_time_t array_rs_time_t[7];
+static void my_array_rs_time_t_accum(array_rs_time_t *accum, int val) { }
+static void my_array_rs_time_t_comb(array_rs_time_t *accum, const array_rs_time_t *other) { }
+static void my_array_rs_time_t_out(int *out, const array_rs_time_t *accum) { }
+
+#pragma rs reduce(my_rs_tm) accumulator(my_rs_tm_accum) combiner(my_rs_tm_comb) outconverter(my_rs_tm_out)
+static void my_rs_tm_accum(rs_tm *accum, int val) { }
+static void my_rs_tm_comb(rs_tm *accum, const rs_tm *other) { }
+static void my_rs_tm_out(int *out, const rs_tm *accum) { }
+
+#pragma rs reduce(my_array_rs_tm) accumulator(my_array_rs_tm_accum) combiner(my_array_rs_tm_comb) outconverter(my_array_rs_tm_out)
+typedef rs_tm array_rs_tm[7];
+static void my_array_rs_tm_accum(array_rs_tm *accum, int val) { }
+static void my_array_rs_tm_comb(array_rs_tm *accum, const array_rs_tm *other) { }
+static void my_array_rs_tm_out(int *out, const array_rs_tm *accum) { }
+
+#pragma rs reduce(my_MyEnum) accumulator(my_MyEnum_accum) combiner(my_MyEnum_comb) outconverter(my_MyEnum_out)
+static void my_MyEnum_accum(MyEnum *accum, int val) { }
+static void my_MyEnum_comb(MyEnum *accum, const MyEnum *other) { }
+static void my_MyEnum_out(int *out, const MyEnum *accum) { }
+
+#pragma rs reduce(my_array_MyEnum) accumulator(my_array_MyEnum_accum) combiner(my_array_MyEnum_comb) outconverter(my_array_MyEnum_out)
+typedef MyEnum array_MyEnum[7];
+static void my_array_MyEnum_accum(array_MyEnum *accum, int val) { }
+static void my_array_MyEnum_comb(array_MyEnum *accum, const array_MyEnum *other) { }
+static void my_array_MyEnum_out(int *out, const array_MyEnum *accum) { }
+
+#pragma rs reduce(my_MyPtrArray) accumulator(my_MyPtrArray_accum) combiner(my_MyPtrArray_comb) outconverter(my_MyPtrArray_out)
+static void my_MyPtrArray_accum(MyPtrArray *accum, int val) { }
+static void my_MyPtrArray_comb(MyPtrArray *accum, const MyPtrArray *other) { }
+static void my_MyPtrArray_out(int *out, const MyPtrArray *accum) { }
+
+#pragma rs reduce(my_array_MyPtrArray) accumulator(my_array_MyPtrArray_accum) combiner(my_array_MyPtrArray_comb) outconverter(my_array_MyPtrArray_out)
+typedef MyPtrArray array_MyPtrArray[7];
+static void my_array_MyPtrArray_accum(array_MyPtrArray *accum, int val) { }
+static void my_array_MyPtrArray_comb(array_MyPtrArray *accum, const array_MyPtrArray *other) { }
+static void my_array_MyPtrArray_out(int *out, const array_MyPtrArray *accum) { }
+
+#pragma rs reduce(my_MyPtrFn) accumulator(my_MyPtrFn_accum) combiner(my_MyPtrFn_comb) outconverter(my_MyPtrFn_out)
+static void my_MyPtrFn_accum(MyPtrFn *accum, int val) { }
+static void my_MyPtrFn_comb(MyPtrFn *accum, const MyPtrFn *other) { }
+static void my_MyPtrFn_out(int *out, const MyPtrFn *accum) { }
+
+#pragma rs reduce(my_array_MyPtrFn) accumulator(my_array_MyPtrFn_accum) combiner(my_array_MyPtrFn_comb) outconverter(my_array_MyPtrFn_out)
+typedef MyPtrFn array_MyPtrFn[7];
+static void my_array_MyPtrFn_accum(array_MyPtrFn *accum, int val) { }
+static void my_array_MyPtrFn_comb(array_MyPtrFn *accum, const array_MyPtrFn *other) { }
+static void my_array_MyPtrFn_out(int *out, const array_MyPtrFn *accum) { }
+
+#pragma rs reduce(my_MyPtrIncomplete) accumulator(my_MyPtrIncomplete_accum) combiner(my_MyPtrIncomplete_comb) outconverter(my_MyPtrIncomplete_out)
+static void my_MyPtrIncomplete_accum(MyPtrIncomplete *accum, int val) { }
+static void my_MyPtrIncomplete_comb(MyPtrIncomplete *accum, const MyPtrIncomplete *other) { }
+static void my_MyPtrIncomplete_out(int *out, const MyPtrIncomplete *accum) { }
+
+#pragma rs reduce(my_array_MyPtrIncomplete) accumulator(my_array_MyPtrIncomplete_accum) combiner(my_array_MyPtrIncomplete_comb) outconverter(my_array_MyPtrIncomplete_out)
+typedef MyPtrIncomplete array_MyPtrIncomplete[7];
+static void my_array_MyPtrIncomplete_accum(array_MyPtrIncomplete *accum, int val) { }
+static void my_array_MyPtrIncomplete_comb(array_MyPtrIncomplete *accum, const array_MyPtrIncomplete *other) { }
+static void my_array_MyPtrIncomplete_out(int *out, const array_MyPtrIncomplete *accum) { }
+
+#pragma rs reduce(my_MyPtrShort) accumulator(my_MyPtrShort_accum) combiner(my_MyPtrShort_comb) outconverter(my_MyPtrShort_out)
+static void my_MyPtrShort_accum(MyPtrShort *accum, int val) { }
+static void my_MyPtrShort_comb(MyPtrShort *accum, const MyPtrShort *other) { }
+static void my_MyPtrShort_out(int *out, const MyPtrShort *accum) { }
+
+#pragma rs reduce(my_array_MyPtrShort) accumulator(my_array_MyPtrShort_accum) combiner(my_array_MyPtrShort_comb) outconverter(my_array_MyPtrShort_out)
+typedef MyPtrShort array_MyPtrShort[7];
+static void my_array_MyPtrShort_accum(array_MyPtrShort *accum, int val) { }
+static void my_array_MyPtrShort_comb(array_MyPtrShort *accum, const array_MyPtrShort *other) { }
+static void my_array_MyPtrShort_out(int *out, const array_MyPtrShort *accum) { }
+
+#pragma rs reduce(my_MyPtrVoid) accumulator(my_MyPtrVoid_accum) combiner(my_MyPtrVoid_comb) outconverter(my_MyPtrVoid_out)
+static void my_MyPtrVoid_accum(MyPtrVoid *accum, int val) { }
+static void my_MyPtrVoid_comb(MyPtrVoid *accum, const MyPtrVoid *other) { }
+static void my_MyPtrVoid_out(int *out, const MyPtrVoid *accum) { }
+
+#pragma rs reduce(my_array_MyPtrVoid) accumulator(my_array_MyPtrVoid_accum) combiner(my_array_MyPtrVoid_comb) outconverter(my_array_MyPtrVoid_out)
+typedef MyPtrVoid array_MyPtrVoid[7];
+static void my_array_MyPtrVoid_accum(array_MyPtrVoid *accum, int val) { }
+static void my_array_MyPtrVoid_comb(array_MyPtrVoid *accum, const array_MyPtrVoid *other) { }
+static void my_array_MyPtrVoid_out(int *out, const array_MyPtrVoid *accum) { }
+
+#pragma rs reduce(my_MyStruct) accumulator(my_MyStruct_accum) combiner(my_MyStruct_comb) outconverter(my_MyStruct_out)
+static void my_MyStruct_accum(MyStruct *accum, int val) { }
+static void my_MyStruct_comb(MyStruct *accum, const MyStruct *other) { }
+static void my_MyStruct_out(int *out, const MyStruct *accum) { }
+
+#pragma rs reduce(my_array_MyStruct) accumulator(my_array_MyStruct_accum) combiner(my_array_MyStruct_comb) outconverter(my_array_MyStruct_out)
+typedef MyStruct array_MyStruct[7];
+static void my_array_MyStruct_accum(array_MyStruct *accum, int val) { }
+static void my_array_MyStruct_comb(array_MyStruct *accum, const array_MyStruct *other) { }
+static void my_array_MyStruct_out(int *out, const array_MyStruct *accum) { }
+
+#pragma rs reduce(my_MyUnion) accumulator(my_MyUnion_accum) combiner(my_MyUnion_comb) outconverter(my_MyUnion_out)
+static void my_MyUnion_accum(MyUnion *accum, int val) { }
+static void my_MyUnion_comb(MyUnion *accum, const MyUnion *other) { }
+static void my_MyUnion_out(int *out, const MyUnion *accum) { }
+
+#pragma rs reduce(my_array_MyUnion) accumulator(my_array_MyUnion_accum) combiner(my_array_MyUnion_comb) outconverter(my_array_MyUnion_out)
+typedef MyUnion array_MyUnion[7];
+static void my_array_MyUnion_accum(array_MyUnion *accum, int val) { }
+static void my_array_MyUnion_comb(array_MyUnion *accum, const array_MyUnion *other) { }
+static void my_array_MyUnion_out(int *out, const array_MyUnion *accum) { }
+
+#pragma rs reduce(my_MyBlob) accumulator(my_MyBlob_accum) combiner(my_MyBlob_comb) outconverter(my_MyBlob_out)
+static void my_MyBlob_accum(MyBlob *accum, int val) { }
+static void my_MyBlob_comb(MyBlob *accum, const MyBlob *other) { }
+static void my_MyBlob_out(int *out, const MyBlob *accum) { }
+
+#pragma rs reduce(my_array_MyBlob) accumulator(my_array_MyBlob_accum) combiner(my_array_MyBlob_comb) outconverter(my_array_MyBlob_out)
+typedef MyBlob array_MyBlob[7];
+static void my_array_MyBlob_accum(array_MyBlob *accum, int val) { }
+static void my_array_MyBlob_comb(array_MyBlob *accum, const array_MyBlob *other) { }
+static void my_array_MyBlob_out(int *out, const array_MyBlob *accum) { }
diff --git a/slang/tests/P_reduce_general_accumulator/stderr.txt.expect b/slang/tests/P_reduce_general_accumulator/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_reduce_general_accumulator/stderr.txt.expect
diff --git a/slang/tests/P_reduce_general_accumulator/stdout.txt.expect b/slang/tests/P_reduce_general_accumulator/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_reduce_general_accumulator/stdout.txt.expect
diff --git a/slang/tests/P_reduce_general_duplicate_array/ScriptC_reduce_general_duplicate_array.java.expect b/slang/tests/P_reduce_general_duplicate_array/ScriptC_reduce_general_duplicate_array.java.expect
new file mode 100644
index 0000000..c4d88ab
--- /dev/null
+++ b/slang/tests/P_reduce_general_duplicate_array/ScriptC_reduce_general_duplicate_array.java.expect
@@ -0,0 +1,147 @@
+/*
+ * Copyright (C) 2011-2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * This file is auto-generated. DO NOT MODIFY!
+ * The source Renderscript file: reduce_general_duplicate_array.rs
+ */
+
+package array;
+
+import android.renderscript.*;
+import array.reduce_general_duplicate_arrayBitCode;
+
+/**
+ * @hide
+ */
+public class ScriptC_reduce_general_duplicate_array extends ScriptC {
+    private static final String __rs_resource_name = "reduce_general_duplicate_array";
+    // Constructor
+    public  ScriptC_reduce_general_duplicate_array(RenderScript rs) {
+        super(rs,
+              __rs_resource_name,
+              reduce_general_duplicate_arrayBitCode.getBitCode32(),
+              reduce_general_duplicate_arrayBitCode.getBitCode64());
+        mRSLocal = rs;
+        __I32 = Element.I32(rs);
+    }
+
+    private Element __I32;
+    private RenderScript mRSLocal;
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray4_int {
+        public int[] get() {
+            if (!mGotResult) {
+                int[] outArray = new int[4];
+                mOut.copyTo(outArray);
+                mResult = outArray;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray4_int(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private int[] mResult;
+    }
+
+    private final static int mExportReduceIdx_sumDec = 0;
+    // in1 = "val"
+    public resultArray4_int reduce_sumDec(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray4_int result = reduce_sumDec(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public resultArray4_int reduce_sumDec(Allocation ain1) {
+        return reduce_sumDec(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public resultArray4_int reduce_sumDec(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 4);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_sumDec, new Allocation[]{ain1}, aout, sc);
+        return new resultArray4_int(aout);
+    }
+
+    private final static int mExportReduceIdx_sumInc = 1;
+    // in1 = "val"
+    public resultArray4_int reduce_sumInc(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray4_int result = reduce_sumInc(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public resultArray4_int reduce_sumInc(Allocation ain1) {
+        return reduce_sumInc(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public resultArray4_int reduce_sumInc(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 4);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_sumInc, new Allocation[]{ain1}, aout, sc);
+        return new resultArray4_int(aout);
+    }
+
+}
+
diff --git a/slang/tests/P_reduce_general_duplicate_array/reduce_general_duplicate_array.rs b/slang/tests/P_reduce_general_duplicate_array/reduce_general_duplicate_array.rs
new file mode 100644
index 0000000..9c806a6
--- /dev/null
+++ b/slang/tests/P_reduce_general_duplicate_array/reduce_general_duplicate_array.rs
@@ -0,0 +1,22 @@
+// -target-api 0 -Wall
+#pragma version(1)
+#pragma rs java_package_name(array)
+
+// The two kernels have anonymous result types that are equivalent.
+// slang doesn't common them (i.e., each gets its own RSExportType);
+// so Java reflection must guard against this to avoid creating two
+// copies of the text that defines the reflected class resultArray4_int.
+
+static void accumFn(int *accumDatum, int val) { *accumDatum += val; }
+
+#pragma rs reduce(sumDec) accumulator(accumFn) outconverter(outFnDec)
+static void outFnDec(int (*out)[4], const int *accumDatum) {
+  for (int i = 0; i < 4; ++i)
+    (*out)[i] = (*accumDatum)/(i+1);
+}
+
+#pragma rs reduce(sumInc) accumulator(accumFn) outconverter(outFnInc)
+static void outFnInc(int (*out)[4], const int *accumDatum) {
+  for (int i = 0; i < 4; ++i)
+    (*out)[i] = (*accumDatum)/(4-i);
+}
diff --git a/slang/tests/P_reduce_general_duplicate_array/stderr.txt.expect b/slang/tests/P_reduce_general_duplicate_array/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_reduce_general_duplicate_array/stderr.txt.expect
diff --git a/slang/tests/P_reduce_general_duplicate_array/stdout.txt.expect b/slang/tests/P_reduce_general_duplicate_array/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_reduce_general_duplicate_array/stdout.txt.expect
diff --git a/slang/tests/P_reduce_general_examples/ScriptC_reduce_general_examples.java.expect b/slang/tests/P_reduce_general_examples/ScriptC_reduce_general_examples.java.expect
new file mode 100644
index 0000000..74b295e
--- /dev/null
+++ b/slang/tests/P_reduce_general_examples/ScriptC_reduce_general_examples.java.expect
@@ -0,0 +1,497 @@
+/*
+ * Copyright (C) 2011-2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * This file is auto-generated. DO NOT MODIFY!
+ * The source Renderscript file: reduce_general_examples.rs
+ */
+
+package examples;
+
+import android.renderscript.*;
+import examples.reduce_general_examplesBitCode;
+
+/**
+ * @hide
+ */
+public class ScriptC_reduce_general_examples extends ScriptC {
+    private static final String __rs_resource_name = "reduce_general_examples";
+    // Constructor
+    public  ScriptC_reduce_general_examples(RenderScript rs) {
+        super(rs,
+              __rs_resource_name,
+              reduce_general_examplesBitCode.getBitCode32(),
+              reduce_general_examplesBitCode.getBitCode64());
+        mRSLocal = rs;
+        __I32 = Element.I32(rs);
+        __F32 = Element.F32(rs);
+        __I32_2 = Element.I32_2(rs);
+        __U32 = Element.U32(rs);
+        __U8 = Element.U8(rs);
+    }
+
+    private Element __F32;
+    private Element __I32;
+    private Element __I32_2;
+    private Element __U32;
+    private Element __U8;
+    private RenderScript mRSLocal;
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray256_uint {
+        public long[] get() {
+            if (!mGotResult) {
+                int[] outArray = new int[256];
+                mOut.copyTo(outArray);
+                long[] result = new long[256];
+                for (int Idx = 0; Idx < 256; ++Idx) {
+                    result[Idx] = ((long) ((outArray[Idx]) & 0xffffffffL));
+                }
+
+                mResult = result;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray256_uint(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private long[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_float {
+        public float get() {
+            if (!mGotResult) {
+                float[] outArray = new float[1];
+                mOut.copyTo(outArray);
+                mResult = outArray[0];
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_float(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private float mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_int {
+        public int get() {
+            if (!mGotResult) {
+                int[] outArray = new int[1];
+                mOut.copyTo(outArray);
+                mResult = outArray[0];
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_int(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private int mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_int2 {
+        public Int2 get() {
+            if (!mGotResult) {
+                int[] outArray = new int[2];
+                mOut.copyTo(outArray);
+                mResult = new Int2(outArray[0], outArray[1]);
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_int2(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Int2 mResult;
+    }
+
+    private final static int mExportReduceIdx_addint = 0;
+    // in1 = "val"
+    public result_int reduce_addint(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_addint(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_addint(Allocation ain1) {
+        return reduce_addint(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_addint(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_addint, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_mpyint = 1;
+    // in1 = "val"
+    public result_int reduce_mpyint(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_mpyint(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_mpyint(Allocation ain1) {
+        return reduce_mpyint(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_mpyint(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_mpyint, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_dp = 2;
+    // in1 = "in1"
+    // in2 = "in2"
+    public result_float reduce_dp(float[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_float result = reduce_dp(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float in1"
+    // ain2 = "float in2"
+    public result_float reduce_dp(Allocation ain1, Allocation ain2) {
+        return reduce_dp(ain1, ain2, null);
+    }
+
+    // ain1 = "float in1"
+    // ain2 = "float in2"
+    public result_float reduce_dp(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __F32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_dp, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_float(aout);
+    }
+
+    private final static int mExportReduceIdx_findMinAndMax = 3;
+    // in1 = "in"
+    public result_int2 reduce_findMinAndMax(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int2 result = reduce_findMinAndMax(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float in"
+    public result_int2 reduce_findMinAndMax(Allocation ain1) {
+        return reduce_findMinAndMax(ain1, null);
+    }
+
+    // ain1 = "float in"
+    public result_int2 reduce_findMinAndMax(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32_2, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_findMinAndMax, new Allocation[]{ain1}, aout, sc);
+        return new result_int2(aout);
+    }
+
+    private final static int mExportReduceIdx_fz = 4;
+    // in1 = "inVal"
+    public result_int reduce_fz(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_fz(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int inVal"
+    public result_int reduce_fz(Allocation ain1) {
+        return reduce_fz(ain1, null);
+    }
+
+    // ain1 = "int inVal"
+    public result_int reduce_fz(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_fz, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_fz2 = 5;
+    // in1 = "inVal"
+    public result_int2 reduce_fz2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int2 result = reduce_fz2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int inVal"
+    public result_int2 reduce_fz2(Allocation ain1) {
+        return reduce_fz2(ain1, null);
+    }
+
+    // ain1 = "int inVal"
+    public result_int2 reduce_fz2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32_2, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_fz2, new Allocation[]{ain1}, aout, sc);
+        return new result_int2(aout);
+    }
+
+    private final static int mExportReduceIdx_histogram = 6;
+    // in1 = "in"
+    public resultArray256_uint reduce_histogram(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray256_uint result = reduce_histogram(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar in"
+    public resultArray256_uint reduce_histogram(Allocation ain1) {
+        return reduce_histogram(ain1, null);
+    }
+
+    // ain1 = "uchar in"
+    public resultArray256_uint reduce_histogram(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __U32, 256);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_histogram, new Allocation[]{ain1}, aout, sc);
+        return new resultArray256_uint(aout);
+    }
+
+    private final static int mExportReduceIdx_mode = 7;
+    // in1 = "in"
+    public result_int2 reduce_mode(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int2 result = reduce_mode(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar in"
+    public result_int2 reduce_mode(Allocation ain1) {
+        return reduce_mode(ain1, null);
+    }
+
+    // ain1 = "uchar in"
+    public result_int2 reduce_mode(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32_2, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_mode, new Allocation[]{ain1}, aout, sc);
+        return new result_int2(aout);
+    }
+
+}
+
diff --git a/slang/tests/P_reduce_general_examples/reduce_general_examples.rs b/slang/tests/P_reduce_general_examples/reduce_general_examples.rs
new file mode 100644
index 0000000..17b6a27
--- /dev/null
+++ b/slang/tests/P_reduce_general_examples/reduce_general_examples.rs
@@ -0,0 +1,148 @@
+// -Wall -Werror
+#pragma version(1)
+#pragma rs java_package_name(examples)
+
+// Same as reduce_general_examples_backward.rs, except this test case
+// places the pragmas before the functions (forward reference), and
+// the other test case places the pragmas after the functions
+// (backward reference).
+
+/////////////////////////////////////////////////////////////////////////
+
+#pragma rs reduce(addint) \
+  accumulator(aiAccum)
+
+static void aiAccum(int *accum, int val) { *accum += val; }
+
+/////////////////////////////////////////////////////////////////////////
+
+#pragma rs reduce(mpyint) \
+  initializer(mpyInit) accumulator(mpyAccum)
+
+static void mpyInit(int *accum) { *accum = 1; }
+
+static void mpyAccum(int *accum, int val) { *accum *= val; }
+
+/////////////////////////////////////////////////////////////////////////
+
+#pragma rs reduce(dp) \
+  accumulator(dpAccum) combiner(dpSum)
+
+static void dpAccum(float *accum, float in1, float in2) {
+  *accum += in1*in2;
+}
+
+// combiner function
+static void dpSum(float *accum, const float *val) { *accum += *val; }
+
+/////////////////////////////////////////////////////////////////////////
+
+#pragma rs reduce(findMinAndMax) \
+  initializer(fMMInit) accumulator(fMMAccumulator) \
+  combiner(fMMCombiner) outconverter(fMMOutConverter)
+
+// this is just a compilation test
+#define INFINITY 0.0f
+
+typedef struct {
+  float val;
+  int idx;
+} IndexedVal;
+
+typedef struct {
+  IndexedVal min, max;
+} MinAndMax;
+
+static void fMMInit(MinAndMax *accum) {
+  static const MinAndMax r = { { INFINITY, -1 }, { -INFINITY, -1 } };
+  *accum = r;
+}
+
+static void fMMAccumulator(MinAndMax *accum, float in, int x) {
+  IndexedVal me;
+  me.val = in;
+  me.idx = x;
+
+  if (me.val < accum->min.val)
+    accum->min = me;
+  if (me.val > accum->max.val)
+    accum->max = me;
+}
+
+static void fMMCombiner(MinAndMax *accum,
+                        const MinAndMax *val) {
+  fMMAccumulator(accum, val->min.val, val->min.idx);
+  fMMAccumulator(accum, val->max.val, val->max.idx);
+}
+
+static void fMMOutConverter(int2 *result,
+                            const MinAndMax *val) {
+  result->x = val->min.idx;
+  result->y = val->max.idx;
+}
+
+/////////////////////////////////////////////////////////////////////////
+
+#pragma rs reduce(fz) \
+  initializer(fzInit) \
+  accumulator(fzAccum) combiner(fzCombine)
+
+static void fzInit(int *accumIdx) { *accumIdx = -1; }
+
+static void fzAccum(int *accumIdx,
+                    int inVal, int x /* special arg */) {
+  if (inVal==0) *accumIdx = x;
+}
+
+static void fzCombine(int *accumIdx, const int *accumIdx2) {
+  if (*accumIdx2 >= 0) *accumIdx = *accumIdx2;
+}
+
+/////////////////////////////////////////////////////////////////////////
+
+#pragma rs reduce(fz2) \
+  initializer(fz2Init) \
+  accumulator(fz2Accum) combiner(fz2Combine)
+
+static void fz2Init(int2 *accum) { accum->x = accum->y = -1; }
+
+static void fz2Accum(int2 *accum,
+                     int inVal,
+                     int x /* special arg */,
+                     int y /* special arg */) {
+  if (inVal==0) {
+    accum->x = x;
+    accum->y = y;
+  }
+}
+
+static void fz2Combine(int2 *accum, const int2 *accum2) {
+  if (accum2->x >= 0) *accum = *accum2;
+}
+
+/////////////////////////////////////////////////////////////////////////
+
+#pragma rs reduce(histogram) \
+  accumulator(hsgAccum) combiner(hsgCombine)
+
+#define BUCKETS 256
+typedef uint32_t Histogram[BUCKETS];
+
+static void hsgAccum(Histogram *h, uchar in) { ++(*h)[in]; }
+
+static void hsgCombine(Histogram *accum, const Histogram *addend) {
+  for (int i = 0; i < BUCKETS; ++i)
+    (*accum)[i] += (*addend)[i];
+}
+
+#pragma rs reduce(mode) \
+  accumulator(hsgAccum) combiner(hsgCombine) \
+  outconverter(modeOutConvert)
+
+static void modeOutConvert(int2 *result, const Histogram *h) {
+  uint32_t mode = 0;
+  for (int i = 1; i < BUCKETS; ++i)
+    if ((*h)[i] > (*h)[mode]) mode = i;
+  result->x = mode;
+  result->y = (*h)[mode];
+}
diff --git a/slang/tests/P_reduce_general_examples/stderr.txt.expect b/slang/tests/P_reduce_general_examples/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_reduce_general_examples/stderr.txt.expect
diff --git a/slang/tests/P_reduce_general_examples/stdout.txt.expect b/slang/tests/P_reduce_general_examples/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_reduce_general_examples/stdout.txt.expect
diff --git a/slang/tests/P_reduce_general_examples_backward/ScriptC_reduce_general_examples_backward.java.expect b/slang/tests/P_reduce_general_examples_backward/ScriptC_reduce_general_examples_backward.java.expect
new file mode 100644
index 0000000..50437f3
--- /dev/null
+++ b/slang/tests/P_reduce_general_examples_backward/ScriptC_reduce_general_examples_backward.java.expect
@@ -0,0 +1,497 @@
+/*
+ * Copyright (C) 2011-2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * This file is auto-generated. DO NOT MODIFY!
+ * The source Renderscript file: reduce_general_examples_backward.rs
+ */
+
+package examples;
+
+import android.renderscript.*;
+import examples.reduce_general_examples_backwardBitCode;
+
+/**
+ * @hide
+ */
+public class ScriptC_reduce_general_examples_backward extends ScriptC {
+    private static final String __rs_resource_name = "reduce_general_examples_backward";
+    // Constructor
+    public  ScriptC_reduce_general_examples_backward(RenderScript rs) {
+        super(rs,
+              __rs_resource_name,
+              reduce_general_examples_backwardBitCode.getBitCode32(),
+              reduce_general_examples_backwardBitCode.getBitCode64());
+        mRSLocal = rs;
+        __I32 = Element.I32(rs);
+        __F32 = Element.F32(rs);
+        __I32_2 = Element.I32_2(rs);
+        __U32 = Element.U32(rs);
+        __U8 = Element.U8(rs);
+    }
+
+    private Element __F32;
+    private Element __I32;
+    private Element __I32_2;
+    private Element __U32;
+    private Element __U8;
+    private RenderScript mRSLocal;
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray256_uint {
+        public long[] get() {
+            if (!mGotResult) {
+                int[] outArray = new int[256];
+                mOut.copyTo(outArray);
+                long[] result = new long[256];
+                for (int Idx = 0; Idx < 256; ++Idx) {
+                    result[Idx] = ((long) ((outArray[Idx]) & 0xffffffffL));
+                }
+
+                mResult = result;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray256_uint(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private long[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_float {
+        public float get() {
+            if (!mGotResult) {
+                float[] outArray = new float[1];
+                mOut.copyTo(outArray);
+                mResult = outArray[0];
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_float(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private float mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_int {
+        public int get() {
+            if (!mGotResult) {
+                int[] outArray = new int[1];
+                mOut.copyTo(outArray);
+                mResult = outArray[0];
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_int(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private int mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_int2 {
+        public Int2 get() {
+            if (!mGotResult) {
+                int[] outArray = new int[2];
+                mOut.copyTo(outArray);
+                mResult = new Int2(outArray[0], outArray[1]);
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_int2(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Int2 mResult;
+    }
+
+    private final static int mExportReduceIdx_addint = 0;
+    // in1 = "val"
+    public result_int reduce_addint(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_addint(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_addint(Allocation ain1) {
+        return reduce_addint(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_addint(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_addint, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_mpyint = 1;
+    // in1 = "val"
+    public result_int reduce_mpyint(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_mpyint(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_mpyint(Allocation ain1) {
+        return reduce_mpyint(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_mpyint(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_mpyint, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_dp = 2;
+    // in1 = "in1"
+    // in2 = "in2"
+    public result_float reduce_dp(float[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_float result = reduce_dp(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float in1"
+    // ain2 = "float in2"
+    public result_float reduce_dp(Allocation ain1, Allocation ain2) {
+        return reduce_dp(ain1, ain2, null);
+    }
+
+    // ain1 = "float in1"
+    // ain2 = "float in2"
+    public result_float reduce_dp(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __F32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_dp, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_float(aout);
+    }
+
+    private final static int mExportReduceIdx_findMinAndMax = 3;
+    // in1 = "in"
+    public result_int2 reduce_findMinAndMax(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int2 result = reduce_findMinAndMax(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float in"
+    public result_int2 reduce_findMinAndMax(Allocation ain1) {
+        return reduce_findMinAndMax(ain1, null);
+    }
+
+    // ain1 = "float in"
+    public result_int2 reduce_findMinAndMax(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32_2, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_findMinAndMax, new Allocation[]{ain1}, aout, sc);
+        return new result_int2(aout);
+    }
+
+    private final static int mExportReduceIdx_fz = 4;
+    // in1 = "inVal"
+    public result_int reduce_fz(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_fz(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int inVal"
+    public result_int reduce_fz(Allocation ain1) {
+        return reduce_fz(ain1, null);
+    }
+
+    // ain1 = "int inVal"
+    public result_int reduce_fz(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_fz, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_fz2 = 5;
+    // in1 = "inVal"
+    public result_int2 reduce_fz2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int2 result = reduce_fz2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int inVal"
+    public result_int2 reduce_fz2(Allocation ain1) {
+        return reduce_fz2(ain1, null);
+    }
+
+    // ain1 = "int inVal"
+    public result_int2 reduce_fz2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32_2, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_fz2, new Allocation[]{ain1}, aout, sc);
+        return new result_int2(aout);
+    }
+
+    private final static int mExportReduceIdx_histogram = 6;
+    // in1 = "in"
+    public resultArray256_uint reduce_histogram(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray256_uint result = reduce_histogram(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar in"
+    public resultArray256_uint reduce_histogram(Allocation ain1) {
+        return reduce_histogram(ain1, null);
+    }
+
+    // ain1 = "uchar in"
+    public resultArray256_uint reduce_histogram(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __U32, 256);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_histogram, new Allocation[]{ain1}, aout, sc);
+        return new resultArray256_uint(aout);
+    }
+
+    private final static int mExportReduceIdx_mode = 7;
+    // in1 = "in"
+    public result_int2 reduce_mode(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int2 result = reduce_mode(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar in"
+    public result_int2 reduce_mode(Allocation ain1) {
+        return reduce_mode(ain1, null);
+    }
+
+    // ain1 = "uchar in"
+    public result_int2 reduce_mode(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32_2, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_mode, new Allocation[]{ain1}, aout, sc);
+        return new result_int2(aout);
+    }
+
+}
+
diff --git a/slang/tests/P_reduce_general_examples_backward/reduce_general_examples_backward.rs b/slang/tests/P_reduce_general_examples_backward/reduce_general_examples_backward.rs
new file mode 100644
index 0000000..00d3323
--- /dev/null
+++ b/slang/tests/P_reduce_general_examples_backward/reduce_general_examples_backward.rs
@@ -0,0 +1,148 @@
+// -target-api 0 -Wall -Werror
+#pragma version(1)
+#pragma rs java_package_name(examples)
+
+// Same as reduce_general_examples.rs, except this test case places
+// the pragmas after the functions (backward reference), and the other
+// test case places the pragmas before the functions (forward
+// reference).
+
+/////////////////////////////////////////////////////////////////////////
+
+static void aiAccum(int *accum, int val) { *accum += val; }
+
+#pragma rs reduce(addint) \
+  accumulator(aiAccum)
+
+/////////////////////////////////////////////////////////////////////////
+
+static void mpyInit(int *accum) { *accum = 1; }
+
+static void mpyAccum(int *accum, int val) { *accum *= val; }
+
+#pragma rs reduce(mpyint) \
+  initializer(mpyInit) accumulator(mpyAccum)
+
+/////////////////////////////////////////////////////////////////////////
+
+static void dpAccum(float *accum, float in1, float in2) {
+  *accum += in1*in2;
+}
+
+// combiner function
+static void dpSum(float *accum, const float *val) { *accum += *val; }
+
+#pragma rs reduce(dp) \
+  accumulator(dpAccum) combiner(dpSum)
+
+/////////////////////////////////////////////////////////////////////////
+
+// this is just a compilation test
+#define INFINITY 0.0f
+
+typedef struct {
+  float val;
+  int idx;
+} IndexedVal;
+
+typedef struct {
+  IndexedVal min, max;
+} MinAndMax;
+
+static void fMMInit(MinAndMax *accum) {
+  static const MinAndMax r = { { INFINITY, -1 }, { -INFINITY, -1 } };
+  *accum = r;
+}
+
+static void fMMAccumulator(MinAndMax *accum, float in, int x) {
+  IndexedVal me;
+  me.val = in;
+  me.idx = x;
+
+  if (me.val < accum->min.val)
+    accum->min = me;
+  if (me.val > accum->max.val)
+    accum->max = me;
+}
+
+static void fMMCombiner(MinAndMax *accum,
+                        const MinAndMax *val) {
+  fMMAccumulator(accum, val->min.val, val->min.idx);
+  fMMAccumulator(accum, val->max.val, val->max.idx);
+}
+
+static void fMMOutConverter(int2 *result,
+                            const MinAndMax *val) {
+  result->x = val->min.idx;
+  result->y = val->max.idx;
+}
+
+#pragma rs reduce(findMinAndMax) \
+  initializer(fMMInit) accumulator(fMMAccumulator) \
+  combiner(fMMCombiner) outconverter(fMMOutConverter)
+
+/////////////////////////////////////////////////////////////////////////
+
+static void fzInit(int *accumIdx) { *accumIdx = -1; }
+
+static void fzAccum(int *accumIdx,
+                    int inVal, int x /* special arg */) {
+  if (inVal==0) *accumIdx = x;
+}
+
+static void fzCombine(int *accumIdx, const int *accumIdx2) {
+  if (*accumIdx2 >= 0) *accumIdx = *accumIdx2;
+}
+
+#pragma rs reduce(fz) \
+  initializer(fzInit) \
+  accumulator(fzAccum) combiner(fzCombine)
+
+/////////////////////////////////////////////////////////////////////////
+
+static void fz2Init(int2 *accum) { accum->x = accum->y = -1; }
+
+static void fz2Accum(int2 *accum,
+                     int inVal,
+                     int x /* special arg */,
+                     int y /* special arg */) {
+  if (inVal==0) {
+    accum->x = x;
+    accum->y = y;
+  }
+}
+
+static void fz2Combine(int2 *accum, const int2 *accum2) {
+  if (accum2->x >= 0) *accum = *accum2;
+}
+
+#pragma rs reduce(fz2) \
+  initializer(fz2Init) \
+  accumulator(fz2Accum) combiner(fz2Combine)
+
+/////////////////////////////////////////////////////////////////////////
+
+#define BUCKETS 256
+typedef uint32_t Histogram[BUCKETS];
+
+static void hsgAccum(Histogram *h, uchar in) { ++(*h)[in]; }
+
+static void hsgCombine(Histogram *accum, const Histogram *addend) {
+  for (int i = 0; i < BUCKETS; ++i)
+    (*accum)[i] += (*addend)[i];
+}
+
+#pragma rs reduce(histogram) \
+  accumulator(hsgAccum) combiner(hsgCombine)
+
+static void modeOutConvert(int2 *result, const Histogram *h) {
+  uint32_t mode = 0;
+  for (int i = 1; i < BUCKETS; ++i)
+    if ((*h)[i] > (*h)[mode]) mode = i;
+  result->x = mode;
+  result->y = (*h)[mode];
+}
+
+#pragma rs reduce(mode) \
+  accumulator(hsgAccum) combiner(hsgCombine) \
+  outconverter(modeOutConvert)
diff --git a/slang/tests/P_reduce_general_examples_backward/stderr.txt.expect b/slang/tests/P_reduce_general_examples_backward/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_reduce_general_examples_backward/stderr.txt.expect
diff --git a/slang/tests/P_reduce_general_examples_backward/stdout.txt.expect b/slang/tests/P_reduce_general_examples_backward/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_reduce_general_examples_backward/stdout.txt.expect
diff --git a/slang/tests/P_reduce_general_examples_explicit/ScriptC_reduce_general_examples_explicit.java.expect b/slang/tests/P_reduce_general_examples_explicit/ScriptC_reduce_general_examples_explicit.java.expect
new file mode 100644
index 0000000..013838e
--- /dev/null
+++ b/slang/tests/P_reduce_general_examples_explicit/ScriptC_reduce_general_examples_explicit.java.expect
@@ -0,0 +1,360 @@
+/*
+ * Copyright (C) 2011-2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * This file is auto-generated. DO NOT MODIFY!
+ * The source Renderscript file: reduce_general_examples_explicit.rs
+ */
+
+package examples;
+
+import android.renderscript.*;
+import examples.reduce_general_examples_explicitBitCode;
+
+/**
+ * @hide
+ */
+public class ScriptC_reduce_general_examples_explicit extends ScriptC {
+    private static final String __rs_resource_name = "reduce_general_examples_explicit";
+    // Constructor
+    public  ScriptC_reduce_general_examples_explicit(RenderScript rs) {
+        super(rs,
+              __rs_resource_name,
+              reduce_general_examples_explicitBitCode.getBitCode32(),
+              reduce_general_examples_explicitBitCode.getBitCode64());
+        mRSLocal = rs;
+        __I32 = Element.I32(rs);
+        __F32 = Element.F32(rs);
+        __U32 = Element.U32(rs);
+        __U8 = Element.U8(rs);
+    }
+
+    private Element __F32;
+    private Element __I32;
+    private Element __U32;
+    private Element __U8;
+    private RenderScript mRSLocal;
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray256_uint {
+        public long[] get() {
+            if (!mGotResult) {
+                int[] outArray = new int[256];
+                mOut.copyTo(outArray);
+                long[] result = new long[256];
+                for (int Idx = 0; Idx < 256; ++Idx) {
+                    result[Idx] = ((long) ((outArray[Idx]) & 0xffffffffL));
+                }
+
+                mResult = result;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray256_uint(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private long[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_float {
+        public float get() {
+            if (!mGotResult) {
+                float[] outArray = new float[1];
+                mOut.copyTo(outArray);
+                mResult = outArray[0];
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_float(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private float mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_int {
+        public int get() {
+            if (!mGotResult) {
+                int[] outArray = new int[1];
+                mOut.copyTo(outArray);
+                mResult = outArray[0];
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_int(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private int mResult;
+    }
+
+    private final static int mExportReduceIdx_addint_init = 0;
+    // in1 = "val"
+    public result_int reduce_addint_init(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_addint_init(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_addint_init(Allocation ain1) {
+        return reduce_addint_init(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_addint_init(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_addint_init, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_addint_comb = 1;
+    // in1 = "val"
+    public result_int reduce_addint_comb(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_addint_comb(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_addint_comb(Allocation ain1) {
+        return reduce_addint_comb(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_addint_comb(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_addint_comb, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_addint_init_comb = 2;
+    // in1 = "val"
+    public result_int reduce_addint_init_comb(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_addint_init_comb(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_addint_init_comb(Allocation ain1) {
+        return reduce_addint_init_comb(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_addint_init_comb(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_addint_init_comb, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_dp_init = 3;
+    // in1 = "in1"
+    // in2 = "in2"
+    public result_float reduce_dp_init(float[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_float result = reduce_dp_init(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float in1"
+    // ain2 = "float in2"
+    public result_float reduce_dp_init(Allocation ain1, Allocation ain2) {
+        return reduce_dp_init(ain1, ain2, null);
+    }
+
+    // ain1 = "float in1"
+    // ain2 = "float in2"
+    public result_float reduce_dp_init(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __F32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_dp_init, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_float(aout);
+    }
+
+    private final static int mExportReduceIdx_histogram_init = 4;
+    // in1 = "in"
+    public resultArray256_uint reduce_histogram_init(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray256_uint result = reduce_histogram_init(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar in"
+    public resultArray256_uint reduce_histogram_init(Allocation ain1) {
+        return reduce_histogram_init(ain1, null);
+    }
+
+    // ain1 = "uchar in"
+    public resultArray256_uint reduce_histogram_init(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __U32, 256);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_histogram_init, new Allocation[]{ain1}, aout, sc);
+        return new resultArray256_uint(aout);
+    }
+
+}
+
diff --git a/slang/tests/P_reduce_general_examples_explicit/reduce_general_examples_explicit.rs b/slang/tests/P_reduce_general_examples_explicit/reduce_general_examples_explicit.rs
new file mode 100644
index 0000000..bd76c8e
--- /dev/null
+++ b/slang/tests/P_reduce_general_examples_explicit/reduce_general_examples_explicit.rs
@@ -0,0 +1,71 @@
+// -Wall -Werror
+#pragma version(1)
+#pragma rs java_package_name(examples)
+
+// These are alternative versions of some of the test cases from
+// reduce_general_examples.rs, except that this test case contains
+// explicit definitions for functions that were omitted from the other
+// test case.
+
+/////////////////////////////////////////////////////////////////////////
+
+#pragma rs reduce(addint_init) \
+  initializer(aiiInit) accumulator(aiiAccum)
+
+static void aiiInit(int *accum) { *accum = 0; } // unnecessary
+
+static void aiiAccum(int *accum, int val) { *accum += val; }
+
+/////////////////////////////////////////////////////////////////////////
+
+#pragma rs reduce(addint_comb) \
+  accumulator(aicAccum) combiner(aicComb)
+
+static void aicAccum(int *accum, int val) { *accum += val; }
+
+static void aicComb(int *accum, const int *other) { *accum += *other; } // unnecessary
+
+/////////////////////////////////////////////////////////////////////////
+
+#pragma rs reduce(addint_init_comb) \
+  initializer(aiicInit) accumulator(aiicAccum) combiner(aiicComb)
+
+static void aiicInit(int *accum) { *accum = 0; } // unnecessary
+
+static void aiicAccum(int *accum, int val) { *accum += val; }
+
+static void aiicComb(int *accum, const int *other) { *accum += *other; } // unnecessary
+
+/////////////////////////////////////////////////////////////////////////
+
+#pragma rs reduce(dp_init) \
+  initializer(dpiInit) accumulator(dpiAccum) combiner(dpiSum)
+
+static void dpiInit(float *accum) { *accum = 0.0f; } // unnecessary
+
+static void dpiAccum(float *accum, float in1, float in2) {
+  *accum += in1*in2;
+}
+
+// combiner function
+static void dpiSum(float *accum, const float *val) { *accum += *val; }
+
+/////////////////////////////////////////////////////////////////////////
+
+#pragma rs reduce(histogram_init) \
+  initializer(hsgiInit) accumulator(hsgiAccum) combiner(hsgiCombine)
+
+#define BUCKETS 256
+typedef uint32_t Histogram[BUCKETS];
+
+static void hsgiInit(Histogram *h) {
+  for (int i = 0; i < BUCKETS; ++i)
+    (*h)[i] = 0;
+}
+
+static void hsgiAccum(Histogram *h, uchar in) { ++(*h)[in]; }
+
+static void hsgiCombine(Histogram *accum, const Histogram *addend) {
+  for (int i = 0; i < BUCKETS; ++i)
+    (*accum)[i] += (*addend)[i];
+}
diff --git a/slang/tests/P_reduce_general_examples_explicit/stderr.txt.expect b/slang/tests/P_reduce_general_examples_explicit/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_reduce_general_examples_explicit/stderr.txt.expect
diff --git a/slang/tests/P_reduce_general_examples_explicit/stdout.txt.expect b/slang/tests/P_reduce_general_examples_explicit/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_reduce_general_examples_explicit/stdout.txt.expect
diff --git a/slang/tests/P_reduce_general_examples_halter/ScriptC_reduce_general_examples_halter.java.expect b/slang/tests/P_reduce_general_examples_halter/ScriptC_reduce_general_examples_halter.java.expect
new file mode 100644
index 0000000..0b2f3da
--- /dev/null
+++ b/slang/tests/P_reduce_general_examples_halter/ScriptC_reduce_general_examples_halter.java.expect
@@ -0,0 +1,185 @@
+/*
+ * Copyright (C) 2011-2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * This file is auto-generated. DO NOT MODIFY!
+ * The source Renderscript file: reduce_general_examples_halter.rs
+ */
+
+package examples;
+
+import android.renderscript.*;
+import examples.reduce_general_examples_halterBitCode;
+
+/**
+ * @hide
+ */
+public class ScriptC_reduce_general_examples_halter extends ScriptC {
+    private static final String __rs_resource_name = "reduce_general_examples_halter";
+    // Constructor
+    public  ScriptC_reduce_general_examples_halter(RenderScript rs) {
+        super(rs,
+              __rs_resource_name,
+              reduce_general_examples_halterBitCode.getBitCode32(),
+              reduce_general_examples_halterBitCode.getBitCode64());
+        mRSLocal = rs;
+        __I32 = Element.I32(rs);
+        __I32_2 = Element.I32_2(rs);
+    }
+
+    private Element __I32;
+    private Element __I32_2;
+    private RenderScript mRSLocal;
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_int {
+        public int get() {
+            if (!mGotResult) {
+                int[] outArray = new int[1];
+                mOut.copyTo(outArray);
+                mResult = outArray[0];
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_int(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private int mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_int2 {
+        public Int2 get() {
+            if (!mGotResult) {
+                int[] outArray = new int[2];
+                mOut.copyTo(outArray);
+                mResult = new Int2(outArray[0], outArray[1]);
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_int2(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Int2 mResult;
+    }
+
+    private final static int mExportReduceIdx_fz = 0;
+    // in1 = "inVal"
+    public result_int reduce_fz(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_fz(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int inVal"
+    public result_int reduce_fz(Allocation ain1) {
+        return reduce_fz(ain1, null);
+    }
+
+    // ain1 = "int inVal"
+    public result_int reduce_fz(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_fz, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_fz2 = 1;
+    // in1 = "inVal"
+    public result_int2 reduce_fz2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int2 result = reduce_fz2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int inVal"
+    public result_int2 reduce_fz2(Allocation ain1) {
+        return reduce_fz2(ain1, null);
+    }
+
+    // ain1 = "int inVal"
+    public result_int2 reduce_fz2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32_2, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_fz2, new Allocation[]{ain1}, aout, sc);
+        return new result_int2(aout);
+    }
+
+}
+
diff --git a/slang/tests/P_reduce_general_examples_halter/reduce_general_examples_halter.rs b/slang/tests/P_reduce_general_examples_halter/reduce_general_examples_halter.rs
new file mode 100644
index 0000000..8e35fe0
--- /dev/null
+++ b/slang/tests/P_reduce_general_examples_halter/reduce_general_examples_halter.rs
@@ -0,0 +1,54 @@
+// -Wall -Werror -target-api 0
+#pragma version(1)
+#pragma rs java_package_name(examples)
+
+/////////////////////////////////////////////////////////////////////////
+
+#pragma rs reduce(fz) \
+  initializer(fzInit) \
+  accumulator(fzAccum) combiner(fzCombine) \
+  halter(fzFound)
+
+static void fzInit(int *accumIdx) { *accumIdx = -1; }
+
+static void fzAccum(int *accumIdx,
+                    int inVal, int x /* special arg */) {
+  if (inVal==0) *accumIdx = x;
+}
+
+static void fzCombine(int *accumIdx, const int *accumIdx2) {
+  if (*accumIdx2 >= 0) *accumIdx = *accumIdx2;
+}
+
+// halter function
+static bool fzFound(const int *accumIdx) {
+  return *accumIdx >= 0;
+}
+
+/////////////////////////////////////////////////////////////////////////
+
+#pragma rs reduce(fz2) \
+  initializer(fz2Init) \
+  accumulator(fz2Accum) combiner(fz2Combine) \
+  halter(fz2Found)
+
+static void fz2Init(int2 *accum) { accum->x = accum->y = -1; }
+
+static void fz2Accum(int2 *accum,
+                     int inVal,
+                     int x /* special arg */,
+                     int y /* special arg */) {
+  if (inVal==0) {
+    accum->x = x;
+    accum->y = y;
+  }
+}
+
+static void fz2Combine(int2 *accum, const int2 *accum2) {
+  if (accum2->x >= 0) *accum = *accum2;
+}
+
+// halter function
+static bool fz2Found(const int2 *accum) {
+  return accum->x >= 0;
+}
diff --git a/slang/tests/P_reduce_general_examples_halter/stderr.txt.expect b/slang/tests/P_reduce_general_examples_halter/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_reduce_general_examples_halter/stderr.txt.expect
diff --git a/slang/tests/P_reduce_general_examples_halter/stdout.txt.expect b/slang/tests/P_reduce_general_examples_halter/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_reduce_general_examples_halter/stdout.txt.expect
diff --git a/slang/tests/P_reduce_general_input/ScriptC_reduce_general_input.java.expect b/slang/tests/P_reduce_general_input/ScriptC_reduce_general_input.java.expect
new file mode 100644
index 0000000..bc151f1
--- /dev/null
+++ b/slang/tests/P_reduce_general_input/ScriptC_reduce_general_input.java.expect
@@ -0,0 +1,20517 @@
+/*
+ * Copyright (C) 2011-2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * This file is auto-generated. DO NOT MODIFY!
+ * The source Renderscript file: reduce_general_input.rs
+ */
+
+package input;
+
+import android.renderscript.*;
+import input.reduce_general_inputBitCode;
+
+/**
+ * @hide
+ */
+public class ScriptC_reduce_general_input extends ScriptC {
+    private static final String __rs_resource_name = "reduce_general_input";
+    // Constructor
+    public  ScriptC_reduce_general_input(RenderScript rs) {
+        super(rs,
+              __rs_resource_name,
+              reduce_general_inputBitCode.getBitCode32(),
+              reduce_general_inputBitCode.getBitCode64());
+        mRSLocal = rs;
+        __I32 = Element.I32(rs);
+        __F16 = Element.F16(rs);
+        __F16_2 = Element.F16_2(rs);
+        __F16_4 = Element.F16_4(rs);
+        __F32 = Element.F32(rs);
+        __F32_2 = Element.F32_2(rs);
+        __F32_4 = Element.F32_4(rs);
+        __F64 = Element.F64(rs);
+        __F64_2 = Element.F64_2(rs);
+        __F64_4 = Element.F64_4(rs);
+        __I8 = Element.I8(rs);
+        __I8_2 = Element.I8_2(rs);
+        __I8_4 = Element.I8_4(rs);
+        __I16 = Element.I16(rs);
+        __I16_2 = Element.I16_2(rs);
+        __I16_4 = Element.I16_4(rs);
+        __I32_2 = Element.I32_2(rs);
+        __I32_4 = Element.I32_4(rs);
+        __I64 = Element.I64(rs);
+        __I64_2 = Element.I64_2(rs);
+        __I64_4 = Element.I64_4(rs);
+        __U8 = Element.U8(rs);
+        __U8_2 = Element.U8_2(rs);
+        __U8_4 = Element.U8_4(rs);
+        __U16 = Element.U16(rs);
+        __U16_2 = Element.U16_2(rs);
+        __U16_4 = Element.U16_4(rs);
+        __U32 = Element.U32(rs);
+        __U32_2 = Element.U32_2(rs);
+        __U32_4 = Element.U32_4(rs);
+        __U64 = Element.U64(rs);
+        __U64_2 = Element.U64_2(rs);
+        __U64_4 = Element.U64_4(rs);
+        __BOOLEAN = Element.BOOLEAN(rs);
+        __ScriptField_MyStruct = ScriptField_MyStruct.createElement(rs);
+    }
+
+    private Element __BOOLEAN;
+    private Element __F16;
+    private Element __F16_2;
+    private Element __F16_4;
+    private Element __F32;
+    private Element __F32_2;
+    private Element __F32_4;
+    private Element __F64;
+    private Element __F64_2;
+    private Element __F64_4;
+    private Element __I16;
+    private Element __I16_2;
+    private Element __I16_4;
+    private Element __I32;
+    private Element __I32_2;
+    private Element __I32_4;
+    private Element __I64;
+    private Element __I64_2;
+    private Element __I64_4;
+    private Element __I8;
+    private Element __I8_2;
+    private Element __I8_4;
+    private Element __ScriptField_MyStruct;
+    private Element __U16;
+    private Element __U16_2;
+    private Element __U16_4;
+    private Element __U32;
+    private Element __U32_2;
+    private Element __U32_4;
+    private Element __U64;
+    private Element __U64_2;
+    private Element __U64_4;
+    private Element __U8;
+    private Element __U8_2;
+    private Element __U8_4;
+    private RenderScript mRSLocal;
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_int {
+        public int get() {
+            if (!mGotResult) {
+                int[] outArray = new int[1];
+                mOut.copyTo(outArray);
+                mResult = outArray[0];
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_int(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private int mResult;
+    }
+
+    private final static int mExportReduceIdx_my_half_0 = 0;
+    // in1 = "in"
+    public result_int reduce_my_half_0(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_0(Allocation ain1) {
+        return reduce_my_half_0(ain1, null);
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_1 = 1;
+    // in1 = "in"
+    public result_int reduce_my_half_1(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_1(Allocation ain1) {
+        return reduce_my_half_1(ain1, null);
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_2 = 2;
+    // in1 = "in"
+    public result_int reduce_my_half_2(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_2(Allocation ain1) {
+        return reduce_my_half_2(ain1, null);
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_3 = 3;
+    // in1 = "in"
+    public result_int reduce_my_half_3(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_3(Allocation ain1) {
+        return reduce_my_half_3(ain1, null);
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_4 = 4;
+    // in1 = "in"
+    public result_int reduce_my_half_4(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_4(Allocation ain1) {
+        return reduce_my_half_4(ain1, null);
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_5 = 5;
+    // in1 = "in"
+    public result_int reduce_my_half_5(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_5(Allocation ain1) {
+        return reduce_my_half_5(ain1, null);
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_6 = 6;
+    // in1 = "in"
+    public result_int reduce_my_half_6(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_6(Allocation ain1) {
+        return reduce_my_half_6(ain1, null);
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_7 = 7;
+    // in1 = "in"
+    public result_int reduce_my_half_7(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_7(Allocation ain1) {
+        return reduce_my_half_7(ain1, null);
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_8 = 8;
+    // in1 = "in"
+    public result_int reduce_my_half_8(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_8(Allocation ain1) {
+        return reduce_my_half_8(ain1, null);
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_9 = 9;
+    // in1 = "in"
+    public result_int reduce_my_half_9(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_9(Allocation ain1) {
+        return reduce_my_half_9(ain1, null);
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_10 = 10;
+    // in1 = "in"
+    public result_int reduce_my_half_10(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_10(Allocation ain1) {
+        return reduce_my_half_10(ain1, null);
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_11 = 11;
+    // in1 = "in"
+    public result_int reduce_my_half_11(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_11(Allocation ain1) {
+        return reduce_my_half_11(ain1, null);
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_12 = 12;
+    // in1 = "in"
+    public result_int reduce_my_half_12(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_12(Allocation ain1) {
+        return reduce_my_half_12(ain1, null);
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_13 = 13;
+    // in1 = "in"
+    public result_int reduce_my_half_13(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_13(Allocation ain1) {
+        return reduce_my_half_13(ain1, null);
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_14 = 14;
+    // in1 = "in"
+    public result_int reduce_my_half_14(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_14(Allocation ain1) {
+        return reduce_my_half_14(ain1, null);
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_15 = 15;
+    // in1 = "in"
+    public result_int reduce_my_half_15(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_15(Allocation ain1) {
+        return reduce_my_half_15(ain1, null);
+    }
+
+    // ain1 = "half in"
+    public result_int reduce_my_half_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_0 = 16;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_half2_0(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half2_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_0(Allocation ain1) {
+        return reduce_my_half2_0(ain1, null);
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_1 = 17;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_half2_1(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half2_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_1(Allocation ain1) {
+        return reduce_my_half2_1(ain1, null);
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_2 = 18;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_half2_2(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half2_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_2(Allocation ain1) {
+        return reduce_my_half2_2(ain1, null);
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_3 = 19;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_half2_3(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half2_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_3(Allocation ain1) {
+        return reduce_my_half2_3(ain1, null);
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_4 = 20;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_half2_4(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half2_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_4(Allocation ain1) {
+        return reduce_my_half2_4(ain1, null);
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_5 = 21;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_half2_5(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half2_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_5(Allocation ain1) {
+        return reduce_my_half2_5(ain1, null);
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_6 = 22;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_half2_6(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half2_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_6(Allocation ain1) {
+        return reduce_my_half2_6(ain1, null);
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_7 = 23;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_half2_7(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half2_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_7(Allocation ain1) {
+        return reduce_my_half2_7(ain1, null);
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_8 = 24;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_half2_8(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half2_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_8(Allocation ain1) {
+        return reduce_my_half2_8(ain1, null);
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_9 = 25;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_half2_9(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half2_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_9(Allocation ain1) {
+        return reduce_my_half2_9(ain1, null);
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_10 = 26;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_half2_10(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half2_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_10(Allocation ain1) {
+        return reduce_my_half2_10(ain1, null);
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_11 = 27;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_half2_11(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half2_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_11(Allocation ain1) {
+        return reduce_my_half2_11(ain1, null);
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_12 = 28;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_half2_12(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half2_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_12(Allocation ain1) {
+        return reduce_my_half2_12(ain1, null);
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_13 = 29;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_half2_13(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half2_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_13(Allocation ain1) {
+        return reduce_my_half2_13(ain1, null);
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_14 = 30;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_half2_14(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half2_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_14(Allocation ain1) {
+        return reduce_my_half2_14(ain1, null);
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_15 = 31;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_half2_15(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half2_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_15(Allocation ain1) {
+        return reduce_my_half2_15(ain1, null);
+    }
+
+    // ain1 = "half2 in"
+    public result_int reduce_my_half2_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_0 = 32;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_half4_0(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half4_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_0(Allocation ain1) {
+        return reduce_my_half4_0(ain1, null);
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_1 = 33;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_half4_1(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half4_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_1(Allocation ain1) {
+        return reduce_my_half4_1(ain1, null);
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_2 = 34;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_half4_2(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half4_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_2(Allocation ain1) {
+        return reduce_my_half4_2(ain1, null);
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_3 = 35;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_half4_3(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half4_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_3(Allocation ain1) {
+        return reduce_my_half4_3(ain1, null);
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_4 = 36;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_half4_4(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half4_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_4(Allocation ain1) {
+        return reduce_my_half4_4(ain1, null);
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_5 = 37;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_half4_5(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half4_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_5(Allocation ain1) {
+        return reduce_my_half4_5(ain1, null);
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_6 = 38;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_half4_6(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half4_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_6(Allocation ain1) {
+        return reduce_my_half4_6(ain1, null);
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_7 = 39;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_half4_7(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half4_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_7(Allocation ain1) {
+        return reduce_my_half4_7(ain1, null);
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_8 = 40;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_half4_8(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half4_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_8(Allocation ain1) {
+        return reduce_my_half4_8(ain1, null);
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_9 = 41;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_half4_9(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half4_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_9(Allocation ain1) {
+        return reduce_my_half4_9(ain1, null);
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_10 = 42;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_half4_10(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half4_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_10(Allocation ain1) {
+        return reduce_my_half4_10(ain1, null);
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_11 = 43;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_half4_11(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half4_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_11(Allocation ain1) {
+        return reduce_my_half4_11(ain1, null);
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_12 = 44;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_half4_12(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half4_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_12(Allocation ain1) {
+        return reduce_my_half4_12(ain1, null);
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_13 = 45;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_half4_13(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half4_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_13(Allocation ain1) {
+        return reduce_my_half4_13(ain1, null);
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_14 = 46;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_half4_14(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half4_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_14(Allocation ain1) {
+        return reduce_my_half4_14(ain1, null);
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_15 = 47;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_half4_15(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_half4_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_15(Allocation ain1) {
+        return reduce_my_half4_15(ain1, null);
+    }
+
+    // ain1 = "half4 in"
+    public result_int reduce_my_half4_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_0 = 48;
+    // in1 = "in"
+    public result_int reduce_my_float_0(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_0(Allocation ain1) {
+        return reduce_my_float_0(ain1, null);
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_1 = 49;
+    // in1 = "in"
+    public result_int reduce_my_float_1(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_1(Allocation ain1) {
+        return reduce_my_float_1(ain1, null);
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_2 = 50;
+    // in1 = "in"
+    public result_int reduce_my_float_2(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_2(Allocation ain1) {
+        return reduce_my_float_2(ain1, null);
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_3 = 51;
+    // in1 = "in"
+    public result_int reduce_my_float_3(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_3(Allocation ain1) {
+        return reduce_my_float_3(ain1, null);
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_4 = 52;
+    // in1 = "in"
+    public result_int reduce_my_float_4(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_4(Allocation ain1) {
+        return reduce_my_float_4(ain1, null);
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_5 = 53;
+    // in1 = "in"
+    public result_int reduce_my_float_5(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_5(Allocation ain1) {
+        return reduce_my_float_5(ain1, null);
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_6 = 54;
+    // in1 = "in"
+    public result_int reduce_my_float_6(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_6(Allocation ain1) {
+        return reduce_my_float_6(ain1, null);
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_7 = 55;
+    // in1 = "in"
+    public result_int reduce_my_float_7(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_7(Allocation ain1) {
+        return reduce_my_float_7(ain1, null);
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_8 = 56;
+    // in1 = "in"
+    public result_int reduce_my_float_8(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_8(Allocation ain1) {
+        return reduce_my_float_8(ain1, null);
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_9 = 57;
+    // in1 = "in"
+    public result_int reduce_my_float_9(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_9(Allocation ain1) {
+        return reduce_my_float_9(ain1, null);
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_10 = 58;
+    // in1 = "in"
+    public result_int reduce_my_float_10(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_10(Allocation ain1) {
+        return reduce_my_float_10(ain1, null);
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_11 = 59;
+    // in1 = "in"
+    public result_int reduce_my_float_11(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_11(Allocation ain1) {
+        return reduce_my_float_11(ain1, null);
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_12 = 60;
+    // in1 = "in"
+    public result_int reduce_my_float_12(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_12(Allocation ain1) {
+        return reduce_my_float_12(ain1, null);
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_13 = 61;
+    // in1 = "in"
+    public result_int reduce_my_float_13(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_13(Allocation ain1) {
+        return reduce_my_float_13(ain1, null);
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_14 = 62;
+    // in1 = "in"
+    public result_int reduce_my_float_14(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_14(Allocation ain1) {
+        return reduce_my_float_14(ain1, null);
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_15 = 63;
+    // in1 = "in"
+    public result_int reduce_my_float_15(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_15(Allocation ain1) {
+        return reduce_my_float_15(ain1, null);
+    }
+
+    // ain1 = "float in"
+    public result_int reduce_my_float_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_0 = 64;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_float2_0(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float2_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_0(Allocation ain1) {
+        return reduce_my_float2_0(ain1, null);
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_1 = 65;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_float2_1(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float2_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_1(Allocation ain1) {
+        return reduce_my_float2_1(ain1, null);
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_2 = 66;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_float2_2(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float2_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_2(Allocation ain1) {
+        return reduce_my_float2_2(ain1, null);
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_3 = 67;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_float2_3(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float2_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_3(Allocation ain1) {
+        return reduce_my_float2_3(ain1, null);
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_4 = 68;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_float2_4(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float2_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_4(Allocation ain1) {
+        return reduce_my_float2_4(ain1, null);
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_5 = 69;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_float2_5(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float2_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_5(Allocation ain1) {
+        return reduce_my_float2_5(ain1, null);
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_6 = 70;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_float2_6(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float2_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_6(Allocation ain1) {
+        return reduce_my_float2_6(ain1, null);
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_7 = 71;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_float2_7(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float2_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_7(Allocation ain1) {
+        return reduce_my_float2_7(ain1, null);
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_8 = 72;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_float2_8(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float2_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_8(Allocation ain1) {
+        return reduce_my_float2_8(ain1, null);
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_9 = 73;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_float2_9(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float2_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_9(Allocation ain1) {
+        return reduce_my_float2_9(ain1, null);
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_10 = 74;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_float2_10(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float2_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_10(Allocation ain1) {
+        return reduce_my_float2_10(ain1, null);
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_11 = 75;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_float2_11(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float2_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_11(Allocation ain1) {
+        return reduce_my_float2_11(ain1, null);
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_12 = 76;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_float2_12(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float2_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_12(Allocation ain1) {
+        return reduce_my_float2_12(ain1, null);
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_13 = 77;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_float2_13(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float2_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_13(Allocation ain1) {
+        return reduce_my_float2_13(ain1, null);
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_14 = 78;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_float2_14(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float2_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_14(Allocation ain1) {
+        return reduce_my_float2_14(ain1, null);
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_15 = 79;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_float2_15(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float2_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_15(Allocation ain1) {
+        return reduce_my_float2_15(ain1, null);
+    }
+
+    // ain1 = "float2 in"
+    public result_int reduce_my_float2_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_0 = 80;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_float4_0(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float4_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_0(Allocation ain1) {
+        return reduce_my_float4_0(ain1, null);
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_1 = 81;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_float4_1(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float4_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_1(Allocation ain1) {
+        return reduce_my_float4_1(ain1, null);
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_2 = 82;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_float4_2(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float4_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_2(Allocation ain1) {
+        return reduce_my_float4_2(ain1, null);
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_3 = 83;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_float4_3(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float4_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_3(Allocation ain1) {
+        return reduce_my_float4_3(ain1, null);
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_4 = 84;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_float4_4(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float4_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_4(Allocation ain1) {
+        return reduce_my_float4_4(ain1, null);
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_5 = 85;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_float4_5(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float4_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_5(Allocation ain1) {
+        return reduce_my_float4_5(ain1, null);
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_6 = 86;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_float4_6(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float4_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_6(Allocation ain1) {
+        return reduce_my_float4_6(ain1, null);
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_7 = 87;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_float4_7(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float4_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_7(Allocation ain1) {
+        return reduce_my_float4_7(ain1, null);
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_8 = 88;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_float4_8(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float4_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_8(Allocation ain1) {
+        return reduce_my_float4_8(ain1, null);
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_9 = 89;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_float4_9(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float4_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_9(Allocation ain1) {
+        return reduce_my_float4_9(ain1, null);
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_10 = 90;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_float4_10(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float4_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_10(Allocation ain1) {
+        return reduce_my_float4_10(ain1, null);
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_11 = 91;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_float4_11(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float4_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_11(Allocation ain1) {
+        return reduce_my_float4_11(ain1, null);
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_12 = 92;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_float4_12(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float4_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_12(Allocation ain1) {
+        return reduce_my_float4_12(ain1, null);
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_13 = 93;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_float4_13(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float4_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_13(Allocation ain1) {
+        return reduce_my_float4_13(ain1, null);
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_14 = 94;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_float4_14(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float4_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_14(Allocation ain1) {
+        return reduce_my_float4_14(ain1, null);
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_15 = 95;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_float4_15(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_float4_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_15(Allocation ain1) {
+        return reduce_my_float4_15(ain1, null);
+    }
+
+    // ain1 = "float4 in"
+    public result_int reduce_my_float4_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double_0 = 96;
+    // in1 = "in"
+    public result_int reduce_my_double_0(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_0(Allocation ain1) {
+        return reduce_my_double_0(ain1, null);
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64)) {
+            throw new RSRuntimeException("Type mismatch with F64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double_1 = 97;
+    // in1 = "in"
+    public result_int reduce_my_double_1(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_1(Allocation ain1) {
+        return reduce_my_double_1(ain1, null);
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64)) {
+            throw new RSRuntimeException("Type mismatch with F64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double_2 = 98;
+    // in1 = "in"
+    public result_int reduce_my_double_2(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_2(Allocation ain1) {
+        return reduce_my_double_2(ain1, null);
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64)) {
+            throw new RSRuntimeException("Type mismatch with F64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double_3 = 99;
+    // in1 = "in"
+    public result_int reduce_my_double_3(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_3(Allocation ain1) {
+        return reduce_my_double_3(ain1, null);
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64)) {
+            throw new RSRuntimeException("Type mismatch with F64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double_4 = 100;
+    // in1 = "in"
+    public result_int reduce_my_double_4(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_4(Allocation ain1) {
+        return reduce_my_double_4(ain1, null);
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64)) {
+            throw new RSRuntimeException("Type mismatch with F64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double_5 = 101;
+    // in1 = "in"
+    public result_int reduce_my_double_5(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_5(Allocation ain1) {
+        return reduce_my_double_5(ain1, null);
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64)) {
+            throw new RSRuntimeException("Type mismatch with F64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double_6 = 102;
+    // in1 = "in"
+    public result_int reduce_my_double_6(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_6(Allocation ain1) {
+        return reduce_my_double_6(ain1, null);
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64)) {
+            throw new RSRuntimeException("Type mismatch with F64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double_7 = 103;
+    // in1 = "in"
+    public result_int reduce_my_double_7(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_7(Allocation ain1) {
+        return reduce_my_double_7(ain1, null);
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64)) {
+            throw new RSRuntimeException("Type mismatch with F64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double_8 = 104;
+    // in1 = "in"
+    public result_int reduce_my_double_8(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_8(Allocation ain1) {
+        return reduce_my_double_8(ain1, null);
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64)) {
+            throw new RSRuntimeException("Type mismatch with F64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double_9 = 105;
+    // in1 = "in"
+    public result_int reduce_my_double_9(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_9(Allocation ain1) {
+        return reduce_my_double_9(ain1, null);
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64)) {
+            throw new RSRuntimeException("Type mismatch with F64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double_10 = 106;
+    // in1 = "in"
+    public result_int reduce_my_double_10(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_10(Allocation ain1) {
+        return reduce_my_double_10(ain1, null);
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64)) {
+            throw new RSRuntimeException("Type mismatch with F64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double_11 = 107;
+    // in1 = "in"
+    public result_int reduce_my_double_11(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_11(Allocation ain1) {
+        return reduce_my_double_11(ain1, null);
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64)) {
+            throw new RSRuntimeException("Type mismatch with F64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double_12 = 108;
+    // in1 = "in"
+    public result_int reduce_my_double_12(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_12(Allocation ain1) {
+        return reduce_my_double_12(ain1, null);
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64)) {
+            throw new RSRuntimeException("Type mismatch with F64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double_13 = 109;
+    // in1 = "in"
+    public result_int reduce_my_double_13(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_13(Allocation ain1) {
+        return reduce_my_double_13(ain1, null);
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64)) {
+            throw new RSRuntimeException("Type mismatch with F64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double_14 = 110;
+    // in1 = "in"
+    public result_int reduce_my_double_14(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_14(Allocation ain1) {
+        return reduce_my_double_14(ain1, null);
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64)) {
+            throw new RSRuntimeException("Type mismatch with F64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double_15 = 111;
+    // in1 = "in"
+    public result_int reduce_my_double_15(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_15(Allocation ain1) {
+        return reduce_my_double_15(ain1, null);
+    }
+
+    // ain1 = "double in"
+    public result_int reduce_my_double_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64)) {
+            throw new RSRuntimeException("Type mismatch with F64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double2_0 = 112;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_double2_0(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double2_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_0(Allocation ain1) {
+        return reduce_my_double2_0(ain1, null);
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_2)) {
+            throw new RSRuntimeException("Type mismatch with F64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double2_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double2_1 = 113;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_double2_1(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double2_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_1(Allocation ain1) {
+        return reduce_my_double2_1(ain1, null);
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_2)) {
+            throw new RSRuntimeException("Type mismatch with F64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double2_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double2_2 = 114;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_double2_2(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double2_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_2(Allocation ain1) {
+        return reduce_my_double2_2(ain1, null);
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_2)) {
+            throw new RSRuntimeException("Type mismatch with F64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double2_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double2_3 = 115;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_double2_3(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double2_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_3(Allocation ain1) {
+        return reduce_my_double2_3(ain1, null);
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_2)) {
+            throw new RSRuntimeException("Type mismatch with F64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double2_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double2_4 = 116;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_double2_4(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double2_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_4(Allocation ain1) {
+        return reduce_my_double2_4(ain1, null);
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_2)) {
+            throw new RSRuntimeException("Type mismatch with F64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double2_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double2_5 = 117;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_double2_5(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double2_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_5(Allocation ain1) {
+        return reduce_my_double2_5(ain1, null);
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_2)) {
+            throw new RSRuntimeException("Type mismatch with F64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double2_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double2_6 = 118;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_double2_6(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double2_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_6(Allocation ain1) {
+        return reduce_my_double2_6(ain1, null);
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_2)) {
+            throw new RSRuntimeException("Type mismatch with F64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double2_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double2_7 = 119;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_double2_7(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double2_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_7(Allocation ain1) {
+        return reduce_my_double2_7(ain1, null);
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_2)) {
+            throw new RSRuntimeException("Type mismatch with F64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double2_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double2_8 = 120;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_double2_8(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double2_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_8(Allocation ain1) {
+        return reduce_my_double2_8(ain1, null);
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_2)) {
+            throw new RSRuntimeException("Type mismatch with F64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double2_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double2_9 = 121;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_double2_9(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double2_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_9(Allocation ain1) {
+        return reduce_my_double2_9(ain1, null);
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_2)) {
+            throw new RSRuntimeException("Type mismatch with F64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double2_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double2_10 = 122;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_double2_10(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double2_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_10(Allocation ain1) {
+        return reduce_my_double2_10(ain1, null);
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_2)) {
+            throw new RSRuntimeException("Type mismatch with F64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double2_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double2_11 = 123;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_double2_11(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double2_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_11(Allocation ain1) {
+        return reduce_my_double2_11(ain1, null);
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_2)) {
+            throw new RSRuntimeException("Type mismatch with F64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double2_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double2_12 = 124;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_double2_12(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double2_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_12(Allocation ain1) {
+        return reduce_my_double2_12(ain1, null);
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_2)) {
+            throw new RSRuntimeException("Type mismatch with F64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double2_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double2_13 = 125;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_double2_13(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double2_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_13(Allocation ain1) {
+        return reduce_my_double2_13(ain1, null);
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_2)) {
+            throw new RSRuntimeException("Type mismatch with F64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double2_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double2_14 = 126;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_double2_14(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double2_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_14(Allocation ain1) {
+        return reduce_my_double2_14(ain1, null);
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_2)) {
+            throw new RSRuntimeException("Type mismatch with F64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double2_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double2_15 = 127;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_double2_15(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double2_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_15(Allocation ain1) {
+        return reduce_my_double2_15(ain1, null);
+    }
+
+    // ain1 = "double2 in"
+    public result_int reduce_my_double2_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_2)) {
+            throw new RSRuntimeException("Type mismatch with F64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double2_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double4_0 = 128;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_double4_0(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double4_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_0(Allocation ain1) {
+        return reduce_my_double4_0(ain1, null);
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_4)) {
+            throw new RSRuntimeException("Type mismatch with F64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double4_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double4_1 = 129;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_double4_1(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double4_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_1(Allocation ain1) {
+        return reduce_my_double4_1(ain1, null);
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_4)) {
+            throw new RSRuntimeException("Type mismatch with F64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double4_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double4_2 = 130;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_double4_2(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double4_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_2(Allocation ain1) {
+        return reduce_my_double4_2(ain1, null);
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_4)) {
+            throw new RSRuntimeException("Type mismatch with F64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double4_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double4_3 = 131;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_double4_3(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double4_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_3(Allocation ain1) {
+        return reduce_my_double4_3(ain1, null);
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_4)) {
+            throw new RSRuntimeException("Type mismatch with F64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double4_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double4_4 = 132;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_double4_4(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double4_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_4(Allocation ain1) {
+        return reduce_my_double4_4(ain1, null);
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_4)) {
+            throw new RSRuntimeException("Type mismatch with F64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double4_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double4_5 = 133;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_double4_5(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double4_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_5(Allocation ain1) {
+        return reduce_my_double4_5(ain1, null);
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_4)) {
+            throw new RSRuntimeException("Type mismatch with F64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double4_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double4_6 = 134;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_double4_6(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double4_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_6(Allocation ain1) {
+        return reduce_my_double4_6(ain1, null);
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_4)) {
+            throw new RSRuntimeException("Type mismatch with F64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double4_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double4_7 = 135;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_double4_7(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double4_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_7(Allocation ain1) {
+        return reduce_my_double4_7(ain1, null);
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_4)) {
+            throw new RSRuntimeException("Type mismatch with F64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double4_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double4_8 = 136;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_double4_8(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double4_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_8(Allocation ain1) {
+        return reduce_my_double4_8(ain1, null);
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_4)) {
+            throw new RSRuntimeException("Type mismatch with F64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double4_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double4_9 = 137;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_double4_9(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double4_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_9(Allocation ain1) {
+        return reduce_my_double4_9(ain1, null);
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_4)) {
+            throw new RSRuntimeException("Type mismatch with F64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double4_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double4_10 = 138;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_double4_10(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double4_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_10(Allocation ain1) {
+        return reduce_my_double4_10(ain1, null);
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_4)) {
+            throw new RSRuntimeException("Type mismatch with F64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double4_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double4_11 = 139;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_double4_11(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double4_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_11(Allocation ain1) {
+        return reduce_my_double4_11(ain1, null);
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_4)) {
+            throw new RSRuntimeException("Type mismatch with F64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double4_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double4_12 = 140;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_double4_12(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double4_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_12(Allocation ain1) {
+        return reduce_my_double4_12(ain1, null);
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_4)) {
+            throw new RSRuntimeException("Type mismatch with F64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double4_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double4_13 = 141;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_double4_13(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double4_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_13(Allocation ain1) {
+        return reduce_my_double4_13(ain1, null);
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_4)) {
+            throw new RSRuntimeException("Type mismatch with F64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double4_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double4_14 = 142;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_double4_14(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double4_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_14(Allocation ain1) {
+        return reduce_my_double4_14(ain1, null);
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_4)) {
+            throw new RSRuntimeException("Type mismatch with F64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double4_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double4_15 = 143;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_double4_15(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_double4_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_15(Allocation ain1) {
+        return reduce_my_double4_15(ain1, null);
+    }
+
+    // ain1 = "double4 in"
+    public result_int reduce_my_double4_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_4)) {
+            throw new RSRuntimeException("Type mismatch with F64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double4_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_0 = 144;
+    // in1 = "in"
+    public result_int reduce_my_char_0(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_0(Allocation ain1) {
+        return reduce_my_char_0(ain1, null);
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_1 = 145;
+    // in1 = "in"
+    public result_int reduce_my_char_1(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_1(Allocation ain1) {
+        return reduce_my_char_1(ain1, null);
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_2 = 146;
+    // in1 = "in"
+    public result_int reduce_my_char_2(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_2(Allocation ain1) {
+        return reduce_my_char_2(ain1, null);
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_3 = 147;
+    // in1 = "in"
+    public result_int reduce_my_char_3(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_3(Allocation ain1) {
+        return reduce_my_char_3(ain1, null);
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_4 = 148;
+    // in1 = "in"
+    public result_int reduce_my_char_4(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_4(Allocation ain1) {
+        return reduce_my_char_4(ain1, null);
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_5 = 149;
+    // in1 = "in"
+    public result_int reduce_my_char_5(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_5(Allocation ain1) {
+        return reduce_my_char_5(ain1, null);
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_6 = 150;
+    // in1 = "in"
+    public result_int reduce_my_char_6(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_6(Allocation ain1) {
+        return reduce_my_char_6(ain1, null);
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_7 = 151;
+    // in1 = "in"
+    public result_int reduce_my_char_7(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_7(Allocation ain1) {
+        return reduce_my_char_7(ain1, null);
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_8 = 152;
+    // in1 = "in"
+    public result_int reduce_my_char_8(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_8(Allocation ain1) {
+        return reduce_my_char_8(ain1, null);
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_9 = 153;
+    // in1 = "in"
+    public result_int reduce_my_char_9(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_9(Allocation ain1) {
+        return reduce_my_char_9(ain1, null);
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_10 = 154;
+    // in1 = "in"
+    public result_int reduce_my_char_10(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_10(Allocation ain1) {
+        return reduce_my_char_10(ain1, null);
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_11 = 155;
+    // in1 = "in"
+    public result_int reduce_my_char_11(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_11(Allocation ain1) {
+        return reduce_my_char_11(ain1, null);
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_12 = 156;
+    // in1 = "in"
+    public result_int reduce_my_char_12(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_12(Allocation ain1) {
+        return reduce_my_char_12(ain1, null);
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_13 = 157;
+    // in1 = "in"
+    public result_int reduce_my_char_13(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_13(Allocation ain1) {
+        return reduce_my_char_13(ain1, null);
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_14 = 158;
+    // in1 = "in"
+    public result_int reduce_my_char_14(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_14(Allocation ain1) {
+        return reduce_my_char_14(ain1, null);
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_15 = 159;
+    // in1 = "in"
+    public result_int reduce_my_char_15(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_15(Allocation ain1) {
+        return reduce_my_char_15(ain1, null);
+    }
+
+    // ain1 = "char in"
+    public result_int reduce_my_char_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_0 = 160;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_char2_0(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char2_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_0(Allocation ain1) {
+        return reduce_my_char2_0(ain1, null);
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_1 = 161;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_char2_1(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char2_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_1(Allocation ain1) {
+        return reduce_my_char2_1(ain1, null);
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_2 = 162;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_char2_2(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char2_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_2(Allocation ain1) {
+        return reduce_my_char2_2(ain1, null);
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_3 = 163;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_char2_3(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char2_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_3(Allocation ain1) {
+        return reduce_my_char2_3(ain1, null);
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_4 = 164;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_char2_4(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char2_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_4(Allocation ain1) {
+        return reduce_my_char2_4(ain1, null);
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_5 = 165;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_char2_5(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char2_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_5(Allocation ain1) {
+        return reduce_my_char2_5(ain1, null);
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_6 = 166;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_char2_6(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char2_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_6(Allocation ain1) {
+        return reduce_my_char2_6(ain1, null);
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_7 = 167;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_char2_7(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char2_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_7(Allocation ain1) {
+        return reduce_my_char2_7(ain1, null);
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_8 = 168;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_char2_8(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char2_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_8(Allocation ain1) {
+        return reduce_my_char2_8(ain1, null);
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_9 = 169;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_char2_9(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char2_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_9(Allocation ain1) {
+        return reduce_my_char2_9(ain1, null);
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_10 = 170;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_char2_10(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char2_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_10(Allocation ain1) {
+        return reduce_my_char2_10(ain1, null);
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_11 = 171;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_char2_11(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char2_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_11(Allocation ain1) {
+        return reduce_my_char2_11(ain1, null);
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_12 = 172;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_char2_12(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char2_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_12(Allocation ain1) {
+        return reduce_my_char2_12(ain1, null);
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_13 = 173;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_char2_13(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char2_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_13(Allocation ain1) {
+        return reduce_my_char2_13(ain1, null);
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_14 = 174;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_char2_14(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char2_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_14(Allocation ain1) {
+        return reduce_my_char2_14(ain1, null);
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_15 = 175;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_char2_15(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char2_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_15(Allocation ain1) {
+        return reduce_my_char2_15(ain1, null);
+    }
+
+    // ain1 = "char2 in"
+    public result_int reduce_my_char2_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_0 = 176;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_char4_0(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char4_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_0(Allocation ain1) {
+        return reduce_my_char4_0(ain1, null);
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_1 = 177;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_char4_1(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char4_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_1(Allocation ain1) {
+        return reduce_my_char4_1(ain1, null);
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_2 = 178;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_char4_2(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char4_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_2(Allocation ain1) {
+        return reduce_my_char4_2(ain1, null);
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_3 = 179;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_char4_3(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char4_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_3(Allocation ain1) {
+        return reduce_my_char4_3(ain1, null);
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_4 = 180;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_char4_4(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char4_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_4(Allocation ain1) {
+        return reduce_my_char4_4(ain1, null);
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_5 = 181;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_char4_5(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char4_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_5(Allocation ain1) {
+        return reduce_my_char4_5(ain1, null);
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_6 = 182;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_char4_6(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char4_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_6(Allocation ain1) {
+        return reduce_my_char4_6(ain1, null);
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_7 = 183;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_char4_7(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char4_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_7(Allocation ain1) {
+        return reduce_my_char4_7(ain1, null);
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_8 = 184;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_char4_8(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char4_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_8(Allocation ain1) {
+        return reduce_my_char4_8(ain1, null);
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_9 = 185;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_char4_9(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char4_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_9(Allocation ain1) {
+        return reduce_my_char4_9(ain1, null);
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_10 = 186;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_char4_10(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char4_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_10(Allocation ain1) {
+        return reduce_my_char4_10(ain1, null);
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_11 = 187;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_char4_11(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char4_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_11(Allocation ain1) {
+        return reduce_my_char4_11(ain1, null);
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_12 = 188;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_char4_12(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char4_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_12(Allocation ain1) {
+        return reduce_my_char4_12(ain1, null);
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_13 = 189;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_char4_13(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char4_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_13(Allocation ain1) {
+        return reduce_my_char4_13(ain1, null);
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_14 = 190;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_char4_14(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char4_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_14(Allocation ain1) {
+        return reduce_my_char4_14(ain1, null);
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_15 = 191;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_char4_15(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_char4_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_15(Allocation ain1) {
+        return reduce_my_char4_15(ain1, null);
+    }
+
+    // ain1 = "char4 in"
+    public result_int reduce_my_char4_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_0 = 192;
+    // in1 = "in"
+    public result_int reduce_my_short_0(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_0(Allocation ain1) {
+        return reduce_my_short_0(ain1, null);
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_1 = 193;
+    // in1 = "in"
+    public result_int reduce_my_short_1(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_1(Allocation ain1) {
+        return reduce_my_short_1(ain1, null);
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_2 = 194;
+    // in1 = "in"
+    public result_int reduce_my_short_2(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_2(Allocation ain1) {
+        return reduce_my_short_2(ain1, null);
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_3 = 195;
+    // in1 = "in"
+    public result_int reduce_my_short_3(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_3(Allocation ain1) {
+        return reduce_my_short_3(ain1, null);
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_4 = 196;
+    // in1 = "in"
+    public result_int reduce_my_short_4(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_4(Allocation ain1) {
+        return reduce_my_short_4(ain1, null);
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_5 = 197;
+    // in1 = "in"
+    public result_int reduce_my_short_5(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_5(Allocation ain1) {
+        return reduce_my_short_5(ain1, null);
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_6 = 198;
+    // in1 = "in"
+    public result_int reduce_my_short_6(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_6(Allocation ain1) {
+        return reduce_my_short_6(ain1, null);
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_7 = 199;
+    // in1 = "in"
+    public result_int reduce_my_short_7(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_7(Allocation ain1) {
+        return reduce_my_short_7(ain1, null);
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_8 = 200;
+    // in1 = "in"
+    public result_int reduce_my_short_8(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_8(Allocation ain1) {
+        return reduce_my_short_8(ain1, null);
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_9 = 201;
+    // in1 = "in"
+    public result_int reduce_my_short_9(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_9(Allocation ain1) {
+        return reduce_my_short_9(ain1, null);
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_10 = 202;
+    // in1 = "in"
+    public result_int reduce_my_short_10(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_10(Allocation ain1) {
+        return reduce_my_short_10(ain1, null);
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_11 = 203;
+    // in1 = "in"
+    public result_int reduce_my_short_11(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_11(Allocation ain1) {
+        return reduce_my_short_11(ain1, null);
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_12 = 204;
+    // in1 = "in"
+    public result_int reduce_my_short_12(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_12(Allocation ain1) {
+        return reduce_my_short_12(ain1, null);
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_13 = 205;
+    // in1 = "in"
+    public result_int reduce_my_short_13(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_13(Allocation ain1) {
+        return reduce_my_short_13(ain1, null);
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_14 = 206;
+    // in1 = "in"
+    public result_int reduce_my_short_14(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_14(Allocation ain1) {
+        return reduce_my_short_14(ain1, null);
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_15 = 207;
+    // in1 = "in"
+    public result_int reduce_my_short_15(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_15(Allocation ain1) {
+        return reduce_my_short_15(ain1, null);
+    }
+
+    // ain1 = "short in"
+    public result_int reduce_my_short_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_0 = 208;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_short2_0(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short2_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_0(Allocation ain1) {
+        return reduce_my_short2_0(ain1, null);
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_1 = 209;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_short2_1(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short2_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_1(Allocation ain1) {
+        return reduce_my_short2_1(ain1, null);
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_2 = 210;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_short2_2(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short2_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_2(Allocation ain1) {
+        return reduce_my_short2_2(ain1, null);
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_3 = 211;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_short2_3(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short2_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_3(Allocation ain1) {
+        return reduce_my_short2_3(ain1, null);
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_4 = 212;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_short2_4(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short2_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_4(Allocation ain1) {
+        return reduce_my_short2_4(ain1, null);
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_5 = 213;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_short2_5(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short2_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_5(Allocation ain1) {
+        return reduce_my_short2_5(ain1, null);
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_6 = 214;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_short2_6(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short2_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_6(Allocation ain1) {
+        return reduce_my_short2_6(ain1, null);
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_7 = 215;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_short2_7(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short2_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_7(Allocation ain1) {
+        return reduce_my_short2_7(ain1, null);
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_8 = 216;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_short2_8(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short2_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_8(Allocation ain1) {
+        return reduce_my_short2_8(ain1, null);
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_9 = 217;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_short2_9(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short2_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_9(Allocation ain1) {
+        return reduce_my_short2_9(ain1, null);
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_10 = 218;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_short2_10(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short2_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_10(Allocation ain1) {
+        return reduce_my_short2_10(ain1, null);
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_11 = 219;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_short2_11(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short2_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_11(Allocation ain1) {
+        return reduce_my_short2_11(ain1, null);
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_12 = 220;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_short2_12(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short2_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_12(Allocation ain1) {
+        return reduce_my_short2_12(ain1, null);
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_13 = 221;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_short2_13(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short2_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_13(Allocation ain1) {
+        return reduce_my_short2_13(ain1, null);
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_14 = 222;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_short2_14(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short2_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_14(Allocation ain1) {
+        return reduce_my_short2_14(ain1, null);
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_15 = 223;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_short2_15(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short2_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_15(Allocation ain1) {
+        return reduce_my_short2_15(ain1, null);
+    }
+
+    // ain1 = "short2 in"
+    public result_int reduce_my_short2_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_0 = 224;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_short4_0(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short4_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_0(Allocation ain1) {
+        return reduce_my_short4_0(ain1, null);
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_1 = 225;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_short4_1(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short4_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_1(Allocation ain1) {
+        return reduce_my_short4_1(ain1, null);
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_2 = 226;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_short4_2(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short4_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_2(Allocation ain1) {
+        return reduce_my_short4_2(ain1, null);
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_3 = 227;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_short4_3(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short4_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_3(Allocation ain1) {
+        return reduce_my_short4_3(ain1, null);
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_4 = 228;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_short4_4(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short4_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_4(Allocation ain1) {
+        return reduce_my_short4_4(ain1, null);
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_5 = 229;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_short4_5(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short4_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_5(Allocation ain1) {
+        return reduce_my_short4_5(ain1, null);
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_6 = 230;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_short4_6(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short4_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_6(Allocation ain1) {
+        return reduce_my_short4_6(ain1, null);
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_7 = 231;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_short4_7(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short4_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_7(Allocation ain1) {
+        return reduce_my_short4_7(ain1, null);
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_8 = 232;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_short4_8(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short4_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_8(Allocation ain1) {
+        return reduce_my_short4_8(ain1, null);
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_9 = 233;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_short4_9(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short4_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_9(Allocation ain1) {
+        return reduce_my_short4_9(ain1, null);
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_10 = 234;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_short4_10(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short4_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_10(Allocation ain1) {
+        return reduce_my_short4_10(ain1, null);
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_11 = 235;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_short4_11(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short4_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_11(Allocation ain1) {
+        return reduce_my_short4_11(ain1, null);
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_12 = 236;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_short4_12(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short4_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_12(Allocation ain1) {
+        return reduce_my_short4_12(ain1, null);
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_13 = 237;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_short4_13(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short4_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_13(Allocation ain1) {
+        return reduce_my_short4_13(ain1, null);
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_14 = 238;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_short4_14(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short4_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_14(Allocation ain1) {
+        return reduce_my_short4_14(ain1, null);
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_15 = 239;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_short4_15(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_short4_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_15(Allocation ain1) {
+        return reduce_my_short4_15(ain1, null);
+    }
+
+    // ain1 = "short4 in"
+    public result_int reduce_my_short4_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int_0 = 240;
+    // in1 = "in"
+    public result_int reduce_my_int_0(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_0(Allocation ain1) {
+        return reduce_my_int_0(ain1, null);
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int_1 = 241;
+    // in1 = "in"
+    public result_int reduce_my_int_1(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_1(Allocation ain1) {
+        return reduce_my_int_1(ain1, null);
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int_2 = 242;
+    // in1 = "in"
+    public result_int reduce_my_int_2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_2(Allocation ain1) {
+        return reduce_my_int_2(ain1, null);
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int_3 = 243;
+    // in1 = "in"
+    public result_int reduce_my_int_3(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_3(Allocation ain1) {
+        return reduce_my_int_3(ain1, null);
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int_4 = 244;
+    // in1 = "in"
+    public result_int reduce_my_int_4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_4(Allocation ain1) {
+        return reduce_my_int_4(ain1, null);
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int_5 = 245;
+    // in1 = "in"
+    public result_int reduce_my_int_5(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_5(Allocation ain1) {
+        return reduce_my_int_5(ain1, null);
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int_6 = 246;
+    // in1 = "in"
+    public result_int reduce_my_int_6(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_6(Allocation ain1) {
+        return reduce_my_int_6(ain1, null);
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int_7 = 247;
+    // in1 = "in"
+    public result_int reduce_my_int_7(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_7(Allocation ain1) {
+        return reduce_my_int_7(ain1, null);
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int_8 = 248;
+    // in1 = "in"
+    public result_int reduce_my_int_8(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_8(Allocation ain1) {
+        return reduce_my_int_8(ain1, null);
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int_9 = 249;
+    // in1 = "in"
+    public result_int reduce_my_int_9(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_9(Allocation ain1) {
+        return reduce_my_int_9(ain1, null);
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int_10 = 250;
+    // in1 = "in"
+    public result_int reduce_my_int_10(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_10(Allocation ain1) {
+        return reduce_my_int_10(ain1, null);
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int_11 = 251;
+    // in1 = "in"
+    public result_int reduce_my_int_11(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_11(Allocation ain1) {
+        return reduce_my_int_11(ain1, null);
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int_12 = 252;
+    // in1 = "in"
+    public result_int reduce_my_int_12(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_12(Allocation ain1) {
+        return reduce_my_int_12(ain1, null);
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int_13 = 253;
+    // in1 = "in"
+    public result_int reduce_my_int_13(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_13(Allocation ain1) {
+        return reduce_my_int_13(ain1, null);
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int_14 = 254;
+    // in1 = "in"
+    public result_int reduce_my_int_14(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_14(Allocation ain1) {
+        return reduce_my_int_14(ain1, null);
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int_15 = 255;
+    // in1 = "in"
+    public result_int reduce_my_int_15(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_15(Allocation ain1) {
+        return reduce_my_int_15(ain1, null);
+    }
+
+    // ain1 = "int in"
+    public result_int reduce_my_int_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int2_0 = 256;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_int2_0(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int2_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_0(Allocation ain1) {
+        return reduce_my_int2_0(ain1, null);
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_2)) {
+            throw new RSRuntimeException("Type mismatch with I32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int2_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int2_1 = 257;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_int2_1(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int2_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_1(Allocation ain1) {
+        return reduce_my_int2_1(ain1, null);
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_2)) {
+            throw new RSRuntimeException("Type mismatch with I32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int2_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int2_2 = 258;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_int2_2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int2_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_2(Allocation ain1) {
+        return reduce_my_int2_2(ain1, null);
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_2)) {
+            throw new RSRuntimeException("Type mismatch with I32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int2_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int2_3 = 259;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_int2_3(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int2_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_3(Allocation ain1) {
+        return reduce_my_int2_3(ain1, null);
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_2)) {
+            throw new RSRuntimeException("Type mismatch with I32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int2_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int2_4 = 260;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_int2_4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int2_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_4(Allocation ain1) {
+        return reduce_my_int2_4(ain1, null);
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_2)) {
+            throw new RSRuntimeException("Type mismatch with I32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int2_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int2_5 = 261;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_int2_5(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int2_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_5(Allocation ain1) {
+        return reduce_my_int2_5(ain1, null);
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_2)) {
+            throw new RSRuntimeException("Type mismatch with I32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int2_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int2_6 = 262;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_int2_6(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int2_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_6(Allocation ain1) {
+        return reduce_my_int2_6(ain1, null);
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_2)) {
+            throw new RSRuntimeException("Type mismatch with I32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int2_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int2_7 = 263;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_int2_7(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int2_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_7(Allocation ain1) {
+        return reduce_my_int2_7(ain1, null);
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_2)) {
+            throw new RSRuntimeException("Type mismatch with I32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int2_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int2_8 = 264;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_int2_8(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int2_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_8(Allocation ain1) {
+        return reduce_my_int2_8(ain1, null);
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_2)) {
+            throw new RSRuntimeException("Type mismatch with I32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int2_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int2_9 = 265;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_int2_9(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int2_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_9(Allocation ain1) {
+        return reduce_my_int2_9(ain1, null);
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_2)) {
+            throw new RSRuntimeException("Type mismatch with I32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int2_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int2_10 = 266;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_int2_10(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int2_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_10(Allocation ain1) {
+        return reduce_my_int2_10(ain1, null);
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_2)) {
+            throw new RSRuntimeException("Type mismatch with I32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int2_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int2_11 = 267;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_int2_11(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int2_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_11(Allocation ain1) {
+        return reduce_my_int2_11(ain1, null);
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_2)) {
+            throw new RSRuntimeException("Type mismatch with I32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int2_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int2_12 = 268;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_int2_12(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int2_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_12(Allocation ain1) {
+        return reduce_my_int2_12(ain1, null);
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_2)) {
+            throw new RSRuntimeException("Type mismatch with I32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int2_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int2_13 = 269;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_int2_13(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int2_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_13(Allocation ain1) {
+        return reduce_my_int2_13(ain1, null);
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_2)) {
+            throw new RSRuntimeException("Type mismatch with I32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int2_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int2_14 = 270;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_int2_14(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int2_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_14(Allocation ain1) {
+        return reduce_my_int2_14(ain1, null);
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_2)) {
+            throw new RSRuntimeException("Type mismatch with I32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int2_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int2_15 = 271;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_int2_15(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int2_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_15(Allocation ain1) {
+        return reduce_my_int2_15(ain1, null);
+    }
+
+    // ain1 = "int2 in"
+    public result_int reduce_my_int2_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_2)) {
+            throw new RSRuntimeException("Type mismatch with I32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int2_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int4_0 = 272;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_int4_0(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int4_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_0(Allocation ain1) {
+        return reduce_my_int4_0(ain1, null);
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_4)) {
+            throw new RSRuntimeException("Type mismatch with I32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int4_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int4_1 = 273;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_int4_1(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int4_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_1(Allocation ain1) {
+        return reduce_my_int4_1(ain1, null);
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_4)) {
+            throw new RSRuntimeException("Type mismatch with I32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int4_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int4_2 = 274;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_int4_2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int4_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_2(Allocation ain1) {
+        return reduce_my_int4_2(ain1, null);
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_4)) {
+            throw new RSRuntimeException("Type mismatch with I32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int4_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int4_3 = 275;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_int4_3(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int4_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_3(Allocation ain1) {
+        return reduce_my_int4_3(ain1, null);
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_4)) {
+            throw new RSRuntimeException("Type mismatch with I32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int4_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int4_4 = 276;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_int4_4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int4_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_4(Allocation ain1) {
+        return reduce_my_int4_4(ain1, null);
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_4)) {
+            throw new RSRuntimeException("Type mismatch with I32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int4_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int4_5 = 277;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_int4_5(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int4_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_5(Allocation ain1) {
+        return reduce_my_int4_5(ain1, null);
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_4)) {
+            throw new RSRuntimeException("Type mismatch with I32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int4_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int4_6 = 278;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_int4_6(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int4_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_6(Allocation ain1) {
+        return reduce_my_int4_6(ain1, null);
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_4)) {
+            throw new RSRuntimeException("Type mismatch with I32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int4_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int4_7 = 279;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_int4_7(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int4_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_7(Allocation ain1) {
+        return reduce_my_int4_7(ain1, null);
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_4)) {
+            throw new RSRuntimeException("Type mismatch with I32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int4_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int4_8 = 280;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_int4_8(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int4_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_8(Allocation ain1) {
+        return reduce_my_int4_8(ain1, null);
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_4)) {
+            throw new RSRuntimeException("Type mismatch with I32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int4_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int4_9 = 281;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_int4_9(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int4_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_9(Allocation ain1) {
+        return reduce_my_int4_9(ain1, null);
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_4)) {
+            throw new RSRuntimeException("Type mismatch with I32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int4_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int4_10 = 282;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_int4_10(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int4_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_10(Allocation ain1) {
+        return reduce_my_int4_10(ain1, null);
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_4)) {
+            throw new RSRuntimeException("Type mismatch with I32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int4_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int4_11 = 283;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_int4_11(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int4_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_11(Allocation ain1) {
+        return reduce_my_int4_11(ain1, null);
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_4)) {
+            throw new RSRuntimeException("Type mismatch with I32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int4_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int4_12 = 284;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_int4_12(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int4_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_12(Allocation ain1) {
+        return reduce_my_int4_12(ain1, null);
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_4)) {
+            throw new RSRuntimeException("Type mismatch with I32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int4_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int4_13 = 285;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_int4_13(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int4_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_13(Allocation ain1) {
+        return reduce_my_int4_13(ain1, null);
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_4)) {
+            throw new RSRuntimeException("Type mismatch with I32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int4_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int4_14 = 286;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_int4_14(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int4_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_14(Allocation ain1) {
+        return reduce_my_int4_14(ain1, null);
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_4)) {
+            throw new RSRuntimeException("Type mismatch with I32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int4_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int4_15 = 287;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_int4_15(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int4_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_15(Allocation ain1) {
+        return reduce_my_int4_15(ain1, null);
+    }
+
+    // ain1 = "int4 in"
+    public result_int reduce_my_int4_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_4)) {
+            throw new RSRuntimeException("Type mismatch with I32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int4_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long_0 = 288;
+    // in1 = "in"
+    public result_int reduce_my_long_0(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_0(Allocation ain1) {
+        return reduce_my_long_0(ain1, null);
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64)) {
+            throw new RSRuntimeException("Type mismatch with I64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long_1 = 289;
+    // in1 = "in"
+    public result_int reduce_my_long_1(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_1(Allocation ain1) {
+        return reduce_my_long_1(ain1, null);
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64)) {
+            throw new RSRuntimeException("Type mismatch with I64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long_2 = 290;
+    // in1 = "in"
+    public result_int reduce_my_long_2(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_2(Allocation ain1) {
+        return reduce_my_long_2(ain1, null);
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64)) {
+            throw new RSRuntimeException("Type mismatch with I64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long_3 = 291;
+    // in1 = "in"
+    public result_int reduce_my_long_3(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_3(Allocation ain1) {
+        return reduce_my_long_3(ain1, null);
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64)) {
+            throw new RSRuntimeException("Type mismatch with I64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long_4 = 292;
+    // in1 = "in"
+    public result_int reduce_my_long_4(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_4(Allocation ain1) {
+        return reduce_my_long_4(ain1, null);
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64)) {
+            throw new RSRuntimeException("Type mismatch with I64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long_5 = 293;
+    // in1 = "in"
+    public result_int reduce_my_long_5(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_5(Allocation ain1) {
+        return reduce_my_long_5(ain1, null);
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64)) {
+            throw new RSRuntimeException("Type mismatch with I64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long_6 = 294;
+    // in1 = "in"
+    public result_int reduce_my_long_6(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_6(Allocation ain1) {
+        return reduce_my_long_6(ain1, null);
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64)) {
+            throw new RSRuntimeException("Type mismatch with I64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long_7 = 295;
+    // in1 = "in"
+    public result_int reduce_my_long_7(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_7(Allocation ain1) {
+        return reduce_my_long_7(ain1, null);
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64)) {
+            throw new RSRuntimeException("Type mismatch with I64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long_8 = 296;
+    // in1 = "in"
+    public result_int reduce_my_long_8(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_8(Allocation ain1) {
+        return reduce_my_long_8(ain1, null);
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64)) {
+            throw new RSRuntimeException("Type mismatch with I64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long_9 = 297;
+    // in1 = "in"
+    public result_int reduce_my_long_9(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_9(Allocation ain1) {
+        return reduce_my_long_9(ain1, null);
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64)) {
+            throw new RSRuntimeException("Type mismatch with I64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long_10 = 298;
+    // in1 = "in"
+    public result_int reduce_my_long_10(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_10(Allocation ain1) {
+        return reduce_my_long_10(ain1, null);
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64)) {
+            throw new RSRuntimeException("Type mismatch with I64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long_11 = 299;
+    // in1 = "in"
+    public result_int reduce_my_long_11(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_11(Allocation ain1) {
+        return reduce_my_long_11(ain1, null);
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64)) {
+            throw new RSRuntimeException("Type mismatch with I64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long_12 = 300;
+    // in1 = "in"
+    public result_int reduce_my_long_12(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_12(Allocation ain1) {
+        return reduce_my_long_12(ain1, null);
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64)) {
+            throw new RSRuntimeException("Type mismatch with I64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long_13 = 301;
+    // in1 = "in"
+    public result_int reduce_my_long_13(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_13(Allocation ain1) {
+        return reduce_my_long_13(ain1, null);
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64)) {
+            throw new RSRuntimeException("Type mismatch with I64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long_14 = 302;
+    // in1 = "in"
+    public result_int reduce_my_long_14(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_14(Allocation ain1) {
+        return reduce_my_long_14(ain1, null);
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64)) {
+            throw new RSRuntimeException("Type mismatch with I64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long_15 = 303;
+    // in1 = "in"
+    public result_int reduce_my_long_15(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_15(Allocation ain1) {
+        return reduce_my_long_15(ain1, null);
+    }
+
+    // ain1 = "long in"
+    public result_int reduce_my_long_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64)) {
+            throw new RSRuntimeException("Type mismatch with I64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long2_0 = 304;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_long2_0(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long2_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_0(Allocation ain1) {
+        return reduce_my_long2_0(ain1, null);
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_2)) {
+            throw new RSRuntimeException("Type mismatch with I64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long2_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long2_1 = 305;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_long2_1(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long2_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_1(Allocation ain1) {
+        return reduce_my_long2_1(ain1, null);
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_2)) {
+            throw new RSRuntimeException("Type mismatch with I64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long2_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long2_2 = 306;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_long2_2(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long2_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_2(Allocation ain1) {
+        return reduce_my_long2_2(ain1, null);
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_2)) {
+            throw new RSRuntimeException("Type mismatch with I64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long2_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long2_3 = 307;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_long2_3(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long2_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_3(Allocation ain1) {
+        return reduce_my_long2_3(ain1, null);
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_2)) {
+            throw new RSRuntimeException("Type mismatch with I64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long2_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long2_4 = 308;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_long2_4(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long2_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_4(Allocation ain1) {
+        return reduce_my_long2_4(ain1, null);
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_2)) {
+            throw new RSRuntimeException("Type mismatch with I64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long2_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long2_5 = 309;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_long2_5(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long2_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_5(Allocation ain1) {
+        return reduce_my_long2_5(ain1, null);
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_2)) {
+            throw new RSRuntimeException("Type mismatch with I64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long2_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long2_6 = 310;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_long2_6(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long2_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_6(Allocation ain1) {
+        return reduce_my_long2_6(ain1, null);
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_2)) {
+            throw new RSRuntimeException("Type mismatch with I64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long2_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long2_7 = 311;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_long2_7(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long2_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_7(Allocation ain1) {
+        return reduce_my_long2_7(ain1, null);
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_2)) {
+            throw new RSRuntimeException("Type mismatch with I64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long2_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long2_8 = 312;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_long2_8(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long2_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_8(Allocation ain1) {
+        return reduce_my_long2_8(ain1, null);
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_2)) {
+            throw new RSRuntimeException("Type mismatch with I64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long2_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long2_9 = 313;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_long2_9(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long2_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_9(Allocation ain1) {
+        return reduce_my_long2_9(ain1, null);
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_2)) {
+            throw new RSRuntimeException("Type mismatch with I64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long2_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long2_10 = 314;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_long2_10(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long2_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_10(Allocation ain1) {
+        return reduce_my_long2_10(ain1, null);
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_2)) {
+            throw new RSRuntimeException("Type mismatch with I64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long2_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long2_11 = 315;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_long2_11(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long2_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_11(Allocation ain1) {
+        return reduce_my_long2_11(ain1, null);
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_2)) {
+            throw new RSRuntimeException("Type mismatch with I64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long2_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long2_12 = 316;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_long2_12(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long2_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_12(Allocation ain1) {
+        return reduce_my_long2_12(ain1, null);
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_2)) {
+            throw new RSRuntimeException("Type mismatch with I64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long2_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long2_13 = 317;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_long2_13(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long2_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_13(Allocation ain1) {
+        return reduce_my_long2_13(ain1, null);
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_2)) {
+            throw new RSRuntimeException("Type mismatch with I64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long2_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long2_14 = 318;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_long2_14(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long2_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_14(Allocation ain1) {
+        return reduce_my_long2_14(ain1, null);
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_2)) {
+            throw new RSRuntimeException("Type mismatch with I64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long2_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long2_15 = 319;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_long2_15(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long2_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_15(Allocation ain1) {
+        return reduce_my_long2_15(ain1, null);
+    }
+
+    // ain1 = "long2 in"
+    public result_int reduce_my_long2_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_2)) {
+            throw new RSRuntimeException("Type mismatch with I64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long2_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long4_0 = 320;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_long4_0(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long4_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_0(Allocation ain1) {
+        return reduce_my_long4_0(ain1, null);
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_4)) {
+            throw new RSRuntimeException("Type mismatch with I64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long4_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long4_1 = 321;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_long4_1(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long4_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_1(Allocation ain1) {
+        return reduce_my_long4_1(ain1, null);
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_4)) {
+            throw new RSRuntimeException("Type mismatch with I64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long4_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long4_2 = 322;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_long4_2(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long4_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_2(Allocation ain1) {
+        return reduce_my_long4_2(ain1, null);
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_4)) {
+            throw new RSRuntimeException("Type mismatch with I64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long4_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long4_3 = 323;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_long4_3(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long4_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_3(Allocation ain1) {
+        return reduce_my_long4_3(ain1, null);
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_4)) {
+            throw new RSRuntimeException("Type mismatch with I64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long4_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long4_4 = 324;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_long4_4(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long4_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_4(Allocation ain1) {
+        return reduce_my_long4_4(ain1, null);
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_4)) {
+            throw new RSRuntimeException("Type mismatch with I64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long4_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long4_5 = 325;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_long4_5(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long4_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_5(Allocation ain1) {
+        return reduce_my_long4_5(ain1, null);
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_4)) {
+            throw new RSRuntimeException("Type mismatch with I64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long4_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long4_6 = 326;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_long4_6(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long4_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_6(Allocation ain1) {
+        return reduce_my_long4_6(ain1, null);
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_4)) {
+            throw new RSRuntimeException("Type mismatch with I64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long4_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long4_7 = 327;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_long4_7(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long4_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_7(Allocation ain1) {
+        return reduce_my_long4_7(ain1, null);
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_4)) {
+            throw new RSRuntimeException("Type mismatch with I64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long4_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long4_8 = 328;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_long4_8(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long4_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_8(Allocation ain1) {
+        return reduce_my_long4_8(ain1, null);
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_4)) {
+            throw new RSRuntimeException("Type mismatch with I64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long4_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long4_9 = 329;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_long4_9(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long4_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_9(Allocation ain1) {
+        return reduce_my_long4_9(ain1, null);
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_4)) {
+            throw new RSRuntimeException("Type mismatch with I64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long4_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long4_10 = 330;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_long4_10(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long4_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_10(Allocation ain1) {
+        return reduce_my_long4_10(ain1, null);
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_4)) {
+            throw new RSRuntimeException("Type mismatch with I64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long4_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long4_11 = 331;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_long4_11(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long4_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_11(Allocation ain1) {
+        return reduce_my_long4_11(ain1, null);
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_4)) {
+            throw new RSRuntimeException("Type mismatch with I64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long4_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long4_12 = 332;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_long4_12(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long4_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_12(Allocation ain1) {
+        return reduce_my_long4_12(ain1, null);
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_4)) {
+            throw new RSRuntimeException("Type mismatch with I64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long4_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long4_13 = 333;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_long4_13(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long4_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_13(Allocation ain1) {
+        return reduce_my_long4_13(ain1, null);
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_4)) {
+            throw new RSRuntimeException("Type mismatch with I64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long4_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long4_14 = 334;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_long4_14(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long4_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_14(Allocation ain1) {
+        return reduce_my_long4_14(ain1, null);
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_4)) {
+            throw new RSRuntimeException("Type mismatch with I64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long4_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long4_15 = 335;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_long4_15(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_long4_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_15(Allocation ain1) {
+        return reduce_my_long4_15(ain1, null);
+    }
+
+    // ain1 = "long4 in"
+    public result_int reduce_my_long4_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_4)) {
+            throw new RSRuntimeException("Type mismatch with I64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long4_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_0 = 336;
+    // in1 = "in"
+    public result_int reduce_my_uchar_0(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_0(Allocation ain1) {
+        return reduce_my_uchar_0(ain1, null);
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_1 = 337;
+    // in1 = "in"
+    public result_int reduce_my_uchar_1(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_1(Allocation ain1) {
+        return reduce_my_uchar_1(ain1, null);
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_2 = 338;
+    // in1 = "in"
+    public result_int reduce_my_uchar_2(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_2(Allocation ain1) {
+        return reduce_my_uchar_2(ain1, null);
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_3 = 339;
+    // in1 = "in"
+    public result_int reduce_my_uchar_3(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_3(Allocation ain1) {
+        return reduce_my_uchar_3(ain1, null);
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_4 = 340;
+    // in1 = "in"
+    public result_int reduce_my_uchar_4(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_4(Allocation ain1) {
+        return reduce_my_uchar_4(ain1, null);
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_5 = 341;
+    // in1 = "in"
+    public result_int reduce_my_uchar_5(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_5(Allocation ain1) {
+        return reduce_my_uchar_5(ain1, null);
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_6 = 342;
+    // in1 = "in"
+    public result_int reduce_my_uchar_6(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_6(Allocation ain1) {
+        return reduce_my_uchar_6(ain1, null);
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_7 = 343;
+    // in1 = "in"
+    public result_int reduce_my_uchar_7(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_7(Allocation ain1) {
+        return reduce_my_uchar_7(ain1, null);
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_8 = 344;
+    // in1 = "in"
+    public result_int reduce_my_uchar_8(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_8(Allocation ain1) {
+        return reduce_my_uchar_8(ain1, null);
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_9 = 345;
+    // in1 = "in"
+    public result_int reduce_my_uchar_9(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_9(Allocation ain1) {
+        return reduce_my_uchar_9(ain1, null);
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_10 = 346;
+    // in1 = "in"
+    public result_int reduce_my_uchar_10(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_10(Allocation ain1) {
+        return reduce_my_uchar_10(ain1, null);
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_11 = 347;
+    // in1 = "in"
+    public result_int reduce_my_uchar_11(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_11(Allocation ain1) {
+        return reduce_my_uchar_11(ain1, null);
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_12 = 348;
+    // in1 = "in"
+    public result_int reduce_my_uchar_12(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_12(Allocation ain1) {
+        return reduce_my_uchar_12(ain1, null);
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_13 = 349;
+    // in1 = "in"
+    public result_int reduce_my_uchar_13(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_13(Allocation ain1) {
+        return reduce_my_uchar_13(ain1, null);
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_14 = 350;
+    // in1 = "in"
+    public result_int reduce_my_uchar_14(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_14(Allocation ain1) {
+        return reduce_my_uchar_14(ain1, null);
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_15 = 351;
+    // in1 = "in"
+    public result_int reduce_my_uchar_15(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_15(Allocation ain1) {
+        return reduce_my_uchar_15(ain1, null);
+    }
+
+    // ain1 = "uchar in"
+    public result_int reduce_my_uchar_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_0 = 352;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uchar2_0(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar2_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_0(Allocation ain1) {
+        return reduce_my_uchar2_0(ain1, null);
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_1 = 353;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uchar2_1(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar2_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_1(Allocation ain1) {
+        return reduce_my_uchar2_1(ain1, null);
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_2 = 354;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uchar2_2(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar2_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_2(Allocation ain1) {
+        return reduce_my_uchar2_2(ain1, null);
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_3 = 355;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uchar2_3(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar2_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_3(Allocation ain1) {
+        return reduce_my_uchar2_3(ain1, null);
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_4 = 356;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uchar2_4(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar2_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_4(Allocation ain1) {
+        return reduce_my_uchar2_4(ain1, null);
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_5 = 357;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uchar2_5(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar2_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_5(Allocation ain1) {
+        return reduce_my_uchar2_5(ain1, null);
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_6 = 358;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uchar2_6(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar2_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_6(Allocation ain1) {
+        return reduce_my_uchar2_6(ain1, null);
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_7 = 359;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uchar2_7(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar2_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_7(Allocation ain1) {
+        return reduce_my_uchar2_7(ain1, null);
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_8 = 360;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uchar2_8(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar2_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_8(Allocation ain1) {
+        return reduce_my_uchar2_8(ain1, null);
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_9 = 361;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uchar2_9(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar2_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_9(Allocation ain1) {
+        return reduce_my_uchar2_9(ain1, null);
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_10 = 362;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uchar2_10(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar2_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_10(Allocation ain1) {
+        return reduce_my_uchar2_10(ain1, null);
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_11 = 363;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uchar2_11(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar2_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_11(Allocation ain1) {
+        return reduce_my_uchar2_11(ain1, null);
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_12 = 364;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uchar2_12(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar2_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_12(Allocation ain1) {
+        return reduce_my_uchar2_12(ain1, null);
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_13 = 365;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uchar2_13(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar2_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_13(Allocation ain1) {
+        return reduce_my_uchar2_13(ain1, null);
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_14 = 366;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uchar2_14(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar2_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_14(Allocation ain1) {
+        return reduce_my_uchar2_14(ain1, null);
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_15 = 367;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uchar2_15(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar2_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_15(Allocation ain1) {
+        return reduce_my_uchar2_15(ain1, null);
+    }
+
+    // ain1 = "uchar2 in"
+    public result_int reduce_my_uchar2_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_0 = 368;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uchar4_0(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar4_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_0(Allocation ain1) {
+        return reduce_my_uchar4_0(ain1, null);
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_1 = 369;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uchar4_1(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar4_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_1(Allocation ain1) {
+        return reduce_my_uchar4_1(ain1, null);
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_2 = 370;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uchar4_2(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar4_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_2(Allocation ain1) {
+        return reduce_my_uchar4_2(ain1, null);
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_3 = 371;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uchar4_3(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar4_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_3(Allocation ain1) {
+        return reduce_my_uchar4_3(ain1, null);
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_4 = 372;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uchar4_4(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar4_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_4(Allocation ain1) {
+        return reduce_my_uchar4_4(ain1, null);
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_5 = 373;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uchar4_5(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar4_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_5(Allocation ain1) {
+        return reduce_my_uchar4_5(ain1, null);
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_6 = 374;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uchar4_6(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar4_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_6(Allocation ain1) {
+        return reduce_my_uchar4_6(ain1, null);
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_7 = 375;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uchar4_7(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar4_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_7(Allocation ain1) {
+        return reduce_my_uchar4_7(ain1, null);
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_8 = 376;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uchar4_8(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar4_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_8(Allocation ain1) {
+        return reduce_my_uchar4_8(ain1, null);
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_9 = 377;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uchar4_9(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar4_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_9(Allocation ain1) {
+        return reduce_my_uchar4_9(ain1, null);
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_10 = 378;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uchar4_10(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar4_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_10(Allocation ain1) {
+        return reduce_my_uchar4_10(ain1, null);
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_11 = 379;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uchar4_11(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar4_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_11(Allocation ain1) {
+        return reduce_my_uchar4_11(ain1, null);
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_12 = 380;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uchar4_12(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar4_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_12(Allocation ain1) {
+        return reduce_my_uchar4_12(ain1, null);
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_13 = 381;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uchar4_13(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar4_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_13(Allocation ain1) {
+        return reduce_my_uchar4_13(ain1, null);
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_14 = 382;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uchar4_14(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar4_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_14(Allocation ain1) {
+        return reduce_my_uchar4_14(ain1, null);
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_15 = 383;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uchar4_15(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uchar4_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_15(Allocation ain1) {
+        return reduce_my_uchar4_15(ain1, null);
+    }
+
+    // ain1 = "uchar4 in"
+    public result_int reduce_my_uchar4_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_0 = 384;
+    // in1 = "in"
+    public result_int reduce_my_ushort_0(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_0(Allocation ain1) {
+        return reduce_my_ushort_0(ain1, null);
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_1 = 385;
+    // in1 = "in"
+    public result_int reduce_my_ushort_1(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_1(Allocation ain1) {
+        return reduce_my_ushort_1(ain1, null);
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_2 = 386;
+    // in1 = "in"
+    public result_int reduce_my_ushort_2(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_2(Allocation ain1) {
+        return reduce_my_ushort_2(ain1, null);
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_3 = 387;
+    // in1 = "in"
+    public result_int reduce_my_ushort_3(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_3(Allocation ain1) {
+        return reduce_my_ushort_3(ain1, null);
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_4 = 388;
+    // in1 = "in"
+    public result_int reduce_my_ushort_4(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_4(Allocation ain1) {
+        return reduce_my_ushort_4(ain1, null);
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_5 = 389;
+    // in1 = "in"
+    public result_int reduce_my_ushort_5(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_5(Allocation ain1) {
+        return reduce_my_ushort_5(ain1, null);
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_6 = 390;
+    // in1 = "in"
+    public result_int reduce_my_ushort_6(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_6(Allocation ain1) {
+        return reduce_my_ushort_6(ain1, null);
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_7 = 391;
+    // in1 = "in"
+    public result_int reduce_my_ushort_7(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_7(Allocation ain1) {
+        return reduce_my_ushort_7(ain1, null);
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_8 = 392;
+    // in1 = "in"
+    public result_int reduce_my_ushort_8(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_8(Allocation ain1) {
+        return reduce_my_ushort_8(ain1, null);
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_9 = 393;
+    // in1 = "in"
+    public result_int reduce_my_ushort_9(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_9(Allocation ain1) {
+        return reduce_my_ushort_9(ain1, null);
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_10 = 394;
+    // in1 = "in"
+    public result_int reduce_my_ushort_10(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_10(Allocation ain1) {
+        return reduce_my_ushort_10(ain1, null);
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_11 = 395;
+    // in1 = "in"
+    public result_int reduce_my_ushort_11(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_11(Allocation ain1) {
+        return reduce_my_ushort_11(ain1, null);
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_12 = 396;
+    // in1 = "in"
+    public result_int reduce_my_ushort_12(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_12(Allocation ain1) {
+        return reduce_my_ushort_12(ain1, null);
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_13 = 397;
+    // in1 = "in"
+    public result_int reduce_my_ushort_13(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_13(Allocation ain1) {
+        return reduce_my_ushort_13(ain1, null);
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_14 = 398;
+    // in1 = "in"
+    public result_int reduce_my_ushort_14(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_14(Allocation ain1) {
+        return reduce_my_ushort_14(ain1, null);
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_15 = 399;
+    // in1 = "in"
+    public result_int reduce_my_ushort_15(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_15(Allocation ain1) {
+        return reduce_my_ushort_15(ain1, null);
+    }
+
+    // ain1 = "ushort in"
+    public result_int reduce_my_ushort_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_0 = 400;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ushort2_0(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort2_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_0(Allocation ain1) {
+        return reduce_my_ushort2_0(ain1, null);
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_1 = 401;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ushort2_1(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort2_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_1(Allocation ain1) {
+        return reduce_my_ushort2_1(ain1, null);
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_2 = 402;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ushort2_2(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort2_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_2(Allocation ain1) {
+        return reduce_my_ushort2_2(ain1, null);
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_3 = 403;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ushort2_3(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort2_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_3(Allocation ain1) {
+        return reduce_my_ushort2_3(ain1, null);
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_4 = 404;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ushort2_4(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort2_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_4(Allocation ain1) {
+        return reduce_my_ushort2_4(ain1, null);
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_5 = 405;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ushort2_5(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort2_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_5(Allocation ain1) {
+        return reduce_my_ushort2_5(ain1, null);
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_6 = 406;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ushort2_6(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort2_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_6(Allocation ain1) {
+        return reduce_my_ushort2_6(ain1, null);
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_7 = 407;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ushort2_7(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort2_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_7(Allocation ain1) {
+        return reduce_my_ushort2_7(ain1, null);
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_8 = 408;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ushort2_8(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort2_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_8(Allocation ain1) {
+        return reduce_my_ushort2_8(ain1, null);
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_9 = 409;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ushort2_9(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort2_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_9(Allocation ain1) {
+        return reduce_my_ushort2_9(ain1, null);
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_10 = 410;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ushort2_10(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort2_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_10(Allocation ain1) {
+        return reduce_my_ushort2_10(ain1, null);
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_11 = 411;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ushort2_11(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort2_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_11(Allocation ain1) {
+        return reduce_my_ushort2_11(ain1, null);
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_12 = 412;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ushort2_12(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort2_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_12(Allocation ain1) {
+        return reduce_my_ushort2_12(ain1, null);
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_13 = 413;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ushort2_13(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort2_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_13(Allocation ain1) {
+        return reduce_my_ushort2_13(ain1, null);
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_14 = 414;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ushort2_14(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort2_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_14(Allocation ain1) {
+        return reduce_my_ushort2_14(ain1, null);
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_15 = 415;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ushort2_15(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort2_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_15(Allocation ain1) {
+        return reduce_my_ushort2_15(ain1, null);
+    }
+
+    // ain1 = "ushort2 in"
+    public result_int reduce_my_ushort2_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_0 = 416;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ushort4_0(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort4_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_0(Allocation ain1) {
+        return reduce_my_ushort4_0(ain1, null);
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_1 = 417;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ushort4_1(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort4_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_1(Allocation ain1) {
+        return reduce_my_ushort4_1(ain1, null);
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_2 = 418;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ushort4_2(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort4_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_2(Allocation ain1) {
+        return reduce_my_ushort4_2(ain1, null);
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_3 = 419;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ushort4_3(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort4_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_3(Allocation ain1) {
+        return reduce_my_ushort4_3(ain1, null);
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_4 = 420;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ushort4_4(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort4_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_4(Allocation ain1) {
+        return reduce_my_ushort4_4(ain1, null);
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_5 = 421;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ushort4_5(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort4_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_5(Allocation ain1) {
+        return reduce_my_ushort4_5(ain1, null);
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_6 = 422;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ushort4_6(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort4_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_6(Allocation ain1) {
+        return reduce_my_ushort4_6(ain1, null);
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_7 = 423;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ushort4_7(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort4_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_7(Allocation ain1) {
+        return reduce_my_ushort4_7(ain1, null);
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_8 = 424;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ushort4_8(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort4_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_8(Allocation ain1) {
+        return reduce_my_ushort4_8(ain1, null);
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_9 = 425;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ushort4_9(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort4_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_9(Allocation ain1) {
+        return reduce_my_ushort4_9(ain1, null);
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_10 = 426;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ushort4_10(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort4_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_10(Allocation ain1) {
+        return reduce_my_ushort4_10(ain1, null);
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_11 = 427;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ushort4_11(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort4_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_11(Allocation ain1) {
+        return reduce_my_ushort4_11(ain1, null);
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_12 = 428;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ushort4_12(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort4_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_12(Allocation ain1) {
+        return reduce_my_ushort4_12(ain1, null);
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_13 = 429;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ushort4_13(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort4_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_13(Allocation ain1) {
+        return reduce_my_ushort4_13(ain1, null);
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_14 = 430;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ushort4_14(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort4_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_14(Allocation ain1) {
+        return reduce_my_ushort4_14(ain1, null);
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_15 = 431;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ushort4_15(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ushort4_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_15(Allocation ain1) {
+        return reduce_my_ushort4_15(ain1, null);
+    }
+
+    // ain1 = "ushort4 in"
+    public result_int reduce_my_ushort4_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint_0 = 432;
+    // in1 = "in"
+    public result_int reduce_my_uint_0(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_0(Allocation ain1) {
+        return reduce_my_uint_0(ain1, null);
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32)) {
+            throw new RSRuntimeException("Type mismatch with U32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint_1 = 433;
+    // in1 = "in"
+    public result_int reduce_my_uint_1(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_1(Allocation ain1) {
+        return reduce_my_uint_1(ain1, null);
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32)) {
+            throw new RSRuntimeException("Type mismatch with U32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint_2 = 434;
+    // in1 = "in"
+    public result_int reduce_my_uint_2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_2(Allocation ain1) {
+        return reduce_my_uint_2(ain1, null);
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32)) {
+            throw new RSRuntimeException("Type mismatch with U32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint_3 = 435;
+    // in1 = "in"
+    public result_int reduce_my_uint_3(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_3(Allocation ain1) {
+        return reduce_my_uint_3(ain1, null);
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32)) {
+            throw new RSRuntimeException("Type mismatch with U32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint_4 = 436;
+    // in1 = "in"
+    public result_int reduce_my_uint_4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_4(Allocation ain1) {
+        return reduce_my_uint_4(ain1, null);
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32)) {
+            throw new RSRuntimeException("Type mismatch with U32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint_5 = 437;
+    // in1 = "in"
+    public result_int reduce_my_uint_5(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_5(Allocation ain1) {
+        return reduce_my_uint_5(ain1, null);
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32)) {
+            throw new RSRuntimeException("Type mismatch with U32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint_6 = 438;
+    // in1 = "in"
+    public result_int reduce_my_uint_6(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_6(Allocation ain1) {
+        return reduce_my_uint_6(ain1, null);
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32)) {
+            throw new RSRuntimeException("Type mismatch with U32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint_7 = 439;
+    // in1 = "in"
+    public result_int reduce_my_uint_7(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_7(Allocation ain1) {
+        return reduce_my_uint_7(ain1, null);
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32)) {
+            throw new RSRuntimeException("Type mismatch with U32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint_8 = 440;
+    // in1 = "in"
+    public result_int reduce_my_uint_8(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_8(Allocation ain1) {
+        return reduce_my_uint_8(ain1, null);
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32)) {
+            throw new RSRuntimeException("Type mismatch with U32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint_9 = 441;
+    // in1 = "in"
+    public result_int reduce_my_uint_9(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_9(Allocation ain1) {
+        return reduce_my_uint_9(ain1, null);
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32)) {
+            throw new RSRuntimeException("Type mismatch with U32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint_10 = 442;
+    // in1 = "in"
+    public result_int reduce_my_uint_10(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_10(Allocation ain1) {
+        return reduce_my_uint_10(ain1, null);
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32)) {
+            throw new RSRuntimeException("Type mismatch with U32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint_11 = 443;
+    // in1 = "in"
+    public result_int reduce_my_uint_11(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_11(Allocation ain1) {
+        return reduce_my_uint_11(ain1, null);
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32)) {
+            throw new RSRuntimeException("Type mismatch with U32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint_12 = 444;
+    // in1 = "in"
+    public result_int reduce_my_uint_12(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_12(Allocation ain1) {
+        return reduce_my_uint_12(ain1, null);
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32)) {
+            throw new RSRuntimeException("Type mismatch with U32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint_13 = 445;
+    // in1 = "in"
+    public result_int reduce_my_uint_13(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_13(Allocation ain1) {
+        return reduce_my_uint_13(ain1, null);
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32)) {
+            throw new RSRuntimeException("Type mismatch with U32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint_14 = 446;
+    // in1 = "in"
+    public result_int reduce_my_uint_14(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_14(Allocation ain1) {
+        return reduce_my_uint_14(ain1, null);
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32)) {
+            throw new RSRuntimeException("Type mismatch with U32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint_15 = 447;
+    // in1 = "in"
+    public result_int reduce_my_uint_15(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_15(Allocation ain1) {
+        return reduce_my_uint_15(ain1, null);
+    }
+
+    // ain1 = "uint in"
+    public result_int reduce_my_uint_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32)) {
+            throw new RSRuntimeException("Type mismatch with U32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint2_0 = 448;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uint2_0(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint2_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_0(Allocation ain1) {
+        return reduce_my_uint2_0(ain1, null);
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_2)) {
+            throw new RSRuntimeException("Type mismatch with U32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint2_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint2_1 = 449;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uint2_1(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint2_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_1(Allocation ain1) {
+        return reduce_my_uint2_1(ain1, null);
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_2)) {
+            throw new RSRuntimeException("Type mismatch with U32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint2_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint2_2 = 450;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uint2_2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint2_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_2(Allocation ain1) {
+        return reduce_my_uint2_2(ain1, null);
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_2)) {
+            throw new RSRuntimeException("Type mismatch with U32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint2_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint2_3 = 451;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uint2_3(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint2_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_3(Allocation ain1) {
+        return reduce_my_uint2_3(ain1, null);
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_2)) {
+            throw new RSRuntimeException("Type mismatch with U32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint2_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint2_4 = 452;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uint2_4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint2_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_4(Allocation ain1) {
+        return reduce_my_uint2_4(ain1, null);
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_2)) {
+            throw new RSRuntimeException("Type mismatch with U32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint2_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint2_5 = 453;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uint2_5(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint2_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_5(Allocation ain1) {
+        return reduce_my_uint2_5(ain1, null);
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_2)) {
+            throw new RSRuntimeException("Type mismatch with U32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint2_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint2_6 = 454;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uint2_6(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint2_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_6(Allocation ain1) {
+        return reduce_my_uint2_6(ain1, null);
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_2)) {
+            throw new RSRuntimeException("Type mismatch with U32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint2_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint2_7 = 455;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uint2_7(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint2_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_7(Allocation ain1) {
+        return reduce_my_uint2_7(ain1, null);
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_2)) {
+            throw new RSRuntimeException("Type mismatch with U32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint2_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint2_8 = 456;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uint2_8(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint2_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_8(Allocation ain1) {
+        return reduce_my_uint2_8(ain1, null);
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_2)) {
+            throw new RSRuntimeException("Type mismatch with U32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint2_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint2_9 = 457;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uint2_9(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint2_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_9(Allocation ain1) {
+        return reduce_my_uint2_9(ain1, null);
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_2)) {
+            throw new RSRuntimeException("Type mismatch with U32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint2_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint2_10 = 458;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uint2_10(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint2_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_10(Allocation ain1) {
+        return reduce_my_uint2_10(ain1, null);
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_2)) {
+            throw new RSRuntimeException("Type mismatch with U32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint2_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint2_11 = 459;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uint2_11(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint2_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_11(Allocation ain1) {
+        return reduce_my_uint2_11(ain1, null);
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_2)) {
+            throw new RSRuntimeException("Type mismatch with U32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint2_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint2_12 = 460;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uint2_12(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint2_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_12(Allocation ain1) {
+        return reduce_my_uint2_12(ain1, null);
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_2)) {
+            throw new RSRuntimeException("Type mismatch with U32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint2_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint2_13 = 461;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uint2_13(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint2_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_13(Allocation ain1) {
+        return reduce_my_uint2_13(ain1, null);
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_2)) {
+            throw new RSRuntimeException("Type mismatch with U32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint2_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint2_14 = 462;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uint2_14(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint2_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_14(Allocation ain1) {
+        return reduce_my_uint2_14(ain1, null);
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_2)) {
+            throw new RSRuntimeException("Type mismatch with U32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint2_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint2_15 = 463;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_uint2_15(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint2_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_15(Allocation ain1) {
+        return reduce_my_uint2_15(ain1, null);
+    }
+
+    // ain1 = "uint2 in"
+    public result_int reduce_my_uint2_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_2)) {
+            throw new RSRuntimeException("Type mismatch with U32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint2_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint4_0 = 464;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uint4_0(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint4_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_0(Allocation ain1) {
+        return reduce_my_uint4_0(ain1, null);
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_4)) {
+            throw new RSRuntimeException("Type mismatch with U32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint4_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint4_1 = 465;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uint4_1(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint4_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_1(Allocation ain1) {
+        return reduce_my_uint4_1(ain1, null);
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_4)) {
+            throw new RSRuntimeException("Type mismatch with U32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint4_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint4_2 = 466;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uint4_2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint4_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_2(Allocation ain1) {
+        return reduce_my_uint4_2(ain1, null);
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_4)) {
+            throw new RSRuntimeException("Type mismatch with U32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint4_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint4_3 = 467;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uint4_3(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint4_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_3(Allocation ain1) {
+        return reduce_my_uint4_3(ain1, null);
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_4)) {
+            throw new RSRuntimeException("Type mismatch with U32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint4_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint4_4 = 468;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uint4_4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint4_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_4(Allocation ain1) {
+        return reduce_my_uint4_4(ain1, null);
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_4)) {
+            throw new RSRuntimeException("Type mismatch with U32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint4_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint4_5 = 469;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uint4_5(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint4_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_5(Allocation ain1) {
+        return reduce_my_uint4_5(ain1, null);
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_4)) {
+            throw new RSRuntimeException("Type mismatch with U32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint4_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint4_6 = 470;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uint4_6(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint4_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_6(Allocation ain1) {
+        return reduce_my_uint4_6(ain1, null);
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_4)) {
+            throw new RSRuntimeException("Type mismatch with U32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint4_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint4_7 = 471;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uint4_7(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint4_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_7(Allocation ain1) {
+        return reduce_my_uint4_7(ain1, null);
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_4)) {
+            throw new RSRuntimeException("Type mismatch with U32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint4_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint4_8 = 472;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uint4_8(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint4_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_8(Allocation ain1) {
+        return reduce_my_uint4_8(ain1, null);
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_4)) {
+            throw new RSRuntimeException("Type mismatch with U32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint4_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint4_9 = 473;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uint4_9(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint4_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_9(Allocation ain1) {
+        return reduce_my_uint4_9(ain1, null);
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_4)) {
+            throw new RSRuntimeException("Type mismatch with U32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint4_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint4_10 = 474;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uint4_10(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint4_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_10(Allocation ain1) {
+        return reduce_my_uint4_10(ain1, null);
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_4)) {
+            throw new RSRuntimeException("Type mismatch with U32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint4_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint4_11 = 475;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uint4_11(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint4_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_11(Allocation ain1) {
+        return reduce_my_uint4_11(ain1, null);
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_4)) {
+            throw new RSRuntimeException("Type mismatch with U32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint4_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint4_12 = 476;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uint4_12(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint4_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_12(Allocation ain1) {
+        return reduce_my_uint4_12(ain1, null);
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_4)) {
+            throw new RSRuntimeException("Type mismatch with U32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint4_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint4_13 = 477;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uint4_13(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint4_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_13(Allocation ain1) {
+        return reduce_my_uint4_13(ain1, null);
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_4)) {
+            throw new RSRuntimeException("Type mismatch with U32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint4_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint4_14 = 478;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uint4_14(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint4_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_14(Allocation ain1) {
+        return reduce_my_uint4_14(ain1, null);
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_4)) {
+            throw new RSRuntimeException("Type mismatch with U32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint4_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint4_15 = 479;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_uint4_15(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_uint4_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_15(Allocation ain1) {
+        return reduce_my_uint4_15(ain1, null);
+    }
+
+    // ain1 = "uint4 in"
+    public result_int reduce_my_uint4_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_4)) {
+            throw new RSRuntimeException("Type mismatch with U32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint4_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong_0 = 480;
+    // in1 = "in"
+    public result_int reduce_my_ulong_0(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_0(Allocation ain1) {
+        return reduce_my_ulong_0(ain1, null);
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64)) {
+            throw new RSRuntimeException("Type mismatch with U64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong_1 = 481;
+    // in1 = "in"
+    public result_int reduce_my_ulong_1(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_1(Allocation ain1) {
+        return reduce_my_ulong_1(ain1, null);
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64)) {
+            throw new RSRuntimeException("Type mismatch with U64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong_2 = 482;
+    // in1 = "in"
+    public result_int reduce_my_ulong_2(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_2(Allocation ain1) {
+        return reduce_my_ulong_2(ain1, null);
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64)) {
+            throw new RSRuntimeException("Type mismatch with U64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong_3 = 483;
+    // in1 = "in"
+    public result_int reduce_my_ulong_3(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_3(Allocation ain1) {
+        return reduce_my_ulong_3(ain1, null);
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64)) {
+            throw new RSRuntimeException("Type mismatch with U64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong_4 = 484;
+    // in1 = "in"
+    public result_int reduce_my_ulong_4(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_4(Allocation ain1) {
+        return reduce_my_ulong_4(ain1, null);
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64)) {
+            throw new RSRuntimeException("Type mismatch with U64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong_5 = 485;
+    // in1 = "in"
+    public result_int reduce_my_ulong_5(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_5(Allocation ain1) {
+        return reduce_my_ulong_5(ain1, null);
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64)) {
+            throw new RSRuntimeException("Type mismatch with U64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong_6 = 486;
+    // in1 = "in"
+    public result_int reduce_my_ulong_6(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_6(Allocation ain1) {
+        return reduce_my_ulong_6(ain1, null);
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64)) {
+            throw new RSRuntimeException("Type mismatch with U64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong_7 = 487;
+    // in1 = "in"
+    public result_int reduce_my_ulong_7(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_7(Allocation ain1) {
+        return reduce_my_ulong_7(ain1, null);
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64)) {
+            throw new RSRuntimeException("Type mismatch with U64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong_8 = 488;
+    // in1 = "in"
+    public result_int reduce_my_ulong_8(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_8(Allocation ain1) {
+        return reduce_my_ulong_8(ain1, null);
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64)) {
+            throw new RSRuntimeException("Type mismatch with U64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong_9 = 489;
+    // in1 = "in"
+    public result_int reduce_my_ulong_9(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_9(Allocation ain1) {
+        return reduce_my_ulong_9(ain1, null);
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64)) {
+            throw new RSRuntimeException("Type mismatch with U64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong_10 = 490;
+    // in1 = "in"
+    public result_int reduce_my_ulong_10(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_10(Allocation ain1) {
+        return reduce_my_ulong_10(ain1, null);
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64)) {
+            throw new RSRuntimeException("Type mismatch with U64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong_11 = 491;
+    // in1 = "in"
+    public result_int reduce_my_ulong_11(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_11(Allocation ain1) {
+        return reduce_my_ulong_11(ain1, null);
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64)) {
+            throw new RSRuntimeException("Type mismatch with U64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong_12 = 492;
+    // in1 = "in"
+    public result_int reduce_my_ulong_12(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_12(Allocation ain1) {
+        return reduce_my_ulong_12(ain1, null);
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64)) {
+            throw new RSRuntimeException("Type mismatch with U64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong_13 = 493;
+    // in1 = "in"
+    public result_int reduce_my_ulong_13(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_13(Allocation ain1) {
+        return reduce_my_ulong_13(ain1, null);
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64)) {
+            throw new RSRuntimeException("Type mismatch with U64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong_14 = 494;
+    // in1 = "in"
+    public result_int reduce_my_ulong_14(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_14(Allocation ain1) {
+        return reduce_my_ulong_14(ain1, null);
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64)) {
+            throw new RSRuntimeException("Type mismatch with U64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong_15 = 495;
+    // in1 = "in"
+    public result_int reduce_my_ulong_15(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_15(Allocation ain1) {
+        return reduce_my_ulong_15(ain1, null);
+    }
+
+    // ain1 = "ulong in"
+    public result_int reduce_my_ulong_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64)) {
+            throw new RSRuntimeException("Type mismatch with U64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong2_0 = 496;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ulong2_0(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong2_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_0(Allocation ain1) {
+        return reduce_my_ulong2_0(ain1, null);
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_2)) {
+            throw new RSRuntimeException("Type mismatch with U64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong2_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong2_1 = 497;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ulong2_1(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong2_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_1(Allocation ain1) {
+        return reduce_my_ulong2_1(ain1, null);
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_2)) {
+            throw new RSRuntimeException("Type mismatch with U64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong2_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong2_2 = 498;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ulong2_2(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong2_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_2(Allocation ain1) {
+        return reduce_my_ulong2_2(ain1, null);
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_2)) {
+            throw new RSRuntimeException("Type mismatch with U64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong2_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong2_3 = 499;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ulong2_3(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong2_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_3(Allocation ain1) {
+        return reduce_my_ulong2_3(ain1, null);
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_2)) {
+            throw new RSRuntimeException("Type mismatch with U64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong2_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong2_4 = 500;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ulong2_4(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong2_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_4(Allocation ain1) {
+        return reduce_my_ulong2_4(ain1, null);
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_2)) {
+            throw new RSRuntimeException("Type mismatch with U64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong2_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong2_5 = 501;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ulong2_5(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong2_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_5(Allocation ain1) {
+        return reduce_my_ulong2_5(ain1, null);
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_2)) {
+            throw new RSRuntimeException("Type mismatch with U64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong2_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong2_6 = 502;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ulong2_6(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong2_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_6(Allocation ain1) {
+        return reduce_my_ulong2_6(ain1, null);
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_2)) {
+            throw new RSRuntimeException("Type mismatch with U64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong2_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong2_7 = 503;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ulong2_7(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong2_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_7(Allocation ain1) {
+        return reduce_my_ulong2_7(ain1, null);
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_2)) {
+            throw new RSRuntimeException("Type mismatch with U64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong2_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong2_8 = 504;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ulong2_8(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong2_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_8(Allocation ain1) {
+        return reduce_my_ulong2_8(ain1, null);
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_2)) {
+            throw new RSRuntimeException("Type mismatch with U64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong2_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong2_9 = 505;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ulong2_9(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong2_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_9(Allocation ain1) {
+        return reduce_my_ulong2_9(ain1, null);
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_2)) {
+            throw new RSRuntimeException("Type mismatch with U64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong2_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong2_10 = 506;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ulong2_10(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong2_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_10(Allocation ain1) {
+        return reduce_my_ulong2_10(ain1, null);
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_2)) {
+            throw new RSRuntimeException("Type mismatch with U64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong2_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong2_11 = 507;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ulong2_11(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong2_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_11(Allocation ain1) {
+        return reduce_my_ulong2_11(ain1, null);
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_2)) {
+            throw new RSRuntimeException("Type mismatch with U64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong2_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong2_12 = 508;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ulong2_12(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong2_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_12(Allocation ain1) {
+        return reduce_my_ulong2_12(ain1, null);
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_2)) {
+            throw new RSRuntimeException("Type mismatch with U64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong2_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong2_13 = 509;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ulong2_13(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong2_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_13(Allocation ain1) {
+        return reduce_my_ulong2_13(ain1, null);
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_2)) {
+            throw new RSRuntimeException("Type mismatch with U64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong2_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong2_14 = 510;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ulong2_14(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong2_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_14(Allocation ain1) {
+        return reduce_my_ulong2_14(ain1, null);
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_2)) {
+            throw new RSRuntimeException("Type mismatch with U64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong2_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong2_15 = 511;
+    // in1 = "in", flattened 2-vectors
+    public result_int reduce_my_ulong2_15(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong2_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_15(Allocation ain1) {
+        return reduce_my_ulong2_15(ain1, null);
+    }
+
+    // ain1 = "ulong2 in"
+    public result_int reduce_my_ulong2_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_2)) {
+            throw new RSRuntimeException("Type mismatch with U64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong2_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong4_0 = 512;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ulong4_0(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong4_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_0(Allocation ain1) {
+        return reduce_my_ulong4_0(ain1, null);
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_4)) {
+            throw new RSRuntimeException("Type mismatch with U64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong4_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong4_1 = 513;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ulong4_1(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong4_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_1(Allocation ain1) {
+        return reduce_my_ulong4_1(ain1, null);
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_4)) {
+            throw new RSRuntimeException("Type mismatch with U64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong4_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong4_2 = 514;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ulong4_2(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong4_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_2(Allocation ain1) {
+        return reduce_my_ulong4_2(ain1, null);
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_4)) {
+            throw new RSRuntimeException("Type mismatch with U64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong4_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong4_3 = 515;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ulong4_3(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong4_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_3(Allocation ain1) {
+        return reduce_my_ulong4_3(ain1, null);
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_4)) {
+            throw new RSRuntimeException("Type mismatch with U64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong4_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong4_4 = 516;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ulong4_4(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong4_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_4(Allocation ain1) {
+        return reduce_my_ulong4_4(ain1, null);
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_4)) {
+            throw new RSRuntimeException("Type mismatch with U64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong4_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong4_5 = 517;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ulong4_5(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong4_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_5(Allocation ain1) {
+        return reduce_my_ulong4_5(ain1, null);
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_4)) {
+            throw new RSRuntimeException("Type mismatch with U64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong4_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong4_6 = 518;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ulong4_6(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong4_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_6(Allocation ain1) {
+        return reduce_my_ulong4_6(ain1, null);
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_4)) {
+            throw new RSRuntimeException("Type mismatch with U64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong4_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong4_7 = 519;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ulong4_7(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong4_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_7(Allocation ain1) {
+        return reduce_my_ulong4_7(ain1, null);
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_4)) {
+            throw new RSRuntimeException("Type mismatch with U64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong4_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong4_8 = 520;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ulong4_8(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong4_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_8(Allocation ain1) {
+        return reduce_my_ulong4_8(ain1, null);
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_4)) {
+            throw new RSRuntimeException("Type mismatch with U64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong4_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong4_9 = 521;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ulong4_9(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong4_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_9(Allocation ain1) {
+        return reduce_my_ulong4_9(ain1, null);
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_4)) {
+            throw new RSRuntimeException("Type mismatch with U64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong4_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong4_10 = 522;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ulong4_10(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong4_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_10(Allocation ain1) {
+        return reduce_my_ulong4_10(ain1, null);
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_4)) {
+            throw new RSRuntimeException("Type mismatch with U64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong4_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong4_11 = 523;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ulong4_11(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong4_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_11(Allocation ain1) {
+        return reduce_my_ulong4_11(ain1, null);
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_4)) {
+            throw new RSRuntimeException("Type mismatch with U64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong4_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong4_12 = 524;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ulong4_12(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong4_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_12(Allocation ain1) {
+        return reduce_my_ulong4_12(ain1, null);
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_4)) {
+            throw new RSRuntimeException("Type mismatch with U64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong4_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong4_13 = 525;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ulong4_13(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong4_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_13(Allocation ain1) {
+        return reduce_my_ulong4_13(ain1, null);
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_4)) {
+            throw new RSRuntimeException("Type mismatch with U64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong4_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong4_14 = 526;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ulong4_14(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong4_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_14(Allocation ain1) {
+        return reduce_my_ulong4_14(ain1, null);
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_4)) {
+            throw new RSRuntimeException("Type mismatch with U64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong4_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong4_15 = 527;
+    // in1 = "in", flattened 4-vectors
+    public result_int reduce_my_ulong4_15(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_ulong4_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_15(Allocation ain1) {
+        return reduce_my_ulong4_15(ain1, null);
+    }
+
+    // ain1 = "ulong4 in"
+    public result_int reduce_my_ulong4_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_4)) {
+            throw new RSRuntimeException("Type mismatch with U64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong4_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_0 = 528;
+    // in1 = "in"
+    public result_int reduce_my_bool_0(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_bool_0(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_0(Allocation ain1) {
+        return reduce_my_bool_0(ain1, null);
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_1 = 529;
+    // in1 = "in"
+    public result_int reduce_my_bool_1(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_bool_1(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_1(Allocation ain1) {
+        return reduce_my_bool_1(ain1, null);
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_2 = 530;
+    // in1 = "in"
+    public result_int reduce_my_bool_2(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_bool_2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_2(Allocation ain1) {
+        return reduce_my_bool_2(ain1, null);
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_3 = 531;
+    // in1 = "in"
+    public result_int reduce_my_bool_3(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_bool_3(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_3(Allocation ain1) {
+        return reduce_my_bool_3(ain1, null);
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_4 = 532;
+    // in1 = "in"
+    public result_int reduce_my_bool_4(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_bool_4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_4(Allocation ain1) {
+        return reduce_my_bool_4(ain1, null);
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_5 = 533;
+    // in1 = "in"
+    public result_int reduce_my_bool_5(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_bool_5(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_5(Allocation ain1) {
+        return reduce_my_bool_5(ain1, null);
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_6 = 534;
+    // in1 = "in"
+    public result_int reduce_my_bool_6(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_bool_6(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_6(Allocation ain1) {
+        return reduce_my_bool_6(ain1, null);
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_7 = 535;
+    // in1 = "in"
+    public result_int reduce_my_bool_7(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_bool_7(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_7(Allocation ain1) {
+        return reduce_my_bool_7(ain1, null);
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_8 = 536;
+    // in1 = "in"
+    public result_int reduce_my_bool_8(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_bool_8(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_8(Allocation ain1) {
+        return reduce_my_bool_8(ain1, null);
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_9 = 537;
+    // in1 = "in"
+    public result_int reduce_my_bool_9(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_bool_9(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_9(Allocation ain1) {
+        return reduce_my_bool_9(ain1, null);
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_10 = 538;
+    // in1 = "in"
+    public result_int reduce_my_bool_10(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_bool_10(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_10(Allocation ain1) {
+        return reduce_my_bool_10(ain1, null);
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_11 = 539;
+    // in1 = "in"
+    public result_int reduce_my_bool_11(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_bool_11(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_11(Allocation ain1) {
+        return reduce_my_bool_11(ain1, null);
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_12 = 540;
+    // in1 = "in"
+    public result_int reduce_my_bool_12(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_bool_12(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_12(Allocation ain1) {
+        return reduce_my_bool_12(ain1, null);
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_13 = 541;
+    // in1 = "in"
+    public result_int reduce_my_bool_13(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_bool_13(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_13(Allocation ain1) {
+        return reduce_my_bool_13(ain1, null);
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_14 = 542;
+    // in1 = "in"
+    public result_int reduce_my_bool_14(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_bool_14(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_14(Allocation ain1) {
+        return reduce_my_bool_14(ain1, null);
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_15 = 543;
+    // in1 = "in"
+    public result_int reduce_my_bool_15(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_bool_15(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_15(Allocation ain1) {
+        return reduce_my_bool_15(ain1, null);
+    }
+
+    // ain1 = "bool in"
+    public result_int reduce_my_bool_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_0 = 544;
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_0(Allocation ain1) {
+        return reduce_my_rs_matrix2x2_0(ain1, null);
+    }
+
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_1 = 545;
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_1(Allocation ain1) {
+        return reduce_my_rs_matrix2x2_1(ain1, null);
+    }
+
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_2 = 546;
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_2(Allocation ain1) {
+        return reduce_my_rs_matrix2x2_2(ain1, null);
+    }
+
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_3 = 547;
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_3(Allocation ain1) {
+        return reduce_my_rs_matrix2x2_3(ain1, null);
+    }
+
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_4 = 548;
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_4(Allocation ain1) {
+        return reduce_my_rs_matrix2x2_4(ain1, null);
+    }
+
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_5 = 549;
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_5(Allocation ain1) {
+        return reduce_my_rs_matrix2x2_5(ain1, null);
+    }
+
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_6 = 550;
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_6(Allocation ain1) {
+        return reduce_my_rs_matrix2x2_6(ain1, null);
+    }
+
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_7 = 551;
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_7(Allocation ain1) {
+        return reduce_my_rs_matrix2x2_7(ain1, null);
+    }
+
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_8 = 552;
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_8(Allocation ain1) {
+        return reduce_my_rs_matrix2x2_8(ain1, null);
+    }
+
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_9 = 553;
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_9(Allocation ain1) {
+        return reduce_my_rs_matrix2x2_9(ain1, null);
+    }
+
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_10 = 554;
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_10(Allocation ain1) {
+        return reduce_my_rs_matrix2x2_10(ain1, null);
+    }
+
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_11 = 555;
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_11(Allocation ain1) {
+        return reduce_my_rs_matrix2x2_11(ain1, null);
+    }
+
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_12 = 556;
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_12(Allocation ain1) {
+        return reduce_my_rs_matrix2x2_12(ain1, null);
+    }
+
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_13 = 557;
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_13(Allocation ain1) {
+        return reduce_my_rs_matrix2x2_13(ain1, null);
+    }
+
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_14 = 558;
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_14(Allocation ain1) {
+        return reduce_my_rs_matrix2x2_14(ain1, null);
+    }
+
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_15 = 559;
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_15(Allocation ain1) {
+        return reduce_my_rs_matrix2x2_15(ain1, null);
+    }
+
+    // ain1 = "rs_matrix2x2 in"
+    public result_int reduce_my_rs_matrix2x2_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix3x3_0 = 560;
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_0(Allocation ain1) {
+        return reduce_my_rs_matrix3x3_0(ain1, null);
+    }
+
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix3x3_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix3x3_1 = 561;
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_1(Allocation ain1) {
+        return reduce_my_rs_matrix3x3_1(ain1, null);
+    }
+
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix3x3_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix3x3_2 = 562;
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_2(Allocation ain1) {
+        return reduce_my_rs_matrix3x3_2(ain1, null);
+    }
+
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix3x3_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix3x3_3 = 563;
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_3(Allocation ain1) {
+        return reduce_my_rs_matrix3x3_3(ain1, null);
+    }
+
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix3x3_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix3x3_4 = 564;
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_4(Allocation ain1) {
+        return reduce_my_rs_matrix3x3_4(ain1, null);
+    }
+
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix3x3_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix3x3_5 = 565;
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_5(Allocation ain1) {
+        return reduce_my_rs_matrix3x3_5(ain1, null);
+    }
+
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix3x3_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix3x3_6 = 566;
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_6(Allocation ain1) {
+        return reduce_my_rs_matrix3x3_6(ain1, null);
+    }
+
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix3x3_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix3x3_7 = 567;
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_7(Allocation ain1) {
+        return reduce_my_rs_matrix3x3_7(ain1, null);
+    }
+
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix3x3_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix3x3_8 = 568;
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_8(Allocation ain1) {
+        return reduce_my_rs_matrix3x3_8(ain1, null);
+    }
+
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix3x3_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix3x3_9 = 569;
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_9(Allocation ain1) {
+        return reduce_my_rs_matrix3x3_9(ain1, null);
+    }
+
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix3x3_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix3x3_10 = 570;
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_10(Allocation ain1) {
+        return reduce_my_rs_matrix3x3_10(ain1, null);
+    }
+
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix3x3_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix3x3_11 = 571;
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_11(Allocation ain1) {
+        return reduce_my_rs_matrix3x3_11(ain1, null);
+    }
+
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix3x3_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix3x3_12 = 572;
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_12(Allocation ain1) {
+        return reduce_my_rs_matrix3x3_12(ain1, null);
+    }
+
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix3x3_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix3x3_13 = 573;
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_13(Allocation ain1) {
+        return reduce_my_rs_matrix3x3_13(ain1, null);
+    }
+
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix3x3_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix3x3_14 = 574;
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_14(Allocation ain1) {
+        return reduce_my_rs_matrix3x3_14(ain1, null);
+    }
+
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix3x3_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix3x3_15 = 575;
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_15(Allocation ain1) {
+        return reduce_my_rs_matrix3x3_15(ain1, null);
+    }
+
+    // ain1 = "rs_matrix3x3 in"
+    public result_int reduce_my_rs_matrix3x3_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix3x3_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix4x4_0 = 576;
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_0(Allocation ain1) {
+        return reduce_my_rs_matrix4x4_0(ain1, null);
+    }
+
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix4x4_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix4x4_1 = 577;
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_1(Allocation ain1) {
+        return reduce_my_rs_matrix4x4_1(ain1, null);
+    }
+
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix4x4_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix4x4_2 = 578;
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_2(Allocation ain1) {
+        return reduce_my_rs_matrix4x4_2(ain1, null);
+    }
+
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix4x4_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix4x4_3 = 579;
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_3(Allocation ain1) {
+        return reduce_my_rs_matrix4x4_3(ain1, null);
+    }
+
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix4x4_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix4x4_4 = 580;
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_4(Allocation ain1) {
+        return reduce_my_rs_matrix4x4_4(ain1, null);
+    }
+
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix4x4_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix4x4_5 = 581;
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_5(Allocation ain1) {
+        return reduce_my_rs_matrix4x4_5(ain1, null);
+    }
+
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix4x4_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix4x4_6 = 582;
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_6(Allocation ain1) {
+        return reduce_my_rs_matrix4x4_6(ain1, null);
+    }
+
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix4x4_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix4x4_7 = 583;
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_7(Allocation ain1) {
+        return reduce_my_rs_matrix4x4_7(ain1, null);
+    }
+
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix4x4_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix4x4_8 = 584;
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_8(Allocation ain1) {
+        return reduce_my_rs_matrix4x4_8(ain1, null);
+    }
+
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix4x4_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix4x4_9 = 585;
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_9(Allocation ain1) {
+        return reduce_my_rs_matrix4x4_9(ain1, null);
+    }
+
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix4x4_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix4x4_10 = 586;
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_10(Allocation ain1) {
+        return reduce_my_rs_matrix4x4_10(ain1, null);
+    }
+
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix4x4_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix4x4_11 = 587;
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_11(Allocation ain1) {
+        return reduce_my_rs_matrix4x4_11(ain1, null);
+    }
+
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix4x4_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix4x4_12 = 588;
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_12(Allocation ain1) {
+        return reduce_my_rs_matrix4x4_12(ain1, null);
+    }
+
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix4x4_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix4x4_13 = 589;
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_13(Allocation ain1) {
+        return reduce_my_rs_matrix4x4_13(ain1, null);
+    }
+
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix4x4_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix4x4_14 = 590;
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_14(Allocation ain1) {
+        return reduce_my_rs_matrix4x4_14(ain1, null);
+    }
+
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix4x4_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix4x4_15 = 591;
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_15(Allocation ain1) {
+        return reduce_my_rs_matrix4x4_15(ain1, null);
+    }
+
+    // ain1 = "rs_matrix4x4 in"
+    public result_int reduce_my_rs_matrix4x4_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix4x4_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_0 = 592;
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_0(Allocation ain1) {
+        return reduce_my_MyStruct_0(ain1, null);
+    }
+
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_0(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_0, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_1 = 593;
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_1(Allocation ain1) {
+        return reduce_my_MyStruct_1(ain1, null);
+    }
+
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_1(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_1, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_2 = 594;
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_2(Allocation ain1) {
+        return reduce_my_MyStruct_2(ain1, null);
+    }
+
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_2, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_3 = 595;
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_3(Allocation ain1) {
+        return reduce_my_MyStruct_3(ain1, null);
+    }
+
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_3(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_3, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_4 = 596;
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_4(Allocation ain1) {
+        return reduce_my_MyStruct_4(ain1, null);
+    }
+
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_4, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_5 = 597;
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_5(Allocation ain1) {
+        return reduce_my_MyStruct_5(ain1, null);
+    }
+
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_5(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_5, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_6 = 598;
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_6(Allocation ain1) {
+        return reduce_my_MyStruct_6(ain1, null);
+    }
+
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_6(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_6, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_7 = 599;
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_7(Allocation ain1) {
+        return reduce_my_MyStruct_7(ain1, null);
+    }
+
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_7(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_7, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_8 = 600;
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_8(Allocation ain1) {
+        return reduce_my_MyStruct_8(ain1, null);
+    }
+
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_8(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_8, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_9 = 601;
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_9(Allocation ain1) {
+        return reduce_my_MyStruct_9(ain1, null);
+    }
+
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_9(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_9, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_10 = 602;
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_10(Allocation ain1) {
+        return reduce_my_MyStruct_10(ain1, null);
+    }
+
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_10(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_10, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_11 = 603;
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_11(Allocation ain1) {
+        return reduce_my_MyStruct_11(ain1, null);
+    }
+
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_11(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_11, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_12 = 604;
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_12(Allocation ain1) {
+        return reduce_my_MyStruct_12(ain1, null);
+    }
+
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_12(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_12, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_13 = 605;
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_13(Allocation ain1) {
+        return reduce_my_MyStruct_13(ain1, null);
+    }
+
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_13(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_13, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_14 = 606;
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_14(Allocation ain1) {
+        return reduce_my_MyStruct_14(ain1, null);
+    }
+
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_14(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_14, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_15 = 607;
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_15(Allocation ain1) {
+        return reduce_my_MyStruct_15(ain1, null);
+    }
+
+    // ain1 = "/* struct <> */ in"
+    public result_int reduce_my_MyStruct_15(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_15, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+}
+
diff --git a/slang/tests/P_reduce_general_input/ScriptField_MyStruct.java.expect b/slang/tests/P_reduce_general_input/ScriptField_MyStruct.java.expect
new file mode 100644
index 0000000..ec10677
--- /dev/null
+++ b/slang/tests/P_reduce_general_input/ScriptField_MyStruct.java.expect
@@ -0,0 +1,200 @@
+/*
+ * Copyright (C) 2011-2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * This file is auto-generated. DO NOT MODIFY!
+ * The source Renderscript file: reduce_general_input.rs
+ */
+
+package input;
+
+import android.renderscript.*;
+import input.reduce_general_inputBitCode;
+
+/**
+ * @hide
+ */
+public class ScriptField_MyStruct extends android.renderscript.Script.FieldBase {
+    static public class Item {
+
+        float f;
+        double d;
+
+        Item() {
+        }
+
+    }
+
+    private Item mItemArray[];
+    private FieldPacker mIOBuffer;
+    private static java.lang.ref.WeakReference<Element> mElementCache = new java.lang.ref.WeakReference<Element>(null);
+    public static Element createElement(RenderScript rs) {
+        Element.Builder eb = new Element.Builder(rs);
+        eb.add(Element.F32(rs), "f");
+        eb.add(Element.U32(rs), "#rs_padding_1");
+        eb.add(Element.F64(rs), "d");
+        return eb.create();
+    }
+
+    private  ScriptField_MyStruct(RenderScript rs) {
+        mItemArray = null;
+        mIOBuffer = null;
+        mElement = createElement(rs);
+    }
+
+    public  ScriptField_MyStruct(RenderScript rs, int count) {
+        mItemArray = null;
+        mIOBuffer = null;
+        mElement = createElement(rs);
+        init(rs, count);
+    }
+
+    public  ScriptField_MyStruct(RenderScript rs, int count, int usages) {
+        mItemArray = null;
+        mIOBuffer = null;
+        mElement = createElement(rs);
+        init(rs, count, usages);
+    }
+
+    public static ScriptField_MyStruct create1D(RenderScript rs, int dimX, int usages) {
+        ScriptField_MyStruct obj = new ScriptField_MyStruct(rs);
+        obj.mAllocation = Allocation.createSized(rs, obj.mElement, dimX, usages);
+        return obj;
+    }
+
+    public static ScriptField_MyStruct create1D(RenderScript rs, int dimX) {
+        return create1D(rs, dimX, Allocation.USAGE_SCRIPT);
+    }
+
+    public static ScriptField_MyStruct create2D(RenderScript rs, int dimX, int dimY) {
+        return create2D(rs, dimX, dimY, Allocation.USAGE_SCRIPT);
+    }
+
+    public static ScriptField_MyStruct create2D(RenderScript rs, int dimX, int dimY, int usages) {
+        ScriptField_MyStruct obj = new ScriptField_MyStruct(rs);
+        Type.Builder b = new Type.Builder(rs, obj.mElement);
+        b.setX(dimX);
+        b.setY(dimY);
+        Type t = b.create();
+        obj.mAllocation = Allocation.createTyped(rs, t, usages);
+        return obj;
+    }
+
+    public static Type.Builder createTypeBuilder(RenderScript rs) {
+        Element e = createElement(rs);
+        return new Type.Builder(rs, e);
+    }
+
+    public static ScriptField_MyStruct createCustom(RenderScript rs, Type.Builder tb, int usages) {
+        ScriptField_MyStruct obj = new ScriptField_MyStruct(rs);
+        Type t = tb.create();
+        if (t.getElement() != obj.mElement) {
+            throw new RSIllegalArgumentException("Type.Builder did not match expected element type.");
+        }
+        obj.mAllocation = Allocation.createTyped(rs, t, usages);
+        return obj;
+    }
+
+    private void copyToArrayLocal(Item i, FieldPacker fp) {
+        fp.addF32(i.f);
+        fp.skip(4);
+        fp.addF64(i.d);
+    }
+
+    private void copyToArray(Item i, int index) {
+        if (mIOBuffer == null) mIOBuffer = new FieldPacker(mElement.getBytesSize() * getType().getX()/* count */);
+        mIOBuffer.reset(index * mElement.getBytesSize());
+        copyToArrayLocal(i, mIOBuffer);
+    }
+
+    public synchronized void set(Item i, int index, boolean copyNow) {
+        if (mItemArray == null) mItemArray = new Item[getType().getX() /* count */];
+        mItemArray[index] = i;
+        if (copyNow)  {
+            copyToArray(i, index);
+            FieldPacker fp = new FieldPacker(mElement.getBytesSize());
+            copyToArrayLocal(i, fp);
+            mAllocation.setFromFieldPacker(index, fp);
+        }
+
+    }
+
+    public synchronized Item get(int index) {
+        if (mItemArray == null) return null;
+        return mItemArray[index];
+    }
+
+    public synchronized void set_f(int index, float v, boolean copyNow) {
+        if (mIOBuffer == null) mIOBuffer = new FieldPacker(mElement.getBytesSize() * getType().getX()/* count */);
+        if (mItemArray == null) mItemArray = new Item[getType().getX() /* count */];
+        if (mItemArray[index] == null) mItemArray[index] = new Item();
+        mItemArray[index].f = v;
+        if (copyNow)  {
+            mIOBuffer.reset(index * mElement.getBytesSize());
+            mIOBuffer.addF32(v);
+            FieldPacker fp = new FieldPacker(4);
+            fp.addF32(v);
+            mAllocation.setFromFieldPacker(index, 0, fp);
+        }
+
+    }
+
+    public synchronized void set_d(int index, double v, boolean copyNow) {
+        if (mIOBuffer == null) mIOBuffer = new FieldPacker(mElement.getBytesSize() * getType().getX()/* count */);
+        if (mItemArray == null) mItemArray = new Item[getType().getX() /* count */];
+        if (mItemArray[index] == null) mItemArray[index] = new Item();
+        mItemArray[index].d = v;
+        if (copyNow)  {
+            mIOBuffer.reset(index * mElement.getBytesSize() + 8);
+            mIOBuffer.addF64(v);
+            FieldPacker fp = new FieldPacker(8);
+            fp.addF64(v);
+            mAllocation.setFromFieldPacker(index, 2, fp);
+        }
+
+    }
+
+    public synchronized float get_f(int index) {
+        if (mItemArray == null) return 0;
+        return mItemArray[index].f;
+    }
+
+    public synchronized double get_d(int index) {
+        if (mItemArray == null) return 0;
+        return mItemArray[index].d;
+    }
+
+    public synchronized void copyAll() {
+        for (int ct = 0; ct < mItemArray.length; ct++) copyToArray(mItemArray[ct], ct);
+        mAllocation.setFromFieldPacker(0, mIOBuffer);
+    }
+
+    public synchronized void resize(int newSize) {
+        if (mItemArray != null)  {
+            int oldSize = mItemArray.length;
+            int copySize = Math.min(oldSize, newSize);
+            if (newSize == oldSize) return;
+            Item ni[] = new Item[newSize];
+            System.arraycopy(mItemArray, 0, ni, 0, copySize);
+            mItemArray = ni;
+        }
+
+        mAllocation.resize(newSize);
+        if (mIOBuffer != null) mIOBuffer = new FieldPacker(mElement.getBytesSize() * getType().getX()/* count */);
+    }
+
+}
+
diff --git a/slang/tests/P_reduce_general_input/gen-input.pl b/slang/tests/P_reduce_general_input/gen-input.pl
new file mode 100755
index 0000000..4be2e83
--- /dev/null
+++ b/slang/tests/P_reduce_general_input/gen-input.pl
@@ -0,0 +1,60 @@
+#!/usr/bin/perl -w
+
+# Generate trivial test cases to exercise input types.
+
+use strict;
+
+my @basicTypes = ("half", "float", "double",
+                  "char", "short", "int", "long",
+                  "uchar", "ushort", "uint", "ulong",
+                  "bool",
+                  "rs_matrix2x2", "rs_matrix3x3", "rs_matrix4x4",
+                  "MyStruct");
+
+my @specialParameters = ("context", "x", "y", "z");
+my $specialParameterPowerSetCardinality = 2 ** (1 + $#specialParameters);
+
+# 1 signifies non-vector
+# 3 is not supported for exported types
+my @vecLengths = (1, 2, 4);
+
+print "// -Wall -Werror\n";
+print "#pragma version(1)\n";
+print "#pragma rs java_package_name(input)\n\n";
+print "// This test case was created by $0.\n";
+print "// It exercises various legal combinations of inputs and special parameters,\n";
+print "//  so that we can ensure\n";
+print "// (a) We do not choke when compiling them\n";
+print "// (b) We reflect them correctly\n\n";
+print "// One example struct type\n";
+print "typedef struct MyStruct { float f; double d; } MyStruct;\n\n";
+print "// Trivial combiner shared by all test cases\n";
+print "static void combiner(int *accum, const int *other) { }\n";
+
+foreach my $basicType (@basicTypes) {
+  foreach my $vecLen (@vecLengths) {
+
+    # There are no bool vectors or struct vectors
+    next if ($vecLen > 1) && (($basicType eq "bool") || ($basicType eq "MyStruct"));
+
+    # There are no matrix or object vectors
+    next if ($vecLen > 1) && (substr($basicType, 0, 3) eq "rs_");
+
+    my $eltName = $basicType;
+    $eltName .= $vecLen if ($vecLen > 1);
+
+    for (my $specials = 0; $specials < $specialParameterPowerSetCardinality; ++$specials) {
+      my $reduceName = "my_${eltName}_${specials}";
+      my $accumName = "${reduceName}_accum";
+      print "\n";
+      print "#pragma rs reduce(${reduceName}) accumulator(${accumName}) combiner(combiner)\n";
+      print "static void ${accumName}(int *accum, ${eltName} in";
+      for (my $special = 0; $special <= $#specialParameters; ++$special) {
+        if ($specials & 2**$special) {
+          print ", " . ($special ? "uint" : "rs_kernel_context") . " ${specialParameters[$special]}";
+        }
+      }
+      print ") { }\n";
+    }
+  }
+}
diff --git a/slang/tests/P_reduce_general_input/reduce_general_input.rs b/slang/tests/P_reduce_general_input/reduce_general_input.rs
new file mode 100644
index 0000000..e0fa90f
--- /dev/null
+++ b/slang/tests/P_reduce_general_input/reduce_general_input.rs
@@ -0,0 +1,1839 @@
+// -Wall -Werror
+#pragma version(1)
+#pragma rs java_package_name(input)
+
+// This test case was created by ./gen-input.pl.
+// It exercises various legal combinations of inputs and special parameters,
+//  so that we can ensure
+// (a) We do not choke when compiling them
+// (b) We reflect them correctly
+
+// One example struct type
+typedef struct MyStruct { float f; double d; } MyStruct;
+
+// Trivial combiner shared by all test cases
+static void combiner(int *accum, const int *other) { }
+
+#pragma rs reduce(my_half_0) accumulator(my_half_0_accum) combiner(combiner)
+static void my_half_0_accum(int *accum, half in) { }
+
+#pragma rs reduce(my_half_1) accumulator(my_half_1_accum) combiner(combiner)
+static void my_half_1_accum(int *accum, half in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half_2) accumulator(my_half_2_accum) combiner(combiner)
+static void my_half_2_accum(int *accum, half in, uint x) { }
+
+#pragma rs reduce(my_half_3) accumulator(my_half_3_accum) combiner(combiner)
+static void my_half_3_accum(int *accum, half in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_half_4) accumulator(my_half_4_accum) combiner(combiner)
+static void my_half_4_accum(int *accum, half in, uint y) { }
+
+#pragma rs reduce(my_half_5) accumulator(my_half_5_accum) combiner(combiner)
+static void my_half_5_accum(int *accum, half in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_half_6) accumulator(my_half_6_accum) combiner(combiner)
+static void my_half_6_accum(int *accum, half in, uint x, uint y) { }
+
+#pragma rs reduce(my_half_7) accumulator(my_half_7_accum) combiner(combiner)
+static void my_half_7_accum(int *accum, half in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_half_8) accumulator(my_half_8_accum) combiner(combiner)
+static void my_half_8_accum(int *accum, half in, uint z) { }
+
+#pragma rs reduce(my_half_9) accumulator(my_half_9_accum) combiner(combiner)
+static void my_half_9_accum(int *accum, half in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_half_10) accumulator(my_half_10_accum) combiner(combiner)
+static void my_half_10_accum(int *accum, half in, uint x, uint z) { }
+
+#pragma rs reduce(my_half_11) accumulator(my_half_11_accum) combiner(combiner)
+static void my_half_11_accum(int *accum, half in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_half_12) accumulator(my_half_12_accum) combiner(combiner)
+static void my_half_12_accum(int *accum, half in, uint y, uint z) { }
+
+#pragma rs reduce(my_half_13) accumulator(my_half_13_accum) combiner(combiner)
+static void my_half_13_accum(int *accum, half in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_half_14) accumulator(my_half_14_accum) combiner(combiner)
+static void my_half_14_accum(int *accum, half in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_half_15) accumulator(my_half_15_accum) combiner(combiner)
+static void my_half_15_accum(int *accum, half in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_half2_0) accumulator(my_half2_0_accum) combiner(combiner)
+static void my_half2_0_accum(int *accum, half2 in) { }
+
+#pragma rs reduce(my_half2_1) accumulator(my_half2_1_accum) combiner(combiner)
+static void my_half2_1_accum(int *accum, half2 in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half2_2) accumulator(my_half2_2_accum) combiner(combiner)
+static void my_half2_2_accum(int *accum, half2 in, uint x) { }
+
+#pragma rs reduce(my_half2_3) accumulator(my_half2_3_accum) combiner(combiner)
+static void my_half2_3_accum(int *accum, half2 in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_half2_4) accumulator(my_half2_4_accum) combiner(combiner)
+static void my_half2_4_accum(int *accum, half2 in, uint y) { }
+
+#pragma rs reduce(my_half2_5) accumulator(my_half2_5_accum) combiner(combiner)
+static void my_half2_5_accum(int *accum, half2 in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_half2_6) accumulator(my_half2_6_accum) combiner(combiner)
+static void my_half2_6_accum(int *accum, half2 in, uint x, uint y) { }
+
+#pragma rs reduce(my_half2_7) accumulator(my_half2_7_accum) combiner(combiner)
+static void my_half2_7_accum(int *accum, half2 in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_half2_8) accumulator(my_half2_8_accum) combiner(combiner)
+static void my_half2_8_accum(int *accum, half2 in, uint z) { }
+
+#pragma rs reduce(my_half2_9) accumulator(my_half2_9_accum) combiner(combiner)
+static void my_half2_9_accum(int *accum, half2 in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_half2_10) accumulator(my_half2_10_accum) combiner(combiner)
+static void my_half2_10_accum(int *accum, half2 in, uint x, uint z) { }
+
+#pragma rs reduce(my_half2_11) accumulator(my_half2_11_accum) combiner(combiner)
+static void my_half2_11_accum(int *accum, half2 in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_half2_12) accumulator(my_half2_12_accum) combiner(combiner)
+static void my_half2_12_accum(int *accum, half2 in, uint y, uint z) { }
+
+#pragma rs reduce(my_half2_13) accumulator(my_half2_13_accum) combiner(combiner)
+static void my_half2_13_accum(int *accum, half2 in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_half2_14) accumulator(my_half2_14_accum) combiner(combiner)
+static void my_half2_14_accum(int *accum, half2 in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_half2_15) accumulator(my_half2_15_accum) combiner(combiner)
+static void my_half2_15_accum(int *accum, half2 in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_half4_0) accumulator(my_half4_0_accum) combiner(combiner)
+static void my_half4_0_accum(int *accum, half4 in) { }
+
+#pragma rs reduce(my_half4_1) accumulator(my_half4_1_accum) combiner(combiner)
+static void my_half4_1_accum(int *accum, half4 in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half4_2) accumulator(my_half4_2_accum) combiner(combiner)
+static void my_half4_2_accum(int *accum, half4 in, uint x) { }
+
+#pragma rs reduce(my_half4_3) accumulator(my_half4_3_accum) combiner(combiner)
+static void my_half4_3_accum(int *accum, half4 in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_half4_4) accumulator(my_half4_4_accum) combiner(combiner)
+static void my_half4_4_accum(int *accum, half4 in, uint y) { }
+
+#pragma rs reduce(my_half4_5) accumulator(my_half4_5_accum) combiner(combiner)
+static void my_half4_5_accum(int *accum, half4 in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_half4_6) accumulator(my_half4_6_accum) combiner(combiner)
+static void my_half4_6_accum(int *accum, half4 in, uint x, uint y) { }
+
+#pragma rs reduce(my_half4_7) accumulator(my_half4_7_accum) combiner(combiner)
+static void my_half4_7_accum(int *accum, half4 in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_half4_8) accumulator(my_half4_8_accum) combiner(combiner)
+static void my_half4_8_accum(int *accum, half4 in, uint z) { }
+
+#pragma rs reduce(my_half4_9) accumulator(my_half4_9_accum) combiner(combiner)
+static void my_half4_9_accum(int *accum, half4 in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_half4_10) accumulator(my_half4_10_accum) combiner(combiner)
+static void my_half4_10_accum(int *accum, half4 in, uint x, uint z) { }
+
+#pragma rs reduce(my_half4_11) accumulator(my_half4_11_accum) combiner(combiner)
+static void my_half4_11_accum(int *accum, half4 in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_half4_12) accumulator(my_half4_12_accum) combiner(combiner)
+static void my_half4_12_accum(int *accum, half4 in, uint y, uint z) { }
+
+#pragma rs reduce(my_half4_13) accumulator(my_half4_13_accum) combiner(combiner)
+static void my_half4_13_accum(int *accum, half4 in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_half4_14) accumulator(my_half4_14_accum) combiner(combiner)
+static void my_half4_14_accum(int *accum, half4 in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_half4_15) accumulator(my_half4_15_accum) combiner(combiner)
+static void my_half4_15_accum(int *accum, half4 in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_float_0) accumulator(my_float_0_accum) combiner(combiner)
+static void my_float_0_accum(int *accum, float in) { }
+
+#pragma rs reduce(my_float_1) accumulator(my_float_1_accum) combiner(combiner)
+static void my_float_1_accum(int *accum, float in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float_2) accumulator(my_float_2_accum) combiner(combiner)
+static void my_float_2_accum(int *accum, float in, uint x) { }
+
+#pragma rs reduce(my_float_3) accumulator(my_float_3_accum) combiner(combiner)
+static void my_float_3_accum(int *accum, float in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_float_4) accumulator(my_float_4_accum) combiner(combiner)
+static void my_float_4_accum(int *accum, float in, uint y) { }
+
+#pragma rs reduce(my_float_5) accumulator(my_float_5_accum) combiner(combiner)
+static void my_float_5_accum(int *accum, float in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_float_6) accumulator(my_float_6_accum) combiner(combiner)
+static void my_float_6_accum(int *accum, float in, uint x, uint y) { }
+
+#pragma rs reduce(my_float_7) accumulator(my_float_7_accum) combiner(combiner)
+static void my_float_7_accum(int *accum, float in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_float_8) accumulator(my_float_8_accum) combiner(combiner)
+static void my_float_8_accum(int *accum, float in, uint z) { }
+
+#pragma rs reduce(my_float_9) accumulator(my_float_9_accum) combiner(combiner)
+static void my_float_9_accum(int *accum, float in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_float_10) accumulator(my_float_10_accum) combiner(combiner)
+static void my_float_10_accum(int *accum, float in, uint x, uint z) { }
+
+#pragma rs reduce(my_float_11) accumulator(my_float_11_accum) combiner(combiner)
+static void my_float_11_accum(int *accum, float in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_float_12) accumulator(my_float_12_accum) combiner(combiner)
+static void my_float_12_accum(int *accum, float in, uint y, uint z) { }
+
+#pragma rs reduce(my_float_13) accumulator(my_float_13_accum) combiner(combiner)
+static void my_float_13_accum(int *accum, float in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_float_14) accumulator(my_float_14_accum) combiner(combiner)
+static void my_float_14_accum(int *accum, float in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_float_15) accumulator(my_float_15_accum) combiner(combiner)
+static void my_float_15_accum(int *accum, float in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_float2_0) accumulator(my_float2_0_accum) combiner(combiner)
+static void my_float2_0_accum(int *accum, float2 in) { }
+
+#pragma rs reduce(my_float2_1) accumulator(my_float2_1_accum) combiner(combiner)
+static void my_float2_1_accum(int *accum, float2 in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float2_2) accumulator(my_float2_2_accum) combiner(combiner)
+static void my_float2_2_accum(int *accum, float2 in, uint x) { }
+
+#pragma rs reduce(my_float2_3) accumulator(my_float2_3_accum) combiner(combiner)
+static void my_float2_3_accum(int *accum, float2 in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_float2_4) accumulator(my_float2_4_accum) combiner(combiner)
+static void my_float2_4_accum(int *accum, float2 in, uint y) { }
+
+#pragma rs reduce(my_float2_5) accumulator(my_float2_5_accum) combiner(combiner)
+static void my_float2_5_accum(int *accum, float2 in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_float2_6) accumulator(my_float2_6_accum) combiner(combiner)
+static void my_float2_6_accum(int *accum, float2 in, uint x, uint y) { }
+
+#pragma rs reduce(my_float2_7) accumulator(my_float2_7_accum) combiner(combiner)
+static void my_float2_7_accum(int *accum, float2 in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_float2_8) accumulator(my_float2_8_accum) combiner(combiner)
+static void my_float2_8_accum(int *accum, float2 in, uint z) { }
+
+#pragma rs reduce(my_float2_9) accumulator(my_float2_9_accum) combiner(combiner)
+static void my_float2_9_accum(int *accum, float2 in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_float2_10) accumulator(my_float2_10_accum) combiner(combiner)
+static void my_float2_10_accum(int *accum, float2 in, uint x, uint z) { }
+
+#pragma rs reduce(my_float2_11) accumulator(my_float2_11_accum) combiner(combiner)
+static void my_float2_11_accum(int *accum, float2 in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_float2_12) accumulator(my_float2_12_accum) combiner(combiner)
+static void my_float2_12_accum(int *accum, float2 in, uint y, uint z) { }
+
+#pragma rs reduce(my_float2_13) accumulator(my_float2_13_accum) combiner(combiner)
+static void my_float2_13_accum(int *accum, float2 in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_float2_14) accumulator(my_float2_14_accum) combiner(combiner)
+static void my_float2_14_accum(int *accum, float2 in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_float2_15) accumulator(my_float2_15_accum) combiner(combiner)
+static void my_float2_15_accum(int *accum, float2 in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_float4_0) accumulator(my_float4_0_accum) combiner(combiner)
+static void my_float4_0_accum(int *accum, float4 in) { }
+
+#pragma rs reduce(my_float4_1) accumulator(my_float4_1_accum) combiner(combiner)
+static void my_float4_1_accum(int *accum, float4 in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float4_2) accumulator(my_float4_2_accum) combiner(combiner)
+static void my_float4_2_accum(int *accum, float4 in, uint x) { }
+
+#pragma rs reduce(my_float4_3) accumulator(my_float4_3_accum) combiner(combiner)
+static void my_float4_3_accum(int *accum, float4 in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_float4_4) accumulator(my_float4_4_accum) combiner(combiner)
+static void my_float4_4_accum(int *accum, float4 in, uint y) { }
+
+#pragma rs reduce(my_float4_5) accumulator(my_float4_5_accum) combiner(combiner)
+static void my_float4_5_accum(int *accum, float4 in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_float4_6) accumulator(my_float4_6_accum) combiner(combiner)
+static void my_float4_6_accum(int *accum, float4 in, uint x, uint y) { }
+
+#pragma rs reduce(my_float4_7) accumulator(my_float4_7_accum) combiner(combiner)
+static void my_float4_7_accum(int *accum, float4 in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_float4_8) accumulator(my_float4_8_accum) combiner(combiner)
+static void my_float4_8_accum(int *accum, float4 in, uint z) { }
+
+#pragma rs reduce(my_float4_9) accumulator(my_float4_9_accum) combiner(combiner)
+static void my_float4_9_accum(int *accum, float4 in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_float4_10) accumulator(my_float4_10_accum) combiner(combiner)
+static void my_float4_10_accum(int *accum, float4 in, uint x, uint z) { }
+
+#pragma rs reduce(my_float4_11) accumulator(my_float4_11_accum) combiner(combiner)
+static void my_float4_11_accum(int *accum, float4 in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_float4_12) accumulator(my_float4_12_accum) combiner(combiner)
+static void my_float4_12_accum(int *accum, float4 in, uint y, uint z) { }
+
+#pragma rs reduce(my_float4_13) accumulator(my_float4_13_accum) combiner(combiner)
+static void my_float4_13_accum(int *accum, float4 in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_float4_14) accumulator(my_float4_14_accum) combiner(combiner)
+static void my_float4_14_accum(int *accum, float4 in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_float4_15) accumulator(my_float4_15_accum) combiner(combiner)
+static void my_float4_15_accum(int *accum, float4 in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_double_0) accumulator(my_double_0_accum) combiner(combiner)
+static void my_double_0_accum(int *accum, double in) { }
+
+#pragma rs reduce(my_double_1) accumulator(my_double_1_accum) combiner(combiner)
+static void my_double_1_accum(int *accum, double in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_double_2) accumulator(my_double_2_accum) combiner(combiner)
+static void my_double_2_accum(int *accum, double in, uint x) { }
+
+#pragma rs reduce(my_double_3) accumulator(my_double_3_accum) combiner(combiner)
+static void my_double_3_accum(int *accum, double in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_double_4) accumulator(my_double_4_accum) combiner(combiner)
+static void my_double_4_accum(int *accum, double in, uint y) { }
+
+#pragma rs reduce(my_double_5) accumulator(my_double_5_accum) combiner(combiner)
+static void my_double_5_accum(int *accum, double in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_double_6) accumulator(my_double_6_accum) combiner(combiner)
+static void my_double_6_accum(int *accum, double in, uint x, uint y) { }
+
+#pragma rs reduce(my_double_7) accumulator(my_double_7_accum) combiner(combiner)
+static void my_double_7_accum(int *accum, double in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_double_8) accumulator(my_double_8_accum) combiner(combiner)
+static void my_double_8_accum(int *accum, double in, uint z) { }
+
+#pragma rs reduce(my_double_9) accumulator(my_double_9_accum) combiner(combiner)
+static void my_double_9_accum(int *accum, double in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_double_10) accumulator(my_double_10_accum) combiner(combiner)
+static void my_double_10_accum(int *accum, double in, uint x, uint z) { }
+
+#pragma rs reduce(my_double_11) accumulator(my_double_11_accum) combiner(combiner)
+static void my_double_11_accum(int *accum, double in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_double_12) accumulator(my_double_12_accum) combiner(combiner)
+static void my_double_12_accum(int *accum, double in, uint y, uint z) { }
+
+#pragma rs reduce(my_double_13) accumulator(my_double_13_accum) combiner(combiner)
+static void my_double_13_accum(int *accum, double in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_double_14) accumulator(my_double_14_accum) combiner(combiner)
+static void my_double_14_accum(int *accum, double in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_double_15) accumulator(my_double_15_accum) combiner(combiner)
+static void my_double_15_accum(int *accum, double in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_double2_0) accumulator(my_double2_0_accum) combiner(combiner)
+static void my_double2_0_accum(int *accum, double2 in) { }
+
+#pragma rs reduce(my_double2_1) accumulator(my_double2_1_accum) combiner(combiner)
+static void my_double2_1_accum(int *accum, double2 in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_double2_2) accumulator(my_double2_2_accum) combiner(combiner)
+static void my_double2_2_accum(int *accum, double2 in, uint x) { }
+
+#pragma rs reduce(my_double2_3) accumulator(my_double2_3_accum) combiner(combiner)
+static void my_double2_3_accum(int *accum, double2 in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_double2_4) accumulator(my_double2_4_accum) combiner(combiner)
+static void my_double2_4_accum(int *accum, double2 in, uint y) { }
+
+#pragma rs reduce(my_double2_5) accumulator(my_double2_5_accum) combiner(combiner)
+static void my_double2_5_accum(int *accum, double2 in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_double2_6) accumulator(my_double2_6_accum) combiner(combiner)
+static void my_double2_6_accum(int *accum, double2 in, uint x, uint y) { }
+
+#pragma rs reduce(my_double2_7) accumulator(my_double2_7_accum) combiner(combiner)
+static void my_double2_7_accum(int *accum, double2 in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_double2_8) accumulator(my_double2_8_accum) combiner(combiner)
+static void my_double2_8_accum(int *accum, double2 in, uint z) { }
+
+#pragma rs reduce(my_double2_9) accumulator(my_double2_9_accum) combiner(combiner)
+static void my_double2_9_accum(int *accum, double2 in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_double2_10) accumulator(my_double2_10_accum) combiner(combiner)
+static void my_double2_10_accum(int *accum, double2 in, uint x, uint z) { }
+
+#pragma rs reduce(my_double2_11) accumulator(my_double2_11_accum) combiner(combiner)
+static void my_double2_11_accum(int *accum, double2 in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_double2_12) accumulator(my_double2_12_accum) combiner(combiner)
+static void my_double2_12_accum(int *accum, double2 in, uint y, uint z) { }
+
+#pragma rs reduce(my_double2_13) accumulator(my_double2_13_accum) combiner(combiner)
+static void my_double2_13_accum(int *accum, double2 in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_double2_14) accumulator(my_double2_14_accum) combiner(combiner)
+static void my_double2_14_accum(int *accum, double2 in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_double2_15) accumulator(my_double2_15_accum) combiner(combiner)
+static void my_double2_15_accum(int *accum, double2 in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_double4_0) accumulator(my_double4_0_accum) combiner(combiner)
+static void my_double4_0_accum(int *accum, double4 in) { }
+
+#pragma rs reduce(my_double4_1) accumulator(my_double4_1_accum) combiner(combiner)
+static void my_double4_1_accum(int *accum, double4 in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_double4_2) accumulator(my_double4_2_accum) combiner(combiner)
+static void my_double4_2_accum(int *accum, double4 in, uint x) { }
+
+#pragma rs reduce(my_double4_3) accumulator(my_double4_3_accum) combiner(combiner)
+static void my_double4_3_accum(int *accum, double4 in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_double4_4) accumulator(my_double4_4_accum) combiner(combiner)
+static void my_double4_4_accum(int *accum, double4 in, uint y) { }
+
+#pragma rs reduce(my_double4_5) accumulator(my_double4_5_accum) combiner(combiner)
+static void my_double4_5_accum(int *accum, double4 in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_double4_6) accumulator(my_double4_6_accum) combiner(combiner)
+static void my_double4_6_accum(int *accum, double4 in, uint x, uint y) { }
+
+#pragma rs reduce(my_double4_7) accumulator(my_double4_7_accum) combiner(combiner)
+static void my_double4_7_accum(int *accum, double4 in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_double4_8) accumulator(my_double4_8_accum) combiner(combiner)
+static void my_double4_8_accum(int *accum, double4 in, uint z) { }
+
+#pragma rs reduce(my_double4_9) accumulator(my_double4_9_accum) combiner(combiner)
+static void my_double4_9_accum(int *accum, double4 in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_double4_10) accumulator(my_double4_10_accum) combiner(combiner)
+static void my_double4_10_accum(int *accum, double4 in, uint x, uint z) { }
+
+#pragma rs reduce(my_double4_11) accumulator(my_double4_11_accum) combiner(combiner)
+static void my_double4_11_accum(int *accum, double4 in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_double4_12) accumulator(my_double4_12_accum) combiner(combiner)
+static void my_double4_12_accum(int *accum, double4 in, uint y, uint z) { }
+
+#pragma rs reduce(my_double4_13) accumulator(my_double4_13_accum) combiner(combiner)
+static void my_double4_13_accum(int *accum, double4 in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_double4_14) accumulator(my_double4_14_accum) combiner(combiner)
+static void my_double4_14_accum(int *accum, double4 in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_double4_15) accumulator(my_double4_15_accum) combiner(combiner)
+static void my_double4_15_accum(int *accum, double4 in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_char_0) accumulator(my_char_0_accum) combiner(combiner)
+static void my_char_0_accum(int *accum, char in) { }
+
+#pragma rs reduce(my_char_1) accumulator(my_char_1_accum) combiner(combiner)
+static void my_char_1_accum(int *accum, char in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char_2) accumulator(my_char_2_accum) combiner(combiner)
+static void my_char_2_accum(int *accum, char in, uint x) { }
+
+#pragma rs reduce(my_char_3) accumulator(my_char_3_accum) combiner(combiner)
+static void my_char_3_accum(int *accum, char in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_char_4) accumulator(my_char_4_accum) combiner(combiner)
+static void my_char_4_accum(int *accum, char in, uint y) { }
+
+#pragma rs reduce(my_char_5) accumulator(my_char_5_accum) combiner(combiner)
+static void my_char_5_accum(int *accum, char in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_char_6) accumulator(my_char_6_accum) combiner(combiner)
+static void my_char_6_accum(int *accum, char in, uint x, uint y) { }
+
+#pragma rs reduce(my_char_7) accumulator(my_char_7_accum) combiner(combiner)
+static void my_char_7_accum(int *accum, char in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_char_8) accumulator(my_char_8_accum) combiner(combiner)
+static void my_char_8_accum(int *accum, char in, uint z) { }
+
+#pragma rs reduce(my_char_9) accumulator(my_char_9_accum) combiner(combiner)
+static void my_char_9_accum(int *accum, char in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_char_10) accumulator(my_char_10_accum) combiner(combiner)
+static void my_char_10_accum(int *accum, char in, uint x, uint z) { }
+
+#pragma rs reduce(my_char_11) accumulator(my_char_11_accum) combiner(combiner)
+static void my_char_11_accum(int *accum, char in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_char_12) accumulator(my_char_12_accum) combiner(combiner)
+static void my_char_12_accum(int *accum, char in, uint y, uint z) { }
+
+#pragma rs reduce(my_char_13) accumulator(my_char_13_accum) combiner(combiner)
+static void my_char_13_accum(int *accum, char in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_char_14) accumulator(my_char_14_accum) combiner(combiner)
+static void my_char_14_accum(int *accum, char in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_char_15) accumulator(my_char_15_accum) combiner(combiner)
+static void my_char_15_accum(int *accum, char in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_char2_0) accumulator(my_char2_0_accum) combiner(combiner)
+static void my_char2_0_accum(int *accum, char2 in) { }
+
+#pragma rs reduce(my_char2_1) accumulator(my_char2_1_accum) combiner(combiner)
+static void my_char2_1_accum(int *accum, char2 in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char2_2) accumulator(my_char2_2_accum) combiner(combiner)
+static void my_char2_2_accum(int *accum, char2 in, uint x) { }
+
+#pragma rs reduce(my_char2_3) accumulator(my_char2_3_accum) combiner(combiner)
+static void my_char2_3_accum(int *accum, char2 in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_char2_4) accumulator(my_char2_4_accum) combiner(combiner)
+static void my_char2_4_accum(int *accum, char2 in, uint y) { }
+
+#pragma rs reduce(my_char2_5) accumulator(my_char2_5_accum) combiner(combiner)
+static void my_char2_5_accum(int *accum, char2 in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_char2_6) accumulator(my_char2_6_accum) combiner(combiner)
+static void my_char2_6_accum(int *accum, char2 in, uint x, uint y) { }
+
+#pragma rs reduce(my_char2_7) accumulator(my_char2_7_accum) combiner(combiner)
+static void my_char2_7_accum(int *accum, char2 in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_char2_8) accumulator(my_char2_8_accum) combiner(combiner)
+static void my_char2_8_accum(int *accum, char2 in, uint z) { }
+
+#pragma rs reduce(my_char2_9) accumulator(my_char2_9_accum) combiner(combiner)
+static void my_char2_9_accum(int *accum, char2 in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_char2_10) accumulator(my_char2_10_accum) combiner(combiner)
+static void my_char2_10_accum(int *accum, char2 in, uint x, uint z) { }
+
+#pragma rs reduce(my_char2_11) accumulator(my_char2_11_accum) combiner(combiner)
+static void my_char2_11_accum(int *accum, char2 in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_char2_12) accumulator(my_char2_12_accum) combiner(combiner)
+static void my_char2_12_accum(int *accum, char2 in, uint y, uint z) { }
+
+#pragma rs reduce(my_char2_13) accumulator(my_char2_13_accum) combiner(combiner)
+static void my_char2_13_accum(int *accum, char2 in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_char2_14) accumulator(my_char2_14_accum) combiner(combiner)
+static void my_char2_14_accum(int *accum, char2 in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_char2_15) accumulator(my_char2_15_accum) combiner(combiner)
+static void my_char2_15_accum(int *accum, char2 in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_char4_0) accumulator(my_char4_0_accum) combiner(combiner)
+static void my_char4_0_accum(int *accum, char4 in) { }
+
+#pragma rs reduce(my_char4_1) accumulator(my_char4_1_accum) combiner(combiner)
+static void my_char4_1_accum(int *accum, char4 in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char4_2) accumulator(my_char4_2_accum) combiner(combiner)
+static void my_char4_2_accum(int *accum, char4 in, uint x) { }
+
+#pragma rs reduce(my_char4_3) accumulator(my_char4_3_accum) combiner(combiner)
+static void my_char4_3_accum(int *accum, char4 in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_char4_4) accumulator(my_char4_4_accum) combiner(combiner)
+static void my_char4_4_accum(int *accum, char4 in, uint y) { }
+
+#pragma rs reduce(my_char4_5) accumulator(my_char4_5_accum) combiner(combiner)
+static void my_char4_5_accum(int *accum, char4 in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_char4_6) accumulator(my_char4_6_accum) combiner(combiner)
+static void my_char4_6_accum(int *accum, char4 in, uint x, uint y) { }
+
+#pragma rs reduce(my_char4_7) accumulator(my_char4_7_accum) combiner(combiner)
+static void my_char4_7_accum(int *accum, char4 in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_char4_8) accumulator(my_char4_8_accum) combiner(combiner)
+static void my_char4_8_accum(int *accum, char4 in, uint z) { }
+
+#pragma rs reduce(my_char4_9) accumulator(my_char4_9_accum) combiner(combiner)
+static void my_char4_9_accum(int *accum, char4 in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_char4_10) accumulator(my_char4_10_accum) combiner(combiner)
+static void my_char4_10_accum(int *accum, char4 in, uint x, uint z) { }
+
+#pragma rs reduce(my_char4_11) accumulator(my_char4_11_accum) combiner(combiner)
+static void my_char4_11_accum(int *accum, char4 in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_char4_12) accumulator(my_char4_12_accum) combiner(combiner)
+static void my_char4_12_accum(int *accum, char4 in, uint y, uint z) { }
+
+#pragma rs reduce(my_char4_13) accumulator(my_char4_13_accum) combiner(combiner)
+static void my_char4_13_accum(int *accum, char4 in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_char4_14) accumulator(my_char4_14_accum) combiner(combiner)
+static void my_char4_14_accum(int *accum, char4 in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_char4_15) accumulator(my_char4_15_accum) combiner(combiner)
+static void my_char4_15_accum(int *accum, char4 in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_short_0) accumulator(my_short_0_accum) combiner(combiner)
+static void my_short_0_accum(int *accum, short in) { }
+
+#pragma rs reduce(my_short_1) accumulator(my_short_1_accum) combiner(combiner)
+static void my_short_1_accum(int *accum, short in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short_2) accumulator(my_short_2_accum) combiner(combiner)
+static void my_short_2_accum(int *accum, short in, uint x) { }
+
+#pragma rs reduce(my_short_3) accumulator(my_short_3_accum) combiner(combiner)
+static void my_short_3_accum(int *accum, short in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_short_4) accumulator(my_short_4_accum) combiner(combiner)
+static void my_short_4_accum(int *accum, short in, uint y) { }
+
+#pragma rs reduce(my_short_5) accumulator(my_short_5_accum) combiner(combiner)
+static void my_short_5_accum(int *accum, short in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_short_6) accumulator(my_short_6_accum) combiner(combiner)
+static void my_short_6_accum(int *accum, short in, uint x, uint y) { }
+
+#pragma rs reduce(my_short_7) accumulator(my_short_7_accum) combiner(combiner)
+static void my_short_7_accum(int *accum, short in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_short_8) accumulator(my_short_8_accum) combiner(combiner)
+static void my_short_8_accum(int *accum, short in, uint z) { }
+
+#pragma rs reduce(my_short_9) accumulator(my_short_9_accum) combiner(combiner)
+static void my_short_9_accum(int *accum, short in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_short_10) accumulator(my_short_10_accum) combiner(combiner)
+static void my_short_10_accum(int *accum, short in, uint x, uint z) { }
+
+#pragma rs reduce(my_short_11) accumulator(my_short_11_accum) combiner(combiner)
+static void my_short_11_accum(int *accum, short in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_short_12) accumulator(my_short_12_accum) combiner(combiner)
+static void my_short_12_accum(int *accum, short in, uint y, uint z) { }
+
+#pragma rs reduce(my_short_13) accumulator(my_short_13_accum) combiner(combiner)
+static void my_short_13_accum(int *accum, short in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_short_14) accumulator(my_short_14_accum) combiner(combiner)
+static void my_short_14_accum(int *accum, short in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_short_15) accumulator(my_short_15_accum) combiner(combiner)
+static void my_short_15_accum(int *accum, short in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_short2_0) accumulator(my_short2_0_accum) combiner(combiner)
+static void my_short2_0_accum(int *accum, short2 in) { }
+
+#pragma rs reduce(my_short2_1) accumulator(my_short2_1_accum) combiner(combiner)
+static void my_short2_1_accum(int *accum, short2 in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short2_2) accumulator(my_short2_2_accum) combiner(combiner)
+static void my_short2_2_accum(int *accum, short2 in, uint x) { }
+
+#pragma rs reduce(my_short2_3) accumulator(my_short2_3_accum) combiner(combiner)
+static void my_short2_3_accum(int *accum, short2 in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_short2_4) accumulator(my_short2_4_accum) combiner(combiner)
+static void my_short2_4_accum(int *accum, short2 in, uint y) { }
+
+#pragma rs reduce(my_short2_5) accumulator(my_short2_5_accum) combiner(combiner)
+static void my_short2_5_accum(int *accum, short2 in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_short2_6) accumulator(my_short2_6_accum) combiner(combiner)
+static void my_short2_6_accum(int *accum, short2 in, uint x, uint y) { }
+
+#pragma rs reduce(my_short2_7) accumulator(my_short2_7_accum) combiner(combiner)
+static void my_short2_7_accum(int *accum, short2 in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_short2_8) accumulator(my_short2_8_accum) combiner(combiner)
+static void my_short2_8_accum(int *accum, short2 in, uint z) { }
+
+#pragma rs reduce(my_short2_9) accumulator(my_short2_9_accum) combiner(combiner)
+static void my_short2_9_accum(int *accum, short2 in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_short2_10) accumulator(my_short2_10_accum) combiner(combiner)
+static void my_short2_10_accum(int *accum, short2 in, uint x, uint z) { }
+
+#pragma rs reduce(my_short2_11) accumulator(my_short2_11_accum) combiner(combiner)
+static void my_short2_11_accum(int *accum, short2 in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_short2_12) accumulator(my_short2_12_accum) combiner(combiner)
+static void my_short2_12_accum(int *accum, short2 in, uint y, uint z) { }
+
+#pragma rs reduce(my_short2_13) accumulator(my_short2_13_accum) combiner(combiner)
+static void my_short2_13_accum(int *accum, short2 in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_short2_14) accumulator(my_short2_14_accum) combiner(combiner)
+static void my_short2_14_accum(int *accum, short2 in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_short2_15) accumulator(my_short2_15_accum) combiner(combiner)
+static void my_short2_15_accum(int *accum, short2 in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_short4_0) accumulator(my_short4_0_accum) combiner(combiner)
+static void my_short4_0_accum(int *accum, short4 in) { }
+
+#pragma rs reduce(my_short4_1) accumulator(my_short4_1_accum) combiner(combiner)
+static void my_short4_1_accum(int *accum, short4 in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short4_2) accumulator(my_short4_2_accum) combiner(combiner)
+static void my_short4_2_accum(int *accum, short4 in, uint x) { }
+
+#pragma rs reduce(my_short4_3) accumulator(my_short4_3_accum) combiner(combiner)
+static void my_short4_3_accum(int *accum, short4 in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_short4_4) accumulator(my_short4_4_accum) combiner(combiner)
+static void my_short4_4_accum(int *accum, short4 in, uint y) { }
+
+#pragma rs reduce(my_short4_5) accumulator(my_short4_5_accum) combiner(combiner)
+static void my_short4_5_accum(int *accum, short4 in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_short4_6) accumulator(my_short4_6_accum) combiner(combiner)
+static void my_short4_6_accum(int *accum, short4 in, uint x, uint y) { }
+
+#pragma rs reduce(my_short4_7) accumulator(my_short4_7_accum) combiner(combiner)
+static void my_short4_7_accum(int *accum, short4 in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_short4_8) accumulator(my_short4_8_accum) combiner(combiner)
+static void my_short4_8_accum(int *accum, short4 in, uint z) { }
+
+#pragma rs reduce(my_short4_9) accumulator(my_short4_9_accum) combiner(combiner)
+static void my_short4_9_accum(int *accum, short4 in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_short4_10) accumulator(my_short4_10_accum) combiner(combiner)
+static void my_short4_10_accum(int *accum, short4 in, uint x, uint z) { }
+
+#pragma rs reduce(my_short4_11) accumulator(my_short4_11_accum) combiner(combiner)
+static void my_short4_11_accum(int *accum, short4 in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_short4_12) accumulator(my_short4_12_accum) combiner(combiner)
+static void my_short4_12_accum(int *accum, short4 in, uint y, uint z) { }
+
+#pragma rs reduce(my_short4_13) accumulator(my_short4_13_accum) combiner(combiner)
+static void my_short4_13_accum(int *accum, short4 in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_short4_14) accumulator(my_short4_14_accum) combiner(combiner)
+static void my_short4_14_accum(int *accum, short4 in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_short4_15) accumulator(my_short4_15_accum) combiner(combiner)
+static void my_short4_15_accum(int *accum, short4 in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_int_0) accumulator(my_int_0_accum) combiner(combiner)
+static void my_int_0_accum(int *accum, int in) { }
+
+#pragma rs reduce(my_int_1) accumulator(my_int_1_accum) combiner(combiner)
+static void my_int_1_accum(int *accum, int in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_int_2) accumulator(my_int_2_accum) combiner(combiner)
+static void my_int_2_accum(int *accum, int in, uint x) { }
+
+#pragma rs reduce(my_int_3) accumulator(my_int_3_accum) combiner(combiner)
+static void my_int_3_accum(int *accum, int in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_int_4) accumulator(my_int_4_accum) combiner(combiner)
+static void my_int_4_accum(int *accum, int in, uint y) { }
+
+#pragma rs reduce(my_int_5) accumulator(my_int_5_accum) combiner(combiner)
+static void my_int_5_accum(int *accum, int in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_int_6) accumulator(my_int_6_accum) combiner(combiner)
+static void my_int_6_accum(int *accum, int in, uint x, uint y) { }
+
+#pragma rs reduce(my_int_7) accumulator(my_int_7_accum) combiner(combiner)
+static void my_int_7_accum(int *accum, int in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_int_8) accumulator(my_int_8_accum) combiner(combiner)
+static void my_int_8_accum(int *accum, int in, uint z) { }
+
+#pragma rs reduce(my_int_9) accumulator(my_int_9_accum) combiner(combiner)
+static void my_int_9_accum(int *accum, int in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_int_10) accumulator(my_int_10_accum) combiner(combiner)
+static void my_int_10_accum(int *accum, int in, uint x, uint z) { }
+
+#pragma rs reduce(my_int_11) accumulator(my_int_11_accum) combiner(combiner)
+static void my_int_11_accum(int *accum, int in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_int_12) accumulator(my_int_12_accum) combiner(combiner)
+static void my_int_12_accum(int *accum, int in, uint y, uint z) { }
+
+#pragma rs reduce(my_int_13) accumulator(my_int_13_accum) combiner(combiner)
+static void my_int_13_accum(int *accum, int in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_int_14) accumulator(my_int_14_accum) combiner(combiner)
+static void my_int_14_accum(int *accum, int in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_int_15) accumulator(my_int_15_accum) combiner(combiner)
+static void my_int_15_accum(int *accum, int in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_int2_0) accumulator(my_int2_0_accum) combiner(combiner)
+static void my_int2_0_accum(int *accum, int2 in) { }
+
+#pragma rs reduce(my_int2_1) accumulator(my_int2_1_accum) combiner(combiner)
+static void my_int2_1_accum(int *accum, int2 in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_int2_2) accumulator(my_int2_2_accum) combiner(combiner)
+static void my_int2_2_accum(int *accum, int2 in, uint x) { }
+
+#pragma rs reduce(my_int2_3) accumulator(my_int2_3_accum) combiner(combiner)
+static void my_int2_3_accum(int *accum, int2 in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_int2_4) accumulator(my_int2_4_accum) combiner(combiner)
+static void my_int2_4_accum(int *accum, int2 in, uint y) { }
+
+#pragma rs reduce(my_int2_5) accumulator(my_int2_5_accum) combiner(combiner)
+static void my_int2_5_accum(int *accum, int2 in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_int2_6) accumulator(my_int2_6_accum) combiner(combiner)
+static void my_int2_6_accum(int *accum, int2 in, uint x, uint y) { }
+
+#pragma rs reduce(my_int2_7) accumulator(my_int2_7_accum) combiner(combiner)
+static void my_int2_7_accum(int *accum, int2 in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_int2_8) accumulator(my_int2_8_accum) combiner(combiner)
+static void my_int2_8_accum(int *accum, int2 in, uint z) { }
+
+#pragma rs reduce(my_int2_9) accumulator(my_int2_9_accum) combiner(combiner)
+static void my_int2_9_accum(int *accum, int2 in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_int2_10) accumulator(my_int2_10_accum) combiner(combiner)
+static void my_int2_10_accum(int *accum, int2 in, uint x, uint z) { }
+
+#pragma rs reduce(my_int2_11) accumulator(my_int2_11_accum) combiner(combiner)
+static void my_int2_11_accum(int *accum, int2 in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_int2_12) accumulator(my_int2_12_accum) combiner(combiner)
+static void my_int2_12_accum(int *accum, int2 in, uint y, uint z) { }
+
+#pragma rs reduce(my_int2_13) accumulator(my_int2_13_accum) combiner(combiner)
+static void my_int2_13_accum(int *accum, int2 in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_int2_14) accumulator(my_int2_14_accum) combiner(combiner)
+static void my_int2_14_accum(int *accum, int2 in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_int2_15) accumulator(my_int2_15_accum) combiner(combiner)
+static void my_int2_15_accum(int *accum, int2 in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_int4_0) accumulator(my_int4_0_accum) combiner(combiner)
+static void my_int4_0_accum(int *accum, int4 in) { }
+
+#pragma rs reduce(my_int4_1) accumulator(my_int4_1_accum) combiner(combiner)
+static void my_int4_1_accum(int *accum, int4 in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_int4_2) accumulator(my_int4_2_accum) combiner(combiner)
+static void my_int4_2_accum(int *accum, int4 in, uint x) { }
+
+#pragma rs reduce(my_int4_3) accumulator(my_int4_3_accum) combiner(combiner)
+static void my_int4_3_accum(int *accum, int4 in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_int4_4) accumulator(my_int4_4_accum) combiner(combiner)
+static void my_int4_4_accum(int *accum, int4 in, uint y) { }
+
+#pragma rs reduce(my_int4_5) accumulator(my_int4_5_accum) combiner(combiner)
+static void my_int4_5_accum(int *accum, int4 in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_int4_6) accumulator(my_int4_6_accum) combiner(combiner)
+static void my_int4_6_accum(int *accum, int4 in, uint x, uint y) { }
+
+#pragma rs reduce(my_int4_7) accumulator(my_int4_7_accum) combiner(combiner)
+static void my_int4_7_accum(int *accum, int4 in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_int4_8) accumulator(my_int4_8_accum) combiner(combiner)
+static void my_int4_8_accum(int *accum, int4 in, uint z) { }
+
+#pragma rs reduce(my_int4_9) accumulator(my_int4_9_accum) combiner(combiner)
+static void my_int4_9_accum(int *accum, int4 in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_int4_10) accumulator(my_int4_10_accum) combiner(combiner)
+static void my_int4_10_accum(int *accum, int4 in, uint x, uint z) { }
+
+#pragma rs reduce(my_int4_11) accumulator(my_int4_11_accum) combiner(combiner)
+static void my_int4_11_accum(int *accum, int4 in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_int4_12) accumulator(my_int4_12_accum) combiner(combiner)
+static void my_int4_12_accum(int *accum, int4 in, uint y, uint z) { }
+
+#pragma rs reduce(my_int4_13) accumulator(my_int4_13_accum) combiner(combiner)
+static void my_int4_13_accum(int *accum, int4 in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_int4_14) accumulator(my_int4_14_accum) combiner(combiner)
+static void my_int4_14_accum(int *accum, int4 in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_int4_15) accumulator(my_int4_15_accum) combiner(combiner)
+static void my_int4_15_accum(int *accum, int4 in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_long_0) accumulator(my_long_0_accum) combiner(combiner)
+static void my_long_0_accum(int *accum, long in) { }
+
+#pragma rs reduce(my_long_1) accumulator(my_long_1_accum) combiner(combiner)
+static void my_long_1_accum(int *accum, long in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_long_2) accumulator(my_long_2_accum) combiner(combiner)
+static void my_long_2_accum(int *accum, long in, uint x) { }
+
+#pragma rs reduce(my_long_3) accumulator(my_long_3_accum) combiner(combiner)
+static void my_long_3_accum(int *accum, long in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_long_4) accumulator(my_long_4_accum) combiner(combiner)
+static void my_long_4_accum(int *accum, long in, uint y) { }
+
+#pragma rs reduce(my_long_5) accumulator(my_long_5_accum) combiner(combiner)
+static void my_long_5_accum(int *accum, long in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_long_6) accumulator(my_long_6_accum) combiner(combiner)
+static void my_long_6_accum(int *accum, long in, uint x, uint y) { }
+
+#pragma rs reduce(my_long_7) accumulator(my_long_7_accum) combiner(combiner)
+static void my_long_7_accum(int *accum, long in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_long_8) accumulator(my_long_8_accum) combiner(combiner)
+static void my_long_8_accum(int *accum, long in, uint z) { }
+
+#pragma rs reduce(my_long_9) accumulator(my_long_9_accum) combiner(combiner)
+static void my_long_9_accum(int *accum, long in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_long_10) accumulator(my_long_10_accum) combiner(combiner)
+static void my_long_10_accum(int *accum, long in, uint x, uint z) { }
+
+#pragma rs reduce(my_long_11) accumulator(my_long_11_accum) combiner(combiner)
+static void my_long_11_accum(int *accum, long in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_long_12) accumulator(my_long_12_accum) combiner(combiner)
+static void my_long_12_accum(int *accum, long in, uint y, uint z) { }
+
+#pragma rs reduce(my_long_13) accumulator(my_long_13_accum) combiner(combiner)
+static void my_long_13_accum(int *accum, long in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_long_14) accumulator(my_long_14_accum) combiner(combiner)
+static void my_long_14_accum(int *accum, long in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_long_15) accumulator(my_long_15_accum) combiner(combiner)
+static void my_long_15_accum(int *accum, long in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_long2_0) accumulator(my_long2_0_accum) combiner(combiner)
+static void my_long2_0_accum(int *accum, long2 in) { }
+
+#pragma rs reduce(my_long2_1) accumulator(my_long2_1_accum) combiner(combiner)
+static void my_long2_1_accum(int *accum, long2 in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_long2_2) accumulator(my_long2_2_accum) combiner(combiner)
+static void my_long2_2_accum(int *accum, long2 in, uint x) { }
+
+#pragma rs reduce(my_long2_3) accumulator(my_long2_3_accum) combiner(combiner)
+static void my_long2_3_accum(int *accum, long2 in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_long2_4) accumulator(my_long2_4_accum) combiner(combiner)
+static void my_long2_4_accum(int *accum, long2 in, uint y) { }
+
+#pragma rs reduce(my_long2_5) accumulator(my_long2_5_accum) combiner(combiner)
+static void my_long2_5_accum(int *accum, long2 in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_long2_6) accumulator(my_long2_6_accum) combiner(combiner)
+static void my_long2_6_accum(int *accum, long2 in, uint x, uint y) { }
+
+#pragma rs reduce(my_long2_7) accumulator(my_long2_7_accum) combiner(combiner)
+static void my_long2_7_accum(int *accum, long2 in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_long2_8) accumulator(my_long2_8_accum) combiner(combiner)
+static void my_long2_8_accum(int *accum, long2 in, uint z) { }
+
+#pragma rs reduce(my_long2_9) accumulator(my_long2_9_accum) combiner(combiner)
+static void my_long2_9_accum(int *accum, long2 in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_long2_10) accumulator(my_long2_10_accum) combiner(combiner)
+static void my_long2_10_accum(int *accum, long2 in, uint x, uint z) { }
+
+#pragma rs reduce(my_long2_11) accumulator(my_long2_11_accum) combiner(combiner)
+static void my_long2_11_accum(int *accum, long2 in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_long2_12) accumulator(my_long2_12_accum) combiner(combiner)
+static void my_long2_12_accum(int *accum, long2 in, uint y, uint z) { }
+
+#pragma rs reduce(my_long2_13) accumulator(my_long2_13_accum) combiner(combiner)
+static void my_long2_13_accum(int *accum, long2 in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_long2_14) accumulator(my_long2_14_accum) combiner(combiner)
+static void my_long2_14_accum(int *accum, long2 in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_long2_15) accumulator(my_long2_15_accum) combiner(combiner)
+static void my_long2_15_accum(int *accum, long2 in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_long4_0) accumulator(my_long4_0_accum) combiner(combiner)
+static void my_long4_0_accum(int *accum, long4 in) { }
+
+#pragma rs reduce(my_long4_1) accumulator(my_long4_1_accum) combiner(combiner)
+static void my_long4_1_accum(int *accum, long4 in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_long4_2) accumulator(my_long4_2_accum) combiner(combiner)
+static void my_long4_2_accum(int *accum, long4 in, uint x) { }
+
+#pragma rs reduce(my_long4_3) accumulator(my_long4_3_accum) combiner(combiner)
+static void my_long4_3_accum(int *accum, long4 in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_long4_4) accumulator(my_long4_4_accum) combiner(combiner)
+static void my_long4_4_accum(int *accum, long4 in, uint y) { }
+
+#pragma rs reduce(my_long4_5) accumulator(my_long4_5_accum) combiner(combiner)
+static void my_long4_5_accum(int *accum, long4 in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_long4_6) accumulator(my_long4_6_accum) combiner(combiner)
+static void my_long4_6_accum(int *accum, long4 in, uint x, uint y) { }
+
+#pragma rs reduce(my_long4_7) accumulator(my_long4_7_accum) combiner(combiner)
+static void my_long4_7_accum(int *accum, long4 in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_long4_8) accumulator(my_long4_8_accum) combiner(combiner)
+static void my_long4_8_accum(int *accum, long4 in, uint z) { }
+
+#pragma rs reduce(my_long4_9) accumulator(my_long4_9_accum) combiner(combiner)
+static void my_long4_9_accum(int *accum, long4 in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_long4_10) accumulator(my_long4_10_accum) combiner(combiner)
+static void my_long4_10_accum(int *accum, long4 in, uint x, uint z) { }
+
+#pragma rs reduce(my_long4_11) accumulator(my_long4_11_accum) combiner(combiner)
+static void my_long4_11_accum(int *accum, long4 in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_long4_12) accumulator(my_long4_12_accum) combiner(combiner)
+static void my_long4_12_accum(int *accum, long4 in, uint y, uint z) { }
+
+#pragma rs reduce(my_long4_13) accumulator(my_long4_13_accum) combiner(combiner)
+static void my_long4_13_accum(int *accum, long4 in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_long4_14) accumulator(my_long4_14_accum) combiner(combiner)
+static void my_long4_14_accum(int *accum, long4 in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_long4_15) accumulator(my_long4_15_accum) combiner(combiner)
+static void my_long4_15_accum(int *accum, long4 in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_uchar_0) accumulator(my_uchar_0_accum) combiner(combiner)
+static void my_uchar_0_accum(int *accum, uchar in) { }
+
+#pragma rs reduce(my_uchar_1) accumulator(my_uchar_1_accum) combiner(combiner)
+static void my_uchar_1_accum(int *accum, uchar in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar_2) accumulator(my_uchar_2_accum) combiner(combiner)
+static void my_uchar_2_accum(int *accum, uchar in, uint x) { }
+
+#pragma rs reduce(my_uchar_3) accumulator(my_uchar_3_accum) combiner(combiner)
+static void my_uchar_3_accum(int *accum, uchar in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_uchar_4) accumulator(my_uchar_4_accum) combiner(combiner)
+static void my_uchar_4_accum(int *accum, uchar in, uint y) { }
+
+#pragma rs reduce(my_uchar_5) accumulator(my_uchar_5_accum) combiner(combiner)
+static void my_uchar_5_accum(int *accum, uchar in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_uchar_6) accumulator(my_uchar_6_accum) combiner(combiner)
+static void my_uchar_6_accum(int *accum, uchar in, uint x, uint y) { }
+
+#pragma rs reduce(my_uchar_7) accumulator(my_uchar_7_accum) combiner(combiner)
+static void my_uchar_7_accum(int *accum, uchar in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_uchar_8) accumulator(my_uchar_8_accum) combiner(combiner)
+static void my_uchar_8_accum(int *accum, uchar in, uint z) { }
+
+#pragma rs reduce(my_uchar_9) accumulator(my_uchar_9_accum) combiner(combiner)
+static void my_uchar_9_accum(int *accum, uchar in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_uchar_10) accumulator(my_uchar_10_accum) combiner(combiner)
+static void my_uchar_10_accum(int *accum, uchar in, uint x, uint z) { }
+
+#pragma rs reduce(my_uchar_11) accumulator(my_uchar_11_accum) combiner(combiner)
+static void my_uchar_11_accum(int *accum, uchar in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_uchar_12) accumulator(my_uchar_12_accum) combiner(combiner)
+static void my_uchar_12_accum(int *accum, uchar in, uint y, uint z) { }
+
+#pragma rs reduce(my_uchar_13) accumulator(my_uchar_13_accum) combiner(combiner)
+static void my_uchar_13_accum(int *accum, uchar in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_uchar_14) accumulator(my_uchar_14_accum) combiner(combiner)
+static void my_uchar_14_accum(int *accum, uchar in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_uchar_15) accumulator(my_uchar_15_accum) combiner(combiner)
+static void my_uchar_15_accum(int *accum, uchar in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_uchar2_0) accumulator(my_uchar2_0_accum) combiner(combiner)
+static void my_uchar2_0_accum(int *accum, uchar2 in) { }
+
+#pragma rs reduce(my_uchar2_1) accumulator(my_uchar2_1_accum) combiner(combiner)
+static void my_uchar2_1_accum(int *accum, uchar2 in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar2_2) accumulator(my_uchar2_2_accum) combiner(combiner)
+static void my_uchar2_2_accum(int *accum, uchar2 in, uint x) { }
+
+#pragma rs reduce(my_uchar2_3) accumulator(my_uchar2_3_accum) combiner(combiner)
+static void my_uchar2_3_accum(int *accum, uchar2 in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_uchar2_4) accumulator(my_uchar2_4_accum) combiner(combiner)
+static void my_uchar2_4_accum(int *accum, uchar2 in, uint y) { }
+
+#pragma rs reduce(my_uchar2_5) accumulator(my_uchar2_5_accum) combiner(combiner)
+static void my_uchar2_5_accum(int *accum, uchar2 in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_uchar2_6) accumulator(my_uchar2_6_accum) combiner(combiner)
+static void my_uchar2_6_accum(int *accum, uchar2 in, uint x, uint y) { }
+
+#pragma rs reduce(my_uchar2_7) accumulator(my_uchar2_7_accum) combiner(combiner)
+static void my_uchar2_7_accum(int *accum, uchar2 in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_uchar2_8) accumulator(my_uchar2_8_accum) combiner(combiner)
+static void my_uchar2_8_accum(int *accum, uchar2 in, uint z) { }
+
+#pragma rs reduce(my_uchar2_9) accumulator(my_uchar2_9_accum) combiner(combiner)
+static void my_uchar2_9_accum(int *accum, uchar2 in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_uchar2_10) accumulator(my_uchar2_10_accum) combiner(combiner)
+static void my_uchar2_10_accum(int *accum, uchar2 in, uint x, uint z) { }
+
+#pragma rs reduce(my_uchar2_11) accumulator(my_uchar2_11_accum) combiner(combiner)
+static void my_uchar2_11_accum(int *accum, uchar2 in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_uchar2_12) accumulator(my_uchar2_12_accum) combiner(combiner)
+static void my_uchar2_12_accum(int *accum, uchar2 in, uint y, uint z) { }
+
+#pragma rs reduce(my_uchar2_13) accumulator(my_uchar2_13_accum) combiner(combiner)
+static void my_uchar2_13_accum(int *accum, uchar2 in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_uchar2_14) accumulator(my_uchar2_14_accum) combiner(combiner)
+static void my_uchar2_14_accum(int *accum, uchar2 in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_uchar2_15) accumulator(my_uchar2_15_accum) combiner(combiner)
+static void my_uchar2_15_accum(int *accum, uchar2 in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_uchar4_0) accumulator(my_uchar4_0_accum) combiner(combiner)
+static void my_uchar4_0_accum(int *accum, uchar4 in) { }
+
+#pragma rs reduce(my_uchar4_1) accumulator(my_uchar4_1_accum) combiner(combiner)
+static void my_uchar4_1_accum(int *accum, uchar4 in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar4_2) accumulator(my_uchar4_2_accum) combiner(combiner)
+static void my_uchar4_2_accum(int *accum, uchar4 in, uint x) { }
+
+#pragma rs reduce(my_uchar4_3) accumulator(my_uchar4_3_accum) combiner(combiner)
+static void my_uchar4_3_accum(int *accum, uchar4 in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_uchar4_4) accumulator(my_uchar4_4_accum) combiner(combiner)
+static void my_uchar4_4_accum(int *accum, uchar4 in, uint y) { }
+
+#pragma rs reduce(my_uchar4_5) accumulator(my_uchar4_5_accum) combiner(combiner)
+static void my_uchar4_5_accum(int *accum, uchar4 in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_uchar4_6) accumulator(my_uchar4_6_accum) combiner(combiner)
+static void my_uchar4_6_accum(int *accum, uchar4 in, uint x, uint y) { }
+
+#pragma rs reduce(my_uchar4_7) accumulator(my_uchar4_7_accum) combiner(combiner)
+static void my_uchar4_7_accum(int *accum, uchar4 in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_uchar4_8) accumulator(my_uchar4_8_accum) combiner(combiner)
+static void my_uchar4_8_accum(int *accum, uchar4 in, uint z) { }
+
+#pragma rs reduce(my_uchar4_9) accumulator(my_uchar4_9_accum) combiner(combiner)
+static void my_uchar4_9_accum(int *accum, uchar4 in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_uchar4_10) accumulator(my_uchar4_10_accum) combiner(combiner)
+static void my_uchar4_10_accum(int *accum, uchar4 in, uint x, uint z) { }
+
+#pragma rs reduce(my_uchar4_11) accumulator(my_uchar4_11_accum) combiner(combiner)
+static void my_uchar4_11_accum(int *accum, uchar4 in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_uchar4_12) accumulator(my_uchar4_12_accum) combiner(combiner)
+static void my_uchar4_12_accum(int *accum, uchar4 in, uint y, uint z) { }
+
+#pragma rs reduce(my_uchar4_13) accumulator(my_uchar4_13_accum) combiner(combiner)
+static void my_uchar4_13_accum(int *accum, uchar4 in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_uchar4_14) accumulator(my_uchar4_14_accum) combiner(combiner)
+static void my_uchar4_14_accum(int *accum, uchar4 in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_uchar4_15) accumulator(my_uchar4_15_accum) combiner(combiner)
+static void my_uchar4_15_accum(int *accum, uchar4 in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_ushort_0) accumulator(my_ushort_0_accum) combiner(combiner)
+static void my_ushort_0_accum(int *accum, ushort in) { }
+
+#pragma rs reduce(my_ushort_1) accumulator(my_ushort_1_accum) combiner(combiner)
+static void my_ushort_1_accum(int *accum, ushort in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort_2) accumulator(my_ushort_2_accum) combiner(combiner)
+static void my_ushort_2_accum(int *accum, ushort in, uint x) { }
+
+#pragma rs reduce(my_ushort_3) accumulator(my_ushort_3_accum) combiner(combiner)
+static void my_ushort_3_accum(int *accum, ushort in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_ushort_4) accumulator(my_ushort_4_accum) combiner(combiner)
+static void my_ushort_4_accum(int *accum, ushort in, uint y) { }
+
+#pragma rs reduce(my_ushort_5) accumulator(my_ushort_5_accum) combiner(combiner)
+static void my_ushort_5_accum(int *accum, ushort in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_ushort_6) accumulator(my_ushort_6_accum) combiner(combiner)
+static void my_ushort_6_accum(int *accum, ushort in, uint x, uint y) { }
+
+#pragma rs reduce(my_ushort_7) accumulator(my_ushort_7_accum) combiner(combiner)
+static void my_ushort_7_accum(int *accum, ushort in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_ushort_8) accumulator(my_ushort_8_accum) combiner(combiner)
+static void my_ushort_8_accum(int *accum, ushort in, uint z) { }
+
+#pragma rs reduce(my_ushort_9) accumulator(my_ushort_9_accum) combiner(combiner)
+static void my_ushort_9_accum(int *accum, ushort in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_ushort_10) accumulator(my_ushort_10_accum) combiner(combiner)
+static void my_ushort_10_accum(int *accum, ushort in, uint x, uint z) { }
+
+#pragma rs reduce(my_ushort_11) accumulator(my_ushort_11_accum) combiner(combiner)
+static void my_ushort_11_accum(int *accum, ushort in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_ushort_12) accumulator(my_ushort_12_accum) combiner(combiner)
+static void my_ushort_12_accum(int *accum, ushort in, uint y, uint z) { }
+
+#pragma rs reduce(my_ushort_13) accumulator(my_ushort_13_accum) combiner(combiner)
+static void my_ushort_13_accum(int *accum, ushort in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_ushort_14) accumulator(my_ushort_14_accum) combiner(combiner)
+static void my_ushort_14_accum(int *accum, ushort in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_ushort_15) accumulator(my_ushort_15_accum) combiner(combiner)
+static void my_ushort_15_accum(int *accum, ushort in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_ushort2_0) accumulator(my_ushort2_0_accum) combiner(combiner)
+static void my_ushort2_0_accum(int *accum, ushort2 in) { }
+
+#pragma rs reduce(my_ushort2_1) accumulator(my_ushort2_1_accum) combiner(combiner)
+static void my_ushort2_1_accum(int *accum, ushort2 in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort2_2) accumulator(my_ushort2_2_accum) combiner(combiner)
+static void my_ushort2_2_accum(int *accum, ushort2 in, uint x) { }
+
+#pragma rs reduce(my_ushort2_3) accumulator(my_ushort2_3_accum) combiner(combiner)
+static void my_ushort2_3_accum(int *accum, ushort2 in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_ushort2_4) accumulator(my_ushort2_4_accum) combiner(combiner)
+static void my_ushort2_4_accum(int *accum, ushort2 in, uint y) { }
+
+#pragma rs reduce(my_ushort2_5) accumulator(my_ushort2_5_accum) combiner(combiner)
+static void my_ushort2_5_accum(int *accum, ushort2 in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_ushort2_6) accumulator(my_ushort2_6_accum) combiner(combiner)
+static void my_ushort2_6_accum(int *accum, ushort2 in, uint x, uint y) { }
+
+#pragma rs reduce(my_ushort2_7) accumulator(my_ushort2_7_accum) combiner(combiner)
+static void my_ushort2_7_accum(int *accum, ushort2 in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_ushort2_8) accumulator(my_ushort2_8_accum) combiner(combiner)
+static void my_ushort2_8_accum(int *accum, ushort2 in, uint z) { }
+
+#pragma rs reduce(my_ushort2_9) accumulator(my_ushort2_9_accum) combiner(combiner)
+static void my_ushort2_9_accum(int *accum, ushort2 in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_ushort2_10) accumulator(my_ushort2_10_accum) combiner(combiner)
+static void my_ushort2_10_accum(int *accum, ushort2 in, uint x, uint z) { }
+
+#pragma rs reduce(my_ushort2_11) accumulator(my_ushort2_11_accum) combiner(combiner)
+static void my_ushort2_11_accum(int *accum, ushort2 in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_ushort2_12) accumulator(my_ushort2_12_accum) combiner(combiner)
+static void my_ushort2_12_accum(int *accum, ushort2 in, uint y, uint z) { }
+
+#pragma rs reduce(my_ushort2_13) accumulator(my_ushort2_13_accum) combiner(combiner)
+static void my_ushort2_13_accum(int *accum, ushort2 in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_ushort2_14) accumulator(my_ushort2_14_accum) combiner(combiner)
+static void my_ushort2_14_accum(int *accum, ushort2 in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_ushort2_15) accumulator(my_ushort2_15_accum) combiner(combiner)
+static void my_ushort2_15_accum(int *accum, ushort2 in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_ushort4_0) accumulator(my_ushort4_0_accum) combiner(combiner)
+static void my_ushort4_0_accum(int *accum, ushort4 in) { }
+
+#pragma rs reduce(my_ushort4_1) accumulator(my_ushort4_1_accum) combiner(combiner)
+static void my_ushort4_1_accum(int *accum, ushort4 in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort4_2) accumulator(my_ushort4_2_accum) combiner(combiner)
+static void my_ushort4_2_accum(int *accum, ushort4 in, uint x) { }
+
+#pragma rs reduce(my_ushort4_3) accumulator(my_ushort4_3_accum) combiner(combiner)
+static void my_ushort4_3_accum(int *accum, ushort4 in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_ushort4_4) accumulator(my_ushort4_4_accum) combiner(combiner)
+static void my_ushort4_4_accum(int *accum, ushort4 in, uint y) { }
+
+#pragma rs reduce(my_ushort4_5) accumulator(my_ushort4_5_accum) combiner(combiner)
+static void my_ushort4_5_accum(int *accum, ushort4 in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_ushort4_6) accumulator(my_ushort4_6_accum) combiner(combiner)
+static void my_ushort4_6_accum(int *accum, ushort4 in, uint x, uint y) { }
+
+#pragma rs reduce(my_ushort4_7) accumulator(my_ushort4_7_accum) combiner(combiner)
+static void my_ushort4_7_accum(int *accum, ushort4 in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_ushort4_8) accumulator(my_ushort4_8_accum) combiner(combiner)
+static void my_ushort4_8_accum(int *accum, ushort4 in, uint z) { }
+
+#pragma rs reduce(my_ushort4_9) accumulator(my_ushort4_9_accum) combiner(combiner)
+static void my_ushort4_9_accum(int *accum, ushort4 in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_ushort4_10) accumulator(my_ushort4_10_accum) combiner(combiner)
+static void my_ushort4_10_accum(int *accum, ushort4 in, uint x, uint z) { }
+
+#pragma rs reduce(my_ushort4_11) accumulator(my_ushort4_11_accum) combiner(combiner)
+static void my_ushort4_11_accum(int *accum, ushort4 in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_ushort4_12) accumulator(my_ushort4_12_accum) combiner(combiner)
+static void my_ushort4_12_accum(int *accum, ushort4 in, uint y, uint z) { }
+
+#pragma rs reduce(my_ushort4_13) accumulator(my_ushort4_13_accum) combiner(combiner)
+static void my_ushort4_13_accum(int *accum, ushort4 in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_ushort4_14) accumulator(my_ushort4_14_accum) combiner(combiner)
+static void my_ushort4_14_accum(int *accum, ushort4 in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_ushort4_15) accumulator(my_ushort4_15_accum) combiner(combiner)
+static void my_ushort4_15_accum(int *accum, ushort4 in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_uint_0) accumulator(my_uint_0_accum) combiner(combiner)
+static void my_uint_0_accum(int *accum, uint in) { }
+
+#pragma rs reduce(my_uint_1) accumulator(my_uint_1_accum) combiner(combiner)
+static void my_uint_1_accum(int *accum, uint in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uint_2) accumulator(my_uint_2_accum) combiner(combiner)
+static void my_uint_2_accum(int *accum, uint in, uint x) { }
+
+#pragma rs reduce(my_uint_3) accumulator(my_uint_3_accum) combiner(combiner)
+static void my_uint_3_accum(int *accum, uint in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_uint_4) accumulator(my_uint_4_accum) combiner(combiner)
+static void my_uint_4_accum(int *accum, uint in, uint y) { }
+
+#pragma rs reduce(my_uint_5) accumulator(my_uint_5_accum) combiner(combiner)
+static void my_uint_5_accum(int *accum, uint in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_uint_6) accumulator(my_uint_6_accum) combiner(combiner)
+static void my_uint_6_accum(int *accum, uint in, uint x, uint y) { }
+
+#pragma rs reduce(my_uint_7) accumulator(my_uint_7_accum) combiner(combiner)
+static void my_uint_7_accum(int *accum, uint in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_uint_8) accumulator(my_uint_8_accum) combiner(combiner)
+static void my_uint_8_accum(int *accum, uint in, uint z) { }
+
+#pragma rs reduce(my_uint_9) accumulator(my_uint_9_accum) combiner(combiner)
+static void my_uint_9_accum(int *accum, uint in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_uint_10) accumulator(my_uint_10_accum) combiner(combiner)
+static void my_uint_10_accum(int *accum, uint in, uint x, uint z) { }
+
+#pragma rs reduce(my_uint_11) accumulator(my_uint_11_accum) combiner(combiner)
+static void my_uint_11_accum(int *accum, uint in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_uint_12) accumulator(my_uint_12_accum) combiner(combiner)
+static void my_uint_12_accum(int *accum, uint in, uint y, uint z) { }
+
+#pragma rs reduce(my_uint_13) accumulator(my_uint_13_accum) combiner(combiner)
+static void my_uint_13_accum(int *accum, uint in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_uint_14) accumulator(my_uint_14_accum) combiner(combiner)
+static void my_uint_14_accum(int *accum, uint in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_uint_15) accumulator(my_uint_15_accum) combiner(combiner)
+static void my_uint_15_accum(int *accum, uint in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_uint2_0) accumulator(my_uint2_0_accum) combiner(combiner)
+static void my_uint2_0_accum(int *accum, uint2 in) { }
+
+#pragma rs reduce(my_uint2_1) accumulator(my_uint2_1_accum) combiner(combiner)
+static void my_uint2_1_accum(int *accum, uint2 in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uint2_2) accumulator(my_uint2_2_accum) combiner(combiner)
+static void my_uint2_2_accum(int *accum, uint2 in, uint x) { }
+
+#pragma rs reduce(my_uint2_3) accumulator(my_uint2_3_accum) combiner(combiner)
+static void my_uint2_3_accum(int *accum, uint2 in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_uint2_4) accumulator(my_uint2_4_accum) combiner(combiner)
+static void my_uint2_4_accum(int *accum, uint2 in, uint y) { }
+
+#pragma rs reduce(my_uint2_5) accumulator(my_uint2_5_accum) combiner(combiner)
+static void my_uint2_5_accum(int *accum, uint2 in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_uint2_6) accumulator(my_uint2_6_accum) combiner(combiner)
+static void my_uint2_6_accum(int *accum, uint2 in, uint x, uint y) { }
+
+#pragma rs reduce(my_uint2_7) accumulator(my_uint2_7_accum) combiner(combiner)
+static void my_uint2_7_accum(int *accum, uint2 in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_uint2_8) accumulator(my_uint2_8_accum) combiner(combiner)
+static void my_uint2_8_accum(int *accum, uint2 in, uint z) { }
+
+#pragma rs reduce(my_uint2_9) accumulator(my_uint2_9_accum) combiner(combiner)
+static void my_uint2_9_accum(int *accum, uint2 in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_uint2_10) accumulator(my_uint2_10_accum) combiner(combiner)
+static void my_uint2_10_accum(int *accum, uint2 in, uint x, uint z) { }
+
+#pragma rs reduce(my_uint2_11) accumulator(my_uint2_11_accum) combiner(combiner)
+static void my_uint2_11_accum(int *accum, uint2 in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_uint2_12) accumulator(my_uint2_12_accum) combiner(combiner)
+static void my_uint2_12_accum(int *accum, uint2 in, uint y, uint z) { }
+
+#pragma rs reduce(my_uint2_13) accumulator(my_uint2_13_accum) combiner(combiner)
+static void my_uint2_13_accum(int *accum, uint2 in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_uint2_14) accumulator(my_uint2_14_accum) combiner(combiner)
+static void my_uint2_14_accum(int *accum, uint2 in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_uint2_15) accumulator(my_uint2_15_accum) combiner(combiner)
+static void my_uint2_15_accum(int *accum, uint2 in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_uint4_0) accumulator(my_uint4_0_accum) combiner(combiner)
+static void my_uint4_0_accum(int *accum, uint4 in) { }
+
+#pragma rs reduce(my_uint4_1) accumulator(my_uint4_1_accum) combiner(combiner)
+static void my_uint4_1_accum(int *accum, uint4 in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uint4_2) accumulator(my_uint4_2_accum) combiner(combiner)
+static void my_uint4_2_accum(int *accum, uint4 in, uint x) { }
+
+#pragma rs reduce(my_uint4_3) accumulator(my_uint4_3_accum) combiner(combiner)
+static void my_uint4_3_accum(int *accum, uint4 in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_uint4_4) accumulator(my_uint4_4_accum) combiner(combiner)
+static void my_uint4_4_accum(int *accum, uint4 in, uint y) { }
+
+#pragma rs reduce(my_uint4_5) accumulator(my_uint4_5_accum) combiner(combiner)
+static void my_uint4_5_accum(int *accum, uint4 in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_uint4_6) accumulator(my_uint4_6_accum) combiner(combiner)
+static void my_uint4_6_accum(int *accum, uint4 in, uint x, uint y) { }
+
+#pragma rs reduce(my_uint4_7) accumulator(my_uint4_7_accum) combiner(combiner)
+static void my_uint4_7_accum(int *accum, uint4 in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_uint4_8) accumulator(my_uint4_8_accum) combiner(combiner)
+static void my_uint4_8_accum(int *accum, uint4 in, uint z) { }
+
+#pragma rs reduce(my_uint4_9) accumulator(my_uint4_9_accum) combiner(combiner)
+static void my_uint4_9_accum(int *accum, uint4 in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_uint4_10) accumulator(my_uint4_10_accum) combiner(combiner)
+static void my_uint4_10_accum(int *accum, uint4 in, uint x, uint z) { }
+
+#pragma rs reduce(my_uint4_11) accumulator(my_uint4_11_accum) combiner(combiner)
+static void my_uint4_11_accum(int *accum, uint4 in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_uint4_12) accumulator(my_uint4_12_accum) combiner(combiner)
+static void my_uint4_12_accum(int *accum, uint4 in, uint y, uint z) { }
+
+#pragma rs reduce(my_uint4_13) accumulator(my_uint4_13_accum) combiner(combiner)
+static void my_uint4_13_accum(int *accum, uint4 in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_uint4_14) accumulator(my_uint4_14_accum) combiner(combiner)
+static void my_uint4_14_accum(int *accum, uint4 in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_uint4_15) accumulator(my_uint4_15_accum) combiner(combiner)
+static void my_uint4_15_accum(int *accum, uint4 in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_ulong_0) accumulator(my_ulong_0_accum) combiner(combiner)
+static void my_ulong_0_accum(int *accum, ulong in) { }
+
+#pragma rs reduce(my_ulong_1) accumulator(my_ulong_1_accum) combiner(combiner)
+static void my_ulong_1_accum(int *accum, ulong in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ulong_2) accumulator(my_ulong_2_accum) combiner(combiner)
+static void my_ulong_2_accum(int *accum, ulong in, uint x) { }
+
+#pragma rs reduce(my_ulong_3) accumulator(my_ulong_3_accum) combiner(combiner)
+static void my_ulong_3_accum(int *accum, ulong in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_ulong_4) accumulator(my_ulong_4_accum) combiner(combiner)
+static void my_ulong_4_accum(int *accum, ulong in, uint y) { }
+
+#pragma rs reduce(my_ulong_5) accumulator(my_ulong_5_accum) combiner(combiner)
+static void my_ulong_5_accum(int *accum, ulong in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_ulong_6) accumulator(my_ulong_6_accum) combiner(combiner)
+static void my_ulong_6_accum(int *accum, ulong in, uint x, uint y) { }
+
+#pragma rs reduce(my_ulong_7) accumulator(my_ulong_7_accum) combiner(combiner)
+static void my_ulong_7_accum(int *accum, ulong in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_ulong_8) accumulator(my_ulong_8_accum) combiner(combiner)
+static void my_ulong_8_accum(int *accum, ulong in, uint z) { }
+
+#pragma rs reduce(my_ulong_9) accumulator(my_ulong_9_accum) combiner(combiner)
+static void my_ulong_9_accum(int *accum, ulong in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_ulong_10) accumulator(my_ulong_10_accum) combiner(combiner)
+static void my_ulong_10_accum(int *accum, ulong in, uint x, uint z) { }
+
+#pragma rs reduce(my_ulong_11) accumulator(my_ulong_11_accum) combiner(combiner)
+static void my_ulong_11_accum(int *accum, ulong in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_ulong_12) accumulator(my_ulong_12_accum) combiner(combiner)
+static void my_ulong_12_accum(int *accum, ulong in, uint y, uint z) { }
+
+#pragma rs reduce(my_ulong_13) accumulator(my_ulong_13_accum) combiner(combiner)
+static void my_ulong_13_accum(int *accum, ulong in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_ulong_14) accumulator(my_ulong_14_accum) combiner(combiner)
+static void my_ulong_14_accum(int *accum, ulong in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_ulong_15) accumulator(my_ulong_15_accum) combiner(combiner)
+static void my_ulong_15_accum(int *accum, ulong in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_ulong2_0) accumulator(my_ulong2_0_accum) combiner(combiner)
+static void my_ulong2_0_accum(int *accum, ulong2 in) { }
+
+#pragma rs reduce(my_ulong2_1) accumulator(my_ulong2_1_accum) combiner(combiner)
+static void my_ulong2_1_accum(int *accum, ulong2 in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ulong2_2) accumulator(my_ulong2_2_accum) combiner(combiner)
+static void my_ulong2_2_accum(int *accum, ulong2 in, uint x) { }
+
+#pragma rs reduce(my_ulong2_3) accumulator(my_ulong2_3_accum) combiner(combiner)
+static void my_ulong2_3_accum(int *accum, ulong2 in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_ulong2_4) accumulator(my_ulong2_4_accum) combiner(combiner)
+static void my_ulong2_4_accum(int *accum, ulong2 in, uint y) { }
+
+#pragma rs reduce(my_ulong2_5) accumulator(my_ulong2_5_accum) combiner(combiner)
+static void my_ulong2_5_accum(int *accum, ulong2 in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_ulong2_6) accumulator(my_ulong2_6_accum) combiner(combiner)
+static void my_ulong2_6_accum(int *accum, ulong2 in, uint x, uint y) { }
+
+#pragma rs reduce(my_ulong2_7) accumulator(my_ulong2_7_accum) combiner(combiner)
+static void my_ulong2_7_accum(int *accum, ulong2 in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_ulong2_8) accumulator(my_ulong2_8_accum) combiner(combiner)
+static void my_ulong2_8_accum(int *accum, ulong2 in, uint z) { }
+
+#pragma rs reduce(my_ulong2_9) accumulator(my_ulong2_9_accum) combiner(combiner)
+static void my_ulong2_9_accum(int *accum, ulong2 in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_ulong2_10) accumulator(my_ulong2_10_accum) combiner(combiner)
+static void my_ulong2_10_accum(int *accum, ulong2 in, uint x, uint z) { }
+
+#pragma rs reduce(my_ulong2_11) accumulator(my_ulong2_11_accum) combiner(combiner)
+static void my_ulong2_11_accum(int *accum, ulong2 in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_ulong2_12) accumulator(my_ulong2_12_accum) combiner(combiner)
+static void my_ulong2_12_accum(int *accum, ulong2 in, uint y, uint z) { }
+
+#pragma rs reduce(my_ulong2_13) accumulator(my_ulong2_13_accum) combiner(combiner)
+static void my_ulong2_13_accum(int *accum, ulong2 in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_ulong2_14) accumulator(my_ulong2_14_accum) combiner(combiner)
+static void my_ulong2_14_accum(int *accum, ulong2 in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_ulong2_15) accumulator(my_ulong2_15_accum) combiner(combiner)
+static void my_ulong2_15_accum(int *accum, ulong2 in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_ulong4_0) accumulator(my_ulong4_0_accum) combiner(combiner)
+static void my_ulong4_0_accum(int *accum, ulong4 in) { }
+
+#pragma rs reduce(my_ulong4_1) accumulator(my_ulong4_1_accum) combiner(combiner)
+static void my_ulong4_1_accum(int *accum, ulong4 in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ulong4_2) accumulator(my_ulong4_2_accum) combiner(combiner)
+static void my_ulong4_2_accum(int *accum, ulong4 in, uint x) { }
+
+#pragma rs reduce(my_ulong4_3) accumulator(my_ulong4_3_accum) combiner(combiner)
+static void my_ulong4_3_accum(int *accum, ulong4 in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_ulong4_4) accumulator(my_ulong4_4_accum) combiner(combiner)
+static void my_ulong4_4_accum(int *accum, ulong4 in, uint y) { }
+
+#pragma rs reduce(my_ulong4_5) accumulator(my_ulong4_5_accum) combiner(combiner)
+static void my_ulong4_5_accum(int *accum, ulong4 in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_ulong4_6) accumulator(my_ulong4_6_accum) combiner(combiner)
+static void my_ulong4_6_accum(int *accum, ulong4 in, uint x, uint y) { }
+
+#pragma rs reduce(my_ulong4_7) accumulator(my_ulong4_7_accum) combiner(combiner)
+static void my_ulong4_7_accum(int *accum, ulong4 in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_ulong4_8) accumulator(my_ulong4_8_accum) combiner(combiner)
+static void my_ulong4_8_accum(int *accum, ulong4 in, uint z) { }
+
+#pragma rs reduce(my_ulong4_9) accumulator(my_ulong4_9_accum) combiner(combiner)
+static void my_ulong4_9_accum(int *accum, ulong4 in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_ulong4_10) accumulator(my_ulong4_10_accum) combiner(combiner)
+static void my_ulong4_10_accum(int *accum, ulong4 in, uint x, uint z) { }
+
+#pragma rs reduce(my_ulong4_11) accumulator(my_ulong4_11_accum) combiner(combiner)
+static void my_ulong4_11_accum(int *accum, ulong4 in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_ulong4_12) accumulator(my_ulong4_12_accum) combiner(combiner)
+static void my_ulong4_12_accum(int *accum, ulong4 in, uint y, uint z) { }
+
+#pragma rs reduce(my_ulong4_13) accumulator(my_ulong4_13_accum) combiner(combiner)
+static void my_ulong4_13_accum(int *accum, ulong4 in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_ulong4_14) accumulator(my_ulong4_14_accum) combiner(combiner)
+static void my_ulong4_14_accum(int *accum, ulong4 in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_ulong4_15) accumulator(my_ulong4_15_accum) combiner(combiner)
+static void my_ulong4_15_accum(int *accum, ulong4 in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_bool_0) accumulator(my_bool_0_accum) combiner(combiner)
+static void my_bool_0_accum(int *accum, bool in) { }
+
+#pragma rs reduce(my_bool_1) accumulator(my_bool_1_accum) combiner(combiner)
+static void my_bool_1_accum(int *accum, bool in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_bool_2) accumulator(my_bool_2_accum) combiner(combiner)
+static void my_bool_2_accum(int *accum, bool in, uint x) { }
+
+#pragma rs reduce(my_bool_3) accumulator(my_bool_3_accum) combiner(combiner)
+static void my_bool_3_accum(int *accum, bool in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_bool_4) accumulator(my_bool_4_accum) combiner(combiner)
+static void my_bool_4_accum(int *accum, bool in, uint y) { }
+
+#pragma rs reduce(my_bool_5) accumulator(my_bool_5_accum) combiner(combiner)
+static void my_bool_5_accum(int *accum, bool in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_bool_6) accumulator(my_bool_6_accum) combiner(combiner)
+static void my_bool_6_accum(int *accum, bool in, uint x, uint y) { }
+
+#pragma rs reduce(my_bool_7) accumulator(my_bool_7_accum) combiner(combiner)
+static void my_bool_7_accum(int *accum, bool in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_bool_8) accumulator(my_bool_8_accum) combiner(combiner)
+static void my_bool_8_accum(int *accum, bool in, uint z) { }
+
+#pragma rs reduce(my_bool_9) accumulator(my_bool_9_accum) combiner(combiner)
+static void my_bool_9_accum(int *accum, bool in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_bool_10) accumulator(my_bool_10_accum) combiner(combiner)
+static void my_bool_10_accum(int *accum, bool in, uint x, uint z) { }
+
+#pragma rs reduce(my_bool_11) accumulator(my_bool_11_accum) combiner(combiner)
+static void my_bool_11_accum(int *accum, bool in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_bool_12) accumulator(my_bool_12_accum) combiner(combiner)
+static void my_bool_12_accum(int *accum, bool in, uint y, uint z) { }
+
+#pragma rs reduce(my_bool_13) accumulator(my_bool_13_accum) combiner(combiner)
+static void my_bool_13_accum(int *accum, bool in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_bool_14) accumulator(my_bool_14_accum) combiner(combiner)
+static void my_bool_14_accum(int *accum, bool in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_bool_15) accumulator(my_bool_15_accum) combiner(combiner)
+static void my_bool_15_accum(int *accum, bool in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_rs_matrix2x2_0) accumulator(my_rs_matrix2x2_0_accum) combiner(combiner)
+static void my_rs_matrix2x2_0_accum(int *accum, rs_matrix2x2 in) { }
+
+#pragma rs reduce(my_rs_matrix2x2_1) accumulator(my_rs_matrix2x2_1_accum) combiner(combiner)
+static void my_rs_matrix2x2_1_accum(int *accum, rs_matrix2x2 in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_rs_matrix2x2_2) accumulator(my_rs_matrix2x2_2_accum) combiner(combiner)
+static void my_rs_matrix2x2_2_accum(int *accum, rs_matrix2x2 in, uint x) { }
+
+#pragma rs reduce(my_rs_matrix2x2_3) accumulator(my_rs_matrix2x2_3_accum) combiner(combiner)
+static void my_rs_matrix2x2_3_accum(int *accum, rs_matrix2x2 in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_rs_matrix2x2_4) accumulator(my_rs_matrix2x2_4_accum) combiner(combiner)
+static void my_rs_matrix2x2_4_accum(int *accum, rs_matrix2x2 in, uint y) { }
+
+#pragma rs reduce(my_rs_matrix2x2_5) accumulator(my_rs_matrix2x2_5_accum) combiner(combiner)
+static void my_rs_matrix2x2_5_accum(int *accum, rs_matrix2x2 in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_rs_matrix2x2_6) accumulator(my_rs_matrix2x2_6_accum) combiner(combiner)
+static void my_rs_matrix2x2_6_accum(int *accum, rs_matrix2x2 in, uint x, uint y) { }
+
+#pragma rs reduce(my_rs_matrix2x2_7) accumulator(my_rs_matrix2x2_7_accum) combiner(combiner)
+static void my_rs_matrix2x2_7_accum(int *accum, rs_matrix2x2 in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_rs_matrix2x2_8) accumulator(my_rs_matrix2x2_8_accum) combiner(combiner)
+static void my_rs_matrix2x2_8_accum(int *accum, rs_matrix2x2 in, uint z) { }
+
+#pragma rs reduce(my_rs_matrix2x2_9) accumulator(my_rs_matrix2x2_9_accum) combiner(combiner)
+static void my_rs_matrix2x2_9_accum(int *accum, rs_matrix2x2 in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_rs_matrix2x2_10) accumulator(my_rs_matrix2x2_10_accum) combiner(combiner)
+static void my_rs_matrix2x2_10_accum(int *accum, rs_matrix2x2 in, uint x, uint z) { }
+
+#pragma rs reduce(my_rs_matrix2x2_11) accumulator(my_rs_matrix2x2_11_accum) combiner(combiner)
+static void my_rs_matrix2x2_11_accum(int *accum, rs_matrix2x2 in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_rs_matrix2x2_12) accumulator(my_rs_matrix2x2_12_accum) combiner(combiner)
+static void my_rs_matrix2x2_12_accum(int *accum, rs_matrix2x2 in, uint y, uint z) { }
+
+#pragma rs reduce(my_rs_matrix2x2_13) accumulator(my_rs_matrix2x2_13_accum) combiner(combiner)
+static void my_rs_matrix2x2_13_accum(int *accum, rs_matrix2x2 in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_rs_matrix2x2_14) accumulator(my_rs_matrix2x2_14_accum) combiner(combiner)
+static void my_rs_matrix2x2_14_accum(int *accum, rs_matrix2x2 in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_rs_matrix2x2_15) accumulator(my_rs_matrix2x2_15_accum) combiner(combiner)
+static void my_rs_matrix2x2_15_accum(int *accum, rs_matrix2x2 in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_rs_matrix3x3_0) accumulator(my_rs_matrix3x3_0_accum) combiner(combiner)
+static void my_rs_matrix3x3_0_accum(int *accum, rs_matrix3x3 in) { }
+
+#pragma rs reduce(my_rs_matrix3x3_1) accumulator(my_rs_matrix3x3_1_accum) combiner(combiner)
+static void my_rs_matrix3x3_1_accum(int *accum, rs_matrix3x3 in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_rs_matrix3x3_2) accumulator(my_rs_matrix3x3_2_accum) combiner(combiner)
+static void my_rs_matrix3x3_2_accum(int *accum, rs_matrix3x3 in, uint x) { }
+
+#pragma rs reduce(my_rs_matrix3x3_3) accumulator(my_rs_matrix3x3_3_accum) combiner(combiner)
+static void my_rs_matrix3x3_3_accum(int *accum, rs_matrix3x3 in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_rs_matrix3x3_4) accumulator(my_rs_matrix3x3_4_accum) combiner(combiner)
+static void my_rs_matrix3x3_4_accum(int *accum, rs_matrix3x3 in, uint y) { }
+
+#pragma rs reduce(my_rs_matrix3x3_5) accumulator(my_rs_matrix3x3_5_accum) combiner(combiner)
+static void my_rs_matrix3x3_5_accum(int *accum, rs_matrix3x3 in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_rs_matrix3x3_6) accumulator(my_rs_matrix3x3_6_accum) combiner(combiner)
+static void my_rs_matrix3x3_6_accum(int *accum, rs_matrix3x3 in, uint x, uint y) { }
+
+#pragma rs reduce(my_rs_matrix3x3_7) accumulator(my_rs_matrix3x3_7_accum) combiner(combiner)
+static void my_rs_matrix3x3_7_accum(int *accum, rs_matrix3x3 in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_rs_matrix3x3_8) accumulator(my_rs_matrix3x3_8_accum) combiner(combiner)
+static void my_rs_matrix3x3_8_accum(int *accum, rs_matrix3x3 in, uint z) { }
+
+#pragma rs reduce(my_rs_matrix3x3_9) accumulator(my_rs_matrix3x3_9_accum) combiner(combiner)
+static void my_rs_matrix3x3_9_accum(int *accum, rs_matrix3x3 in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_rs_matrix3x3_10) accumulator(my_rs_matrix3x3_10_accum) combiner(combiner)
+static void my_rs_matrix3x3_10_accum(int *accum, rs_matrix3x3 in, uint x, uint z) { }
+
+#pragma rs reduce(my_rs_matrix3x3_11) accumulator(my_rs_matrix3x3_11_accum) combiner(combiner)
+static void my_rs_matrix3x3_11_accum(int *accum, rs_matrix3x3 in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_rs_matrix3x3_12) accumulator(my_rs_matrix3x3_12_accum) combiner(combiner)
+static void my_rs_matrix3x3_12_accum(int *accum, rs_matrix3x3 in, uint y, uint z) { }
+
+#pragma rs reduce(my_rs_matrix3x3_13) accumulator(my_rs_matrix3x3_13_accum) combiner(combiner)
+static void my_rs_matrix3x3_13_accum(int *accum, rs_matrix3x3 in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_rs_matrix3x3_14) accumulator(my_rs_matrix3x3_14_accum) combiner(combiner)
+static void my_rs_matrix3x3_14_accum(int *accum, rs_matrix3x3 in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_rs_matrix3x3_15) accumulator(my_rs_matrix3x3_15_accum) combiner(combiner)
+static void my_rs_matrix3x3_15_accum(int *accum, rs_matrix3x3 in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_rs_matrix4x4_0) accumulator(my_rs_matrix4x4_0_accum) combiner(combiner)
+static void my_rs_matrix4x4_0_accum(int *accum, rs_matrix4x4 in) { }
+
+#pragma rs reduce(my_rs_matrix4x4_1) accumulator(my_rs_matrix4x4_1_accum) combiner(combiner)
+static void my_rs_matrix4x4_1_accum(int *accum, rs_matrix4x4 in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_rs_matrix4x4_2) accumulator(my_rs_matrix4x4_2_accum) combiner(combiner)
+static void my_rs_matrix4x4_2_accum(int *accum, rs_matrix4x4 in, uint x) { }
+
+#pragma rs reduce(my_rs_matrix4x4_3) accumulator(my_rs_matrix4x4_3_accum) combiner(combiner)
+static void my_rs_matrix4x4_3_accum(int *accum, rs_matrix4x4 in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_rs_matrix4x4_4) accumulator(my_rs_matrix4x4_4_accum) combiner(combiner)
+static void my_rs_matrix4x4_4_accum(int *accum, rs_matrix4x4 in, uint y) { }
+
+#pragma rs reduce(my_rs_matrix4x4_5) accumulator(my_rs_matrix4x4_5_accum) combiner(combiner)
+static void my_rs_matrix4x4_5_accum(int *accum, rs_matrix4x4 in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_rs_matrix4x4_6) accumulator(my_rs_matrix4x4_6_accum) combiner(combiner)
+static void my_rs_matrix4x4_6_accum(int *accum, rs_matrix4x4 in, uint x, uint y) { }
+
+#pragma rs reduce(my_rs_matrix4x4_7) accumulator(my_rs_matrix4x4_7_accum) combiner(combiner)
+static void my_rs_matrix4x4_7_accum(int *accum, rs_matrix4x4 in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_rs_matrix4x4_8) accumulator(my_rs_matrix4x4_8_accum) combiner(combiner)
+static void my_rs_matrix4x4_8_accum(int *accum, rs_matrix4x4 in, uint z) { }
+
+#pragma rs reduce(my_rs_matrix4x4_9) accumulator(my_rs_matrix4x4_9_accum) combiner(combiner)
+static void my_rs_matrix4x4_9_accum(int *accum, rs_matrix4x4 in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_rs_matrix4x4_10) accumulator(my_rs_matrix4x4_10_accum) combiner(combiner)
+static void my_rs_matrix4x4_10_accum(int *accum, rs_matrix4x4 in, uint x, uint z) { }
+
+#pragma rs reduce(my_rs_matrix4x4_11) accumulator(my_rs_matrix4x4_11_accum) combiner(combiner)
+static void my_rs_matrix4x4_11_accum(int *accum, rs_matrix4x4 in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_rs_matrix4x4_12) accumulator(my_rs_matrix4x4_12_accum) combiner(combiner)
+static void my_rs_matrix4x4_12_accum(int *accum, rs_matrix4x4 in, uint y, uint z) { }
+
+#pragma rs reduce(my_rs_matrix4x4_13) accumulator(my_rs_matrix4x4_13_accum) combiner(combiner)
+static void my_rs_matrix4x4_13_accum(int *accum, rs_matrix4x4 in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_rs_matrix4x4_14) accumulator(my_rs_matrix4x4_14_accum) combiner(combiner)
+static void my_rs_matrix4x4_14_accum(int *accum, rs_matrix4x4 in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_rs_matrix4x4_15) accumulator(my_rs_matrix4x4_15_accum) combiner(combiner)
+static void my_rs_matrix4x4_15_accum(int *accum, rs_matrix4x4 in, rs_kernel_context context, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_MyStruct_0) accumulator(my_MyStruct_0_accum) combiner(combiner)
+static void my_MyStruct_0_accum(int *accum, MyStruct in) { }
+
+#pragma rs reduce(my_MyStruct_1) accumulator(my_MyStruct_1_accum) combiner(combiner)
+static void my_MyStruct_1_accum(int *accum, MyStruct in, rs_kernel_context context) { }
+
+#pragma rs reduce(my_MyStruct_2) accumulator(my_MyStruct_2_accum) combiner(combiner)
+static void my_MyStruct_2_accum(int *accum, MyStruct in, uint x) { }
+
+#pragma rs reduce(my_MyStruct_3) accumulator(my_MyStruct_3_accum) combiner(combiner)
+static void my_MyStruct_3_accum(int *accum, MyStruct in, rs_kernel_context context, uint x) { }
+
+#pragma rs reduce(my_MyStruct_4) accumulator(my_MyStruct_4_accum) combiner(combiner)
+static void my_MyStruct_4_accum(int *accum, MyStruct in, uint y) { }
+
+#pragma rs reduce(my_MyStruct_5) accumulator(my_MyStruct_5_accum) combiner(combiner)
+static void my_MyStruct_5_accum(int *accum, MyStruct in, rs_kernel_context context, uint y) { }
+
+#pragma rs reduce(my_MyStruct_6) accumulator(my_MyStruct_6_accum) combiner(combiner)
+static void my_MyStruct_6_accum(int *accum, MyStruct in, uint x, uint y) { }
+
+#pragma rs reduce(my_MyStruct_7) accumulator(my_MyStruct_7_accum) combiner(combiner)
+static void my_MyStruct_7_accum(int *accum, MyStruct in, rs_kernel_context context, uint x, uint y) { }
+
+#pragma rs reduce(my_MyStruct_8) accumulator(my_MyStruct_8_accum) combiner(combiner)
+static void my_MyStruct_8_accum(int *accum, MyStruct in, uint z) { }
+
+#pragma rs reduce(my_MyStruct_9) accumulator(my_MyStruct_9_accum) combiner(combiner)
+static void my_MyStruct_9_accum(int *accum, MyStruct in, rs_kernel_context context, uint z) { }
+
+#pragma rs reduce(my_MyStruct_10) accumulator(my_MyStruct_10_accum) combiner(combiner)
+static void my_MyStruct_10_accum(int *accum, MyStruct in, uint x, uint z) { }
+
+#pragma rs reduce(my_MyStruct_11) accumulator(my_MyStruct_11_accum) combiner(combiner)
+static void my_MyStruct_11_accum(int *accum, MyStruct in, rs_kernel_context context, uint x, uint z) { }
+
+#pragma rs reduce(my_MyStruct_12) accumulator(my_MyStruct_12_accum) combiner(combiner)
+static void my_MyStruct_12_accum(int *accum, MyStruct in, uint y, uint z) { }
+
+#pragma rs reduce(my_MyStruct_13) accumulator(my_MyStruct_13_accum) combiner(combiner)
+static void my_MyStruct_13_accum(int *accum, MyStruct in, rs_kernel_context context, uint y, uint z) { }
+
+#pragma rs reduce(my_MyStruct_14) accumulator(my_MyStruct_14_accum) combiner(combiner)
+static void my_MyStruct_14_accum(int *accum, MyStruct in, uint x, uint y, uint z) { }
+
+#pragma rs reduce(my_MyStruct_15) accumulator(my_MyStruct_15_accum) combiner(combiner)
+static void my_MyStruct_15_accum(int *accum, MyStruct in, rs_kernel_context context, uint x, uint y, uint z) { }
diff --git a/slang/tests/P_reduce_general_input/stderr.txt.expect b/slang/tests/P_reduce_general_input/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_reduce_general_input/stderr.txt.expect
diff --git a/slang/tests/P_reduce_general_input/stdout.txt.expect b/slang/tests/P_reduce_general_input/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_reduce_general_input/stdout.txt.expect
diff --git a/slang/tests/P_reduce_general_inputs/ScriptC_reduce_general_inputs.java.expect b/slang/tests/P_reduce_general_inputs/ScriptC_reduce_general_inputs.java.expect
new file mode 100644
index 0000000..05b80ad
--- /dev/null
+++ b/slang/tests/P_reduce_general_inputs/ScriptC_reduce_general_inputs.java.expect
@@ -0,0 +1,55645 @@
+/*
+ * Copyright (C) 2011-2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * This file is auto-generated. DO NOT MODIFY!
+ * The source Renderscript file: reduce_general_inputs.rs
+ */
+
+package inputs;
+
+import android.renderscript.*;
+import inputs.reduce_general_inputsBitCode;
+
+/**
+ * @hide
+ */
+public class ScriptC_reduce_general_inputs extends ScriptC {
+    private static final String __rs_resource_name = "reduce_general_inputs";
+    // Constructor
+    public  ScriptC_reduce_general_inputs(RenderScript rs) {
+        super(rs,
+              __rs_resource_name,
+              reduce_general_inputsBitCode.getBitCode32(),
+              reduce_general_inputsBitCode.getBitCode64());
+        mRSLocal = rs;
+        __I32 = Element.I32(rs);
+        __F16 = Element.F16(rs);
+        __F16_2 = Element.F16_2(rs);
+        __F16_4 = Element.F16_4(rs);
+        __F32 = Element.F32(rs);
+        __F32_2 = Element.F32_2(rs);
+        __F32_4 = Element.F32_4(rs);
+        __I8 = Element.I8(rs);
+        __I8_2 = Element.I8_2(rs);
+        __I8_4 = Element.I8_4(rs);
+        __I16 = Element.I16(rs);
+        __I16_2 = Element.I16_2(rs);
+        __I16_4 = Element.I16_4(rs);
+        __U8 = Element.U8(rs);
+        __U8_2 = Element.U8_2(rs);
+        __U8_4 = Element.U8_4(rs);
+        __U16 = Element.U16(rs);
+        __U16_2 = Element.U16_2(rs);
+        __U16_4 = Element.U16_4(rs);
+        __BOOLEAN = Element.BOOLEAN(rs);
+        __ScriptField_MyStruct = ScriptField_MyStruct.createElement(rs);
+    }
+
+    private Element __BOOLEAN;
+    private Element __F16;
+    private Element __F16_2;
+    private Element __F16_4;
+    private Element __F32;
+    private Element __F32_2;
+    private Element __F32_4;
+    private Element __I16;
+    private Element __I16_2;
+    private Element __I16_4;
+    private Element __I32;
+    private Element __I8;
+    private Element __I8_2;
+    private Element __I8_4;
+    private Element __ScriptField_MyStruct;
+    private Element __U16;
+    private Element __U16_2;
+    private Element __U16_4;
+    private Element __U8;
+    private Element __U8_2;
+    private Element __U8_4;
+    private RenderScript mRSLocal;
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_int {
+        public int get() {
+            if (!mGotResult) {
+                int[] outArray = new int[1];
+                mOut.copyTo(outArray);
+                mResult = outArray[0];
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_int(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private int mResult;
+    }
+
+    private final static int mExportReduceIdx_my_half_half_0 = 0;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_half_half_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_half_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "half b"
+    public result_int reduce_my_half_half_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_half_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "half b"
+    public result_int reduce_my_half_half_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_half_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_half_1 = 1;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_half_half_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_half_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "half b"
+    public result_int reduce_my_half_half_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_half_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "half b"
+    public result_int reduce_my_half_half_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_half_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_half2_0 = 2;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half_half2_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_half2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_half_half2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_half2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_half_half2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_half2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_half2_1 = 3;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half_half2_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_half2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_half_half2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_half2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_half_half2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_half2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_half4_0 = 4;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half_half4_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_half4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_half_half4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_half4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_half_half4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_half4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_half4_1 = 5;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half_half4_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_half4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_half_half4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_half4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_half_half4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_half4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_float_0 = 6;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_half_float_0(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_float_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "float b"
+    public result_int reduce_my_half_float_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_float_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "float b"
+    public result_int reduce_my_half_float_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_float_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_float_1 = 7;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_half_float_1(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_float_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "float b"
+    public result_int reduce_my_half_float_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_float_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "float b"
+    public result_int reduce_my_half_float_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_float_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_float2_0 = 8;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half_float2_0(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_float2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_half_float2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_float2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_half_float2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_float2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_float2_1 = 9;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half_float2_1(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_float2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_half_float2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_float2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_half_float2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_float2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_float4_0 = 10;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half_float4_0(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_float4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_half_float4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_float4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_half_float4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_float4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_float4_1 = 11;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half_float4_1(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_float4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_half_float4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_float4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_half_float4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_float4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_char_0 = 12;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_half_char_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_char_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "char b"
+    public result_int reduce_my_half_char_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_char_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "char b"
+    public result_int reduce_my_half_char_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_char_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_char_1 = 13;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_half_char_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_char_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "char b"
+    public result_int reduce_my_half_char_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_char_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "char b"
+    public result_int reduce_my_half_char_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_char_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_char2_0 = 14;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half_char2_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_char2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_half_char2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_char2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_half_char2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_char2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_char2_1 = 15;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half_char2_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_char2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_half_char2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_char2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_half_char2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_char2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_char4_0 = 16;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half_char4_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_char4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_half_char4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_char4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_half_char4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_char4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_char4_1 = 17;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half_char4_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_char4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_half_char4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_char4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_half_char4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_char4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_short_0 = 18;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_half_short_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_short_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "short b"
+    public result_int reduce_my_half_short_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_short_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "short b"
+    public result_int reduce_my_half_short_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_short_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_short_1 = 19;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_half_short_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_short_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "short b"
+    public result_int reduce_my_half_short_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_short_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "short b"
+    public result_int reduce_my_half_short_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_short_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_short2_0 = 20;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half_short2_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_short2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_half_short2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_short2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_half_short2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_short2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_short2_1 = 21;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half_short2_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_short2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_half_short2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_short2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_half_short2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_short2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_short4_0 = 22;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half_short4_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_short4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_half_short4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_short4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_half_short4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_short4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_short4_1 = 23;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half_short4_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_short4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_half_short4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_short4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_half_short4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_short4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_uchar_0 = 24;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_half_uchar_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_uchar_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_half_uchar_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_uchar_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_half_uchar_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_uchar_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_uchar_1 = 25;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_half_uchar_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_uchar_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_half_uchar_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_uchar_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_half_uchar_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_uchar_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_uchar2_0 = 26;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half_uchar2_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_uchar2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_half_uchar2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_uchar2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_half_uchar2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_uchar2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_uchar2_1 = 27;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half_uchar2_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_uchar2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_half_uchar2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_uchar2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_half_uchar2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_uchar2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_uchar4_0 = 28;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half_uchar4_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_uchar4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_half_uchar4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_uchar4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_half_uchar4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_uchar4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_uchar4_1 = 29;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half_uchar4_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_uchar4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_half_uchar4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_uchar4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_half_uchar4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_uchar4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_ushort_0 = 30;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_half_ushort_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_ushort_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_half_ushort_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_ushort_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_half_ushort_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_ushort_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_ushort_1 = 31;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_half_ushort_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_ushort_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_half_ushort_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_ushort_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_half_ushort_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_ushort_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_ushort2_0 = 32;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half_ushort2_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_ushort2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_half_ushort2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_ushort2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_half_ushort2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_ushort2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_ushort2_1 = 33;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half_ushort2_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_ushort2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_half_ushort2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_ushort2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_half_ushort2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_ushort2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_ushort4_0 = 34;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half_ushort4_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_ushort4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_half_ushort4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_ushort4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_half_ushort4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_ushort4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_ushort4_1 = 35;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half_ushort4_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_ushort4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_half_ushort4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_ushort4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_half_ushort4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_ushort4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_bool_0 = 36;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_half_bool_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_bool_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "bool b"
+    public result_int reduce_my_half_bool_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_bool_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "bool b"
+    public result_int reduce_my_half_bool_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_bool_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_bool_1 = 37;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_half_bool_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half_bool_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half a"
+    // ain2 = "bool b"
+    public result_int reduce_my_half_bool_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_bool_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "bool b"
+    public result_int reduce_my_half_bool_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_bool_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_rs_matrix2x2_0 = 38;
+    // ain1 = "half a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_half_rs_matrix2x2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_rs_matrix2x2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_half_rs_matrix2x2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_rs_matrix2x2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_rs_matrix2x2_1 = 39;
+    // ain1 = "half a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_half_rs_matrix2x2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_rs_matrix2x2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_half_rs_matrix2x2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_rs_matrix2x2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_MyStruct_0 = 40;
+    // ain1 = "half a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_half_MyStruct_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_MyStruct_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_half_MyStruct_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_MyStruct_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half_MyStruct_1 = 41;
+    // ain1 = "half a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_half_MyStruct_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half_MyStruct_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_half_MyStruct_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half_MyStruct_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_half_0 = 42;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_half2_half_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_half_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "half b"
+    public result_int reduce_my_half2_half_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_half_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "half b"
+    public result_int reduce_my_half2_half_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_half_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_half_1 = 43;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_half2_half_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_half_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "half b"
+    public result_int reduce_my_half2_half_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_half_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "half b"
+    public result_int reduce_my_half2_half_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_half_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_half2_0 = 44;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half2_half2_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_half2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_half2_half2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_half2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_half2_half2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_half2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_half2_1 = 45;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half2_half2_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_half2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_half2_half2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_half2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_half2_half2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_half2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_half4_0 = 46;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half2_half4_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_half4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_half2_half4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_half4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_half2_half4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_half4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_half4_1 = 47;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half2_half4_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_half4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_half2_half4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_half4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_half2_half4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_half4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_float_0 = 48;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_half2_float_0(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_float_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "float b"
+    public result_int reduce_my_half2_float_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_float_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "float b"
+    public result_int reduce_my_half2_float_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_float_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_float_1 = 49;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_half2_float_1(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_float_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "float b"
+    public result_int reduce_my_half2_float_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_float_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "float b"
+    public result_int reduce_my_half2_float_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_float_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_float2_0 = 50;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half2_float2_0(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_float2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_half2_float2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_float2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_half2_float2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_float2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_float2_1 = 51;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half2_float2_1(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_float2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_half2_float2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_float2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_half2_float2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_float2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_float4_0 = 52;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half2_float4_0(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_float4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_half2_float4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_float4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_half2_float4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_float4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_float4_1 = 53;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half2_float4_1(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_float4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_half2_float4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_float4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_half2_float4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_float4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_char_0 = 54;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_half2_char_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_char_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "char b"
+    public result_int reduce_my_half2_char_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_char_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "char b"
+    public result_int reduce_my_half2_char_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_char_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_char_1 = 55;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_half2_char_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_char_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "char b"
+    public result_int reduce_my_half2_char_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_char_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "char b"
+    public result_int reduce_my_half2_char_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_char_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_char2_0 = 56;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half2_char2_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_char2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_half2_char2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_char2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_half2_char2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_char2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_char2_1 = 57;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half2_char2_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_char2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_half2_char2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_char2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_half2_char2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_char2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_char4_0 = 58;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half2_char4_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_char4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_half2_char4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_char4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_half2_char4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_char4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_char4_1 = 59;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half2_char4_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_char4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_half2_char4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_char4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_half2_char4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_char4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_short_0 = 60;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_half2_short_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_short_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "short b"
+    public result_int reduce_my_half2_short_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_short_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "short b"
+    public result_int reduce_my_half2_short_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_short_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_short_1 = 61;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_half2_short_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_short_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "short b"
+    public result_int reduce_my_half2_short_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_short_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "short b"
+    public result_int reduce_my_half2_short_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_short_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_short2_0 = 62;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half2_short2_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_short2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_half2_short2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_short2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_half2_short2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_short2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_short2_1 = 63;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half2_short2_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_short2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_half2_short2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_short2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_half2_short2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_short2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_short4_0 = 64;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half2_short4_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_short4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_half2_short4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_short4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_half2_short4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_short4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_short4_1 = 65;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half2_short4_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_short4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_half2_short4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_short4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_half2_short4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_short4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_uchar_0 = 66;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_half2_uchar_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_uchar_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_half2_uchar_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_uchar_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_half2_uchar_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_uchar_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_uchar_1 = 67;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_half2_uchar_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_uchar_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_half2_uchar_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_uchar_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_half2_uchar_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_uchar_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_uchar2_0 = 68;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half2_uchar2_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_uchar2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_half2_uchar2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_uchar2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_half2_uchar2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_uchar2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_uchar2_1 = 69;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half2_uchar2_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_uchar2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_half2_uchar2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_uchar2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_half2_uchar2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_uchar2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_uchar4_0 = 70;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half2_uchar4_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_uchar4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_half2_uchar4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_uchar4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_half2_uchar4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_uchar4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_uchar4_1 = 71;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half2_uchar4_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_uchar4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_half2_uchar4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_uchar4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_half2_uchar4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_uchar4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_ushort_0 = 72;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_half2_ushort_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_ushort_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_half2_ushort_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_ushort_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_half2_ushort_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_ushort_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_ushort_1 = 73;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_half2_ushort_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_ushort_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_half2_ushort_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_ushort_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_half2_ushort_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_ushort_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_ushort2_0 = 74;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half2_ushort2_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_ushort2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_half2_ushort2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_ushort2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_half2_ushort2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_ushort2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_ushort2_1 = 75;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half2_ushort2_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_ushort2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_half2_ushort2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_ushort2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_half2_ushort2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_ushort2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_ushort4_0 = 76;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half2_ushort4_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_ushort4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_half2_ushort4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_ushort4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_half2_ushort4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_ushort4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_ushort4_1 = 77;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half2_ushort4_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_ushort4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_half2_ushort4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_ushort4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_half2_ushort4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_ushort4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_bool_0 = 78;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_half2_bool_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_bool_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_half2_bool_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_bool_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_half2_bool_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_bool_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_bool_1 = 79;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_half2_bool_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half2_bool_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_half2_bool_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_bool_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_half2_bool_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_bool_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_rs_matrix2x2_0 = 80;
+    // ain1 = "half2 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_half2_rs_matrix2x2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_rs_matrix2x2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_half2_rs_matrix2x2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_rs_matrix2x2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_rs_matrix2x2_1 = 81;
+    // ain1 = "half2 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_half2_rs_matrix2x2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_rs_matrix2x2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_half2_rs_matrix2x2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_rs_matrix2x2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_MyStruct_0 = 82;
+    // ain1 = "half2 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_half2_MyStruct_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_MyStruct_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_half2_MyStruct_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_MyStruct_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2_MyStruct_1 = 83;
+    // ain1 = "half2 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_half2_MyStruct_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half2_MyStruct_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half2 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_half2_MyStruct_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2_MyStruct_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_half_0 = 84;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_half4_half_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_half_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "half b"
+    public result_int reduce_my_half4_half_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_half_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "half b"
+    public result_int reduce_my_half4_half_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_half_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_half_1 = 85;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_half4_half_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_half_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "half b"
+    public result_int reduce_my_half4_half_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_half_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "half b"
+    public result_int reduce_my_half4_half_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_half_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_half2_0 = 86;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half4_half2_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_half2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_half4_half2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_half2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_half4_half2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_half2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_half2_1 = 87;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half4_half2_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_half2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_half4_half2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_half2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_half4_half2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_half2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_half4_0 = 88;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half4_half4_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_half4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_half4_half4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_half4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_half4_half4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_half4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_half4_1 = 89;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half4_half4_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_half4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_half4_half4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_half4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_half4_half4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_half4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_float_0 = 90;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_half4_float_0(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_float_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "float b"
+    public result_int reduce_my_half4_float_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_float_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "float b"
+    public result_int reduce_my_half4_float_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_float_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_float_1 = 91;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_half4_float_1(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_float_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "float b"
+    public result_int reduce_my_half4_float_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_float_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "float b"
+    public result_int reduce_my_half4_float_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_float_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_float2_0 = 92;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half4_float2_0(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_float2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_half4_float2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_float2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_half4_float2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_float2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_float2_1 = 93;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half4_float2_1(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_float2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_half4_float2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_float2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_half4_float2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_float2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_float4_0 = 94;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half4_float4_0(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_float4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_half4_float4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_float4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_half4_float4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_float4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_float4_1 = 95;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half4_float4_1(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_float4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_half4_float4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_float4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_half4_float4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_float4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_char_0 = 96;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_half4_char_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_char_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "char b"
+    public result_int reduce_my_half4_char_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_char_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "char b"
+    public result_int reduce_my_half4_char_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_char_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_char_1 = 97;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_half4_char_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_char_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "char b"
+    public result_int reduce_my_half4_char_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_char_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "char b"
+    public result_int reduce_my_half4_char_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_char_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_char2_0 = 98;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half4_char2_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_char2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_half4_char2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_char2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_half4_char2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_char2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_char2_1 = 99;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half4_char2_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_char2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_half4_char2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_char2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_half4_char2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_char2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_char4_0 = 100;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half4_char4_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_char4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_half4_char4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_char4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_half4_char4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_char4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_char4_1 = 101;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half4_char4_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_char4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_half4_char4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_char4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_half4_char4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_char4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_short_0 = 102;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_half4_short_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_short_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "short b"
+    public result_int reduce_my_half4_short_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_short_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "short b"
+    public result_int reduce_my_half4_short_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_short_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_short_1 = 103;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_half4_short_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_short_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "short b"
+    public result_int reduce_my_half4_short_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_short_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "short b"
+    public result_int reduce_my_half4_short_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_short_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_short2_0 = 104;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half4_short2_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_short2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_half4_short2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_short2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_half4_short2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_short2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_short2_1 = 105;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half4_short2_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_short2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_half4_short2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_short2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_half4_short2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_short2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_short4_0 = 106;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half4_short4_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_short4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_half4_short4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_short4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_half4_short4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_short4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_short4_1 = 107;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half4_short4_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_short4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_half4_short4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_short4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_half4_short4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_short4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_uchar_0 = 108;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_half4_uchar_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_uchar_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_half4_uchar_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_uchar_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_half4_uchar_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_uchar_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_uchar_1 = 109;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_half4_uchar_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_uchar_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_half4_uchar_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_uchar_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_half4_uchar_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_uchar_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_uchar2_0 = 110;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half4_uchar2_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_uchar2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_half4_uchar2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_uchar2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_half4_uchar2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_uchar2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_uchar2_1 = 111;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half4_uchar2_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_uchar2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_half4_uchar2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_uchar2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_half4_uchar2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_uchar2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_uchar4_0 = 112;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half4_uchar4_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_uchar4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_half4_uchar4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_uchar4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_half4_uchar4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_uchar4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_uchar4_1 = 113;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half4_uchar4_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_uchar4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_half4_uchar4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_uchar4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_half4_uchar4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_uchar4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_ushort_0 = 114;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_half4_ushort_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_ushort_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_half4_ushort_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_ushort_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_half4_ushort_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_ushort_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_ushort_1 = 115;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_half4_ushort_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_ushort_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_half4_ushort_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_ushort_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_half4_ushort_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_ushort_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_ushort2_0 = 116;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half4_ushort2_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_ushort2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_half4_ushort2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_ushort2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_half4_ushort2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_ushort2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_ushort2_1 = 117;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_half4_ushort2_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_ushort2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_half4_ushort2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_ushort2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_half4_ushort2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_ushort2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_ushort4_0 = 118;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half4_ushort4_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_ushort4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_half4_ushort4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_ushort4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_half4_ushort4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_ushort4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_ushort4_1 = 119;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_half4_ushort4_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_ushort4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_half4_ushort4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_ushort4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_half4_ushort4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_ushort4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_bool_0 = 120;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_half4_bool_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_bool_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_half4_bool_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_bool_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_half4_bool_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_bool_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_bool_1 = 121;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_half4_bool_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_half4_bool_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_half4_bool_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_bool_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_half4_bool_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_bool_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_rs_matrix2x2_0 = 122;
+    // ain1 = "half4 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_half4_rs_matrix2x2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_rs_matrix2x2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_half4_rs_matrix2x2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_rs_matrix2x2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_rs_matrix2x2_1 = 123;
+    // ain1 = "half4 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_half4_rs_matrix2x2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_rs_matrix2x2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_half4_rs_matrix2x2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_rs_matrix2x2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_MyStruct_0 = 124;
+    // ain1 = "half4 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_half4_MyStruct_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_MyStruct_0(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_half4_MyStruct_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_MyStruct_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4_MyStruct_1 = 125;
+    // ain1 = "half4 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_half4_MyStruct_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_half4_MyStruct_1(ain1, ain2, null);
+    }
+
+    // ain1 = "half4 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_half4_MyStruct_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4_MyStruct_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_half_0 = 126;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_float_half_0(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_half_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "half b"
+    public result_int reduce_my_float_half_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_half_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "half b"
+    public result_int reduce_my_float_half_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_half_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_half_1 = 127;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_float_half_1(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_half_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "half b"
+    public result_int reduce_my_float_half_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_half_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "half b"
+    public result_int reduce_my_float_half_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_half_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_half2_0 = 128;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float_half2_0(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_half2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_float_half2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_half2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_float_half2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_half2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_half2_1 = 129;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float_half2_1(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_half2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_float_half2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_half2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_float_half2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_half2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_half4_0 = 130;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float_half4_0(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_half4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_float_half4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_half4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_float_half4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_half4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_half4_1 = 131;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float_half4_1(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_half4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_float_half4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_half4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_float_half4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_half4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_float_0 = 132;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_float_float_0(float[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_float_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "float b"
+    public result_int reduce_my_float_float_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_float_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "float b"
+    public result_int reduce_my_float_float_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_float_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_float_1 = 133;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_float_float_1(float[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_float_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "float b"
+    public result_int reduce_my_float_float_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_float_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "float b"
+    public result_int reduce_my_float_float_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_float_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_float2_0 = 134;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float_float2_0(float[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_float2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_float_float2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_float2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_float_float2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_float2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_float2_1 = 135;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float_float2_1(float[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_float2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_float_float2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_float2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_float_float2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_float2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_float4_0 = 136;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float_float4_0(float[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_float4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_float_float4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_float4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_float_float4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_float4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_float4_1 = 137;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float_float4_1(float[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_float4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_float_float4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_float4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_float_float4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_float4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_char_0 = 138;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_float_char_0(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_char_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "char b"
+    public result_int reduce_my_float_char_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_char_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "char b"
+    public result_int reduce_my_float_char_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_char_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_char_1 = 139;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_float_char_1(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_char_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "char b"
+    public result_int reduce_my_float_char_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_char_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "char b"
+    public result_int reduce_my_float_char_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_char_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_char2_0 = 140;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float_char2_0(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_char2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_float_char2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_char2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_float_char2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_char2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_char2_1 = 141;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float_char2_1(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_char2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_float_char2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_char2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_float_char2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_char2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_char4_0 = 142;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float_char4_0(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_char4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_float_char4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_char4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_float_char4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_char4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_char4_1 = 143;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float_char4_1(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_char4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_float_char4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_char4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_float_char4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_char4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_short_0 = 144;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_float_short_0(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_short_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "short b"
+    public result_int reduce_my_float_short_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_short_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "short b"
+    public result_int reduce_my_float_short_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_short_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_short_1 = 145;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_float_short_1(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_short_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "short b"
+    public result_int reduce_my_float_short_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_short_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "short b"
+    public result_int reduce_my_float_short_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_short_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_short2_0 = 146;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float_short2_0(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_short2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_float_short2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_short2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_float_short2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_short2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_short2_1 = 147;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float_short2_1(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_short2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_float_short2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_short2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_float_short2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_short2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_short4_0 = 148;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float_short4_0(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_short4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_float_short4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_short4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_float_short4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_short4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_short4_1 = 149;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float_short4_1(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_short4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_float_short4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_short4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_float_short4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_short4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_uchar_0 = 150;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_float_uchar_0(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_uchar_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_float_uchar_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_uchar_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_float_uchar_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_uchar_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_uchar_1 = 151;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_float_uchar_1(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_uchar_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_float_uchar_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_uchar_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_float_uchar_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_uchar_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_uchar2_0 = 152;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float_uchar2_0(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_uchar2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_float_uchar2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_uchar2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_float_uchar2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_uchar2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_uchar2_1 = 153;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float_uchar2_1(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_uchar2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_float_uchar2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_uchar2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_float_uchar2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_uchar2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_uchar4_0 = 154;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float_uchar4_0(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_uchar4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_float_uchar4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_uchar4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_float_uchar4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_uchar4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_uchar4_1 = 155;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float_uchar4_1(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_uchar4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_float_uchar4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_uchar4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_float_uchar4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_uchar4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_ushort_0 = 156;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_float_ushort_0(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_ushort_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_float_ushort_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_ushort_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_float_ushort_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_ushort_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_ushort_1 = 157;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_float_ushort_1(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_ushort_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_float_ushort_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_ushort_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_float_ushort_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_ushort_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_ushort2_0 = 158;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float_ushort2_0(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_ushort2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_float_ushort2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_ushort2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_float_ushort2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_ushort2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_ushort2_1 = 159;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float_ushort2_1(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_ushort2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_float_ushort2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_ushort2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_float_ushort2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_ushort2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_ushort4_0 = 160;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float_ushort4_0(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_ushort4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_float_ushort4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_ushort4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_float_ushort4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_ushort4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_ushort4_1 = 161;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float_ushort4_1(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_ushort4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_float_ushort4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_ushort4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_float_ushort4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_ushort4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_bool_0 = 162;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_float_bool_0(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_bool_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "bool b"
+    public result_int reduce_my_float_bool_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_bool_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "bool b"
+    public result_int reduce_my_float_bool_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_bool_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_bool_1 = 163;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_float_bool_1(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float_bool_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float a"
+    // ain2 = "bool b"
+    public result_int reduce_my_float_bool_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_bool_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "bool b"
+    public result_int reduce_my_float_bool_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_bool_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_rs_matrix2x2_0 = 164;
+    // ain1 = "float a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_float_rs_matrix2x2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_rs_matrix2x2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_float_rs_matrix2x2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_rs_matrix2x2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_rs_matrix2x2_1 = 165;
+    // ain1 = "float a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_float_rs_matrix2x2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_rs_matrix2x2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_float_rs_matrix2x2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_rs_matrix2x2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_MyStruct_0 = 166;
+    // ain1 = "float a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_float_MyStruct_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_MyStruct_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_float_MyStruct_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_MyStruct_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float_MyStruct_1 = 167;
+    // ain1 = "float a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_float_MyStruct_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float_MyStruct_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_float_MyStruct_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float_MyStruct_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_half_0 = 168;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_float2_half_0(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_half_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "half b"
+    public result_int reduce_my_float2_half_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_half_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "half b"
+    public result_int reduce_my_float2_half_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_half_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_half_1 = 169;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_float2_half_1(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_half_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "half b"
+    public result_int reduce_my_float2_half_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_half_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "half b"
+    public result_int reduce_my_float2_half_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_half_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_half2_0 = 170;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float2_half2_0(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_half2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_float2_half2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_half2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_float2_half2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_half2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_half2_1 = 171;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float2_half2_1(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_half2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_float2_half2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_half2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_float2_half2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_half2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_half4_0 = 172;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float2_half4_0(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_half4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_float2_half4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_half4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_float2_half4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_half4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_half4_1 = 173;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float2_half4_1(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_half4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_float2_half4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_half4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_float2_half4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_half4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_float_0 = 174;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_float2_float_0(float[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_float_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "float b"
+    public result_int reduce_my_float2_float_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_float_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "float b"
+    public result_int reduce_my_float2_float_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_float_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_float_1 = 175;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_float2_float_1(float[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_float_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "float b"
+    public result_int reduce_my_float2_float_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_float_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "float b"
+    public result_int reduce_my_float2_float_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_float_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_float2_0 = 176;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float2_float2_0(float[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_float2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_float2_float2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_float2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_float2_float2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_float2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_float2_1 = 177;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float2_float2_1(float[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_float2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_float2_float2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_float2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_float2_float2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_float2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_float4_0 = 178;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float2_float4_0(float[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_float4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_float2_float4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_float4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_float2_float4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_float4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_float4_1 = 179;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float2_float4_1(float[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_float4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_float2_float4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_float4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_float2_float4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_float4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_char_0 = 180;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_float2_char_0(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_char_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "char b"
+    public result_int reduce_my_float2_char_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_char_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "char b"
+    public result_int reduce_my_float2_char_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_char_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_char_1 = 181;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_float2_char_1(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_char_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "char b"
+    public result_int reduce_my_float2_char_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_char_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "char b"
+    public result_int reduce_my_float2_char_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_char_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_char2_0 = 182;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float2_char2_0(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_char2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_float2_char2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_char2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_float2_char2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_char2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_char2_1 = 183;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float2_char2_1(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_char2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_float2_char2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_char2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_float2_char2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_char2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_char4_0 = 184;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float2_char4_0(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_char4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_float2_char4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_char4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_float2_char4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_char4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_char4_1 = 185;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float2_char4_1(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_char4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_float2_char4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_char4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_float2_char4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_char4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_short_0 = 186;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_float2_short_0(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_short_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "short b"
+    public result_int reduce_my_float2_short_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_short_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "short b"
+    public result_int reduce_my_float2_short_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_short_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_short_1 = 187;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_float2_short_1(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_short_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "short b"
+    public result_int reduce_my_float2_short_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_short_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "short b"
+    public result_int reduce_my_float2_short_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_short_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_short2_0 = 188;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float2_short2_0(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_short2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_float2_short2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_short2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_float2_short2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_short2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_short2_1 = 189;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float2_short2_1(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_short2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_float2_short2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_short2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_float2_short2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_short2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_short4_0 = 190;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float2_short4_0(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_short4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_float2_short4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_short4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_float2_short4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_short4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_short4_1 = 191;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float2_short4_1(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_short4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_float2_short4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_short4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_float2_short4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_short4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_uchar_0 = 192;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_float2_uchar_0(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_uchar_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_float2_uchar_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_uchar_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_float2_uchar_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_uchar_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_uchar_1 = 193;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_float2_uchar_1(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_uchar_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_float2_uchar_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_uchar_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_float2_uchar_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_uchar_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_uchar2_0 = 194;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float2_uchar2_0(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_uchar2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_float2_uchar2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_uchar2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_float2_uchar2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_uchar2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_uchar2_1 = 195;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float2_uchar2_1(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_uchar2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_float2_uchar2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_uchar2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_float2_uchar2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_uchar2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_uchar4_0 = 196;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float2_uchar4_0(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_uchar4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_float2_uchar4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_uchar4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_float2_uchar4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_uchar4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_uchar4_1 = 197;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float2_uchar4_1(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_uchar4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_float2_uchar4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_uchar4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_float2_uchar4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_uchar4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_ushort_0 = 198;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_float2_ushort_0(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_ushort_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_float2_ushort_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_ushort_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_float2_ushort_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_ushort_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_ushort_1 = 199;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_float2_ushort_1(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_ushort_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_float2_ushort_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_ushort_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_float2_ushort_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_ushort_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_ushort2_0 = 200;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float2_ushort2_0(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_ushort2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_float2_ushort2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_ushort2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_float2_ushort2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_ushort2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_ushort2_1 = 201;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float2_ushort2_1(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_ushort2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_float2_ushort2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_ushort2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_float2_ushort2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_ushort2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_ushort4_0 = 202;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float2_ushort4_0(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_ushort4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_float2_ushort4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_ushort4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_float2_ushort4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_ushort4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_ushort4_1 = 203;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float2_ushort4_1(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_ushort4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_float2_ushort4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_ushort4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_float2_ushort4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_ushort4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_bool_0 = 204;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_float2_bool_0(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_bool_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_float2_bool_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_bool_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_float2_bool_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_bool_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_bool_1 = 205;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_float2_bool_1(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float2_bool_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_float2_bool_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_bool_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_float2_bool_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_bool_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_rs_matrix2x2_0 = 206;
+    // ain1 = "float2 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_float2_rs_matrix2x2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_rs_matrix2x2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_float2_rs_matrix2x2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_rs_matrix2x2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_rs_matrix2x2_1 = 207;
+    // ain1 = "float2 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_float2_rs_matrix2x2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_rs_matrix2x2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_float2_rs_matrix2x2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_rs_matrix2x2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_MyStruct_0 = 208;
+    // ain1 = "float2 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_float2_MyStruct_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_MyStruct_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_float2_MyStruct_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_MyStruct_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2_MyStruct_1 = 209;
+    // ain1 = "float2 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_float2_MyStruct_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float2_MyStruct_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float2 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_float2_MyStruct_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2_MyStruct_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_half_0 = 210;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_float4_half_0(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_half_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "half b"
+    public result_int reduce_my_float4_half_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_half_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "half b"
+    public result_int reduce_my_float4_half_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_half_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_half_1 = 211;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_float4_half_1(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_half_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "half b"
+    public result_int reduce_my_float4_half_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_half_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "half b"
+    public result_int reduce_my_float4_half_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_half_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_half2_0 = 212;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float4_half2_0(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_half2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_float4_half2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_half2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_float4_half2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_half2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_half2_1 = 213;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float4_half2_1(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_half2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_float4_half2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_half2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_float4_half2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_half2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_half4_0 = 214;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float4_half4_0(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_half4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_float4_half4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_half4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_float4_half4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_half4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_half4_1 = 215;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float4_half4_1(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_half4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_float4_half4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_half4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_float4_half4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_half4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_float_0 = 216;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_float4_float_0(float[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_float_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "float b"
+    public result_int reduce_my_float4_float_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_float_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "float b"
+    public result_int reduce_my_float4_float_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_float_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_float_1 = 217;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_float4_float_1(float[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_float_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "float b"
+    public result_int reduce_my_float4_float_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_float_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "float b"
+    public result_int reduce_my_float4_float_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_float_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_float2_0 = 218;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float4_float2_0(float[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_float2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_float4_float2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_float2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_float4_float2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_float2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_float2_1 = 219;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float4_float2_1(float[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_float2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_float4_float2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_float2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_float4_float2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_float2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_float4_0 = 220;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float4_float4_0(float[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_float4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_float4_float4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_float4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_float4_float4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_float4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_float4_1 = 221;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float4_float4_1(float[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_float4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_float4_float4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_float4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_float4_float4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_float4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_char_0 = 222;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_float4_char_0(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_char_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "char b"
+    public result_int reduce_my_float4_char_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_char_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "char b"
+    public result_int reduce_my_float4_char_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_char_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_char_1 = 223;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_float4_char_1(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_char_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "char b"
+    public result_int reduce_my_float4_char_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_char_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "char b"
+    public result_int reduce_my_float4_char_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_char_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_char2_0 = 224;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float4_char2_0(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_char2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_float4_char2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_char2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_float4_char2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_char2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_char2_1 = 225;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float4_char2_1(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_char2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_float4_char2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_char2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_float4_char2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_char2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_char4_0 = 226;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float4_char4_0(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_char4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_float4_char4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_char4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_float4_char4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_char4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_char4_1 = 227;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float4_char4_1(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_char4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_float4_char4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_char4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_float4_char4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_char4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_short_0 = 228;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_float4_short_0(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_short_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "short b"
+    public result_int reduce_my_float4_short_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_short_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "short b"
+    public result_int reduce_my_float4_short_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_short_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_short_1 = 229;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_float4_short_1(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_short_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "short b"
+    public result_int reduce_my_float4_short_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_short_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "short b"
+    public result_int reduce_my_float4_short_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_short_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_short2_0 = 230;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float4_short2_0(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_short2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_float4_short2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_short2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_float4_short2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_short2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_short2_1 = 231;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float4_short2_1(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_short2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_float4_short2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_short2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_float4_short2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_short2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_short4_0 = 232;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float4_short4_0(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_short4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_float4_short4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_short4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_float4_short4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_short4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_short4_1 = 233;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float4_short4_1(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_short4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_float4_short4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_short4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_float4_short4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_short4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_uchar_0 = 234;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_float4_uchar_0(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_uchar_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_float4_uchar_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_uchar_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_float4_uchar_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_uchar_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_uchar_1 = 235;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_float4_uchar_1(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_uchar_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_float4_uchar_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_uchar_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_float4_uchar_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_uchar_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_uchar2_0 = 236;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float4_uchar2_0(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_uchar2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_float4_uchar2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_uchar2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_float4_uchar2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_uchar2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_uchar2_1 = 237;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float4_uchar2_1(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_uchar2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_float4_uchar2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_uchar2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_float4_uchar2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_uchar2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_uchar4_0 = 238;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float4_uchar4_0(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_uchar4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_float4_uchar4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_uchar4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_float4_uchar4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_uchar4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_uchar4_1 = 239;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float4_uchar4_1(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_uchar4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_float4_uchar4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_uchar4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_float4_uchar4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_uchar4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_ushort_0 = 240;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_float4_ushort_0(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_ushort_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_float4_ushort_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_ushort_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_float4_ushort_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_ushort_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_ushort_1 = 241;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_float4_ushort_1(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_ushort_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_float4_ushort_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_ushort_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_float4_ushort_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_ushort_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_ushort2_0 = 242;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float4_ushort2_0(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_ushort2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_float4_ushort2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_ushort2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_float4_ushort2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_ushort2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_ushort2_1 = 243;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_float4_ushort2_1(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_ushort2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_float4_ushort2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_ushort2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_float4_ushort2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_ushort2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_ushort4_0 = 244;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float4_ushort4_0(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_ushort4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_float4_ushort4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_ushort4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_float4_ushort4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_ushort4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_ushort4_1 = 245;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_float4_ushort4_1(float[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_ushort4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_float4_ushort4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_ushort4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_float4_ushort4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_ushort4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_bool_0 = 246;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_float4_bool_0(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_bool_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_float4_bool_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_bool_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_float4_bool_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_bool_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_bool_1 = 247;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_float4_bool_1(float[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_float4_bool_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_float4_bool_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_bool_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_float4_bool_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_bool_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_rs_matrix2x2_0 = 248;
+    // ain1 = "float4 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_float4_rs_matrix2x2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_rs_matrix2x2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_float4_rs_matrix2x2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_rs_matrix2x2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_rs_matrix2x2_1 = 249;
+    // ain1 = "float4 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_float4_rs_matrix2x2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_rs_matrix2x2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_float4_rs_matrix2x2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_rs_matrix2x2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_MyStruct_0 = 250;
+    // ain1 = "float4 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_float4_MyStruct_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_MyStruct_0(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_float4_MyStruct_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_MyStruct_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4_MyStruct_1 = 251;
+    // ain1 = "float4 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_float4_MyStruct_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_float4_MyStruct_1(ain1, ain2, null);
+    }
+
+    // ain1 = "float4 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_float4_MyStruct_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4_MyStruct_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_half_0 = 252;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_char_half_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_half_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "half b"
+    public result_int reduce_my_char_half_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_half_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "half b"
+    public result_int reduce_my_char_half_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_half_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_half_1 = 253;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_char_half_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_half_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "half b"
+    public result_int reduce_my_char_half_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_half_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "half b"
+    public result_int reduce_my_char_half_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_half_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_half2_0 = 254;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char_half2_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_half2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_char_half2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_half2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_char_half2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_half2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_half2_1 = 255;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char_half2_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_half2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_char_half2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_half2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_char_half2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_half2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_half4_0 = 256;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char_half4_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_half4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_char_half4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_half4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_char_half4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_half4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_half4_1 = 257;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char_half4_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_half4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_char_half4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_half4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_char_half4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_half4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_float_0 = 258;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_char_float_0(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_float_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "float b"
+    public result_int reduce_my_char_float_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_float_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "float b"
+    public result_int reduce_my_char_float_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_float_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_float_1 = 259;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_char_float_1(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_float_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "float b"
+    public result_int reduce_my_char_float_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_float_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "float b"
+    public result_int reduce_my_char_float_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_float_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_float2_0 = 260;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char_float2_0(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_float2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_char_float2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_float2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_char_float2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_float2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_float2_1 = 261;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char_float2_1(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_float2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_char_float2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_float2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_char_float2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_float2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_float4_0 = 262;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char_float4_0(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_float4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_char_float4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_float4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_char_float4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_float4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_float4_1 = 263;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char_float4_1(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_float4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_char_float4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_float4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_char_float4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_float4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_char_0 = 264;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_char_char_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_char_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "char b"
+    public result_int reduce_my_char_char_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_char_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "char b"
+    public result_int reduce_my_char_char_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_char_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_char_1 = 265;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_char_char_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_char_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "char b"
+    public result_int reduce_my_char_char_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_char_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "char b"
+    public result_int reduce_my_char_char_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_char_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_char2_0 = 266;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char_char2_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_char2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_char_char2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_char2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_char_char2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_char2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_char2_1 = 267;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char_char2_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_char2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_char_char2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_char2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_char_char2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_char2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_char4_0 = 268;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char_char4_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_char4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_char_char4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_char4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_char_char4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_char4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_char4_1 = 269;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char_char4_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_char4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_char_char4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_char4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_char_char4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_char4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_short_0 = 270;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_char_short_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_short_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "short b"
+    public result_int reduce_my_char_short_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_short_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "short b"
+    public result_int reduce_my_char_short_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_short_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_short_1 = 271;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_char_short_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_short_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "short b"
+    public result_int reduce_my_char_short_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_short_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "short b"
+    public result_int reduce_my_char_short_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_short_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_short2_0 = 272;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char_short2_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_short2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_char_short2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_short2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_char_short2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_short2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_short2_1 = 273;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char_short2_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_short2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_char_short2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_short2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_char_short2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_short2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_short4_0 = 274;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char_short4_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_short4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_char_short4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_short4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_char_short4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_short4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_short4_1 = 275;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char_short4_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_short4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_char_short4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_short4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_char_short4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_short4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_uchar_0 = 276;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_char_uchar_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_uchar_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_char_uchar_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_uchar_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_char_uchar_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_uchar_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_uchar_1 = 277;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_char_uchar_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_uchar_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_char_uchar_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_uchar_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_char_uchar_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_uchar_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_uchar2_0 = 278;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char_uchar2_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_uchar2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_char_uchar2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_uchar2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_char_uchar2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_uchar2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_uchar2_1 = 279;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char_uchar2_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_uchar2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_char_uchar2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_uchar2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_char_uchar2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_uchar2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_uchar4_0 = 280;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char_uchar4_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_uchar4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_char_uchar4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_uchar4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_char_uchar4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_uchar4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_uchar4_1 = 281;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char_uchar4_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_uchar4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_char_uchar4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_uchar4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_char_uchar4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_uchar4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_ushort_0 = 282;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_char_ushort_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_ushort_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_char_ushort_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_ushort_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_char_ushort_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_ushort_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_ushort_1 = 283;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_char_ushort_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_ushort_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_char_ushort_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_ushort_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_char_ushort_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_ushort_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_ushort2_0 = 284;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char_ushort2_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_ushort2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_char_ushort2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_ushort2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_char_ushort2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_ushort2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_ushort2_1 = 285;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char_ushort2_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_ushort2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_char_ushort2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_ushort2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_char_ushort2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_ushort2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_ushort4_0 = 286;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char_ushort4_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_ushort4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_char_ushort4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_ushort4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_char_ushort4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_ushort4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_ushort4_1 = 287;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char_ushort4_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_ushort4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_char_ushort4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_ushort4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_char_ushort4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_ushort4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_bool_0 = 288;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_char_bool_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_bool_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "bool b"
+    public result_int reduce_my_char_bool_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_bool_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "bool b"
+    public result_int reduce_my_char_bool_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_bool_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_bool_1 = 289;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_char_bool_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char_bool_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char a"
+    // ain2 = "bool b"
+    public result_int reduce_my_char_bool_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_bool_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "bool b"
+    public result_int reduce_my_char_bool_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_bool_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_rs_matrix2x2_0 = 290;
+    // ain1 = "char a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_char_rs_matrix2x2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_rs_matrix2x2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_char_rs_matrix2x2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_rs_matrix2x2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_rs_matrix2x2_1 = 291;
+    // ain1 = "char a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_char_rs_matrix2x2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_rs_matrix2x2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_char_rs_matrix2x2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_rs_matrix2x2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_MyStruct_0 = 292;
+    // ain1 = "char a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_char_MyStruct_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_MyStruct_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_char_MyStruct_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_MyStruct_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char_MyStruct_1 = 293;
+    // ain1 = "char a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_char_MyStruct_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char_MyStruct_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_char_MyStruct_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char_MyStruct_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_half_0 = 294;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_char2_half_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_half_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "half b"
+    public result_int reduce_my_char2_half_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_half_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "half b"
+    public result_int reduce_my_char2_half_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_half_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_half_1 = 295;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_char2_half_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_half_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "half b"
+    public result_int reduce_my_char2_half_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_half_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "half b"
+    public result_int reduce_my_char2_half_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_half_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_half2_0 = 296;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char2_half2_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_half2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_char2_half2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_half2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_char2_half2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_half2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_half2_1 = 297;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char2_half2_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_half2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_char2_half2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_half2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_char2_half2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_half2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_half4_0 = 298;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char2_half4_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_half4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_char2_half4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_half4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_char2_half4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_half4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_half4_1 = 299;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char2_half4_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_half4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_char2_half4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_half4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_char2_half4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_half4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_float_0 = 300;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_char2_float_0(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_float_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "float b"
+    public result_int reduce_my_char2_float_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_float_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "float b"
+    public result_int reduce_my_char2_float_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_float_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_float_1 = 301;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_char2_float_1(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_float_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "float b"
+    public result_int reduce_my_char2_float_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_float_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "float b"
+    public result_int reduce_my_char2_float_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_float_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_float2_0 = 302;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char2_float2_0(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_float2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_char2_float2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_float2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_char2_float2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_float2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_float2_1 = 303;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char2_float2_1(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_float2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_char2_float2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_float2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_char2_float2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_float2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_float4_0 = 304;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char2_float4_0(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_float4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_char2_float4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_float4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_char2_float4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_float4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_float4_1 = 305;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char2_float4_1(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_float4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_char2_float4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_float4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_char2_float4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_float4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_char_0 = 306;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_char2_char_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_char_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "char b"
+    public result_int reduce_my_char2_char_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_char_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "char b"
+    public result_int reduce_my_char2_char_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_char_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_char_1 = 307;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_char2_char_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_char_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "char b"
+    public result_int reduce_my_char2_char_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_char_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "char b"
+    public result_int reduce_my_char2_char_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_char_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_char2_0 = 308;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char2_char2_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_char2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_char2_char2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_char2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_char2_char2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_char2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_char2_1 = 309;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char2_char2_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_char2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_char2_char2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_char2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_char2_char2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_char2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_char4_0 = 310;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char2_char4_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_char4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_char2_char4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_char4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_char2_char4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_char4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_char4_1 = 311;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char2_char4_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_char4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_char2_char4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_char4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_char2_char4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_char4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_short_0 = 312;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_char2_short_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_short_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "short b"
+    public result_int reduce_my_char2_short_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_short_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "short b"
+    public result_int reduce_my_char2_short_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_short_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_short_1 = 313;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_char2_short_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_short_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "short b"
+    public result_int reduce_my_char2_short_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_short_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "short b"
+    public result_int reduce_my_char2_short_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_short_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_short2_0 = 314;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char2_short2_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_short2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_char2_short2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_short2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_char2_short2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_short2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_short2_1 = 315;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char2_short2_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_short2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_char2_short2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_short2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_char2_short2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_short2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_short4_0 = 316;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char2_short4_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_short4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_char2_short4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_short4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_char2_short4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_short4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_short4_1 = 317;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char2_short4_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_short4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_char2_short4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_short4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_char2_short4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_short4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_uchar_0 = 318;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_char2_uchar_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_uchar_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_char2_uchar_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_uchar_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_char2_uchar_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_uchar_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_uchar_1 = 319;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_char2_uchar_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_uchar_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_char2_uchar_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_uchar_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_char2_uchar_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_uchar_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_uchar2_0 = 320;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char2_uchar2_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_uchar2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_char2_uchar2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_uchar2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_char2_uchar2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_uchar2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_uchar2_1 = 321;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char2_uchar2_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_uchar2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_char2_uchar2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_uchar2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_char2_uchar2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_uchar2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_uchar4_0 = 322;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char2_uchar4_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_uchar4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_char2_uchar4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_uchar4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_char2_uchar4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_uchar4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_uchar4_1 = 323;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char2_uchar4_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_uchar4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_char2_uchar4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_uchar4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_char2_uchar4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_uchar4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_ushort_0 = 324;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_char2_ushort_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_ushort_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_char2_ushort_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_ushort_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_char2_ushort_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_ushort_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_ushort_1 = 325;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_char2_ushort_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_ushort_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_char2_ushort_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_ushort_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_char2_ushort_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_ushort_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_ushort2_0 = 326;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char2_ushort2_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_ushort2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_char2_ushort2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_ushort2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_char2_ushort2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_ushort2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_ushort2_1 = 327;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char2_ushort2_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_ushort2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_char2_ushort2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_ushort2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_char2_ushort2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_ushort2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_ushort4_0 = 328;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char2_ushort4_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_ushort4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_char2_ushort4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_ushort4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_char2_ushort4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_ushort4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_ushort4_1 = 329;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char2_ushort4_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_ushort4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_char2_ushort4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_ushort4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_char2_ushort4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_ushort4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_bool_0 = 330;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_char2_bool_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_bool_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_char2_bool_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_bool_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_char2_bool_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_bool_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_bool_1 = 331;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_char2_bool_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char2_bool_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_char2_bool_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_bool_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_char2_bool_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_bool_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_rs_matrix2x2_0 = 332;
+    // ain1 = "char2 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_char2_rs_matrix2x2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_rs_matrix2x2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_char2_rs_matrix2x2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_rs_matrix2x2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_rs_matrix2x2_1 = 333;
+    // ain1 = "char2 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_char2_rs_matrix2x2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_rs_matrix2x2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_char2_rs_matrix2x2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_rs_matrix2x2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_MyStruct_0 = 334;
+    // ain1 = "char2 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_char2_MyStruct_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_MyStruct_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_char2_MyStruct_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_MyStruct_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2_MyStruct_1 = 335;
+    // ain1 = "char2 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_char2_MyStruct_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char2_MyStruct_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char2 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_char2_MyStruct_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2_MyStruct_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_half_0 = 336;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_char4_half_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_half_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "half b"
+    public result_int reduce_my_char4_half_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_half_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "half b"
+    public result_int reduce_my_char4_half_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_half_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_half_1 = 337;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_char4_half_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_half_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "half b"
+    public result_int reduce_my_char4_half_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_half_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "half b"
+    public result_int reduce_my_char4_half_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_half_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_half2_0 = 338;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char4_half2_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_half2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_char4_half2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_half2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_char4_half2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_half2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_half2_1 = 339;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char4_half2_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_half2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_char4_half2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_half2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_char4_half2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_half2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_half4_0 = 340;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char4_half4_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_half4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_char4_half4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_half4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_char4_half4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_half4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_half4_1 = 341;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char4_half4_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_half4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_char4_half4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_half4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_char4_half4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_half4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_float_0 = 342;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_char4_float_0(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_float_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "float b"
+    public result_int reduce_my_char4_float_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_float_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "float b"
+    public result_int reduce_my_char4_float_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_float_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_float_1 = 343;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_char4_float_1(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_float_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "float b"
+    public result_int reduce_my_char4_float_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_float_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "float b"
+    public result_int reduce_my_char4_float_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_float_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_float2_0 = 344;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char4_float2_0(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_float2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_char4_float2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_float2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_char4_float2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_float2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_float2_1 = 345;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char4_float2_1(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_float2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_char4_float2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_float2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_char4_float2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_float2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_float4_0 = 346;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char4_float4_0(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_float4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_char4_float4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_float4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_char4_float4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_float4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_float4_1 = 347;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char4_float4_1(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_float4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_char4_float4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_float4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_char4_float4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_float4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_char_0 = 348;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_char4_char_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_char_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "char b"
+    public result_int reduce_my_char4_char_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_char_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "char b"
+    public result_int reduce_my_char4_char_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_char_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_char_1 = 349;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_char4_char_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_char_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "char b"
+    public result_int reduce_my_char4_char_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_char_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "char b"
+    public result_int reduce_my_char4_char_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_char_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_char2_0 = 350;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char4_char2_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_char2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_char4_char2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_char2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_char4_char2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_char2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_char2_1 = 351;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char4_char2_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_char2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_char4_char2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_char2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_char4_char2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_char2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_char4_0 = 352;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char4_char4_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_char4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_char4_char4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_char4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_char4_char4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_char4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_char4_1 = 353;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char4_char4_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_char4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_char4_char4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_char4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_char4_char4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_char4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_short_0 = 354;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_char4_short_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_short_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "short b"
+    public result_int reduce_my_char4_short_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_short_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "short b"
+    public result_int reduce_my_char4_short_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_short_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_short_1 = 355;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_char4_short_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_short_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "short b"
+    public result_int reduce_my_char4_short_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_short_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "short b"
+    public result_int reduce_my_char4_short_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_short_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_short2_0 = 356;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char4_short2_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_short2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_char4_short2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_short2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_char4_short2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_short2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_short2_1 = 357;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char4_short2_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_short2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_char4_short2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_short2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_char4_short2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_short2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_short4_0 = 358;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char4_short4_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_short4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_char4_short4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_short4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_char4_short4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_short4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_short4_1 = 359;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char4_short4_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_short4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_char4_short4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_short4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_char4_short4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_short4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_uchar_0 = 360;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_char4_uchar_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_uchar_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_char4_uchar_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_uchar_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_char4_uchar_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_uchar_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_uchar_1 = 361;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_char4_uchar_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_uchar_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_char4_uchar_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_uchar_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_char4_uchar_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_uchar_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_uchar2_0 = 362;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char4_uchar2_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_uchar2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_char4_uchar2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_uchar2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_char4_uchar2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_uchar2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_uchar2_1 = 363;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char4_uchar2_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_uchar2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_char4_uchar2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_uchar2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_char4_uchar2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_uchar2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_uchar4_0 = 364;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char4_uchar4_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_uchar4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_char4_uchar4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_uchar4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_char4_uchar4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_uchar4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_uchar4_1 = 365;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char4_uchar4_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_uchar4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_char4_uchar4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_uchar4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_char4_uchar4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_uchar4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_ushort_0 = 366;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_char4_ushort_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_ushort_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_char4_ushort_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_ushort_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_char4_ushort_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_ushort_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_ushort_1 = 367;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_char4_ushort_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_ushort_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_char4_ushort_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_ushort_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_char4_ushort_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_ushort_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_ushort2_0 = 368;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char4_ushort2_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_ushort2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_char4_ushort2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_ushort2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_char4_ushort2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_ushort2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_ushort2_1 = 369;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_char4_ushort2_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_ushort2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_char4_ushort2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_ushort2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_char4_ushort2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_ushort2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_ushort4_0 = 370;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char4_ushort4_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_ushort4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_char4_ushort4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_ushort4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_char4_ushort4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_ushort4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_ushort4_1 = 371;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_char4_ushort4_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_ushort4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_char4_ushort4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_ushort4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_char4_ushort4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_ushort4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_bool_0 = 372;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_char4_bool_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_bool_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_char4_bool_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_bool_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_char4_bool_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_bool_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_bool_1 = 373;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_char4_bool_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_char4_bool_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_char4_bool_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_bool_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_char4_bool_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_bool_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_rs_matrix2x2_0 = 374;
+    // ain1 = "char4 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_char4_rs_matrix2x2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_rs_matrix2x2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_char4_rs_matrix2x2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_rs_matrix2x2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_rs_matrix2x2_1 = 375;
+    // ain1 = "char4 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_char4_rs_matrix2x2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_rs_matrix2x2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_char4_rs_matrix2x2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_rs_matrix2x2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_MyStruct_0 = 376;
+    // ain1 = "char4 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_char4_MyStruct_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_MyStruct_0(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_char4_MyStruct_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_MyStruct_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4_MyStruct_1 = 377;
+    // ain1 = "char4 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_char4_MyStruct_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_char4_MyStruct_1(ain1, ain2, null);
+    }
+
+    // ain1 = "char4 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_char4_MyStruct_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4_MyStruct_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_half_0 = 378;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_short_half_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_half_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "half b"
+    public result_int reduce_my_short_half_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_half_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "half b"
+    public result_int reduce_my_short_half_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_half_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_half_1 = 379;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_short_half_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_half_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "half b"
+    public result_int reduce_my_short_half_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_half_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "half b"
+    public result_int reduce_my_short_half_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_half_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_half2_0 = 380;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short_half2_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_half2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_short_half2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_half2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_short_half2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_half2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_half2_1 = 381;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short_half2_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_half2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_short_half2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_half2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_short_half2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_half2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_half4_0 = 382;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short_half4_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_half4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_short_half4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_half4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_short_half4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_half4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_half4_1 = 383;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short_half4_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_half4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_short_half4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_half4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_short_half4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_half4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_float_0 = 384;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_short_float_0(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_float_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "float b"
+    public result_int reduce_my_short_float_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_float_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "float b"
+    public result_int reduce_my_short_float_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_float_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_float_1 = 385;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_short_float_1(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_float_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "float b"
+    public result_int reduce_my_short_float_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_float_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "float b"
+    public result_int reduce_my_short_float_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_float_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_float2_0 = 386;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short_float2_0(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_float2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_short_float2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_float2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_short_float2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_float2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_float2_1 = 387;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short_float2_1(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_float2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_short_float2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_float2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_short_float2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_float2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_float4_0 = 388;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short_float4_0(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_float4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_short_float4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_float4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_short_float4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_float4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_float4_1 = 389;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short_float4_1(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_float4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_short_float4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_float4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_short_float4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_float4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_char_0 = 390;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_short_char_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_char_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "char b"
+    public result_int reduce_my_short_char_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_char_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "char b"
+    public result_int reduce_my_short_char_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_char_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_char_1 = 391;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_short_char_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_char_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "char b"
+    public result_int reduce_my_short_char_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_char_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "char b"
+    public result_int reduce_my_short_char_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_char_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_char2_0 = 392;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short_char2_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_char2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_short_char2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_char2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_short_char2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_char2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_char2_1 = 393;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short_char2_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_char2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_short_char2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_char2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_short_char2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_char2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_char4_0 = 394;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short_char4_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_char4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_short_char4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_char4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_short_char4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_char4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_char4_1 = 395;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short_char4_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_char4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_short_char4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_char4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_short_char4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_char4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_short_0 = 396;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_short_short_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_short_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "short b"
+    public result_int reduce_my_short_short_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_short_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "short b"
+    public result_int reduce_my_short_short_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_short_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_short_1 = 397;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_short_short_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_short_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "short b"
+    public result_int reduce_my_short_short_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_short_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "short b"
+    public result_int reduce_my_short_short_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_short_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_short2_0 = 398;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short_short2_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_short2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_short_short2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_short2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_short_short2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_short2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_short2_1 = 399;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short_short2_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_short2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_short_short2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_short2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_short_short2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_short2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_short4_0 = 400;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short_short4_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_short4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_short_short4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_short4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_short_short4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_short4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_short4_1 = 401;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short_short4_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_short4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_short_short4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_short4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_short_short4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_short4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_uchar_0 = 402;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_short_uchar_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_uchar_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_short_uchar_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_uchar_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_short_uchar_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_uchar_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_uchar_1 = 403;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_short_uchar_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_uchar_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_short_uchar_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_uchar_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_short_uchar_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_uchar_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_uchar2_0 = 404;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short_uchar2_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_uchar2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_short_uchar2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_uchar2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_short_uchar2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_uchar2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_uchar2_1 = 405;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short_uchar2_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_uchar2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_short_uchar2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_uchar2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_short_uchar2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_uchar2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_uchar4_0 = 406;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short_uchar4_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_uchar4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_short_uchar4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_uchar4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_short_uchar4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_uchar4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_uchar4_1 = 407;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short_uchar4_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_uchar4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_short_uchar4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_uchar4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_short_uchar4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_uchar4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_ushort_0 = 408;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_short_ushort_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_ushort_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_short_ushort_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_ushort_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_short_ushort_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_ushort_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_ushort_1 = 409;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_short_ushort_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_ushort_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_short_ushort_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_ushort_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_short_ushort_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_ushort_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_ushort2_0 = 410;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short_ushort2_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_ushort2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_short_ushort2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_ushort2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_short_ushort2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_ushort2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_ushort2_1 = 411;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short_ushort2_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_ushort2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_short_ushort2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_ushort2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_short_ushort2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_ushort2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_ushort4_0 = 412;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short_ushort4_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_ushort4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_short_ushort4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_ushort4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_short_ushort4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_ushort4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_ushort4_1 = 413;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short_ushort4_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_ushort4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_short_ushort4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_ushort4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_short_ushort4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_ushort4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_bool_0 = 414;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_short_bool_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_bool_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "bool b"
+    public result_int reduce_my_short_bool_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_bool_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "bool b"
+    public result_int reduce_my_short_bool_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_bool_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_bool_1 = 415;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_short_bool_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short_bool_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short a"
+    // ain2 = "bool b"
+    public result_int reduce_my_short_bool_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_bool_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "bool b"
+    public result_int reduce_my_short_bool_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_bool_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_rs_matrix2x2_0 = 416;
+    // ain1 = "short a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_short_rs_matrix2x2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_rs_matrix2x2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_short_rs_matrix2x2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_rs_matrix2x2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_rs_matrix2x2_1 = 417;
+    // ain1 = "short a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_short_rs_matrix2x2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_rs_matrix2x2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_short_rs_matrix2x2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_rs_matrix2x2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_MyStruct_0 = 418;
+    // ain1 = "short a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_short_MyStruct_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_MyStruct_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_short_MyStruct_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_MyStruct_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short_MyStruct_1 = 419;
+    // ain1 = "short a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_short_MyStruct_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short_MyStruct_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_short_MyStruct_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short_MyStruct_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_half_0 = 420;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_short2_half_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_half_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "half b"
+    public result_int reduce_my_short2_half_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_half_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "half b"
+    public result_int reduce_my_short2_half_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_half_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_half_1 = 421;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_short2_half_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_half_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "half b"
+    public result_int reduce_my_short2_half_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_half_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "half b"
+    public result_int reduce_my_short2_half_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_half_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_half2_0 = 422;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short2_half2_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_half2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_short2_half2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_half2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_short2_half2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_half2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_half2_1 = 423;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short2_half2_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_half2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_short2_half2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_half2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_short2_half2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_half2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_half4_0 = 424;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short2_half4_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_half4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_short2_half4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_half4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_short2_half4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_half4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_half4_1 = 425;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short2_half4_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_half4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_short2_half4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_half4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_short2_half4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_half4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_float_0 = 426;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_short2_float_0(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_float_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "float b"
+    public result_int reduce_my_short2_float_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_float_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "float b"
+    public result_int reduce_my_short2_float_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_float_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_float_1 = 427;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_short2_float_1(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_float_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "float b"
+    public result_int reduce_my_short2_float_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_float_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "float b"
+    public result_int reduce_my_short2_float_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_float_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_float2_0 = 428;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short2_float2_0(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_float2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_short2_float2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_float2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_short2_float2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_float2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_float2_1 = 429;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short2_float2_1(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_float2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_short2_float2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_float2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_short2_float2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_float2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_float4_0 = 430;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short2_float4_0(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_float4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_short2_float4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_float4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_short2_float4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_float4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_float4_1 = 431;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short2_float4_1(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_float4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_short2_float4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_float4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_short2_float4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_float4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_char_0 = 432;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_short2_char_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_char_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "char b"
+    public result_int reduce_my_short2_char_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_char_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "char b"
+    public result_int reduce_my_short2_char_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_char_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_char_1 = 433;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_short2_char_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_char_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "char b"
+    public result_int reduce_my_short2_char_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_char_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "char b"
+    public result_int reduce_my_short2_char_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_char_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_char2_0 = 434;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short2_char2_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_char2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_short2_char2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_char2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_short2_char2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_char2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_char2_1 = 435;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short2_char2_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_char2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_short2_char2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_char2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_short2_char2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_char2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_char4_0 = 436;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short2_char4_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_char4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_short2_char4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_char4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_short2_char4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_char4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_char4_1 = 437;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short2_char4_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_char4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_short2_char4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_char4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_short2_char4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_char4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_short_0 = 438;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_short2_short_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_short_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "short b"
+    public result_int reduce_my_short2_short_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_short_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "short b"
+    public result_int reduce_my_short2_short_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_short_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_short_1 = 439;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_short2_short_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_short_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "short b"
+    public result_int reduce_my_short2_short_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_short_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "short b"
+    public result_int reduce_my_short2_short_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_short_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_short2_0 = 440;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short2_short2_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_short2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_short2_short2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_short2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_short2_short2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_short2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_short2_1 = 441;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short2_short2_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_short2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_short2_short2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_short2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_short2_short2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_short2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_short4_0 = 442;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short2_short4_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_short4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_short2_short4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_short4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_short2_short4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_short4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_short4_1 = 443;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short2_short4_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_short4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_short2_short4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_short4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_short2_short4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_short4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_uchar_0 = 444;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_short2_uchar_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_uchar_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_short2_uchar_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_uchar_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_short2_uchar_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_uchar_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_uchar_1 = 445;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_short2_uchar_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_uchar_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_short2_uchar_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_uchar_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_short2_uchar_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_uchar_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_uchar2_0 = 446;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short2_uchar2_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_uchar2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_short2_uchar2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_uchar2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_short2_uchar2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_uchar2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_uchar2_1 = 447;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short2_uchar2_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_uchar2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_short2_uchar2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_uchar2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_short2_uchar2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_uchar2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_uchar4_0 = 448;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short2_uchar4_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_uchar4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_short2_uchar4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_uchar4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_short2_uchar4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_uchar4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_uchar4_1 = 449;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short2_uchar4_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_uchar4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_short2_uchar4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_uchar4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_short2_uchar4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_uchar4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_ushort_0 = 450;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_short2_ushort_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_ushort_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_short2_ushort_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_ushort_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_short2_ushort_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_ushort_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_ushort_1 = 451;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_short2_ushort_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_ushort_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_short2_ushort_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_ushort_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_short2_ushort_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_ushort_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_ushort2_0 = 452;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short2_ushort2_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_ushort2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_short2_ushort2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_ushort2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_short2_ushort2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_ushort2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_ushort2_1 = 453;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short2_ushort2_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_ushort2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_short2_ushort2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_ushort2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_short2_ushort2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_ushort2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_ushort4_0 = 454;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short2_ushort4_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_ushort4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_short2_ushort4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_ushort4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_short2_ushort4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_ushort4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_ushort4_1 = 455;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short2_ushort4_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_ushort4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_short2_ushort4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_ushort4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_short2_ushort4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_ushort4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_bool_0 = 456;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_short2_bool_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_bool_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_short2_bool_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_bool_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_short2_bool_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_bool_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_bool_1 = 457;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_short2_bool_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short2_bool_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_short2_bool_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_bool_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_short2_bool_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_bool_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_rs_matrix2x2_0 = 458;
+    // ain1 = "short2 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_short2_rs_matrix2x2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_rs_matrix2x2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_short2_rs_matrix2x2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_rs_matrix2x2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_rs_matrix2x2_1 = 459;
+    // ain1 = "short2 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_short2_rs_matrix2x2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_rs_matrix2x2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_short2_rs_matrix2x2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_rs_matrix2x2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_MyStruct_0 = 460;
+    // ain1 = "short2 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_short2_MyStruct_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_MyStruct_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_short2_MyStruct_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_MyStruct_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2_MyStruct_1 = 461;
+    // ain1 = "short2 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_short2_MyStruct_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short2_MyStruct_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short2 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_short2_MyStruct_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2_MyStruct_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_half_0 = 462;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_short4_half_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_half_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "half b"
+    public result_int reduce_my_short4_half_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_half_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "half b"
+    public result_int reduce_my_short4_half_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_half_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_half_1 = 463;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_short4_half_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_half_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "half b"
+    public result_int reduce_my_short4_half_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_half_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "half b"
+    public result_int reduce_my_short4_half_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_half_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_half2_0 = 464;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short4_half2_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_half2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_short4_half2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_half2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_short4_half2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_half2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_half2_1 = 465;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short4_half2_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_half2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_short4_half2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_half2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_short4_half2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_half2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_half4_0 = 466;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short4_half4_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_half4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_short4_half4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_half4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_short4_half4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_half4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_half4_1 = 467;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short4_half4_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_half4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_short4_half4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_half4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_short4_half4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_half4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_float_0 = 468;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_short4_float_0(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_float_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "float b"
+    public result_int reduce_my_short4_float_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_float_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "float b"
+    public result_int reduce_my_short4_float_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_float_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_float_1 = 469;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_short4_float_1(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_float_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "float b"
+    public result_int reduce_my_short4_float_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_float_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "float b"
+    public result_int reduce_my_short4_float_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_float_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_float2_0 = 470;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short4_float2_0(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_float2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_short4_float2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_float2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_short4_float2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_float2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_float2_1 = 471;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short4_float2_1(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_float2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_short4_float2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_float2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_short4_float2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_float2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_float4_0 = 472;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short4_float4_0(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_float4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_short4_float4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_float4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_short4_float4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_float4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_float4_1 = 473;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short4_float4_1(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_float4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_short4_float4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_float4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_short4_float4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_float4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_char_0 = 474;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_short4_char_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_char_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "char b"
+    public result_int reduce_my_short4_char_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_char_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "char b"
+    public result_int reduce_my_short4_char_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_char_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_char_1 = 475;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_short4_char_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_char_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "char b"
+    public result_int reduce_my_short4_char_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_char_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "char b"
+    public result_int reduce_my_short4_char_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_char_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_char2_0 = 476;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short4_char2_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_char2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_short4_char2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_char2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_short4_char2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_char2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_char2_1 = 477;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short4_char2_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_char2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_short4_char2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_char2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_short4_char2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_char2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_char4_0 = 478;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short4_char4_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_char4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_short4_char4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_char4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_short4_char4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_char4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_char4_1 = 479;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short4_char4_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_char4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_short4_char4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_char4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_short4_char4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_char4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_short_0 = 480;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_short4_short_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_short_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "short b"
+    public result_int reduce_my_short4_short_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_short_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "short b"
+    public result_int reduce_my_short4_short_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_short_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_short_1 = 481;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_short4_short_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_short_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "short b"
+    public result_int reduce_my_short4_short_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_short_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "short b"
+    public result_int reduce_my_short4_short_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_short_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_short2_0 = 482;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short4_short2_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_short2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_short4_short2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_short2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_short4_short2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_short2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_short2_1 = 483;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short4_short2_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_short2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_short4_short2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_short2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_short4_short2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_short2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_short4_0 = 484;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short4_short4_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_short4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_short4_short4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_short4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_short4_short4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_short4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_short4_1 = 485;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short4_short4_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_short4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_short4_short4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_short4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_short4_short4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_short4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_uchar_0 = 486;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_short4_uchar_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_uchar_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_short4_uchar_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_uchar_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_short4_uchar_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_uchar_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_uchar_1 = 487;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_short4_uchar_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_uchar_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_short4_uchar_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_uchar_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_short4_uchar_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_uchar_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_uchar2_0 = 488;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short4_uchar2_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_uchar2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_short4_uchar2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_uchar2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_short4_uchar2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_uchar2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_uchar2_1 = 489;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short4_uchar2_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_uchar2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_short4_uchar2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_uchar2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_short4_uchar2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_uchar2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_uchar4_0 = 490;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short4_uchar4_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_uchar4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_short4_uchar4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_uchar4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_short4_uchar4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_uchar4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_uchar4_1 = 491;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short4_uchar4_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_uchar4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_short4_uchar4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_uchar4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_short4_uchar4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_uchar4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_ushort_0 = 492;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_short4_ushort_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_ushort_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_short4_ushort_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_ushort_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_short4_ushort_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_ushort_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_ushort_1 = 493;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_short4_ushort_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_ushort_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_short4_ushort_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_ushort_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_short4_ushort_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_ushort_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_ushort2_0 = 494;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short4_ushort2_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_ushort2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_short4_ushort2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_ushort2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_short4_ushort2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_ushort2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_ushort2_1 = 495;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_short4_ushort2_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_ushort2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_short4_ushort2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_ushort2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_short4_ushort2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_ushort2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_ushort4_0 = 496;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short4_ushort4_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_ushort4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_short4_ushort4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_ushort4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_short4_ushort4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_ushort4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_ushort4_1 = 497;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_short4_ushort4_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_ushort4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_short4_ushort4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_ushort4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_short4_ushort4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_ushort4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_bool_0 = 498;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_short4_bool_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_bool_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_short4_bool_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_bool_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_short4_bool_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_bool_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_bool_1 = 499;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_short4_bool_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_short4_bool_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_short4_bool_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_bool_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_short4_bool_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_bool_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_rs_matrix2x2_0 = 500;
+    // ain1 = "short4 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_short4_rs_matrix2x2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_rs_matrix2x2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_short4_rs_matrix2x2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_rs_matrix2x2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_rs_matrix2x2_1 = 501;
+    // ain1 = "short4 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_short4_rs_matrix2x2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_rs_matrix2x2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_short4_rs_matrix2x2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_rs_matrix2x2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_MyStruct_0 = 502;
+    // ain1 = "short4 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_short4_MyStruct_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_MyStruct_0(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_short4_MyStruct_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_MyStruct_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4_MyStruct_1 = 503;
+    // ain1 = "short4 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_short4_MyStruct_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_short4_MyStruct_1(ain1, ain2, null);
+    }
+
+    // ain1 = "short4 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_short4_MyStruct_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4_MyStruct_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_half_0 = 504;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_uchar_half_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_half_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "half b"
+    public result_int reduce_my_uchar_half_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_half_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "half b"
+    public result_int reduce_my_uchar_half_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_half_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_half_1 = 505;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_uchar_half_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_half_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "half b"
+    public result_int reduce_my_uchar_half_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_half_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "half b"
+    public result_int reduce_my_uchar_half_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_half_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_half2_0 = 506;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar_half2_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_half2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_uchar_half2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_half2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_uchar_half2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_half2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_half2_1 = 507;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar_half2_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_half2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_uchar_half2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_half2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_uchar_half2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_half2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_half4_0 = 508;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar_half4_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_half4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_uchar_half4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_half4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_uchar_half4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_half4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_half4_1 = 509;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar_half4_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_half4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_uchar_half4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_half4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_uchar_half4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_half4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_float_0 = 510;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_uchar_float_0(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_float_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "float b"
+    public result_int reduce_my_uchar_float_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_float_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "float b"
+    public result_int reduce_my_uchar_float_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_float_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_float_1 = 511;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_uchar_float_1(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_float_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "float b"
+    public result_int reduce_my_uchar_float_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_float_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "float b"
+    public result_int reduce_my_uchar_float_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_float_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_float2_0 = 512;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar_float2_0(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_float2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_uchar_float2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_float2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_uchar_float2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_float2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_float2_1 = 513;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar_float2_1(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_float2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_uchar_float2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_float2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_uchar_float2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_float2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_float4_0 = 514;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar_float4_0(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_float4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_uchar_float4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_float4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_uchar_float4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_float4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_float4_1 = 515;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar_float4_1(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_float4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_uchar_float4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_float4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_uchar_float4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_float4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_char_0 = 516;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_uchar_char_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_char_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "char b"
+    public result_int reduce_my_uchar_char_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_char_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "char b"
+    public result_int reduce_my_uchar_char_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_char_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_char_1 = 517;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_uchar_char_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_char_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "char b"
+    public result_int reduce_my_uchar_char_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_char_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "char b"
+    public result_int reduce_my_uchar_char_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_char_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_char2_0 = 518;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar_char2_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_char2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_uchar_char2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_char2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_uchar_char2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_char2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_char2_1 = 519;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar_char2_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_char2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_uchar_char2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_char2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_uchar_char2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_char2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_char4_0 = 520;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar_char4_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_char4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_uchar_char4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_char4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_uchar_char4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_char4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_char4_1 = 521;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar_char4_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_char4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_uchar_char4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_char4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_uchar_char4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_char4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_short_0 = 522;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_uchar_short_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_short_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "short b"
+    public result_int reduce_my_uchar_short_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_short_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "short b"
+    public result_int reduce_my_uchar_short_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_short_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_short_1 = 523;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_uchar_short_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_short_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "short b"
+    public result_int reduce_my_uchar_short_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_short_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "short b"
+    public result_int reduce_my_uchar_short_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_short_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_short2_0 = 524;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar_short2_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_short2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_uchar_short2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_short2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_uchar_short2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_short2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_short2_1 = 525;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar_short2_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_short2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_uchar_short2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_short2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_uchar_short2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_short2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_short4_0 = 526;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar_short4_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_short4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_uchar_short4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_short4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_uchar_short4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_short4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_short4_1 = 527;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar_short4_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_short4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_uchar_short4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_short4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_uchar_short4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_short4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_uchar_0 = 528;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_uchar_uchar_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_uchar_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_uchar_uchar_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_uchar_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_uchar_uchar_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_uchar_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_uchar_1 = 529;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_uchar_uchar_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_uchar_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_uchar_uchar_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_uchar_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_uchar_uchar_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_uchar_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_uchar2_0 = 530;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar_uchar2_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_uchar2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_uchar_uchar2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_uchar2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_uchar_uchar2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_uchar2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_uchar2_1 = 531;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar_uchar2_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_uchar2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_uchar_uchar2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_uchar2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_uchar_uchar2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_uchar2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_uchar4_0 = 532;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar_uchar4_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_uchar4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_uchar_uchar4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_uchar4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_uchar_uchar4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_uchar4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_uchar4_1 = 533;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar_uchar4_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_uchar4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_uchar_uchar4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_uchar4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_uchar_uchar4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_uchar4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_ushort_0 = 534;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_uchar_ushort_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_ushort_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_uchar_ushort_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_ushort_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_uchar_ushort_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_ushort_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_ushort_1 = 535;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_uchar_ushort_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_ushort_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_uchar_ushort_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_ushort_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_uchar_ushort_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_ushort_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_ushort2_0 = 536;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar_ushort2_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_ushort2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_uchar_ushort2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_ushort2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_uchar_ushort2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_ushort2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_ushort2_1 = 537;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar_ushort2_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_ushort2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_uchar_ushort2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_ushort2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_uchar_ushort2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_ushort2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_ushort4_0 = 538;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar_ushort4_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_ushort4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_uchar_ushort4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_ushort4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_uchar_ushort4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_ushort4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_ushort4_1 = 539;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar_ushort4_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_ushort4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_uchar_ushort4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_ushort4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_uchar_ushort4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_ushort4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_bool_0 = 540;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_uchar_bool_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_bool_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "bool b"
+    public result_int reduce_my_uchar_bool_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_bool_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "bool b"
+    public result_int reduce_my_uchar_bool_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_bool_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_bool_1 = 541;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_uchar_bool_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar_bool_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "bool b"
+    public result_int reduce_my_uchar_bool_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_bool_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "bool b"
+    public result_int reduce_my_uchar_bool_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_bool_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_rs_matrix2x2_0 = 542;
+    // ain1 = "uchar a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_uchar_rs_matrix2x2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_rs_matrix2x2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_uchar_rs_matrix2x2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_rs_matrix2x2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_rs_matrix2x2_1 = 543;
+    // ain1 = "uchar a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_uchar_rs_matrix2x2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_rs_matrix2x2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_uchar_rs_matrix2x2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_rs_matrix2x2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_MyStruct_0 = 544;
+    // ain1 = "uchar a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_uchar_MyStruct_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_MyStruct_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_uchar_MyStruct_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_MyStruct_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar_MyStruct_1 = 545;
+    // ain1 = "uchar a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_uchar_MyStruct_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar_MyStruct_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_uchar_MyStruct_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar_MyStruct_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_half_0 = 546;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_uchar2_half_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_half_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "half b"
+    public result_int reduce_my_uchar2_half_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_half_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "half b"
+    public result_int reduce_my_uchar2_half_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_half_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_half_1 = 547;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_uchar2_half_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_half_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "half b"
+    public result_int reduce_my_uchar2_half_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_half_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "half b"
+    public result_int reduce_my_uchar2_half_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_half_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_half2_0 = 548;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar2_half2_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_half2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_uchar2_half2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_half2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_uchar2_half2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_half2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_half2_1 = 549;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar2_half2_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_half2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_uchar2_half2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_half2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_uchar2_half2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_half2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_half4_0 = 550;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar2_half4_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_half4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_uchar2_half4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_half4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_uchar2_half4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_half4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_half4_1 = 551;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar2_half4_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_half4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_uchar2_half4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_half4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_uchar2_half4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_half4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_float_0 = 552;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_uchar2_float_0(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_float_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "float b"
+    public result_int reduce_my_uchar2_float_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_float_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "float b"
+    public result_int reduce_my_uchar2_float_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_float_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_float_1 = 553;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_uchar2_float_1(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_float_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "float b"
+    public result_int reduce_my_uchar2_float_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_float_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "float b"
+    public result_int reduce_my_uchar2_float_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_float_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_float2_0 = 554;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar2_float2_0(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_float2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_uchar2_float2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_float2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_uchar2_float2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_float2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_float2_1 = 555;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar2_float2_1(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_float2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_uchar2_float2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_float2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_uchar2_float2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_float2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_float4_0 = 556;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar2_float4_0(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_float4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_uchar2_float4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_float4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_uchar2_float4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_float4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_float4_1 = 557;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar2_float4_1(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_float4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_uchar2_float4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_float4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_uchar2_float4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_float4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_char_0 = 558;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_uchar2_char_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_char_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "char b"
+    public result_int reduce_my_uchar2_char_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_char_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "char b"
+    public result_int reduce_my_uchar2_char_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_char_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_char_1 = 559;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_uchar2_char_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_char_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "char b"
+    public result_int reduce_my_uchar2_char_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_char_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "char b"
+    public result_int reduce_my_uchar2_char_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_char_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_char2_0 = 560;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar2_char2_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_char2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_uchar2_char2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_char2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_uchar2_char2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_char2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_char2_1 = 561;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar2_char2_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_char2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_uchar2_char2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_char2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_uchar2_char2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_char2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_char4_0 = 562;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar2_char4_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_char4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_uchar2_char4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_char4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_uchar2_char4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_char4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_char4_1 = 563;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar2_char4_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_char4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_uchar2_char4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_char4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_uchar2_char4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_char4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_short_0 = 564;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_uchar2_short_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_short_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "short b"
+    public result_int reduce_my_uchar2_short_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_short_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "short b"
+    public result_int reduce_my_uchar2_short_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_short_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_short_1 = 565;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_uchar2_short_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_short_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "short b"
+    public result_int reduce_my_uchar2_short_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_short_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "short b"
+    public result_int reduce_my_uchar2_short_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_short_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_short2_0 = 566;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar2_short2_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_short2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_uchar2_short2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_short2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_uchar2_short2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_short2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_short2_1 = 567;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar2_short2_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_short2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_uchar2_short2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_short2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_uchar2_short2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_short2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_short4_0 = 568;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar2_short4_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_short4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_uchar2_short4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_short4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_uchar2_short4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_short4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_short4_1 = 569;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar2_short4_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_short4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_uchar2_short4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_short4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_uchar2_short4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_short4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_uchar_0 = 570;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_uchar2_uchar_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_uchar_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_uchar2_uchar_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_uchar_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_uchar2_uchar_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_uchar_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_uchar_1 = 571;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_uchar2_uchar_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_uchar_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_uchar2_uchar_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_uchar_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_uchar2_uchar_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_uchar_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_uchar2_0 = 572;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar2_uchar2_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_uchar2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_uchar2_uchar2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_uchar2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_uchar2_uchar2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_uchar2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_uchar2_1 = 573;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar2_uchar2_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_uchar2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_uchar2_uchar2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_uchar2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_uchar2_uchar2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_uchar2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_uchar4_0 = 574;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar2_uchar4_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_uchar4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_uchar2_uchar4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_uchar4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_uchar2_uchar4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_uchar4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_uchar4_1 = 575;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar2_uchar4_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_uchar4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_uchar2_uchar4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_uchar4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_uchar2_uchar4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_uchar4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_ushort_0 = 576;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_uchar2_ushort_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_ushort_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_uchar2_ushort_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_ushort_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_uchar2_ushort_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_ushort_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_ushort_1 = 577;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_uchar2_ushort_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_ushort_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_uchar2_ushort_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_ushort_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_uchar2_ushort_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_ushort_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_ushort2_0 = 578;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar2_ushort2_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_ushort2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_uchar2_ushort2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_ushort2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_uchar2_ushort2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_ushort2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_ushort2_1 = 579;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar2_ushort2_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_ushort2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_uchar2_ushort2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_ushort2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_uchar2_ushort2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_ushort2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_ushort4_0 = 580;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar2_ushort4_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_ushort4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_uchar2_ushort4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_ushort4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_uchar2_ushort4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_ushort4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_ushort4_1 = 581;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar2_ushort4_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_ushort4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_uchar2_ushort4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_ushort4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_uchar2_ushort4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_ushort4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_bool_0 = 582;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_uchar2_bool_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_bool_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_uchar2_bool_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_bool_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_uchar2_bool_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_bool_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_bool_1 = 583;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_uchar2_bool_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar2_bool_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_uchar2_bool_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_bool_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_uchar2_bool_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_bool_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_rs_matrix2x2_0 = 584;
+    // ain1 = "uchar2 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_uchar2_rs_matrix2x2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_rs_matrix2x2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_uchar2_rs_matrix2x2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_rs_matrix2x2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_rs_matrix2x2_1 = 585;
+    // ain1 = "uchar2 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_uchar2_rs_matrix2x2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_rs_matrix2x2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_uchar2_rs_matrix2x2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_rs_matrix2x2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_MyStruct_0 = 586;
+    // ain1 = "uchar2 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_uchar2_MyStruct_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_MyStruct_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_uchar2_MyStruct_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_MyStruct_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2_MyStruct_1 = 587;
+    // ain1 = "uchar2 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_uchar2_MyStruct_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar2_MyStruct_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar2 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_uchar2_MyStruct_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2_MyStruct_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_half_0 = 588;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_uchar4_half_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_half_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "half b"
+    public result_int reduce_my_uchar4_half_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_half_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "half b"
+    public result_int reduce_my_uchar4_half_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_half_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_half_1 = 589;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_uchar4_half_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_half_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "half b"
+    public result_int reduce_my_uchar4_half_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_half_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "half b"
+    public result_int reduce_my_uchar4_half_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_half_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_half2_0 = 590;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar4_half2_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_half2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_uchar4_half2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_half2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_uchar4_half2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_half2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_half2_1 = 591;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar4_half2_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_half2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_uchar4_half2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_half2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_uchar4_half2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_half2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_half4_0 = 592;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar4_half4_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_half4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_uchar4_half4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_half4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_uchar4_half4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_half4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_half4_1 = 593;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar4_half4_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_half4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_uchar4_half4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_half4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_uchar4_half4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_half4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_float_0 = 594;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_uchar4_float_0(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_float_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "float b"
+    public result_int reduce_my_uchar4_float_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_float_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "float b"
+    public result_int reduce_my_uchar4_float_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_float_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_float_1 = 595;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_uchar4_float_1(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_float_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "float b"
+    public result_int reduce_my_uchar4_float_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_float_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "float b"
+    public result_int reduce_my_uchar4_float_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_float_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_float2_0 = 596;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar4_float2_0(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_float2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_uchar4_float2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_float2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_uchar4_float2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_float2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_float2_1 = 597;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar4_float2_1(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_float2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_uchar4_float2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_float2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_uchar4_float2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_float2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_float4_0 = 598;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar4_float4_0(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_float4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_uchar4_float4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_float4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_uchar4_float4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_float4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_float4_1 = 599;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar4_float4_1(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_float4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_uchar4_float4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_float4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_uchar4_float4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_float4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_char_0 = 600;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_uchar4_char_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_char_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "char b"
+    public result_int reduce_my_uchar4_char_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_char_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "char b"
+    public result_int reduce_my_uchar4_char_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_char_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_char_1 = 601;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_uchar4_char_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_char_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "char b"
+    public result_int reduce_my_uchar4_char_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_char_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "char b"
+    public result_int reduce_my_uchar4_char_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_char_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_char2_0 = 602;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar4_char2_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_char2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_uchar4_char2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_char2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_uchar4_char2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_char2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_char2_1 = 603;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar4_char2_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_char2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_uchar4_char2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_char2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_uchar4_char2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_char2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_char4_0 = 604;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar4_char4_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_char4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_uchar4_char4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_char4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_uchar4_char4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_char4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_char4_1 = 605;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar4_char4_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_char4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_uchar4_char4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_char4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_uchar4_char4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_char4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_short_0 = 606;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_uchar4_short_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_short_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "short b"
+    public result_int reduce_my_uchar4_short_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_short_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "short b"
+    public result_int reduce_my_uchar4_short_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_short_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_short_1 = 607;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_uchar4_short_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_short_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "short b"
+    public result_int reduce_my_uchar4_short_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_short_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "short b"
+    public result_int reduce_my_uchar4_short_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_short_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_short2_0 = 608;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar4_short2_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_short2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_uchar4_short2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_short2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_uchar4_short2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_short2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_short2_1 = 609;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar4_short2_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_short2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_uchar4_short2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_short2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_uchar4_short2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_short2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_short4_0 = 610;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar4_short4_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_short4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_uchar4_short4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_short4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_uchar4_short4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_short4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_short4_1 = 611;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar4_short4_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_short4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_uchar4_short4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_short4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_uchar4_short4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_short4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_uchar_0 = 612;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_uchar4_uchar_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_uchar_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_uchar4_uchar_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_uchar_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_uchar4_uchar_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_uchar_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_uchar_1 = 613;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_uchar4_uchar_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_uchar_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_uchar4_uchar_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_uchar_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_uchar4_uchar_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_uchar_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_uchar2_0 = 614;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar4_uchar2_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_uchar2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_uchar4_uchar2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_uchar2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_uchar4_uchar2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_uchar2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_uchar2_1 = 615;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar4_uchar2_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_uchar2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_uchar4_uchar2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_uchar2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_uchar4_uchar2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_uchar2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_uchar4_0 = 616;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar4_uchar4_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_uchar4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_uchar4_uchar4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_uchar4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_uchar4_uchar4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_uchar4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_uchar4_1 = 617;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar4_uchar4_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_uchar4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_uchar4_uchar4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_uchar4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_uchar4_uchar4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_uchar4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_ushort_0 = 618;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_uchar4_ushort_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_ushort_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_uchar4_ushort_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_ushort_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_uchar4_ushort_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_ushort_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_ushort_1 = 619;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_uchar4_ushort_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_ushort_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_uchar4_ushort_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_ushort_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_uchar4_ushort_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_ushort_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_ushort2_0 = 620;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar4_ushort2_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_ushort2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_uchar4_ushort2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_ushort2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_uchar4_ushort2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_ushort2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_ushort2_1 = 621;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_uchar4_ushort2_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_ushort2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_uchar4_ushort2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_ushort2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_uchar4_ushort2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_ushort2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_ushort4_0 = 622;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar4_ushort4_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_ushort4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_uchar4_ushort4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_ushort4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_uchar4_ushort4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_ushort4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_ushort4_1 = 623;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_uchar4_ushort4_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_ushort4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_uchar4_ushort4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_ushort4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_uchar4_ushort4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_ushort4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_bool_0 = 624;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_uchar4_bool_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_bool_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_uchar4_bool_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_bool_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_uchar4_bool_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_bool_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_bool_1 = 625;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_uchar4_bool_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_uchar4_bool_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_uchar4_bool_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_bool_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_uchar4_bool_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_bool_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_rs_matrix2x2_0 = 626;
+    // ain1 = "uchar4 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_uchar4_rs_matrix2x2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_rs_matrix2x2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_uchar4_rs_matrix2x2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_rs_matrix2x2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_rs_matrix2x2_1 = 627;
+    // ain1 = "uchar4 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_uchar4_rs_matrix2x2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_rs_matrix2x2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_uchar4_rs_matrix2x2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_rs_matrix2x2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_MyStruct_0 = 628;
+    // ain1 = "uchar4 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_uchar4_MyStruct_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_MyStruct_0(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_uchar4_MyStruct_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_MyStruct_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4_MyStruct_1 = 629;
+    // ain1 = "uchar4 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_uchar4_MyStruct_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_uchar4_MyStruct_1(ain1, ain2, null);
+    }
+
+    // ain1 = "uchar4 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_uchar4_MyStruct_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4_MyStruct_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_half_0 = 630;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_ushort_half_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_half_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "half b"
+    public result_int reduce_my_ushort_half_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_half_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "half b"
+    public result_int reduce_my_ushort_half_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_half_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_half_1 = 631;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_ushort_half_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_half_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "half b"
+    public result_int reduce_my_ushort_half_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_half_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "half b"
+    public result_int reduce_my_ushort_half_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_half_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_half2_0 = 632;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort_half2_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_half2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_ushort_half2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_half2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_ushort_half2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_half2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_half2_1 = 633;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort_half2_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_half2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_ushort_half2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_half2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_ushort_half2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_half2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_half4_0 = 634;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort_half4_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_half4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_ushort_half4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_half4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_ushort_half4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_half4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_half4_1 = 635;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort_half4_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_half4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_ushort_half4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_half4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_ushort_half4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_half4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_float_0 = 636;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_ushort_float_0(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_float_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "float b"
+    public result_int reduce_my_ushort_float_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_float_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "float b"
+    public result_int reduce_my_ushort_float_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_float_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_float_1 = 637;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_ushort_float_1(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_float_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "float b"
+    public result_int reduce_my_ushort_float_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_float_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "float b"
+    public result_int reduce_my_ushort_float_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_float_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_float2_0 = 638;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort_float2_0(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_float2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_ushort_float2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_float2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_ushort_float2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_float2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_float2_1 = 639;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort_float2_1(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_float2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_ushort_float2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_float2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_ushort_float2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_float2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_float4_0 = 640;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort_float4_0(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_float4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_ushort_float4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_float4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_ushort_float4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_float4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_float4_1 = 641;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort_float4_1(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_float4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_ushort_float4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_float4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_ushort_float4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_float4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_char_0 = 642;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_ushort_char_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_char_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "char b"
+    public result_int reduce_my_ushort_char_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_char_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "char b"
+    public result_int reduce_my_ushort_char_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_char_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_char_1 = 643;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_ushort_char_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_char_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "char b"
+    public result_int reduce_my_ushort_char_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_char_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "char b"
+    public result_int reduce_my_ushort_char_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_char_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_char2_0 = 644;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort_char2_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_char2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_ushort_char2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_char2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_ushort_char2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_char2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_char2_1 = 645;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort_char2_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_char2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_ushort_char2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_char2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_ushort_char2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_char2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_char4_0 = 646;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort_char4_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_char4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_ushort_char4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_char4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_ushort_char4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_char4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_char4_1 = 647;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort_char4_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_char4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_ushort_char4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_char4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_ushort_char4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_char4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_short_0 = 648;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_ushort_short_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_short_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "short b"
+    public result_int reduce_my_ushort_short_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_short_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "short b"
+    public result_int reduce_my_ushort_short_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_short_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_short_1 = 649;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_ushort_short_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_short_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "short b"
+    public result_int reduce_my_ushort_short_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_short_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "short b"
+    public result_int reduce_my_ushort_short_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_short_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_short2_0 = 650;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort_short2_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_short2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_ushort_short2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_short2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_ushort_short2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_short2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_short2_1 = 651;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort_short2_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_short2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_ushort_short2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_short2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_ushort_short2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_short2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_short4_0 = 652;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort_short4_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_short4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_ushort_short4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_short4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_ushort_short4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_short4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_short4_1 = 653;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort_short4_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_short4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_ushort_short4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_short4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_ushort_short4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_short4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_uchar_0 = 654;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_ushort_uchar_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_uchar_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_ushort_uchar_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_uchar_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_ushort_uchar_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_uchar_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_uchar_1 = 655;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_ushort_uchar_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_uchar_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_ushort_uchar_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_uchar_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_ushort_uchar_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_uchar_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_uchar2_0 = 656;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort_uchar2_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_uchar2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_ushort_uchar2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_uchar2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_ushort_uchar2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_uchar2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_uchar2_1 = 657;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort_uchar2_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_uchar2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_ushort_uchar2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_uchar2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_ushort_uchar2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_uchar2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_uchar4_0 = 658;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort_uchar4_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_uchar4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_ushort_uchar4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_uchar4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_ushort_uchar4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_uchar4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_uchar4_1 = 659;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort_uchar4_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_uchar4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_ushort_uchar4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_uchar4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_ushort_uchar4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_uchar4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_ushort_0 = 660;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_ushort_ushort_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_ushort_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_ushort_ushort_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_ushort_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_ushort_ushort_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_ushort_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_ushort_1 = 661;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_ushort_ushort_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_ushort_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_ushort_ushort_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_ushort_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_ushort_ushort_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_ushort_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_ushort2_0 = 662;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort_ushort2_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_ushort2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_ushort_ushort2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_ushort2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_ushort_ushort2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_ushort2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_ushort2_1 = 663;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort_ushort2_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_ushort2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_ushort_ushort2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_ushort2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_ushort_ushort2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_ushort2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_ushort4_0 = 664;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort_ushort4_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_ushort4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_ushort_ushort4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_ushort4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_ushort_ushort4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_ushort4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_ushort4_1 = 665;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort_ushort4_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_ushort4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_ushort_ushort4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_ushort4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_ushort_ushort4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_ushort4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_bool_0 = 666;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_ushort_bool_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_bool_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "bool b"
+    public result_int reduce_my_ushort_bool_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_bool_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "bool b"
+    public result_int reduce_my_ushort_bool_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_bool_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_bool_1 = 667;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_ushort_bool_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort_bool_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "bool b"
+    public result_int reduce_my_ushort_bool_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_bool_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "bool b"
+    public result_int reduce_my_ushort_bool_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_bool_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_rs_matrix2x2_0 = 668;
+    // ain1 = "ushort a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_ushort_rs_matrix2x2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_rs_matrix2x2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_ushort_rs_matrix2x2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_rs_matrix2x2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_rs_matrix2x2_1 = 669;
+    // ain1 = "ushort a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_ushort_rs_matrix2x2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_rs_matrix2x2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_ushort_rs_matrix2x2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_rs_matrix2x2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_MyStruct_0 = 670;
+    // ain1 = "ushort a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_ushort_MyStruct_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_MyStruct_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_ushort_MyStruct_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_MyStruct_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort_MyStruct_1 = 671;
+    // ain1 = "ushort a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_ushort_MyStruct_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort_MyStruct_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_ushort_MyStruct_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort_MyStruct_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_half_0 = 672;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_ushort2_half_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_half_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "half b"
+    public result_int reduce_my_ushort2_half_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_half_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "half b"
+    public result_int reduce_my_ushort2_half_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_half_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_half_1 = 673;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_ushort2_half_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_half_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "half b"
+    public result_int reduce_my_ushort2_half_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_half_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "half b"
+    public result_int reduce_my_ushort2_half_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_half_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_half2_0 = 674;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort2_half2_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_half2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_ushort2_half2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_half2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_ushort2_half2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_half2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_half2_1 = 675;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort2_half2_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_half2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_ushort2_half2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_half2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_ushort2_half2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_half2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_half4_0 = 676;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort2_half4_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_half4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_ushort2_half4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_half4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_ushort2_half4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_half4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_half4_1 = 677;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort2_half4_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_half4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_ushort2_half4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_half4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_ushort2_half4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_half4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_float_0 = 678;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_ushort2_float_0(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_float_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "float b"
+    public result_int reduce_my_ushort2_float_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_float_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "float b"
+    public result_int reduce_my_ushort2_float_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_float_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_float_1 = 679;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_ushort2_float_1(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_float_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "float b"
+    public result_int reduce_my_ushort2_float_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_float_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "float b"
+    public result_int reduce_my_ushort2_float_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_float_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_float2_0 = 680;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort2_float2_0(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_float2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_ushort2_float2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_float2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_ushort2_float2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_float2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_float2_1 = 681;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort2_float2_1(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_float2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_ushort2_float2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_float2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_ushort2_float2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_float2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_float4_0 = 682;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort2_float4_0(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_float4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_ushort2_float4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_float4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_ushort2_float4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_float4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_float4_1 = 683;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort2_float4_1(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_float4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_ushort2_float4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_float4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_ushort2_float4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_float4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_char_0 = 684;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_ushort2_char_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_char_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "char b"
+    public result_int reduce_my_ushort2_char_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_char_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "char b"
+    public result_int reduce_my_ushort2_char_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_char_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_char_1 = 685;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_ushort2_char_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_char_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "char b"
+    public result_int reduce_my_ushort2_char_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_char_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "char b"
+    public result_int reduce_my_ushort2_char_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_char_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_char2_0 = 686;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort2_char2_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_char2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_ushort2_char2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_char2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_ushort2_char2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_char2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_char2_1 = 687;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort2_char2_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_char2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_ushort2_char2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_char2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_ushort2_char2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_char2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_char4_0 = 688;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort2_char4_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_char4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_ushort2_char4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_char4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_ushort2_char4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_char4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_char4_1 = 689;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort2_char4_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_char4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_ushort2_char4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_char4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_ushort2_char4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_char4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_short_0 = 690;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_ushort2_short_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_short_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "short b"
+    public result_int reduce_my_ushort2_short_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_short_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "short b"
+    public result_int reduce_my_ushort2_short_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_short_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_short_1 = 691;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_ushort2_short_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_short_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "short b"
+    public result_int reduce_my_ushort2_short_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_short_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "short b"
+    public result_int reduce_my_ushort2_short_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_short_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_short2_0 = 692;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort2_short2_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_short2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_ushort2_short2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_short2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_ushort2_short2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_short2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_short2_1 = 693;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort2_short2_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_short2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_ushort2_short2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_short2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_ushort2_short2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_short2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_short4_0 = 694;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort2_short4_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_short4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_ushort2_short4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_short4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_ushort2_short4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_short4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_short4_1 = 695;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort2_short4_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_short4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_ushort2_short4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_short4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_ushort2_short4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_short4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_uchar_0 = 696;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_ushort2_uchar_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_uchar_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_ushort2_uchar_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_uchar_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_ushort2_uchar_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_uchar_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_uchar_1 = 697;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_ushort2_uchar_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_uchar_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_ushort2_uchar_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_uchar_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_ushort2_uchar_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_uchar_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_uchar2_0 = 698;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort2_uchar2_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_uchar2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_ushort2_uchar2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_uchar2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_ushort2_uchar2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_uchar2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_uchar2_1 = 699;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort2_uchar2_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_uchar2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_ushort2_uchar2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_uchar2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_ushort2_uchar2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_uchar2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_uchar4_0 = 700;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort2_uchar4_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_uchar4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_ushort2_uchar4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_uchar4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_ushort2_uchar4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_uchar4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_uchar4_1 = 701;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort2_uchar4_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_uchar4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_ushort2_uchar4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_uchar4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_ushort2_uchar4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_uchar4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_ushort_0 = 702;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_ushort2_ushort_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_ushort_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_ushort2_ushort_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_ushort_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_ushort2_ushort_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_ushort_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_ushort_1 = 703;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_ushort2_ushort_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_ushort_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_ushort2_ushort_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_ushort_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_ushort2_ushort_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_ushort_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_ushort2_0 = 704;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort2_ushort2_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_ushort2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_ushort2_ushort2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_ushort2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_ushort2_ushort2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_ushort2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_ushort2_1 = 705;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort2_ushort2_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_ushort2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_ushort2_ushort2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_ushort2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_ushort2_ushort2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_ushort2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_ushort4_0 = 706;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort2_ushort4_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_ushort4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_ushort2_ushort4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_ushort4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_ushort2_ushort4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_ushort4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_ushort4_1 = 707;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort2_ushort4_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_ushort4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_ushort2_ushort4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_ushort4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_ushort2_ushort4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_ushort4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_bool_0 = 708;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_ushort2_bool_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_bool_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_ushort2_bool_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_bool_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_ushort2_bool_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_bool_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_bool_1 = 709;
+    // in1 = "a", flattened 2-vectors
+    // in2 = "b"
+    public result_int reduce_my_ushort2_bool_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 2 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort2_bool_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_ushort2_bool_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_bool_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_ushort2_bool_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_bool_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_rs_matrix2x2_0 = 710;
+    // ain1 = "ushort2 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_ushort2_rs_matrix2x2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_rs_matrix2x2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_ushort2_rs_matrix2x2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_rs_matrix2x2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_rs_matrix2x2_1 = 711;
+    // ain1 = "ushort2 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_ushort2_rs_matrix2x2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_rs_matrix2x2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_ushort2_rs_matrix2x2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_rs_matrix2x2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_MyStruct_0 = 712;
+    // ain1 = "ushort2 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_ushort2_MyStruct_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_MyStruct_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_ushort2_MyStruct_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_MyStruct_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2_MyStruct_1 = 713;
+    // ain1 = "ushort2 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_ushort2_MyStruct_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort2_MyStruct_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort2 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_ushort2_MyStruct_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2_MyStruct_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_half_0 = 714;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_ushort4_half_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_half_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "half b"
+    public result_int reduce_my_ushort4_half_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_half_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "half b"
+    public result_int reduce_my_ushort4_half_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_half_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_half_1 = 715;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_ushort4_half_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_half_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "half b"
+    public result_int reduce_my_ushort4_half_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_half_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "half b"
+    public result_int reduce_my_ushort4_half_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_half_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_half2_0 = 716;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort4_half2_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_half2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_ushort4_half2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_half2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_ushort4_half2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_half2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_half2_1 = 717;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort4_half2_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_half2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_ushort4_half2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_half2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_ushort4_half2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_half2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_half4_0 = 718;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort4_half4_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_half4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_ushort4_half4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_half4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_ushort4_half4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_half4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_half4_1 = 719;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort4_half4_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_half4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_ushort4_half4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_half4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_ushort4_half4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_half4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_float_0 = 720;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_ushort4_float_0(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_float_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "float b"
+    public result_int reduce_my_ushort4_float_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_float_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "float b"
+    public result_int reduce_my_ushort4_float_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_float_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_float_1 = 721;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_ushort4_float_1(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_float_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "float b"
+    public result_int reduce_my_ushort4_float_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_float_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "float b"
+    public result_int reduce_my_ushort4_float_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_float_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_float2_0 = 722;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort4_float2_0(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_float2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_ushort4_float2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_float2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_ushort4_float2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_float2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_float2_1 = 723;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort4_float2_1(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_float2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_ushort4_float2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_float2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_ushort4_float2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_float2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_float4_0 = 724;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort4_float4_0(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_float4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_ushort4_float4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_float4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_ushort4_float4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_float4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_float4_1 = 725;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort4_float4_1(short[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_float4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_ushort4_float4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_float4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_ushort4_float4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_float4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_char_0 = 726;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_ushort4_char_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_char_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "char b"
+    public result_int reduce_my_ushort4_char_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_char_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "char b"
+    public result_int reduce_my_ushort4_char_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_char_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_char_1 = 727;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_ushort4_char_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_char_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "char b"
+    public result_int reduce_my_ushort4_char_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_char_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "char b"
+    public result_int reduce_my_ushort4_char_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_char_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_char2_0 = 728;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort4_char2_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_char2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_ushort4_char2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_char2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_ushort4_char2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_char2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_char2_1 = 729;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort4_char2_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_char2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_ushort4_char2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_char2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_ushort4_char2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_char2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_char4_0 = 730;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort4_char4_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_char4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_ushort4_char4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_char4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_ushort4_char4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_char4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_char4_1 = 731;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort4_char4_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_char4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_ushort4_char4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_char4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_ushort4_char4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_char4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_short_0 = 732;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_ushort4_short_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_short_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "short b"
+    public result_int reduce_my_ushort4_short_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_short_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "short b"
+    public result_int reduce_my_ushort4_short_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_short_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_short_1 = 733;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_ushort4_short_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_short_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "short b"
+    public result_int reduce_my_ushort4_short_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_short_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "short b"
+    public result_int reduce_my_ushort4_short_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_short_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_short2_0 = 734;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort4_short2_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_short2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_ushort4_short2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_short2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_ushort4_short2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_short2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_short2_1 = 735;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort4_short2_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_short2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_ushort4_short2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_short2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_ushort4_short2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_short2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_short4_0 = 736;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort4_short4_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_short4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_ushort4_short4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_short4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_ushort4_short4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_short4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_short4_1 = 737;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort4_short4_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_short4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_ushort4_short4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_short4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_ushort4_short4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_short4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_uchar_0 = 738;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_ushort4_uchar_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_uchar_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_ushort4_uchar_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_uchar_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_ushort4_uchar_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_uchar_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_uchar_1 = 739;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_ushort4_uchar_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_uchar_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_ushort4_uchar_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_uchar_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_ushort4_uchar_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_uchar_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_uchar2_0 = 740;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort4_uchar2_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_uchar2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_ushort4_uchar2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_uchar2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_ushort4_uchar2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_uchar2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_uchar2_1 = 741;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort4_uchar2_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_uchar2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_ushort4_uchar2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_uchar2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_ushort4_uchar2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_uchar2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_uchar4_0 = 742;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort4_uchar4_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_uchar4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_ushort4_uchar4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_uchar4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_ushort4_uchar4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_uchar4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_uchar4_1 = 743;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort4_uchar4_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_uchar4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_ushort4_uchar4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_uchar4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_ushort4_uchar4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_uchar4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_ushort_0 = 744;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_ushort4_ushort_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_ushort_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_ushort4_ushort_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_ushort_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_ushort4_ushort_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_ushort_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_ushort_1 = 745;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_ushort4_ushort_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_ushort_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_ushort4_ushort_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_ushort_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_ushort4_ushort_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_ushort_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_ushort2_0 = 746;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort4_ushort2_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_ushort2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_ushort4_ushort2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_ushort2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_ushort4_ushort2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_ushort2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_ushort2_1 = 747;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_ushort4_ushort2_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_ushort2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_ushort4_ushort2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_ushort2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_ushort4_ushort2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_ushort2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_ushort4_0 = 748;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort4_ushort4_0(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_ushort4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_ushort4_ushort4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_ushort4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_ushort4_ushort4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_ushort4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_ushort4_1 = 749;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_ushort4_ushort4_1(short[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_ushort4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_ushort4_ushort4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_ushort4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_ushort4_ushort4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_ushort4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_bool_0 = 750;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_ushort4_bool_0(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_bool_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_ushort4_bool_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_bool_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_ushort4_bool_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_bool_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_bool_1 = 751;
+    // in1 = "a", flattened 4-vectors
+    // in2 = "b"
+    public result_int reduce_my_ushort4_bool_1(short[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length / 4 != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_ushort4_bool_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_ushort4_bool_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_bool_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_ushort4_bool_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_bool_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_rs_matrix2x2_0 = 752;
+    // ain1 = "ushort4 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_ushort4_rs_matrix2x2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_rs_matrix2x2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_ushort4_rs_matrix2x2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_rs_matrix2x2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_rs_matrix2x2_1 = 753;
+    // ain1 = "ushort4 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_ushort4_rs_matrix2x2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_rs_matrix2x2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_ushort4_rs_matrix2x2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_rs_matrix2x2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_MyStruct_0 = 754;
+    // ain1 = "ushort4 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_ushort4_MyStruct_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_MyStruct_0(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_ushort4_MyStruct_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_MyStruct_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4_MyStruct_1 = 755;
+    // ain1 = "ushort4 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_ushort4_MyStruct_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_ushort4_MyStruct_1(ain1, ain2, null);
+    }
+
+    // ain1 = "ushort4 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_ushort4_MyStruct_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4_MyStruct_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_half_0 = 756;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_bool_half_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_half_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "half b"
+    public result_int reduce_my_bool_half_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_half_0(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "half b"
+    public result_int reduce_my_bool_half_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_half_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_half_1 = 757;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_bool_half_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_half_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "half b"
+    public result_int reduce_my_bool_half_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_half_1(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "half b"
+    public result_int reduce_my_bool_half_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_half_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_half2_0 = 758;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_bool_half2_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_half2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_bool_half2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_half2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_bool_half2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_half2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_half2_1 = 759;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_bool_half2_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_half2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_bool_half2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_half2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_bool_half2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_half2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_half4_0 = 760;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_bool_half4_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_half4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_bool_half4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_half4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_bool_half4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_half4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_half4_1 = 761;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_bool_half4_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_half4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_bool_half4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_half4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_bool_half4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_half4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_float_0 = 762;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_bool_float_0(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_float_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "float b"
+    public result_int reduce_my_bool_float_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_float_0(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "float b"
+    public result_int reduce_my_bool_float_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_float_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_float_1 = 763;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_bool_float_1(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_float_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "float b"
+    public result_int reduce_my_bool_float_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_float_1(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "float b"
+    public result_int reduce_my_bool_float_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_float_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_float2_0 = 764;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_bool_float2_0(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_float2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_bool_float2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_float2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_bool_float2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_float2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_float2_1 = 765;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_bool_float2_1(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_float2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_bool_float2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_float2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_bool_float2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_float2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_float4_0 = 766;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_bool_float4_0(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_float4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_bool_float4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_float4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_bool_float4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_float4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_float4_1 = 767;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_bool_float4_1(byte[] in1, float[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __F32_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_float4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_bool_float4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_float4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_bool_float4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_float4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_char_0 = 768;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_bool_char_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_char_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "char b"
+    public result_int reduce_my_bool_char_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_char_0(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "char b"
+    public result_int reduce_my_bool_char_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_char_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_char_1 = 769;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_bool_char_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_char_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "char b"
+    public result_int reduce_my_bool_char_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_char_1(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "char b"
+    public result_int reduce_my_bool_char_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_char_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_char2_0 = 770;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_bool_char2_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_char2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_bool_char2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_char2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_bool_char2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_char2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_char2_1 = 771;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_bool_char2_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_char2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_bool_char2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_char2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_bool_char2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_char2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_char4_0 = 772;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_bool_char4_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_char4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_bool_char4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_char4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_bool_char4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_char4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_char4_1 = 773;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_bool_char4_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_char4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_bool_char4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_char4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_bool_char4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_char4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_short_0 = 774;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_bool_short_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_short_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "short b"
+    public result_int reduce_my_bool_short_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_short_0(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "short b"
+    public result_int reduce_my_bool_short_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_short_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_short_1 = 775;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_bool_short_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_short_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "short b"
+    public result_int reduce_my_bool_short_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_short_1(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "short b"
+    public result_int reduce_my_bool_short_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_short_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_short2_0 = 776;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_bool_short2_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_short2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_bool_short2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_short2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_bool_short2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_short2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_short2_1 = 777;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_bool_short2_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_short2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_bool_short2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_short2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_bool_short2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_short2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_short4_0 = 778;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_bool_short4_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_short4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_bool_short4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_short4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_bool_short4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_short4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_short4_1 = 779;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_bool_short4_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __I16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_short4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_bool_short4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_short4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_bool_short4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_short4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_uchar_0 = 780;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_bool_uchar_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_uchar_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_bool_uchar_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_uchar_0(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_bool_uchar_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_uchar_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_uchar_1 = 781;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_bool_uchar_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_uchar_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_bool_uchar_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_uchar_1(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_bool_uchar_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_uchar_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_uchar2_0 = 782;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_bool_uchar2_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_uchar2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_bool_uchar2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_uchar2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_bool_uchar2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_uchar2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_uchar2_1 = 783;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_bool_uchar2_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_uchar2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_bool_uchar2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_uchar2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_bool_uchar2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_uchar2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_uchar4_0 = 784;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_bool_uchar4_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_uchar4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_bool_uchar4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_uchar4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_bool_uchar4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_uchar4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_uchar4_1 = 785;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_bool_uchar4_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U8_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_uchar4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_bool_uchar4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_uchar4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_bool_uchar4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_uchar4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_ushort_0 = 786;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_bool_ushort_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_ushort_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_bool_ushort_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_ushort_0(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_bool_ushort_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_ushort_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_ushort_1 = 787;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_bool_ushort_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_ushort_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_bool_ushort_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_ushort_1(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_bool_ushort_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_ushort_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_ushort2_0 = 788;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_bool_ushort2_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_ushort2_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_bool_ushort2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_ushort2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_bool_ushort2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_ushort2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_ushort2_1 = 789;
+    // in1 = "a"
+    // in2 = "b", flattened 2-vectors
+    public result_int reduce_my_bool_ushort2_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 2 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 2) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_2, in2.length / 2);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_ushort2_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_bool_ushort2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_ushort2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_bool_ushort2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_ushort2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_ushort4_0 = 790;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_bool_ushort4_0(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_ushort4_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_bool_ushort4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_ushort4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_bool_ushort4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_ushort4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_ushort4_1 = 791;
+    // in1 = "a"
+    // in2 = "b", flattened 4-vectors
+    public result_int reduce_my_bool_ushort4_1(byte[] in1, short[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in2.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in2\" is not a multiple of 4 in length!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length / 4) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __U16_4, in2.length / 4);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_ushort4_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_bool_ushort4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_ushort4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_bool_ushort4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_ushort4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_bool_0 = 792;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_bool_bool_0(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_bool_0(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "bool b"
+    public result_int reduce_my_bool_bool_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_bool_0(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "bool b"
+    public result_int reduce_my_bool_bool_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_bool_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_bool_1 = 793;
+    // in1 = "a"
+    // in2 = "b"
+    public result_int reduce_my_bool_bool_1(byte[] in1, byte[] in2) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+        // Verify that "in2" is non-null.
+        if (in2 == null) {
+            throw new RSIllegalArgumentException("Array \"in2\" is null!");
+        }
+        // Verify that input array lengths are the same.
+        if (in1.length != in2.length) {
+            throw new RSRuntimeException("Array length mismatch between parameters \"in1\" and \"in2\"!");
+        }
+        Allocation ain2 = Allocation.createSized(mRSLocal, __BOOLEAN, in2.length);
+        ain2.setAutoPadding(true);
+        ain2.copyFrom(in2);
+
+        result_int result = reduce_my_bool_bool_1(ain1, ain2, null);
+        result.mTempIns = new Allocation[]{ain1, ain2};
+        return result;
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "bool b"
+    public result_int reduce_my_bool_bool_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_bool_1(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "bool b"
+    public result_int reduce_my_bool_bool_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_bool_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_rs_matrix2x2_0 = 794;
+    // ain1 = "bool a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_bool_rs_matrix2x2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_rs_matrix2x2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_bool_rs_matrix2x2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_rs_matrix2x2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_rs_matrix2x2_1 = 795;
+    // ain1 = "bool a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_bool_rs_matrix2x2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_rs_matrix2x2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_bool_rs_matrix2x2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_rs_matrix2x2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_MyStruct_0 = 796;
+    // ain1 = "bool a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_bool_MyStruct_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_MyStruct_0(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_bool_MyStruct_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_MyStruct_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool_MyStruct_1 = 797;
+    // ain1 = "bool a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_bool_MyStruct_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_bool_MyStruct_1(ain1, ain2, null);
+    }
+
+    // ain1 = "bool a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_bool_MyStruct_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool_MyStruct_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_half_0 = 798;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "half b"
+    public result_int reduce_my_rs_matrix2x2_half_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_half_0(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "half b"
+    public result_int reduce_my_rs_matrix2x2_half_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_half_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_half_1 = 799;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "half b"
+    public result_int reduce_my_rs_matrix2x2_half_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_half_1(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "half b"
+    public result_int reduce_my_rs_matrix2x2_half_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_half_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_half2_0 = 800;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_rs_matrix2x2_half2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_half2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_rs_matrix2x2_half2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_half2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_half2_1 = 801;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_rs_matrix2x2_half2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_half2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_rs_matrix2x2_half2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_half2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_half4_0 = 802;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_rs_matrix2x2_half4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_half4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_rs_matrix2x2_half4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_half4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_half4_1 = 803;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_rs_matrix2x2_half4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_half4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_rs_matrix2x2_half4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_half4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_float_0 = 804;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "float b"
+    public result_int reduce_my_rs_matrix2x2_float_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_float_0(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "float b"
+    public result_int reduce_my_rs_matrix2x2_float_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_float_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_float_1 = 805;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "float b"
+    public result_int reduce_my_rs_matrix2x2_float_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_float_1(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "float b"
+    public result_int reduce_my_rs_matrix2x2_float_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_float_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_float2_0 = 806;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_rs_matrix2x2_float2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_float2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_rs_matrix2x2_float2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_float2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_float2_1 = 807;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_rs_matrix2x2_float2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_float2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_rs_matrix2x2_float2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_float2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_float4_0 = 808;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_rs_matrix2x2_float4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_float4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_rs_matrix2x2_float4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_float4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_float4_1 = 809;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_rs_matrix2x2_float4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_float4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_rs_matrix2x2_float4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_float4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_char_0 = 810;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "char b"
+    public result_int reduce_my_rs_matrix2x2_char_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_char_0(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "char b"
+    public result_int reduce_my_rs_matrix2x2_char_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_char_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_char_1 = 811;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "char b"
+    public result_int reduce_my_rs_matrix2x2_char_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_char_1(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "char b"
+    public result_int reduce_my_rs_matrix2x2_char_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_char_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_char2_0 = 812;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_rs_matrix2x2_char2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_char2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_rs_matrix2x2_char2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_char2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_char2_1 = 813;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_rs_matrix2x2_char2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_char2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_rs_matrix2x2_char2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_char2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_char4_0 = 814;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_rs_matrix2x2_char4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_char4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_rs_matrix2x2_char4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_char4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_char4_1 = 815;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_rs_matrix2x2_char4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_char4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_rs_matrix2x2_char4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_char4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_short_0 = 816;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "short b"
+    public result_int reduce_my_rs_matrix2x2_short_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_short_0(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "short b"
+    public result_int reduce_my_rs_matrix2x2_short_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_short_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_short_1 = 817;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "short b"
+    public result_int reduce_my_rs_matrix2x2_short_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_short_1(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "short b"
+    public result_int reduce_my_rs_matrix2x2_short_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_short_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_short2_0 = 818;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_rs_matrix2x2_short2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_short2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_rs_matrix2x2_short2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_short2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_short2_1 = 819;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_rs_matrix2x2_short2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_short2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_rs_matrix2x2_short2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_short2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_short4_0 = 820;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_rs_matrix2x2_short4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_short4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_rs_matrix2x2_short4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_short4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_short4_1 = 821;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_rs_matrix2x2_short4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_short4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_rs_matrix2x2_short4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_short4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_uchar_0 = 822;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_rs_matrix2x2_uchar_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_uchar_0(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_rs_matrix2x2_uchar_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_uchar_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_uchar_1 = 823;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_rs_matrix2x2_uchar_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_uchar_1(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_rs_matrix2x2_uchar_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_uchar_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_uchar2_0 = 824;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_rs_matrix2x2_uchar2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_uchar2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_rs_matrix2x2_uchar2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_uchar2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_uchar2_1 = 825;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_rs_matrix2x2_uchar2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_uchar2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_rs_matrix2x2_uchar2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_uchar2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_uchar4_0 = 826;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_rs_matrix2x2_uchar4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_uchar4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_rs_matrix2x2_uchar4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_uchar4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_uchar4_1 = 827;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_rs_matrix2x2_uchar4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_uchar4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_rs_matrix2x2_uchar4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_uchar4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_ushort_0 = 828;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_rs_matrix2x2_ushort_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_ushort_0(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_rs_matrix2x2_ushort_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_ushort_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_ushort_1 = 829;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_rs_matrix2x2_ushort_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_ushort_1(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_rs_matrix2x2_ushort_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_ushort_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_ushort2_0 = 830;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_rs_matrix2x2_ushort2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_ushort2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_rs_matrix2x2_ushort2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_ushort2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_ushort2_1 = 831;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_rs_matrix2x2_ushort2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_ushort2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_rs_matrix2x2_ushort2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_ushort2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_ushort4_0 = 832;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_rs_matrix2x2_ushort4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_ushort4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_rs_matrix2x2_ushort4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_ushort4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_ushort4_1 = 833;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_rs_matrix2x2_ushort4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_ushort4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_rs_matrix2x2_ushort4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_ushort4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_bool_0 = 834;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_rs_matrix2x2_bool_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_bool_0(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_rs_matrix2x2_bool_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_bool_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_bool_1 = 835;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_rs_matrix2x2_bool_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_bool_1(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "bool b"
+    public result_int reduce_my_rs_matrix2x2_bool_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_bool_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_rs_matrix2x2_0 = 836;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_rs_matrix2x2_rs_matrix2x2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_rs_matrix2x2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_rs_matrix2x2_rs_matrix2x2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_rs_matrix2x2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_rs_matrix2x2_1 = 837;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_rs_matrix2x2_rs_matrix2x2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_rs_matrix2x2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_rs_matrix2x2_rs_matrix2x2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_rs_matrix2x2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_MyStruct_0 = 838;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_rs_matrix2x2_MyStruct_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_MyStruct_0(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_rs_matrix2x2_MyStruct_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_MyStruct_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_rs_matrix2x2_MyStruct_1 = 839;
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_rs_matrix2x2_MyStruct_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_rs_matrix2x2_MyStruct_1(ain1, ain2, null);
+    }
+
+    // ain1 = "rs_matrix2x2 a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_rs_matrix2x2_MyStruct_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_rs_matrix2x2_MyStruct_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_half_0 = 840;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "half b"
+    public result_int reduce_my_MyStruct_half_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_half_0(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "half b"
+    public result_int reduce_my_MyStruct_half_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_half_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_half_1 = 841;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "half b"
+    public result_int reduce_my_MyStruct_half_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_half_1(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "half b"
+    public result_int reduce_my_MyStruct_half_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_half_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_half2_0 = 842;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_MyStruct_half2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_half2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_MyStruct_half2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_half2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_half2_1 = 843;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_MyStruct_half2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_half2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "half2 b"
+    public result_int reduce_my_MyStruct_half2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_half2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_half4_0 = 844;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_MyStruct_half4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_half4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_MyStruct_half4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_half4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_half4_1 = 845;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_MyStruct_half4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_half4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "half4 b"
+    public result_int reduce_my_MyStruct_half4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_half4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_float_0 = 846;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "float b"
+    public result_int reduce_my_MyStruct_float_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_float_0(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "float b"
+    public result_int reduce_my_MyStruct_float_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_float_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_float_1 = 847;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "float b"
+    public result_int reduce_my_MyStruct_float_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_float_1(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "float b"
+    public result_int reduce_my_MyStruct_float_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_float_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_float2_0 = 848;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_MyStruct_float2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_float2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_MyStruct_float2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_float2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_float2_1 = 849;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_MyStruct_float2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_float2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "float2 b"
+    public result_int reduce_my_MyStruct_float2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_float2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_float4_0 = 850;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_MyStruct_float4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_float4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_MyStruct_float4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_float4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_float4_1 = 851;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_MyStruct_float4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_float4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "float4 b"
+    public result_int reduce_my_MyStruct_float4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_float4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_char_0 = 852;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "char b"
+    public result_int reduce_my_MyStruct_char_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_char_0(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "char b"
+    public result_int reduce_my_MyStruct_char_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_char_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_char_1 = 853;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "char b"
+    public result_int reduce_my_MyStruct_char_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_char_1(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "char b"
+    public result_int reduce_my_MyStruct_char_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_char_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_char2_0 = 854;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_MyStruct_char2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_char2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_MyStruct_char2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_char2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_char2_1 = 855;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_MyStruct_char2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_char2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "char2 b"
+    public result_int reduce_my_MyStruct_char2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_char2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_char4_0 = 856;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_MyStruct_char4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_char4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_MyStruct_char4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_char4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_char4_1 = 857;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_MyStruct_char4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_char4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "char4 b"
+    public result_int reduce_my_MyStruct_char4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_char4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_short_0 = 858;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "short b"
+    public result_int reduce_my_MyStruct_short_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_short_0(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "short b"
+    public result_int reduce_my_MyStruct_short_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_short_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_short_1 = 859;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "short b"
+    public result_int reduce_my_MyStruct_short_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_short_1(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "short b"
+    public result_int reduce_my_MyStruct_short_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_short_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_short2_0 = 860;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_MyStruct_short2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_short2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_MyStruct_short2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_short2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_short2_1 = 861;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_MyStruct_short2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_short2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "short2 b"
+    public result_int reduce_my_MyStruct_short2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_short2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_short4_0 = 862;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_MyStruct_short4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_short4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_MyStruct_short4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_short4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_short4_1 = 863;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_MyStruct_short4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_short4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "short4 b"
+    public result_int reduce_my_MyStruct_short4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_short4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_uchar_0 = 864;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_MyStruct_uchar_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_uchar_0(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_MyStruct_uchar_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_uchar_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_uchar_1 = 865;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_MyStruct_uchar_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_uchar_1(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "uchar b"
+    public result_int reduce_my_MyStruct_uchar_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_uchar_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_uchar2_0 = 866;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_MyStruct_uchar2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_uchar2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_MyStruct_uchar2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_uchar2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_uchar2_1 = 867;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_MyStruct_uchar2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_uchar2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "uchar2 b"
+    public result_int reduce_my_MyStruct_uchar2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_uchar2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_uchar4_0 = 868;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_MyStruct_uchar4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_uchar4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_MyStruct_uchar4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_uchar4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_uchar4_1 = 869;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_MyStruct_uchar4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_uchar4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "uchar4 b"
+    public result_int reduce_my_MyStruct_uchar4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_uchar4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_ushort_0 = 870;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_MyStruct_ushort_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_ushort_0(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_MyStruct_ushort_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_ushort_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_ushort_1 = 871;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_MyStruct_ushort_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_ushort_1(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "ushort b"
+    public result_int reduce_my_MyStruct_ushort_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_ushort_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_ushort2_0 = 872;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_MyStruct_ushort2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_ushort2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_MyStruct_ushort2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_ushort2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_ushort2_1 = 873;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_MyStruct_ushort2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_ushort2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "ushort2 b"
+    public result_int reduce_my_MyStruct_ushort2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_ushort2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_ushort4_0 = 874;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_MyStruct_ushort4_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_ushort4_0(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_MyStruct_ushort4_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_ushort4_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_ushort4_1 = 875;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_MyStruct_ushort4_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_ushort4_1(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "ushort4 b"
+    public result_int reduce_my_MyStruct_ushort4_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_ushort4_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_bool_0 = 876;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "bool b"
+    public result_int reduce_my_MyStruct_bool_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_bool_0(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "bool b"
+    public result_int reduce_my_MyStruct_bool_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_bool_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_bool_1 = 877;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "bool b"
+    public result_int reduce_my_MyStruct_bool_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_bool_1(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "bool b"
+    public result_int reduce_my_MyStruct_bool_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_bool_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_rs_matrix2x2_0 = 878;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_MyStruct_rs_matrix2x2_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_rs_matrix2x2_0(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_MyStruct_rs_matrix2x2_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_rs_matrix2x2_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_rs_matrix2x2_1 = 879;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_MyStruct_rs_matrix2x2_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_rs_matrix2x2_1(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "rs_matrix2x2 b"
+    public result_int reduce_my_MyStruct_rs_matrix2x2_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_rs_matrix2x2_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_MyStruct_0 = 880;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_MyStruct_MyStruct_0(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_MyStruct_0(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_MyStruct_MyStruct_0(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_MyStruct_0, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_MyStruct_MyStruct_1 = 881;
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_MyStruct_MyStruct_1(Allocation ain1, Allocation ain2) {
+        return reduce_my_MyStruct_MyStruct_1(ain1, ain2, null);
+    }
+
+    // ain1 = "/* struct <> */ a"
+    // ain2 = "/* struct <> */ b"
+    public result_int reduce_my_MyStruct_MyStruct_1(Allocation ain1, Allocation ain2, Script.LaunchOptions sc) {
+        Type t0, t1;
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // check ain2
+        if (!ain2.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        // Verify dimensions
+        t0 = ain1.getType();
+        t1 = ain2.getType();
+        if ((t0.getCount() != t1.getCount()) ||
+            (t0.getX() != t1.getX()) ||
+            (t0.getY() != t1.getY()) ||
+            (t0.getZ() != t1.getZ()) ||
+            (t0.hasFaces()   != t1.hasFaces()) ||
+            (t0.hasMipmaps() != t1.hasMipmaps())) {
+            throw new RSRuntimeException("Dimension mismatch between parameters ain1 and ain2!");
+        }
+
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_MyStruct_MyStruct_1, new Allocation[]{ain1, ain2}, aout, sc);
+        return new result_int(aout);
+    }
+
+}
+
diff --git a/slang/tests/P_reduce_general_inputs/ScriptField_MyStruct.java.expect b/slang/tests/P_reduce_general_inputs/ScriptField_MyStruct.java.expect
new file mode 100644
index 0000000..182f920
--- /dev/null
+++ b/slang/tests/P_reduce_general_inputs/ScriptField_MyStruct.java.expect
@@ -0,0 +1,200 @@
+/*
+ * Copyright (C) 2011-2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * This file is auto-generated. DO NOT MODIFY!
+ * The source Renderscript file: reduce_general_inputs.rs
+ */
+
+package inputs;
+
+import android.renderscript.*;
+import inputs.reduce_general_inputsBitCode;
+
+/**
+ * @hide
+ */
+public class ScriptField_MyStruct extends android.renderscript.Script.FieldBase {
+    static public class Item {
+
+        float f;
+        double d;
+
+        Item() {
+        }
+
+    }
+
+    private Item mItemArray[];
+    private FieldPacker mIOBuffer;
+    private static java.lang.ref.WeakReference<Element> mElementCache = new java.lang.ref.WeakReference<Element>(null);
+    public static Element createElement(RenderScript rs) {
+        Element.Builder eb = new Element.Builder(rs);
+        eb.add(Element.F32(rs), "f");
+        eb.add(Element.U32(rs), "#rs_padding_1");
+        eb.add(Element.F64(rs), "d");
+        return eb.create();
+    }
+
+    private  ScriptField_MyStruct(RenderScript rs) {
+        mItemArray = null;
+        mIOBuffer = null;
+        mElement = createElement(rs);
+    }
+
+    public  ScriptField_MyStruct(RenderScript rs, int count) {
+        mItemArray = null;
+        mIOBuffer = null;
+        mElement = createElement(rs);
+        init(rs, count);
+    }
+
+    public  ScriptField_MyStruct(RenderScript rs, int count, int usages) {
+        mItemArray = null;
+        mIOBuffer = null;
+        mElement = createElement(rs);
+        init(rs, count, usages);
+    }
+
+    public static ScriptField_MyStruct create1D(RenderScript rs, int dimX, int usages) {
+        ScriptField_MyStruct obj = new ScriptField_MyStruct(rs);
+        obj.mAllocation = Allocation.createSized(rs, obj.mElement, dimX, usages);
+        return obj;
+    }
+
+    public static ScriptField_MyStruct create1D(RenderScript rs, int dimX) {
+        return create1D(rs, dimX, Allocation.USAGE_SCRIPT);
+    }
+
+    public static ScriptField_MyStruct create2D(RenderScript rs, int dimX, int dimY) {
+        return create2D(rs, dimX, dimY, Allocation.USAGE_SCRIPT);
+    }
+
+    public static ScriptField_MyStruct create2D(RenderScript rs, int dimX, int dimY, int usages) {
+        ScriptField_MyStruct obj = new ScriptField_MyStruct(rs);
+        Type.Builder b = new Type.Builder(rs, obj.mElement);
+        b.setX(dimX);
+        b.setY(dimY);
+        Type t = b.create();
+        obj.mAllocation = Allocation.createTyped(rs, t, usages);
+        return obj;
+    }
+
+    public static Type.Builder createTypeBuilder(RenderScript rs) {
+        Element e = createElement(rs);
+        return new Type.Builder(rs, e);
+    }
+
+    public static ScriptField_MyStruct createCustom(RenderScript rs, Type.Builder tb, int usages) {
+        ScriptField_MyStruct obj = new ScriptField_MyStruct(rs);
+        Type t = tb.create();
+        if (t.getElement() != obj.mElement) {
+            throw new RSIllegalArgumentException("Type.Builder did not match expected element type.");
+        }
+        obj.mAllocation = Allocation.createTyped(rs, t, usages);
+        return obj;
+    }
+
+    private void copyToArrayLocal(Item i, FieldPacker fp) {
+        fp.addF32(i.f);
+        fp.skip(4);
+        fp.addF64(i.d);
+    }
+
+    private void copyToArray(Item i, int index) {
+        if (mIOBuffer == null) mIOBuffer = new FieldPacker(mElement.getBytesSize() * getType().getX()/* count */);
+        mIOBuffer.reset(index * mElement.getBytesSize());
+        copyToArrayLocal(i, mIOBuffer);
+    }
+
+    public synchronized void set(Item i, int index, boolean copyNow) {
+        if (mItemArray == null) mItemArray = new Item[getType().getX() /* count */];
+        mItemArray[index] = i;
+        if (copyNow)  {
+            copyToArray(i, index);
+            FieldPacker fp = new FieldPacker(mElement.getBytesSize());
+            copyToArrayLocal(i, fp);
+            mAllocation.setFromFieldPacker(index, fp);
+        }
+
+    }
+
+    public synchronized Item get(int index) {
+        if (mItemArray == null) return null;
+        return mItemArray[index];
+    }
+
+    public synchronized void set_f(int index, float v, boolean copyNow) {
+        if (mIOBuffer == null) mIOBuffer = new FieldPacker(mElement.getBytesSize() * getType().getX()/* count */);
+        if (mItemArray == null) mItemArray = new Item[getType().getX() /* count */];
+        if (mItemArray[index] == null) mItemArray[index] = new Item();
+        mItemArray[index].f = v;
+        if (copyNow)  {
+            mIOBuffer.reset(index * mElement.getBytesSize());
+            mIOBuffer.addF32(v);
+            FieldPacker fp = new FieldPacker(4);
+            fp.addF32(v);
+            mAllocation.setFromFieldPacker(index, 0, fp);
+        }
+
+    }
+
+    public synchronized void set_d(int index, double v, boolean copyNow) {
+        if (mIOBuffer == null) mIOBuffer = new FieldPacker(mElement.getBytesSize() * getType().getX()/* count */);
+        if (mItemArray == null) mItemArray = new Item[getType().getX() /* count */];
+        if (mItemArray[index] == null) mItemArray[index] = new Item();
+        mItemArray[index].d = v;
+        if (copyNow)  {
+            mIOBuffer.reset(index * mElement.getBytesSize() + 8);
+            mIOBuffer.addF64(v);
+            FieldPacker fp = new FieldPacker(8);
+            fp.addF64(v);
+            mAllocation.setFromFieldPacker(index, 2, fp);
+        }
+
+    }
+
+    public synchronized float get_f(int index) {
+        if (mItemArray == null) return 0;
+        return mItemArray[index].f;
+    }
+
+    public synchronized double get_d(int index) {
+        if (mItemArray == null) return 0;
+        return mItemArray[index].d;
+    }
+
+    public synchronized void copyAll() {
+        for (int ct = 0; ct < mItemArray.length; ct++) copyToArray(mItemArray[ct], ct);
+        mAllocation.setFromFieldPacker(0, mIOBuffer);
+    }
+
+    public synchronized void resize(int newSize) {
+        if (mItemArray != null)  {
+            int oldSize = mItemArray.length;
+            int copySize = Math.min(oldSize, newSize);
+            if (newSize == oldSize) return;
+            Item ni[] = new Item[newSize];
+            System.arraycopy(mItemArray, 0, ni, 0, copySize);
+            mItemArray = ni;
+        }
+
+        mAllocation.resize(newSize);
+        if (mIOBuffer != null) mIOBuffer = new FieldPacker(mElement.getBytesSize() * getType().getX()/* count */);
+    }
+
+}
+
diff --git a/slang/tests/P_reduce_general_inputs/gen-inputs.pl b/slang/tests/P_reduce_general_inputs/gen-inputs.pl
new file mode 100755
index 0000000..136ec27
--- /dev/null
+++ b/slang/tests/P_reduce_general_inputs/gen-inputs.pl
@@ -0,0 +1,71 @@
+#!/usr/bin/perl -w
+
+# Generate trivial test cases to exercise input types.
+
+use strict;
+
+# deliberately non-exhaustive
+my @basicTypes = ("half", "float", # "double",
+                  "char", "short", # "int", "long",
+                  "uchar", "ushort", # "uint", "ulong",
+                  "bool",
+                  "rs_matrix2x2", # "rs_matrix3x3", "rs_matrix4x4",
+                  "MyStruct");
+
+# 1 signifies non-vector
+# 3 is not supported for exported types
+my @vecLengths = (1, 2, 4);
+
+sub isVectorEligible {
+  my ($type) = @_;
+
+  # There are no bool vectors or struct vectors
+  return 0 if ($type eq "bool") || ($type eq "MyStruct");
+
+  # There are no matrix or object vectors
+  return 0 if (substr($type, 0, 3) eq "rs_");
+
+  # Else ok
+  return 1;
+}
+
+print "// -Wall -Werror\n";
+print "#pragma version(1)\n";
+print "#pragma rs java_package_name(inputs)\n\n";
+print "// This test case was created by $0.\n";
+print "// It exercises various legal combinations of inputs and special parameters,\n";
+print "// so that we can ensure\n";
+print "// (a) We do not choke when compiling them\n";
+print "// (b) We reflect them correctly\n\n";
+print "// One example struct type\n";
+print "typedef struct MyStruct { float f; double d; } MyStruct;\n\n";
+print "// Trivial combiner shared by all test cases\n";
+print "static void combiner(int *accum, const int *other) { }\n";
+
+foreach my $basicTypeA (@basicTypes) {
+  foreach my $vecLenA (@vecLengths) {
+    next if ($vecLenA > 1) && !isVectorEligible($basicTypeA);
+
+    my $eltNameA = $basicTypeA;
+    $eltNameA .= $vecLenA if ($vecLenA > 1);
+
+    foreach my $basicTypeB (@basicTypes) {
+      foreach my $vecLenB (@vecLengths) {
+        next if ($vecLenB > 1) && !isVectorEligible($basicTypeB);
+
+        my $eltNameB = $basicTypeB;
+        $eltNameB .= $vecLenB if ($vecLenB > 1);
+
+        for (my $hasSpecial = 0; $hasSpecial <= 1; ++$hasSpecial) {
+          my $reduceName = "my_${eltNameA}_${eltNameB}_${hasSpecial}";
+          my $accumName = "${reduceName}_accum";
+          print "\n";
+          print "#pragma rs reduce(${reduceName}) accumulator(${accumName}) combiner(combiner)\n";
+          print "static void ${accumName}(int *accum, ${eltNameA} a, ${eltNameB} b";
+          print ", rs_kernel_context context" if ($hasSpecial);
+          print ") { }\n";
+        }
+      }
+    }
+  }
+}
diff --git a/slang/tests/P_reduce_general_inputs/reduce_general_inputs.rs b/slang/tests/P_reduce_general_inputs/reduce_general_inputs.rs
new file mode 100644
index 0000000..aa7aae7
--- /dev/null
+++ b/slang/tests/P_reduce_general_inputs/reduce_general_inputs.rs
@@ -0,0 +1,2661 @@
+// -Wall -Werror
+#pragma version(1)
+#pragma rs java_package_name(inputs)
+
+// This test case was created by ./gen-inputs.pl.
+// It exercises various legal combinations of inputs and special parameters,
+// so that we can ensure
+// (a) We do not choke when compiling them
+// (b) We reflect them correctly
+
+// One example struct type
+typedef struct MyStruct { float f; double d; } MyStruct;
+
+// Trivial combiner shared by all test cases
+static void combiner(int *accum, const int *other) { }
+
+#pragma rs reduce(my_half_half_0) accumulator(my_half_half_0_accum) combiner(combiner)
+static void my_half_half_0_accum(int *accum, half a, half b) { }
+
+#pragma rs reduce(my_half_half_1) accumulator(my_half_half_1_accum) combiner(combiner)
+static void my_half_half_1_accum(int *accum, half a, half b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half_half2_0) accumulator(my_half_half2_0_accum) combiner(combiner)
+static void my_half_half2_0_accum(int *accum, half a, half2 b) { }
+
+#pragma rs reduce(my_half_half2_1) accumulator(my_half_half2_1_accum) combiner(combiner)
+static void my_half_half2_1_accum(int *accum, half a, half2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half_half4_0) accumulator(my_half_half4_0_accum) combiner(combiner)
+static void my_half_half4_0_accum(int *accum, half a, half4 b) { }
+
+#pragma rs reduce(my_half_half4_1) accumulator(my_half_half4_1_accum) combiner(combiner)
+static void my_half_half4_1_accum(int *accum, half a, half4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half_float_0) accumulator(my_half_float_0_accum) combiner(combiner)
+static void my_half_float_0_accum(int *accum, half a, float b) { }
+
+#pragma rs reduce(my_half_float_1) accumulator(my_half_float_1_accum) combiner(combiner)
+static void my_half_float_1_accum(int *accum, half a, float b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half_float2_0) accumulator(my_half_float2_0_accum) combiner(combiner)
+static void my_half_float2_0_accum(int *accum, half a, float2 b) { }
+
+#pragma rs reduce(my_half_float2_1) accumulator(my_half_float2_1_accum) combiner(combiner)
+static void my_half_float2_1_accum(int *accum, half a, float2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half_float4_0) accumulator(my_half_float4_0_accum) combiner(combiner)
+static void my_half_float4_0_accum(int *accum, half a, float4 b) { }
+
+#pragma rs reduce(my_half_float4_1) accumulator(my_half_float4_1_accum) combiner(combiner)
+static void my_half_float4_1_accum(int *accum, half a, float4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half_char_0) accumulator(my_half_char_0_accum) combiner(combiner)
+static void my_half_char_0_accum(int *accum, half a, char b) { }
+
+#pragma rs reduce(my_half_char_1) accumulator(my_half_char_1_accum) combiner(combiner)
+static void my_half_char_1_accum(int *accum, half a, char b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half_char2_0) accumulator(my_half_char2_0_accum) combiner(combiner)
+static void my_half_char2_0_accum(int *accum, half a, char2 b) { }
+
+#pragma rs reduce(my_half_char2_1) accumulator(my_half_char2_1_accum) combiner(combiner)
+static void my_half_char2_1_accum(int *accum, half a, char2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half_char4_0) accumulator(my_half_char4_0_accum) combiner(combiner)
+static void my_half_char4_0_accum(int *accum, half a, char4 b) { }
+
+#pragma rs reduce(my_half_char4_1) accumulator(my_half_char4_1_accum) combiner(combiner)
+static void my_half_char4_1_accum(int *accum, half a, char4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half_short_0) accumulator(my_half_short_0_accum) combiner(combiner)
+static void my_half_short_0_accum(int *accum, half a, short b) { }
+
+#pragma rs reduce(my_half_short_1) accumulator(my_half_short_1_accum) combiner(combiner)
+static void my_half_short_1_accum(int *accum, half a, short b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half_short2_0) accumulator(my_half_short2_0_accum) combiner(combiner)
+static void my_half_short2_0_accum(int *accum, half a, short2 b) { }
+
+#pragma rs reduce(my_half_short2_1) accumulator(my_half_short2_1_accum) combiner(combiner)
+static void my_half_short2_1_accum(int *accum, half a, short2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half_short4_0) accumulator(my_half_short4_0_accum) combiner(combiner)
+static void my_half_short4_0_accum(int *accum, half a, short4 b) { }
+
+#pragma rs reduce(my_half_short4_1) accumulator(my_half_short4_1_accum) combiner(combiner)
+static void my_half_short4_1_accum(int *accum, half a, short4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half_uchar_0) accumulator(my_half_uchar_0_accum) combiner(combiner)
+static void my_half_uchar_0_accum(int *accum, half a, uchar b) { }
+
+#pragma rs reduce(my_half_uchar_1) accumulator(my_half_uchar_1_accum) combiner(combiner)
+static void my_half_uchar_1_accum(int *accum, half a, uchar b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half_uchar2_0) accumulator(my_half_uchar2_0_accum) combiner(combiner)
+static void my_half_uchar2_0_accum(int *accum, half a, uchar2 b) { }
+
+#pragma rs reduce(my_half_uchar2_1) accumulator(my_half_uchar2_1_accum) combiner(combiner)
+static void my_half_uchar2_1_accum(int *accum, half a, uchar2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half_uchar4_0) accumulator(my_half_uchar4_0_accum) combiner(combiner)
+static void my_half_uchar4_0_accum(int *accum, half a, uchar4 b) { }
+
+#pragma rs reduce(my_half_uchar4_1) accumulator(my_half_uchar4_1_accum) combiner(combiner)
+static void my_half_uchar4_1_accum(int *accum, half a, uchar4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half_ushort_0) accumulator(my_half_ushort_0_accum) combiner(combiner)
+static void my_half_ushort_0_accum(int *accum, half a, ushort b) { }
+
+#pragma rs reduce(my_half_ushort_1) accumulator(my_half_ushort_1_accum) combiner(combiner)
+static void my_half_ushort_1_accum(int *accum, half a, ushort b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half_ushort2_0) accumulator(my_half_ushort2_0_accum) combiner(combiner)
+static void my_half_ushort2_0_accum(int *accum, half a, ushort2 b) { }
+
+#pragma rs reduce(my_half_ushort2_1) accumulator(my_half_ushort2_1_accum) combiner(combiner)
+static void my_half_ushort2_1_accum(int *accum, half a, ushort2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half_ushort4_0) accumulator(my_half_ushort4_0_accum) combiner(combiner)
+static void my_half_ushort4_0_accum(int *accum, half a, ushort4 b) { }
+
+#pragma rs reduce(my_half_ushort4_1) accumulator(my_half_ushort4_1_accum) combiner(combiner)
+static void my_half_ushort4_1_accum(int *accum, half a, ushort4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half_bool_0) accumulator(my_half_bool_0_accum) combiner(combiner)
+static void my_half_bool_0_accum(int *accum, half a, bool b) { }
+
+#pragma rs reduce(my_half_bool_1) accumulator(my_half_bool_1_accum) combiner(combiner)
+static void my_half_bool_1_accum(int *accum, half a, bool b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half_rs_matrix2x2_0) accumulator(my_half_rs_matrix2x2_0_accum) combiner(combiner)
+static void my_half_rs_matrix2x2_0_accum(int *accum, half a, rs_matrix2x2 b) { }
+
+#pragma rs reduce(my_half_rs_matrix2x2_1) accumulator(my_half_rs_matrix2x2_1_accum) combiner(combiner)
+static void my_half_rs_matrix2x2_1_accum(int *accum, half a, rs_matrix2x2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half_MyStruct_0) accumulator(my_half_MyStruct_0_accum) combiner(combiner)
+static void my_half_MyStruct_0_accum(int *accum, half a, MyStruct b) { }
+
+#pragma rs reduce(my_half_MyStruct_1) accumulator(my_half_MyStruct_1_accum) combiner(combiner)
+static void my_half_MyStruct_1_accum(int *accum, half a, MyStruct b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half2_half_0) accumulator(my_half2_half_0_accum) combiner(combiner)
+static void my_half2_half_0_accum(int *accum, half2 a, half b) { }
+
+#pragma rs reduce(my_half2_half_1) accumulator(my_half2_half_1_accum) combiner(combiner)
+static void my_half2_half_1_accum(int *accum, half2 a, half b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half2_half2_0) accumulator(my_half2_half2_0_accum) combiner(combiner)
+static void my_half2_half2_0_accum(int *accum, half2 a, half2 b) { }
+
+#pragma rs reduce(my_half2_half2_1) accumulator(my_half2_half2_1_accum) combiner(combiner)
+static void my_half2_half2_1_accum(int *accum, half2 a, half2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half2_half4_0) accumulator(my_half2_half4_0_accum) combiner(combiner)
+static void my_half2_half4_0_accum(int *accum, half2 a, half4 b) { }
+
+#pragma rs reduce(my_half2_half4_1) accumulator(my_half2_half4_1_accum) combiner(combiner)
+static void my_half2_half4_1_accum(int *accum, half2 a, half4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half2_float_0) accumulator(my_half2_float_0_accum) combiner(combiner)
+static void my_half2_float_0_accum(int *accum, half2 a, float b) { }
+
+#pragma rs reduce(my_half2_float_1) accumulator(my_half2_float_1_accum) combiner(combiner)
+static void my_half2_float_1_accum(int *accum, half2 a, float b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half2_float2_0) accumulator(my_half2_float2_0_accum) combiner(combiner)
+static void my_half2_float2_0_accum(int *accum, half2 a, float2 b) { }
+
+#pragma rs reduce(my_half2_float2_1) accumulator(my_half2_float2_1_accum) combiner(combiner)
+static void my_half2_float2_1_accum(int *accum, half2 a, float2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half2_float4_0) accumulator(my_half2_float4_0_accum) combiner(combiner)
+static void my_half2_float4_0_accum(int *accum, half2 a, float4 b) { }
+
+#pragma rs reduce(my_half2_float4_1) accumulator(my_half2_float4_1_accum) combiner(combiner)
+static void my_half2_float4_1_accum(int *accum, half2 a, float4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half2_char_0) accumulator(my_half2_char_0_accum) combiner(combiner)
+static void my_half2_char_0_accum(int *accum, half2 a, char b) { }
+
+#pragma rs reduce(my_half2_char_1) accumulator(my_half2_char_1_accum) combiner(combiner)
+static void my_half2_char_1_accum(int *accum, half2 a, char b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half2_char2_0) accumulator(my_half2_char2_0_accum) combiner(combiner)
+static void my_half2_char2_0_accum(int *accum, half2 a, char2 b) { }
+
+#pragma rs reduce(my_half2_char2_1) accumulator(my_half2_char2_1_accum) combiner(combiner)
+static void my_half2_char2_1_accum(int *accum, half2 a, char2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half2_char4_0) accumulator(my_half2_char4_0_accum) combiner(combiner)
+static void my_half2_char4_0_accum(int *accum, half2 a, char4 b) { }
+
+#pragma rs reduce(my_half2_char4_1) accumulator(my_half2_char4_1_accum) combiner(combiner)
+static void my_half2_char4_1_accum(int *accum, half2 a, char4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half2_short_0) accumulator(my_half2_short_0_accum) combiner(combiner)
+static void my_half2_short_0_accum(int *accum, half2 a, short b) { }
+
+#pragma rs reduce(my_half2_short_1) accumulator(my_half2_short_1_accum) combiner(combiner)
+static void my_half2_short_1_accum(int *accum, half2 a, short b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half2_short2_0) accumulator(my_half2_short2_0_accum) combiner(combiner)
+static void my_half2_short2_0_accum(int *accum, half2 a, short2 b) { }
+
+#pragma rs reduce(my_half2_short2_1) accumulator(my_half2_short2_1_accum) combiner(combiner)
+static void my_half2_short2_1_accum(int *accum, half2 a, short2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half2_short4_0) accumulator(my_half2_short4_0_accum) combiner(combiner)
+static void my_half2_short4_0_accum(int *accum, half2 a, short4 b) { }
+
+#pragma rs reduce(my_half2_short4_1) accumulator(my_half2_short4_1_accum) combiner(combiner)
+static void my_half2_short4_1_accum(int *accum, half2 a, short4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half2_uchar_0) accumulator(my_half2_uchar_0_accum) combiner(combiner)
+static void my_half2_uchar_0_accum(int *accum, half2 a, uchar b) { }
+
+#pragma rs reduce(my_half2_uchar_1) accumulator(my_half2_uchar_1_accum) combiner(combiner)
+static void my_half2_uchar_1_accum(int *accum, half2 a, uchar b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half2_uchar2_0) accumulator(my_half2_uchar2_0_accum) combiner(combiner)
+static void my_half2_uchar2_0_accum(int *accum, half2 a, uchar2 b) { }
+
+#pragma rs reduce(my_half2_uchar2_1) accumulator(my_half2_uchar2_1_accum) combiner(combiner)
+static void my_half2_uchar2_1_accum(int *accum, half2 a, uchar2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half2_uchar4_0) accumulator(my_half2_uchar4_0_accum) combiner(combiner)
+static void my_half2_uchar4_0_accum(int *accum, half2 a, uchar4 b) { }
+
+#pragma rs reduce(my_half2_uchar4_1) accumulator(my_half2_uchar4_1_accum) combiner(combiner)
+static void my_half2_uchar4_1_accum(int *accum, half2 a, uchar4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half2_ushort_0) accumulator(my_half2_ushort_0_accum) combiner(combiner)
+static void my_half2_ushort_0_accum(int *accum, half2 a, ushort b) { }
+
+#pragma rs reduce(my_half2_ushort_1) accumulator(my_half2_ushort_1_accum) combiner(combiner)
+static void my_half2_ushort_1_accum(int *accum, half2 a, ushort b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half2_ushort2_0) accumulator(my_half2_ushort2_0_accum) combiner(combiner)
+static void my_half2_ushort2_0_accum(int *accum, half2 a, ushort2 b) { }
+
+#pragma rs reduce(my_half2_ushort2_1) accumulator(my_half2_ushort2_1_accum) combiner(combiner)
+static void my_half2_ushort2_1_accum(int *accum, half2 a, ushort2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half2_ushort4_0) accumulator(my_half2_ushort4_0_accum) combiner(combiner)
+static void my_half2_ushort4_0_accum(int *accum, half2 a, ushort4 b) { }
+
+#pragma rs reduce(my_half2_ushort4_1) accumulator(my_half2_ushort4_1_accum) combiner(combiner)
+static void my_half2_ushort4_1_accum(int *accum, half2 a, ushort4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half2_bool_0) accumulator(my_half2_bool_0_accum) combiner(combiner)
+static void my_half2_bool_0_accum(int *accum, half2 a, bool b) { }
+
+#pragma rs reduce(my_half2_bool_1) accumulator(my_half2_bool_1_accum) combiner(combiner)
+static void my_half2_bool_1_accum(int *accum, half2 a, bool b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half2_rs_matrix2x2_0) accumulator(my_half2_rs_matrix2x2_0_accum) combiner(combiner)
+static void my_half2_rs_matrix2x2_0_accum(int *accum, half2 a, rs_matrix2x2 b) { }
+
+#pragma rs reduce(my_half2_rs_matrix2x2_1) accumulator(my_half2_rs_matrix2x2_1_accum) combiner(combiner)
+static void my_half2_rs_matrix2x2_1_accum(int *accum, half2 a, rs_matrix2x2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half2_MyStruct_0) accumulator(my_half2_MyStruct_0_accum) combiner(combiner)
+static void my_half2_MyStruct_0_accum(int *accum, half2 a, MyStruct b) { }
+
+#pragma rs reduce(my_half2_MyStruct_1) accumulator(my_half2_MyStruct_1_accum) combiner(combiner)
+static void my_half2_MyStruct_1_accum(int *accum, half2 a, MyStruct b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half4_half_0) accumulator(my_half4_half_0_accum) combiner(combiner)
+static void my_half4_half_0_accum(int *accum, half4 a, half b) { }
+
+#pragma rs reduce(my_half4_half_1) accumulator(my_half4_half_1_accum) combiner(combiner)
+static void my_half4_half_1_accum(int *accum, half4 a, half b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half4_half2_0) accumulator(my_half4_half2_0_accum) combiner(combiner)
+static void my_half4_half2_0_accum(int *accum, half4 a, half2 b) { }
+
+#pragma rs reduce(my_half4_half2_1) accumulator(my_half4_half2_1_accum) combiner(combiner)
+static void my_half4_half2_1_accum(int *accum, half4 a, half2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half4_half4_0) accumulator(my_half4_half4_0_accum) combiner(combiner)
+static void my_half4_half4_0_accum(int *accum, half4 a, half4 b) { }
+
+#pragma rs reduce(my_half4_half4_1) accumulator(my_half4_half4_1_accum) combiner(combiner)
+static void my_half4_half4_1_accum(int *accum, half4 a, half4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half4_float_0) accumulator(my_half4_float_0_accum) combiner(combiner)
+static void my_half4_float_0_accum(int *accum, half4 a, float b) { }
+
+#pragma rs reduce(my_half4_float_1) accumulator(my_half4_float_1_accum) combiner(combiner)
+static void my_half4_float_1_accum(int *accum, half4 a, float b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half4_float2_0) accumulator(my_half4_float2_0_accum) combiner(combiner)
+static void my_half4_float2_0_accum(int *accum, half4 a, float2 b) { }
+
+#pragma rs reduce(my_half4_float2_1) accumulator(my_half4_float2_1_accum) combiner(combiner)
+static void my_half4_float2_1_accum(int *accum, half4 a, float2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half4_float4_0) accumulator(my_half4_float4_0_accum) combiner(combiner)
+static void my_half4_float4_0_accum(int *accum, half4 a, float4 b) { }
+
+#pragma rs reduce(my_half4_float4_1) accumulator(my_half4_float4_1_accum) combiner(combiner)
+static void my_half4_float4_1_accum(int *accum, half4 a, float4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half4_char_0) accumulator(my_half4_char_0_accum) combiner(combiner)
+static void my_half4_char_0_accum(int *accum, half4 a, char b) { }
+
+#pragma rs reduce(my_half4_char_1) accumulator(my_half4_char_1_accum) combiner(combiner)
+static void my_half4_char_1_accum(int *accum, half4 a, char b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half4_char2_0) accumulator(my_half4_char2_0_accum) combiner(combiner)
+static void my_half4_char2_0_accum(int *accum, half4 a, char2 b) { }
+
+#pragma rs reduce(my_half4_char2_1) accumulator(my_half4_char2_1_accum) combiner(combiner)
+static void my_half4_char2_1_accum(int *accum, half4 a, char2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half4_char4_0) accumulator(my_half4_char4_0_accum) combiner(combiner)
+static void my_half4_char4_0_accum(int *accum, half4 a, char4 b) { }
+
+#pragma rs reduce(my_half4_char4_1) accumulator(my_half4_char4_1_accum) combiner(combiner)
+static void my_half4_char4_1_accum(int *accum, half4 a, char4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half4_short_0) accumulator(my_half4_short_0_accum) combiner(combiner)
+static void my_half4_short_0_accum(int *accum, half4 a, short b) { }
+
+#pragma rs reduce(my_half4_short_1) accumulator(my_half4_short_1_accum) combiner(combiner)
+static void my_half4_short_1_accum(int *accum, half4 a, short b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half4_short2_0) accumulator(my_half4_short2_0_accum) combiner(combiner)
+static void my_half4_short2_0_accum(int *accum, half4 a, short2 b) { }
+
+#pragma rs reduce(my_half4_short2_1) accumulator(my_half4_short2_1_accum) combiner(combiner)
+static void my_half4_short2_1_accum(int *accum, half4 a, short2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half4_short4_0) accumulator(my_half4_short4_0_accum) combiner(combiner)
+static void my_half4_short4_0_accum(int *accum, half4 a, short4 b) { }
+
+#pragma rs reduce(my_half4_short4_1) accumulator(my_half4_short4_1_accum) combiner(combiner)
+static void my_half4_short4_1_accum(int *accum, half4 a, short4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half4_uchar_0) accumulator(my_half4_uchar_0_accum) combiner(combiner)
+static void my_half4_uchar_0_accum(int *accum, half4 a, uchar b) { }
+
+#pragma rs reduce(my_half4_uchar_1) accumulator(my_half4_uchar_1_accum) combiner(combiner)
+static void my_half4_uchar_1_accum(int *accum, half4 a, uchar b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half4_uchar2_0) accumulator(my_half4_uchar2_0_accum) combiner(combiner)
+static void my_half4_uchar2_0_accum(int *accum, half4 a, uchar2 b) { }
+
+#pragma rs reduce(my_half4_uchar2_1) accumulator(my_half4_uchar2_1_accum) combiner(combiner)
+static void my_half4_uchar2_1_accum(int *accum, half4 a, uchar2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half4_uchar4_0) accumulator(my_half4_uchar4_0_accum) combiner(combiner)
+static void my_half4_uchar4_0_accum(int *accum, half4 a, uchar4 b) { }
+
+#pragma rs reduce(my_half4_uchar4_1) accumulator(my_half4_uchar4_1_accum) combiner(combiner)
+static void my_half4_uchar4_1_accum(int *accum, half4 a, uchar4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half4_ushort_0) accumulator(my_half4_ushort_0_accum) combiner(combiner)
+static void my_half4_ushort_0_accum(int *accum, half4 a, ushort b) { }
+
+#pragma rs reduce(my_half4_ushort_1) accumulator(my_half4_ushort_1_accum) combiner(combiner)
+static void my_half4_ushort_1_accum(int *accum, half4 a, ushort b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half4_ushort2_0) accumulator(my_half4_ushort2_0_accum) combiner(combiner)
+static void my_half4_ushort2_0_accum(int *accum, half4 a, ushort2 b) { }
+
+#pragma rs reduce(my_half4_ushort2_1) accumulator(my_half4_ushort2_1_accum) combiner(combiner)
+static void my_half4_ushort2_1_accum(int *accum, half4 a, ushort2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half4_ushort4_0) accumulator(my_half4_ushort4_0_accum) combiner(combiner)
+static void my_half4_ushort4_0_accum(int *accum, half4 a, ushort4 b) { }
+
+#pragma rs reduce(my_half4_ushort4_1) accumulator(my_half4_ushort4_1_accum) combiner(combiner)
+static void my_half4_ushort4_1_accum(int *accum, half4 a, ushort4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half4_bool_0) accumulator(my_half4_bool_0_accum) combiner(combiner)
+static void my_half4_bool_0_accum(int *accum, half4 a, bool b) { }
+
+#pragma rs reduce(my_half4_bool_1) accumulator(my_half4_bool_1_accum) combiner(combiner)
+static void my_half4_bool_1_accum(int *accum, half4 a, bool b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half4_rs_matrix2x2_0) accumulator(my_half4_rs_matrix2x2_0_accum) combiner(combiner)
+static void my_half4_rs_matrix2x2_0_accum(int *accum, half4 a, rs_matrix2x2 b) { }
+
+#pragma rs reduce(my_half4_rs_matrix2x2_1) accumulator(my_half4_rs_matrix2x2_1_accum) combiner(combiner)
+static void my_half4_rs_matrix2x2_1_accum(int *accum, half4 a, rs_matrix2x2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_half4_MyStruct_0) accumulator(my_half4_MyStruct_0_accum) combiner(combiner)
+static void my_half4_MyStruct_0_accum(int *accum, half4 a, MyStruct b) { }
+
+#pragma rs reduce(my_half4_MyStruct_1) accumulator(my_half4_MyStruct_1_accum) combiner(combiner)
+static void my_half4_MyStruct_1_accum(int *accum, half4 a, MyStruct b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float_half_0) accumulator(my_float_half_0_accum) combiner(combiner)
+static void my_float_half_0_accum(int *accum, float a, half b) { }
+
+#pragma rs reduce(my_float_half_1) accumulator(my_float_half_1_accum) combiner(combiner)
+static void my_float_half_1_accum(int *accum, float a, half b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float_half2_0) accumulator(my_float_half2_0_accum) combiner(combiner)
+static void my_float_half2_0_accum(int *accum, float a, half2 b) { }
+
+#pragma rs reduce(my_float_half2_1) accumulator(my_float_half2_1_accum) combiner(combiner)
+static void my_float_half2_1_accum(int *accum, float a, half2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float_half4_0) accumulator(my_float_half4_0_accum) combiner(combiner)
+static void my_float_half4_0_accum(int *accum, float a, half4 b) { }
+
+#pragma rs reduce(my_float_half4_1) accumulator(my_float_half4_1_accum) combiner(combiner)
+static void my_float_half4_1_accum(int *accum, float a, half4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float_float_0) accumulator(my_float_float_0_accum) combiner(combiner)
+static void my_float_float_0_accum(int *accum, float a, float b) { }
+
+#pragma rs reduce(my_float_float_1) accumulator(my_float_float_1_accum) combiner(combiner)
+static void my_float_float_1_accum(int *accum, float a, float b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float_float2_0) accumulator(my_float_float2_0_accum) combiner(combiner)
+static void my_float_float2_0_accum(int *accum, float a, float2 b) { }
+
+#pragma rs reduce(my_float_float2_1) accumulator(my_float_float2_1_accum) combiner(combiner)
+static void my_float_float2_1_accum(int *accum, float a, float2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float_float4_0) accumulator(my_float_float4_0_accum) combiner(combiner)
+static void my_float_float4_0_accum(int *accum, float a, float4 b) { }
+
+#pragma rs reduce(my_float_float4_1) accumulator(my_float_float4_1_accum) combiner(combiner)
+static void my_float_float4_1_accum(int *accum, float a, float4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float_char_0) accumulator(my_float_char_0_accum) combiner(combiner)
+static void my_float_char_0_accum(int *accum, float a, char b) { }
+
+#pragma rs reduce(my_float_char_1) accumulator(my_float_char_1_accum) combiner(combiner)
+static void my_float_char_1_accum(int *accum, float a, char b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float_char2_0) accumulator(my_float_char2_0_accum) combiner(combiner)
+static void my_float_char2_0_accum(int *accum, float a, char2 b) { }
+
+#pragma rs reduce(my_float_char2_1) accumulator(my_float_char2_1_accum) combiner(combiner)
+static void my_float_char2_1_accum(int *accum, float a, char2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float_char4_0) accumulator(my_float_char4_0_accum) combiner(combiner)
+static void my_float_char4_0_accum(int *accum, float a, char4 b) { }
+
+#pragma rs reduce(my_float_char4_1) accumulator(my_float_char4_1_accum) combiner(combiner)
+static void my_float_char4_1_accum(int *accum, float a, char4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float_short_0) accumulator(my_float_short_0_accum) combiner(combiner)
+static void my_float_short_0_accum(int *accum, float a, short b) { }
+
+#pragma rs reduce(my_float_short_1) accumulator(my_float_short_1_accum) combiner(combiner)
+static void my_float_short_1_accum(int *accum, float a, short b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float_short2_0) accumulator(my_float_short2_0_accum) combiner(combiner)
+static void my_float_short2_0_accum(int *accum, float a, short2 b) { }
+
+#pragma rs reduce(my_float_short2_1) accumulator(my_float_short2_1_accum) combiner(combiner)
+static void my_float_short2_1_accum(int *accum, float a, short2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float_short4_0) accumulator(my_float_short4_0_accum) combiner(combiner)
+static void my_float_short4_0_accum(int *accum, float a, short4 b) { }
+
+#pragma rs reduce(my_float_short4_1) accumulator(my_float_short4_1_accum) combiner(combiner)
+static void my_float_short4_1_accum(int *accum, float a, short4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float_uchar_0) accumulator(my_float_uchar_0_accum) combiner(combiner)
+static void my_float_uchar_0_accum(int *accum, float a, uchar b) { }
+
+#pragma rs reduce(my_float_uchar_1) accumulator(my_float_uchar_1_accum) combiner(combiner)
+static void my_float_uchar_1_accum(int *accum, float a, uchar b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float_uchar2_0) accumulator(my_float_uchar2_0_accum) combiner(combiner)
+static void my_float_uchar2_0_accum(int *accum, float a, uchar2 b) { }
+
+#pragma rs reduce(my_float_uchar2_1) accumulator(my_float_uchar2_1_accum) combiner(combiner)
+static void my_float_uchar2_1_accum(int *accum, float a, uchar2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float_uchar4_0) accumulator(my_float_uchar4_0_accum) combiner(combiner)
+static void my_float_uchar4_0_accum(int *accum, float a, uchar4 b) { }
+
+#pragma rs reduce(my_float_uchar4_1) accumulator(my_float_uchar4_1_accum) combiner(combiner)
+static void my_float_uchar4_1_accum(int *accum, float a, uchar4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float_ushort_0) accumulator(my_float_ushort_0_accum) combiner(combiner)
+static void my_float_ushort_0_accum(int *accum, float a, ushort b) { }
+
+#pragma rs reduce(my_float_ushort_1) accumulator(my_float_ushort_1_accum) combiner(combiner)
+static void my_float_ushort_1_accum(int *accum, float a, ushort b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float_ushort2_0) accumulator(my_float_ushort2_0_accum) combiner(combiner)
+static void my_float_ushort2_0_accum(int *accum, float a, ushort2 b) { }
+
+#pragma rs reduce(my_float_ushort2_1) accumulator(my_float_ushort2_1_accum) combiner(combiner)
+static void my_float_ushort2_1_accum(int *accum, float a, ushort2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float_ushort4_0) accumulator(my_float_ushort4_0_accum) combiner(combiner)
+static void my_float_ushort4_0_accum(int *accum, float a, ushort4 b) { }
+
+#pragma rs reduce(my_float_ushort4_1) accumulator(my_float_ushort4_1_accum) combiner(combiner)
+static void my_float_ushort4_1_accum(int *accum, float a, ushort4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float_bool_0) accumulator(my_float_bool_0_accum) combiner(combiner)
+static void my_float_bool_0_accum(int *accum, float a, bool b) { }
+
+#pragma rs reduce(my_float_bool_1) accumulator(my_float_bool_1_accum) combiner(combiner)
+static void my_float_bool_1_accum(int *accum, float a, bool b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float_rs_matrix2x2_0) accumulator(my_float_rs_matrix2x2_0_accum) combiner(combiner)
+static void my_float_rs_matrix2x2_0_accum(int *accum, float a, rs_matrix2x2 b) { }
+
+#pragma rs reduce(my_float_rs_matrix2x2_1) accumulator(my_float_rs_matrix2x2_1_accum) combiner(combiner)
+static void my_float_rs_matrix2x2_1_accum(int *accum, float a, rs_matrix2x2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float_MyStruct_0) accumulator(my_float_MyStruct_0_accum) combiner(combiner)
+static void my_float_MyStruct_0_accum(int *accum, float a, MyStruct b) { }
+
+#pragma rs reduce(my_float_MyStruct_1) accumulator(my_float_MyStruct_1_accum) combiner(combiner)
+static void my_float_MyStruct_1_accum(int *accum, float a, MyStruct b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float2_half_0) accumulator(my_float2_half_0_accum) combiner(combiner)
+static void my_float2_half_0_accum(int *accum, float2 a, half b) { }
+
+#pragma rs reduce(my_float2_half_1) accumulator(my_float2_half_1_accum) combiner(combiner)
+static void my_float2_half_1_accum(int *accum, float2 a, half b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float2_half2_0) accumulator(my_float2_half2_0_accum) combiner(combiner)
+static void my_float2_half2_0_accum(int *accum, float2 a, half2 b) { }
+
+#pragma rs reduce(my_float2_half2_1) accumulator(my_float2_half2_1_accum) combiner(combiner)
+static void my_float2_half2_1_accum(int *accum, float2 a, half2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float2_half4_0) accumulator(my_float2_half4_0_accum) combiner(combiner)
+static void my_float2_half4_0_accum(int *accum, float2 a, half4 b) { }
+
+#pragma rs reduce(my_float2_half4_1) accumulator(my_float2_half4_1_accum) combiner(combiner)
+static void my_float2_half4_1_accum(int *accum, float2 a, half4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float2_float_0) accumulator(my_float2_float_0_accum) combiner(combiner)
+static void my_float2_float_0_accum(int *accum, float2 a, float b) { }
+
+#pragma rs reduce(my_float2_float_1) accumulator(my_float2_float_1_accum) combiner(combiner)
+static void my_float2_float_1_accum(int *accum, float2 a, float b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float2_float2_0) accumulator(my_float2_float2_0_accum) combiner(combiner)
+static void my_float2_float2_0_accum(int *accum, float2 a, float2 b) { }
+
+#pragma rs reduce(my_float2_float2_1) accumulator(my_float2_float2_1_accum) combiner(combiner)
+static void my_float2_float2_1_accum(int *accum, float2 a, float2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float2_float4_0) accumulator(my_float2_float4_0_accum) combiner(combiner)
+static void my_float2_float4_0_accum(int *accum, float2 a, float4 b) { }
+
+#pragma rs reduce(my_float2_float4_1) accumulator(my_float2_float4_1_accum) combiner(combiner)
+static void my_float2_float4_1_accum(int *accum, float2 a, float4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float2_char_0) accumulator(my_float2_char_0_accum) combiner(combiner)
+static void my_float2_char_0_accum(int *accum, float2 a, char b) { }
+
+#pragma rs reduce(my_float2_char_1) accumulator(my_float2_char_1_accum) combiner(combiner)
+static void my_float2_char_1_accum(int *accum, float2 a, char b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float2_char2_0) accumulator(my_float2_char2_0_accum) combiner(combiner)
+static void my_float2_char2_0_accum(int *accum, float2 a, char2 b) { }
+
+#pragma rs reduce(my_float2_char2_1) accumulator(my_float2_char2_1_accum) combiner(combiner)
+static void my_float2_char2_1_accum(int *accum, float2 a, char2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float2_char4_0) accumulator(my_float2_char4_0_accum) combiner(combiner)
+static void my_float2_char4_0_accum(int *accum, float2 a, char4 b) { }
+
+#pragma rs reduce(my_float2_char4_1) accumulator(my_float2_char4_1_accum) combiner(combiner)
+static void my_float2_char4_1_accum(int *accum, float2 a, char4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float2_short_0) accumulator(my_float2_short_0_accum) combiner(combiner)
+static void my_float2_short_0_accum(int *accum, float2 a, short b) { }
+
+#pragma rs reduce(my_float2_short_1) accumulator(my_float2_short_1_accum) combiner(combiner)
+static void my_float2_short_1_accum(int *accum, float2 a, short b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float2_short2_0) accumulator(my_float2_short2_0_accum) combiner(combiner)
+static void my_float2_short2_0_accum(int *accum, float2 a, short2 b) { }
+
+#pragma rs reduce(my_float2_short2_1) accumulator(my_float2_short2_1_accum) combiner(combiner)
+static void my_float2_short2_1_accum(int *accum, float2 a, short2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float2_short4_0) accumulator(my_float2_short4_0_accum) combiner(combiner)
+static void my_float2_short4_0_accum(int *accum, float2 a, short4 b) { }
+
+#pragma rs reduce(my_float2_short4_1) accumulator(my_float2_short4_1_accum) combiner(combiner)
+static void my_float2_short4_1_accum(int *accum, float2 a, short4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float2_uchar_0) accumulator(my_float2_uchar_0_accum) combiner(combiner)
+static void my_float2_uchar_0_accum(int *accum, float2 a, uchar b) { }
+
+#pragma rs reduce(my_float2_uchar_1) accumulator(my_float2_uchar_1_accum) combiner(combiner)
+static void my_float2_uchar_1_accum(int *accum, float2 a, uchar b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float2_uchar2_0) accumulator(my_float2_uchar2_0_accum) combiner(combiner)
+static void my_float2_uchar2_0_accum(int *accum, float2 a, uchar2 b) { }
+
+#pragma rs reduce(my_float2_uchar2_1) accumulator(my_float2_uchar2_1_accum) combiner(combiner)
+static void my_float2_uchar2_1_accum(int *accum, float2 a, uchar2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float2_uchar4_0) accumulator(my_float2_uchar4_0_accum) combiner(combiner)
+static void my_float2_uchar4_0_accum(int *accum, float2 a, uchar4 b) { }
+
+#pragma rs reduce(my_float2_uchar4_1) accumulator(my_float2_uchar4_1_accum) combiner(combiner)
+static void my_float2_uchar4_1_accum(int *accum, float2 a, uchar4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float2_ushort_0) accumulator(my_float2_ushort_0_accum) combiner(combiner)
+static void my_float2_ushort_0_accum(int *accum, float2 a, ushort b) { }
+
+#pragma rs reduce(my_float2_ushort_1) accumulator(my_float2_ushort_1_accum) combiner(combiner)
+static void my_float2_ushort_1_accum(int *accum, float2 a, ushort b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float2_ushort2_0) accumulator(my_float2_ushort2_0_accum) combiner(combiner)
+static void my_float2_ushort2_0_accum(int *accum, float2 a, ushort2 b) { }
+
+#pragma rs reduce(my_float2_ushort2_1) accumulator(my_float2_ushort2_1_accum) combiner(combiner)
+static void my_float2_ushort2_1_accum(int *accum, float2 a, ushort2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float2_ushort4_0) accumulator(my_float2_ushort4_0_accum) combiner(combiner)
+static void my_float2_ushort4_0_accum(int *accum, float2 a, ushort4 b) { }
+
+#pragma rs reduce(my_float2_ushort4_1) accumulator(my_float2_ushort4_1_accum) combiner(combiner)
+static void my_float2_ushort4_1_accum(int *accum, float2 a, ushort4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float2_bool_0) accumulator(my_float2_bool_0_accum) combiner(combiner)
+static void my_float2_bool_0_accum(int *accum, float2 a, bool b) { }
+
+#pragma rs reduce(my_float2_bool_1) accumulator(my_float2_bool_1_accum) combiner(combiner)
+static void my_float2_bool_1_accum(int *accum, float2 a, bool b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float2_rs_matrix2x2_0) accumulator(my_float2_rs_matrix2x2_0_accum) combiner(combiner)
+static void my_float2_rs_matrix2x2_0_accum(int *accum, float2 a, rs_matrix2x2 b) { }
+
+#pragma rs reduce(my_float2_rs_matrix2x2_1) accumulator(my_float2_rs_matrix2x2_1_accum) combiner(combiner)
+static void my_float2_rs_matrix2x2_1_accum(int *accum, float2 a, rs_matrix2x2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float2_MyStruct_0) accumulator(my_float2_MyStruct_0_accum) combiner(combiner)
+static void my_float2_MyStruct_0_accum(int *accum, float2 a, MyStruct b) { }
+
+#pragma rs reduce(my_float2_MyStruct_1) accumulator(my_float2_MyStruct_1_accum) combiner(combiner)
+static void my_float2_MyStruct_1_accum(int *accum, float2 a, MyStruct b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float4_half_0) accumulator(my_float4_half_0_accum) combiner(combiner)
+static void my_float4_half_0_accum(int *accum, float4 a, half b) { }
+
+#pragma rs reduce(my_float4_half_1) accumulator(my_float4_half_1_accum) combiner(combiner)
+static void my_float4_half_1_accum(int *accum, float4 a, half b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float4_half2_0) accumulator(my_float4_half2_0_accum) combiner(combiner)
+static void my_float4_half2_0_accum(int *accum, float4 a, half2 b) { }
+
+#pragma rs reduce(my_float4_half2_1) accumulator(my_float4_half2_1_accum) combiner(combiner)
+static void my_float4_half2_1_accum(int *accum, float4 a, half2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float4_half4_0) accumulator(my_float4_half4_0_accum) combiner(combiner)
+static void my_float4_half4_0_accum(int *accum, float4 a, half4 b) { }
+
+#pragma rs reduce(my_float4_half4_1) accumulator(my_float4_half4_1_accum) combiner(combiner)
+static void my_float4_half4_1_accum(int *accum, float4 a, half4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float4_float_0) accumulator(my_float4_float_0_accum) combiner(combiner)
+static void my_float4_float_0_accum(int *accum, float4 a, float b) { }
+
+#pragma rs reduce(my_float4_float_1) accumulator(my_float4_float_1_accum) combiner(combiner)
+static void my_float4_float_1_accum(int *accum, float4 a, float b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float4_float2_0) accumulator(my_float4_float2_0_accum) combiner(combiner)
+static void my_float4_float2_0_accum(int *accum, float4 a, float2 b) { }
+
+#pragma rs reduce(my_float4_float2_1) accumulator(my_float4_float2_1_accum) combiner(combiner)
+static void my_float4_float2_1_accum(int *accum, float4 a, float2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float4_float4_0) accumulator(my_float4_float4_0_accum) combiner(combiner)
+static void my_float4_float4_0_accum(int *accum, float4 a, float4 b) { }
+
+#pragma rs reduce(my_float4_float4_1) accumulator(my_float4_float4_1_accum) combiner(combiner)
+static void my_float4_float4_1_accum(int *accum, float4 a, float4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float4_char_0) accumulator(my_float4_char_0_accum) combiner(combiner)
+static void my_float4_char_0_accum(int *accum, float4 a, char b) { }
+
+#pragma rs reduce(my_float4_char_1) accumulator(my_float4_char_1_accum) combiner(combiner)
+static void my_float4_char_1_accum(int *accum, float4 a, char b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float4_char2_0) accumulator(my_float4_char2_0_accum) combiner(combiner)
+static void my_float4_char2_0_accum(int *accum, float4 a, char2 b) { }
+
+#pragma rs reduce(my_float4_char2_1) accumulator(my_float4_char2_1_accum) combiner(combiner)
+static void my_float4_char2_1_accum(int *accum, float4 a, char2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float4_char4_0) accumulator(my_float4_char4_0_accum) combiner(combiner)
+static void my_float4_char4_0_accum(int *accum, float4 a, char4 b) { }
+
+#pragma rs reduce(my_float4_char4_1) accumulator(my_float4_char4_1_accum) combiner(combiner)
+static void my_float4_char4_1_accum(int *accum, float4 a, char4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float4_short_0) accumulator(my_float4_short_0_accum) combiner(combiner)
+static void my_float4_short_0_accum(int *accum, float4 a, short b) { }
+
+#pragma rs reduce(my_float4_short_1) accumulator(my_float4_short_1_accum) combiner(combiner)
+static void my_float4_short_1_accum(int *accum, float4 a, short b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float4_short2_0) accumulator(my_float4_short2_0_accum) combiner(combiner)
+static void my_float4_short2_0_accum(int *accum, float4 a, short2 b) { }
+
+#pragma rs reduce(my_float4_short2_1) accumulator(my_float4_short2_1_accum) combiner(combiner)
+static void my_float4_short2_1_accum(int *accum, float4 a, short2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float4_short4_0) accumulator(my_float4_short4_0_accum) combiner(combiner)
+static void my_float4_short4_0_accum(int *accum, float4 a, short4 b) { }
+
+#pragma rs reduce(my_float4_short4_1) accumulator(my_float4_short4_1_accum) combiner(combiner)
+static void my_float4_short4_1_accum(int *accum, float4 a, short4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float4_uchar_0) accumulator(my_float4_uchar_0_accum) combiner(combiner)
+static void my_float4_uchar_0_accum(int *accum, float4 a, uchar b) { }
+
+#pragma rs reduce(my_float4_uchar_1) accumulator(my_float4_uchar_1_accum) combiner(combiner)
+static void my_float4_uchar_1_accum(int *accum, float4 a, uchar b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float4_uchar2_0) accumulator(my_float4_uchar2_0_accum) combiner(combiner)
+static void my_float4_uchar2_0_accum(int *accum, float4 a, uchar2 b) { }
+
+#pragma rs reduce(my_float4_uchar2_1) accumulator(my_float4_uchar2_1_accum) combiner(combiner)
+static void my_float4_uchar2_1_accum(int *accum, float4 a, uchar2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float4_uchar4_0) accumulator(my_float4_uchar4_0_accum) combiner(combiner)
+static void my_float4_uchar4_0_accum(int *accum, float4 a, uchar4 b) { }
+
+#pragma rs reduce(my_float4_uchar4_1) accumulator(my_float4_uchar4_1_accum) combiner(combiner)
+static void my_float4_uchar4_1_accum(int *accum, float4 a, uchar4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float4_ushort_0) accumulator(my_float4_ushort_0_accum) combiner(combiner)
+static void my_float4_ushort_0_accum(int *accum, float4 a, ushort b) { }
+
+#pragma rs reduce(my_float4_ushort_1) accumulator(my_float4_ushort_1_accum) combiner(combiner)
+static void my_float4_ushort_1_accum(int *accum, float4 a, ushort b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float4_ushort2_0) accumulator(my_float4_ushort2_0_accum) combiner(combiner)
+static void my_float4_ushort2_0_accum(int *accum, float4 a, ushort2 b) { }
+
+#pragma rs reduce(my_float4_ushort2_1) accumulator(my_float4_ushort2_1_accum) combiner(combiner)
+static void my_float4_ushort2_1_accum(int *accum, float4 a, ushort2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float4_ushort4_0) accumulator(my_float4_ushort4_0_accum) combiner(combiner)
+static void my_float4_ushort4_0_accum(int *accum, float4 a, ushort4 b) { }
+
+#pragma rs reduce(my_float4_ushort4_1) accumulator(my_float4_ushort4_1_accum) combiner(combiner)
+static void my_float4_ushort4_1_accum(int *accum, float4 a, ushort4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float4_bool_0) accumulator(my_float4_bool_0_accum) combiner(combiner)
+static void my_float4_bool_0_accum(int *accum, float4 a, bool b) { }
+
+#pragma rs reduce(my_float4_bool_1) accumulator(my_float4_bool_1_accum) combiner(combiner)
+static void my_float4_bool_1_accum(int *accum, float4 a, bool b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float4_rs_matrix2x2_0) accumulator(my_float4_rs_matrix2x2_0_accum) combiner(combiner)
+static void my_float4_rs_matrix2x2_0_accum(int *accum, float4 a, rs_matrix2x2 b) { }
+
+#pragma rs reduce(my_float4_rs_matrix2x2_1) accumulator(my_float4_rs_matrix2x2_1_accum) combiner(combiner)
+static void my_float4_rs_matrix2x2_1_accum(int *accum, float4 a, rs_matrix2x2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_float4_MyStruct_0) accumulator(my_float4_MyStruct_0_accum) combiner(combiner)
+static void my_float4_MyStruct_0_accum(int *accum, float4 a, MyStruct b) { }
+
+#pragma rs reduce(my_float4_MyStruct_1) accumulator(my_float4_MyStruct_1_accum) combiner(combiner)
+static void my_float4_MyStruct_1_accum(int *accum, float4 a, MyStruct b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char_half_0) accumulator(my_char_half_0_accum) combiner(combiner)
+static void my_char_half_0_accum(int *accum, char a, half b) { }
+
+#pragma rs reduce(my_char_half_1) accumulator(my_char_half_1_accum) combiner(combiner)
+static void my_char_half_1_accum(int *accum, char a, half b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char_half2_0) accumulator(my_char_half2_0_accum) combiner(combiner)
+static void my_char_half2_0_accum(int *accum, char a, half2 b) { }
+
+#pragma rs reduce(my_char_half2_1) accumulator(my_char_half2_1_accum) combiner(combiner)
+static void my_char_half2_1_accum(int *accum, char a, half2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char_half4_0) accumulator(my_char_half4_0_accum) combiner(combiner)
+static void my_char_half4_0_accum(int *accum, char a, half4 b) { }
+
+#pragma rs reduce(my_char_half4_1) accumulator(my_char_half4_1_accum) combiner(combiner)
+static void my_char_half4_1_accum(int *accum, char a, half4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char_float_0) accumulator(my_char_float_0_accum) combiner(combiner)
+static void my_char_float_0_accum(int *accum, char a, float b) { }
+
+#pragma rs reduce(my_char_float_1) accumulator(my_char_float_1_accum) combiner(combiner)
+static void my_char_float_1_accum(int *accum, char a, float b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char_float2_0) accumulator(my_char_float2_0_accum) combiner(combiner)
+static void my_char_float2_0_accum(int *accum, char a, float2 b) { }
+
+#pragma rs reduce(my_char_float2_1) accumulator(my_char_float2_1_accum) combiner(combiner)
+static void my_char_float2_1_accum(int *accum, char a, float2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char_float4_0) accumulator(my_char_float4_0_accum) combiner(combiner)
+static void my_char_float4_0_accum(int *accum, char a, float4 b) { }
+
+#pragma rs reduce(my_char_float4_1) accumulator(my_char_float4_1_accum) combiner(combiner)
+static void my_char_float4_1_accum(int *accum, char a, float4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char_char_0) accumulator(my_char_char_0_accum) combiner(combiner)
+static void my_char_char_0_accum(int *accum, char a, char b) { }
+
+#pragma rs reduce(my_char_char_1) accumulator(my_char_char_1_accum) combiner(combiner)
+static void my_char_char_1_accum(int *accum, char a, char b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char_char2_0) accumulator(my_char_char2_0_accum) combiner(combiner)
+static void my_char_char2_0_accum(int *accum, char a, char2 b) { }
+
+#pragma rs reduce(my_char_char2_1) accumulator(my_char_char2_1_accum) combiner(combiner)
+static void my_char_char2_1_accum(int *accum, char a, char2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char_char4_0) accumulator(my_char_char4_0_accum) combiner(combiner)
+static void my_char_char4_0_accum(int *accum, char a, char4 b) { }
+
+#pragma rs reduce(my_char_char4_1) accumulator(my_char_char4_1_accum) combiner(combiner)
+static void my_char_char4_1_accum(int *accum, char a, char4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char_short_0) accumulator(my_char_short_0_accum) combiner(combiner)
+static void my_char_short_0_accum(int *accum, char a, short b) { }
+
+#pragma rs reduce(my_char_short_1) accumulator(my_char_short_1_accum) combiner(combiner)
+static void my_char_short_1_accum(int *accum, char a, short b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char_short2_0) accumulator(my_char_short2_0_accum) combiner(combiner)
+static void my_char_short2_0_accum(int *accum, char a, short2 b) { }
+
+#pragma rs reduce(my_char_short2_1) accumulator(my_char_short2_1_accum) combiner(combiner)
+static void my_char_short2_1_accum(int *accum, char a, short2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char_short4_0) accumulator(my_char_short4_0_accum) combiner(combiner)
+static void my_char_short4_0_accum(int *accum, char a, short4 b) { }
+
+#pragma rs reduce(my_char_short4_1) accumulator(my_char_short4_1_accum) combiner(combiner)
+static void my_char_short4_1_accum(int *accum, char a, short4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char_uchar_0) accumulator(my_char_uchar_0_accum) combiner(combiner)
+static void my_char_uchar_0_accum(int *accum, char a, uchar b) { }
+
+#pragma rs reduce(my_char_uchar_1) accumulator(my_char_uchar_1_accum) combiner(combiner)
+static void my_char_uchar_1_accum(int *accum, char a, uchar b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char_uchar2_0) accumulator(my_char_uchar2_0_accum) combiner(combiner)
+static void my_char_uchar2_0_accum(int *accum, char a, uchar2 b) { }
+
+#pragma rs reduce(my_char_uchar2_1) accumulator(my_char_uchar2_1_accum) combiner(combiner)
+static void my_char_uchar2_1_accum(int *accum, char a, uchar2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char_uchar4_0) accumulator(my_char_uchar4_0_accum) combiner(combiner)
+static void my_char_uchar4_0_accum(int *accum, char a, uchar4 b) { }
+
+#pragma rs reduce(my_char_uchar4_1) accumulator(my_char_uchar4_1_accum) combiner(combiner)
+static void my_char_uchar4_1_accum(int *accum, char a, uchar4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char_ushort_0) accumulator(my_char_ushort_0_accum) combiner(combiner)
+static void my_char_ushort_0_accum(int *accum, char a, ushort b) { }
+
+#pragma rs reduce(my_char_ushort_1) accumulator(my_char_ushort_1_accum) combiner(combiner)
+static void my_char_ushort_1_accum(int *accum, char a, ushort b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char_ushort2_0) accumulator(my_char_ushort2_0_accum) combiner(combiner)
+static void my_char_ushort2_0_accum(int *accum, char a, ushort2 b) { }
+
+#pragma rs reduce(my_char_ushort2_1) accumulator(my_char_ushort2_1_accum) combiner(combiner)
+static void my_char_ushort2_1_accum(int *accum, char a, ushort2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char_ushort4_0) accumulator(my_char_ushort4_0_accum) combiner(combiner)
+static void my_char_ushort4_0_accum(int *accum, char a, ushort4 b) { }
+
+#pragma rs reduce(my_char_ushort4_1) accumulator(my_char_ushort4_1_accum) combiner(combiner)
+static void my_char_ushort4_1_accum(int *accum, char a, ushort4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char_bool_0) accumulator(my_char_bool_0_accum) combiner(combiner)
+static void my_char_bool_0_accum(int *accum, char a, bool b) { }
+
+#pragma rs reduce(my_char_bool_1) accumulator(my_char_bool_1_accum) combiner(combiner)
+static void my_char_bool_1_accum(int *accum, char a, bool b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char_rs_matrix2x2_0) accumulator(my_char_rs_matrix2x2_0_accum) combiner(combiner)
+static void my_char_rs_matrix2x2_0_accum(int *accum, char a, rs_matrix2x2 b) { }
+
+#pragma rs reduce(my_char_rs_matrix2x2_1) accumulator(my_char_rs_matrix2x2_1_accum) combiner(combiner)
+static void my_char_rs_matrix2x2_1_accum(int *accum, char a, rs_matrix2x2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char_MyStruct_0) accumulator(my_char_MyStruct_0_accum) combiner(combiner)
+static void my_char_MyStruct_0_accum(int *accum, char a, MyStruct b) { }
+
+#pragma rs reduce(my_char_MyStruct_1) accumulator(my_char_MyStruct_1_accum) combiner(combiner)
+static void my_char_MyStruct_1_accum(int *accum, char a, MyStruct b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char2_half_0) accumulator(my_char2_half_0_accum) combiner(combiner)
+static void my_char2_half_0_accum(int *accum, char2 a, half b) { }
+
+#pragma rs reduce(my_char2_half_1) accumulator(my_char2_half_1_accum) combiner(combiner)
+static void my_char2_half_1_accum(int *accum, char2 a, half b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char2_half2_0) accumulator(my_char2_half2_0_accum) combiner(combiner)
+static void my_char2_half2_0_accum(int *accum, char2 a, half2 b) { }
+
+#pragma rs reduce(my_char2_half2_1) accumulator(my_char2_half2_1_accum) combiner(combiner)
+static void my_char2_half2_1_accum(int *accum, char2 a, half2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char2_half4_0) accumulator(my_char2_half4_0_accum) combiner(combiner)
+static void my_char2_half4_0_accum(int *accum, char2 a, half4 b) { }
+
+#pragma rs reduce(my_char2_half4_1) accumulator(my_char2_half4_1_accum) combiner(combiner)
+static void my_char2_half4_1_accum(int *accum, char2 a, half4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char2_float_0) accumulator(my_char2_float_0_accum) combiner(combiner)
+static void my_char2_float_0_accum(int *accum, char2 a, float b) { }
+
+#pragma rs reduce(my_char2_float_1) accumulator(my_char2_float_1_accum) combiner(combiner)
+static void my_char2_float_1_accum(int *accum, char2 a, float b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char2_float2_0) accumulator(my_char2_float2_0_accum) combiner(combiner)
+static void my_char2_float2_0_accum(int *accum, char2 a, float2 b) { }
+
+#pragma rs reduce(my_char2_float2_1) accumulator(my_char2_float2_1_accum) combiner(combiner)
+static void my_char2_float2_1_accum(int *accum, char2 a, float2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char2_float4_0) accumulator(my_char2_float4_0_accum) combiner(combiner)
+static void my_char2_float4_0_accum(int *accum, char2 a, float4 b) { }
+
+#pragma rs reduce(my_char2_float4_1) accumulator(my_char2_float4_1_accum) combiner(combiner)
+static void my_char2_float4_1_accum(int *accum, char2 a, float4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char2_char_0) accumulator(my_char2_char_0_accum) combiner(combiner)
+static void my_char2_char_0_accum(int *accum, char2 a, char b) { }
+
+#pragma rs reduce(my_char2_char_1) accumulator(my_char2_char_1_accum) combiner(combiner)
+static void my_char2_char_1_accum(int *accum, char2 a, char b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char2_char2_0) accumulator(my_char2_char2_0_accum) combiner(combiner)
+static void my_char2_char2_0_accum(int *accum, char2 a, char2 b) { }
+
+#pragma rs reduce(my_char2_char2_1) accumulator(my_char2_char2_1_accum) combiner(combiner)
+static void my_char2_char2_1_accum(int *accum, char2 a, char2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char2_char4_0) accumulator(my_char2_char4_0_accum) combiner(combiner)
+static void my_char2_char4_0_accum(int *accum, char2 a, char4 b) { }
+
+#pragma rs reduce(my_char2_char4_1) accumulator(my_char2_char4_1_accum) combiner(combiner)
+static void my_char2_char4_1_accum(int *accum, char2 a, char4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char2_short_0) accumulator(my_char2_short_0_accum) combiner(combiner)
+static void my_char2_short_0_accum(int *accum, char2 a, short b) { }
+
+#pragma rs reduce(my_char2_short_1) accumulator(my_char2_short_1_accum) combiner(combiner)
+static void my_char2_short_1_accum(int *accum, char2 a, short b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char2_short2_0) accumulator(my_char2_short2_0_accum) combiner(combiner)
+static void my_char2_short2_0_accum(int *accum, char2 a, short2 b) { }
+
+#pragma rs reduce(my_char2_short2_1) accumulator(my_char2_short2_1_accum) combiner(combiner)
+static void my_char2_short2_1_accum(int *accum, char2 a, short2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char2_short4_0) accumulator(my_char2_short4_0_accum) combiner(combiner)
+static void my_char2_short4_0_accum(int *accum, char2 a, short4 b) { }
+
+#pragma rs reduce(my_char2_short4_1) accumulator(my_char2_short4_1_accum) combiner(combiner)
+static void my_char2_short4_1_accum(int *accum, char2 a, short4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char2_uchar_0) accumulator(my_char2_uchar_0_accum) combiner(combiner)
+static void my_char2_uchar_0_accum(int *accum, char2 a, uchar b) { }
+
+#pragma rs reduce(my_char2_uchar_1) accumulator(my_char2_uchar_1_accum) combiner(combiner)
+static void my_char2_uchar_1_accum(int *accum, char2 a, uchar b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char2_uchar2_0) accumulator(my_char2_uchar2_0_accum) combiner(combiner)
+static void my_char2_uchar2_0_accum(int *accum, char2 a, uchar2 b) { }
+
+#pragma rs reduce(my_char2_uchar2_1) accumulator(my_char2_uchar2_1_accum) combiner(combiner)
+static void my_char2_uchar2_1_accum(int *accum, char2 a, uchar2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char2_uchar4_0) accumulator(my_char2_uchar4_0_accum) combiner(combiner)
+static void my_char2_uchar4_0_accum(int *accum, char2 a, uchar4 b) { }
+
+#pragma rs reduce(my_char2_uchar4_1) accumulator(my_char2_uchar4_1_accum) combiner(combiner)
+static void my_char2_uchar4_1_accum(int *accum, char2 a, uchar4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char2_ushort_0) accumulator(my_char2_ushort_0_accum) combiner(combiner)
+static void my_char2_ushort_0_accum(int *accum, char2 a, ushort b) { }
+
+#pragma rs reduce(my_char2_ushort_1) accumulator(my_char2_ushort_1_accum) combiner(combiner)
+static void my_char2_ushort_1_accum(int *accum, char2 a, ushort b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char2_ushort2_0) accumulator(my_char2_ushort2_0_accum) combiner(combiner)
+static void my_char2_ushort2_0_accum(int *accum, char2 a, ushort2 b) { }
+
+#pragma rs reduce(my_char2_ushort2_1) accumulator(my_char2_ushort2_1_accum) combiner(combiner)
+static void my_char2_ushort2_1_accum(int *accum, char2 a, ushort2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char2_ushort4_0) accumulator(my_char2_ushort4_0_accum) combiner(combiner)
+static void my_char2_ushort4_0_accum(int *accum, char2 a, ushort4 b) { }
+
+#pragma rs reduce(my_char2_ushort4_1) accumulator(my_char2_ushort4_1_accum) combiner(combiner)
+static void my_char2_ushort4_1_accum(int *accum, char2 a, ushort4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char2_bool_0) accumulator(my_char2_bool_0_accum) combiner(combiner)
+static void my_char2_bool_0_accum(int *accum, char2 a, bool b) { }
+
+#pragma rs reduce(my_char2_bool_1) accumulator(my_char2_bool_1_accum) combiner(combiner)
+static void my_char2_bool_1_accum(int *accum, char2 a, bool b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char2_rs_matrix2x2_0) accumulator(my_char2_rs_matrix2x2_0_accum) combiner(combiner)
+static void my_char2_rs_matrix2x2_0_accum(int *accum, char2 a, rs_matrix2x2 b) { }
+
+#pragma rs reduce(my_char2_rs_matrix2x2_1) accumulator(my_char2_rs_matrix2x2_1_accum) combiner(combiner)
+static void my_char2_rs_matrix2x2_1_accum(int *accum, char2 a, rs_matrix2x2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char2_MyStruct_0) accumulator(my_char2_MyStruct_0_accum) combiner(combiner)
+static void my_char2_MyStruct_0_accum(int *accum, char2 a, MyStruct b) { }
+
+#pragma rs reduce(my_char2_MyStruct_1) accumulator(my_char2_MyStruct_1_accum) combiner(combiner)
+static void my_char2_MyStruct_1_accum(int *accum, char2 a, MyStruct b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char4_half_0) accumulator(my_char4_half_0_accum) combiner(combiner)
+static void my_char4_half_0_accum(int *accum, char4 a, half b) { }
+
+#pragma rs reduce(my_char4_half_1) accumulator(my_char4_half_1_accum) combiner(combiner)
+static void my_char4_half_1_accum(int *accum, char4 a, half b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char4_half2_0) accumulator(my_char4_half2_0_accum) combiner(combiner)
+static void my_char4_half2_0_accum(int *accum, char4 a, half2 b) { }
+
+#pragma rs reduce(my_char4_half2_1) accumulator(my_char4_half2_1_accum) combiner(combiner)
+static void my_char4_half2_1_accum(int *accum, char4 a, half2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char4_half4_0) accumulator(my_char4_half4_0_accum) combiner(combiner)
+static void my_char4_half4_0_accum(int *accum, char4 a, half4 b) { }
+
+#pragma rs reduce(my_char4_half4_1) accumulator(my_char4_half4_1_accum) combiner(combiner)
+static void my_char4_half4_1_accum(int *accum, char4 a, half4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char4_float_0) accumulator(my_char4_float_0_accum) combiner(combiner)
+static void my_char4_float_0_accum(int *accum, char4 a, float b) { }
+
+#pragma rs reduce(my_char4_float_1) accumulator(my_char4_float_1_accum) combiner(combiner)
+static void my_char4_float_1_accum(int *accum, char4 a, float b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char4_float2_0) accumulator(my_char4_float2_0_accum) combiner(combiner)
+static void my_char4_float2_0_accum(int *accum, char4 a, float2 b) { }
+
+#pragma rs reduce(my_char4_float2_1) accumulator(my_char4_float2_1_accum) combiner(combiner)
+static void my_char4_float2_1_accum(int *accum, char4 a, float2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char4_float4_0) accumulator(my_char4_float4_0_accum) combiner(combiner)
+static void my_char4_float4_0_accum(int *accum, char4 a, float4 b) { }
+
+#pragma rs reduce(my_char4_float4_1) accumulator(my_char4_float4_1_accum) combiner(combiner)
+static void my_char4_float4_1_accum(int *accum, char4 a, float4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char4_char_0) accumulator(my_char4_char_0_accum) combiner(combiner)
+static void my_char4_char_0_accum(int *accum, char4 a, char b) { }
+
+#pragma rs reduce(my_char4_char_1) accumulator(my_char4_char_1_accum) combiner(combiner)
+static void my_char4_char_1_accum(int *accum, char4 a, char b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char4_char2_0) accumulator(my_char4_char2_0_accum) combiner(combiner)
+static void my_char4_char2_0_accum(int *accum, char4 a, char2 b) { }
+
+#pragma rs reduce(my_char4_char2_1) accumulator(my_char4_char2_1_accum) combiner(combiner)
+static void my_char4_char2_1_accum(int *accum, char4 a, char2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char4_char4_0) accumulator(my_char4_char4_0_accum) combiner(combiner)
+static void my_char4_char4_0_accum(int *accum, char4 a, char4 b) { }
+
+#pragma rs reduce(my_char4_char4_1) accumulator(my_char4_char4_1_accum) combiner(combiner)
+static void my_char4_char4_1_accum(int *accum, char4 a, char4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char4_short_0) accumulator(my_char4_short_0_accum) combiner(combiner)
+static void my_char4_short_0_accum(int *accum, char4 a, short b) { }
+
+#pragma rs reduce(my_char4_short_1) accumulator(my_char4_short_1_accum) combiner(combiner)
+static void my_char4_short_1_accum(int *accum, char4 a, short b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char4_short2_0) accumulator(my_char4_short2_0_accum) combiner(combiner)
+static void my_char4_short2_0_accum(int *accum, char4 a, short2 b) { }
+
+#pragma rs reduce(my_char4_short2_1) accumulator(my_char4_short2_1_accum) combiner(combiner)
+static void my_char4_short2_1_accum(int *accum, char4 a, short2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char4_short4_0) accumulator(my_char4_short4_0_accum) combiner(combiner)
+static void my_char4_short4_0_accum(int *accum, char4 a, short4 b) { }
+
+#pragma rs reduce(my_char4_short4_1) accumulator(my_char4_short4_1_accum) combiner(combiner)
+static void my_char4_short4_1_accum(int *accum, char4 a, short4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char4_uchar_0) accumulator(my_char4_uchar_0_accum) combiner(combiner)
+static void my_char4_uchar_0_accum(int *accum, char4 a, uchar b) { }
+
+#pragma rs reduce(my_char4_uchar_1) accumulator(my_char4_uchar_1_accum) combiner(combiner)
+static void my_char4_uchar_1_accum(int *accum, char4 a, uchar b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char4_uchar2_0) accumulator(my_char4_uchar2_0_accum) combiner(combiner)
+static void my_char4_uchar2_0_accum(int *accum, char4 a, uchar2 b) { }
+
+#pragma rs reduce(my_char4_uchar2_1) accumulator(my_char4_uchar2_1_accum) combiner(combiner)
+static void my_char4_uchar2_1_accum(int *accum, char4 a, uchar2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char4_uchar4_0) accumulator(my_char4_uchar4_0_accum) combiner(combiner)
+static void my_char4_uchar4_0_accum(int *accum, char4 a, uchar4 b) { }
+
+#pragma rs reduce(my_char4_uchar4_1) accumulator(my_char4_uchar4_1_accum) combiner(combiner)
+static void my_char4_uchar4_1_accum(int *accum, char4 a, uchar4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char4_ushort_0) accumulator(my_char4_ushort_0_accum) combiner(combiner)
+static void my_char4_ushort_0_accum(int *accum, char4 a, ushort b) { }
+
+#pragma rs reduce(my_char4_ushort_1) accumulator(my_char4_ushort_1_accum) combiner(combiner)
+static void my_char4_ushort_1_accum(int *accum, char4 a, ushort b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char4_ushort2_0) accumulator(my_char4_ushort2_0_accum) combiner(combiner)
+static void my_char4_ushort2_0_accum(int *accum, char4 a, ushort2 b) { }
+
+#pragma rs reduce(my_char4_ushort2_1) accumulator(my_char4_ushort2_1_accum) combiner(combiner)
+static void my_char4_ushort2_1_accum(int *accum, char4 a, ushort2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char4_ushort4_0) accumulator(my_char4_ushort4_0_accum) combiner(combiner)
+static void my_char4_ushort4_0_accum(int *accum, char4 a, ushort4 b) { }
+
+#pragma rs reduce(my_char4_ushort4_1) accumulator(my_char4_ushort4_1_accum) combiner(combiner)
+static void my_char4_ushort4_1_accum(int *accum, char4 a, ushort4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char4_bool_0) accumulator(my_char4_bool_0_accum) combiner(combiner)
+static void my_char4_bool_0_accum(int *accum, char4 a, bool b) { }
+
+#pragma rs reduce(my_char4_bool_1) accumulator(my_char4_bool_1_accum) combiner(combiner)
+static void my_char4_bool_1_accum(int *accum, char4 a, bool b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char4_rs_matrix2x2_0) accumulator(my_char4_rs_matrix2x2_0_accum) combiner(combiner)
+static void my_char4_rs_matrix2x2_0_accum(int *accum, char4 a, rs_matrix2x2 b) { }
+
+#pragma rs reduce(my_char4_rs_matrix2x2_1) accumulator(my_char4_rs_matrix2x2_1_accum) combiner(combiner)
+static void my_char4_rs_matrix2x2_1_accum(int *accum, char4 a, rs_matrix2x2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_char4_MyStruct_0) accumulator(my_char4_MyStruct_0_accum) combiner(combiner)
+static void my_char4_MyStruct_0_accum(int *accum, char4 a, MyStruct b) { }
+
+#pragma rs reduce(my_char4_MyStruct_1) accumulator(my_char4_MyStruct_1_accum) combiner(combiner)
+static void my_char4_MyStruct_1_accum(int *accum, char4 a, MyStruct b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short_half_0) accumulator(my_short_half_0_accum) combiner(combiner)
+static void my_short_half_0_accum(int *accum, short a, half b) { }
+
+#pragma rs reduce(my_short_half_1) accumulator(my_short_half_1_accum) combiner(combiner)
+static void my_short_half_1_accum(int *accum, short a, half b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short_half2_0) accumulator(my_short_half2_0_accum) combiner(combiner)
+static void my_short_half2_0_accum(int *accum, short a, half2 b) { }
+
+#pragma rs reduce(my_short_half2_1) accumulator(my_short_half2_1_accum) combiner(combiner)
+static void my_short_half2_1_accum(int *accum, short a, half2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short_half4_0) accumulator(my_short_half4_0_accum) combiner(combiner)
+static void my_short_half4_0_accum(int *accum, short a, half4 b) { }
+
+#pragma rs reduce(my_short_half4_1) accumulator(my_short_half4_1_accum) combiner(combiner)
+static void my_short_half4_1_accum(int *accum, short a, half4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short_float_0) accumulator(my_short_float_0_accum) combiner(combiner)
+static void my_short_float_0_accum(int *accum, short a, float b) { }
+
+#pragma rs reduce(my_short_float_1) accumulator(my_short_float_1_accum) combiner(combiner)
+static void my_short_float_1_accum(int *accum, short a, float b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short_float2_0) accumulator(my_short_float2_0_accum) combiner(combiner)
+static void my_short_float2_0_accum(int *accum, short a, float2 b) { }
+
+#pragma rs reduce(my_short_float2_1) accumulator(my_short_float2_1_accum) combiner(combiner)
+static void my_short_float2_1_accum(int *accum, short a, float2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short_float4_0) accumulator(my_short_float4_0_accum) combiner(combiner)
+static void my_short_float4_0_accum(int *accum, short a, float4 b) { }
+
+#pragma rs reduce(my_short_float4_1) accumulator(my_short_float4_1_accum) combiner(combiner)
+static void my_short_float4_1_accum(int *accum, short a, float4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short_char_0) accumulator(my_short_char_0_accum) combiner(combiner)
+static void my_short_char_0_accum(int *accum, short a, char b) { }
+
+#pragma rs reduce(my_short_char_1) accumulator(my_short_char_1_accum) combiner(combiner)
+static void my_short_char_1_accum(int *accum, short a, char b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short_char2_0) accumulator(my_short_char2_0_accum) combiner(combiner)
+static void my_short_char2_0_accum(int *accum, short a, char2 b) { }
+
+#pragma rs reduce(my_short_char2_1) accumulator(my_short_char2_1_accum) combiner(combiner)
+static void my_short_char2_1_accum(int *accum, short a, char2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short_char4_0) accumulator(my_short_char4_0_accum) combiner(combiner)
+static void my_short_char4_0_accum(int *accum, short a, char4 b) { }
+
+#pragma rs reduce(my_short_char4_1) accumulator(my_short_char4_1_accum) combiner(combiner)
+static void my_short_char4_1_accum(int *accum, short a, char4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short_short_0) accumulator(my_short_short_0_accum) combiner(combiner)
+static void my_short_short_0_accum(int *accum, short a, short b) { }
+
+#pragma rs reduce(my_short_short_1) accumulator(my_short_short_1_accum) combiner(combiner)
+static void my_short_short_1_accum(int *accum, short a, short b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short_short2_0) accumulator(my_short_short2_0_accum) combiner(combiner)
+static void my_short_short2_0_accum(int *accum, short a, short2 b) { }
+
+#pragma rs reduce(my_short_short2_1) accumulator(my_short_short2_1_accum) combiner(combiner)
+static void my_short_short2_1_accum(int *accum, short a, short2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short_short4_0) accumulator(my_short_short4_0_accum) combiner(combiner)
+static void my_short_short4_0_accum(int *accum, short a, short4 b) { }
+
+#pragma rs reduce(my_short_short4_1) accumulator(my_short_short4_1_accum) combiner(combiner)
+static void my_short_short4_1_accum(int *accum, short a, short4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short_uchar_0) accumulator(my_short_uchar_0_accum) combiner(combiner)
+static void my_short_uchar_0_accum(int *accum, short a, uchar b) { }
+
+#pragma rs reduce(my_short_uchar_1) accumulator(my_short_uchar_1_accum) combiner(combiner)
+static void my_short_uchar_1_accum(int *accum, short a, uchar b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short_uchar2_0) accumulator(my_short_uchar2_0_accum) combiner(combiner)
+static void my_short_uchar2_0_accum(int *accum, short a, uchar2 b) { }
+
+#pragma rs reduce(my_short_uchar2_1) accumulator(my_short_uchar2_1_accum) combiner(combiner)
+static void my_short_uchar2_1_accum(int *accum, short a, uchar2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short_uchar4_0) accumulator(my_short_uchar4_0_accum) combiner(combiner)
+static void my_short_uchar4_0_accum(int *accum, short a, uchar4 b) { }
+
+#pragma rs reduce(my_short_uchar4_1) accumulator(my_short_uchar4_1_accum) combiner(combiner)
+static void my_short_uchar4_1_accum(int *accum, short a, uchar4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short_ushort_0) accumulator(my_short_ushort_0_accum) combiner(combiner)
+static void my_short_ushort_0_accum(int *accum, short a, ushort b) { }
+
+#pragma rs reduce(my_short_ushort_1) accumulator(my_short_ushort_1_accum) combiner(combiner)
+static void my_short_ushort_1_accum(int *accum, short a, ushort b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short_ushort2_0) accumulator(my_short_ushort2_0_accum) combiner(combiner)
+static void my_short_ushort2_0_accum(int *accum, short a, ushort2 b) { }
+
+#pragma rs reduce(my_short_ushort2_1) accumulator(my_short_ushort2_1_accum) combiner(combiner)
+static void my_short_ushort2_1_accum(int *accum, short a, ushort2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short_ushort4_0) accumulator(my_short_ushort4_0_accum) combiner(combiner)
+static void my_short_ushort4_0_accum(int *accum, short a, ushort4 b) { }
+
+#pragma rs reduce(my_short_ushort4_1) accumulator(my_short_ushort4_1_accum) combiner(combiner)
+static void my_short_ushort4_1_accum(int *accum, short a, ushort4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short_bool_0) accumulator(my_short_bool_0_accum) combiner(combiner)
+static void my_short_bool_0_accum(int *accum, short a, bool b) { }
+
+#pragma rs reduce(my_short_bool_1) accumulator(my_short_bool_1_accum) combiner(combiner)
+static void my_short_bool_1_accum(int *accum, short a, bool b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short_rs_matrix2x2_0) accumulator(my_short_rs_matrix2x2_0_accum) combiner(combiner)
+static void my_short_rs_matrix2x2_0_accum(int *accum, short a, rs_matrix2x2 b) { }
+
+#pragma rs reduce(my_short_rs_matrix2x2_1) accumulator(my_short_rs_matrix2x2_1_accum) combiner(combiner)
+static void my_short_rs_matrix2x2_1_accum(int *accum, short a, rs_matrix2x2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short_MyStruct_0) accumulator(my_short_MyStruct_0_accum) combiner(combiner)
+static void my_short_MyStruct_0_accum(int *accum, short a, MyStruct b) { }
+
+#pragma rs reduce(my_short_MyStruct_1) accumulator(my_short_MyStruct_1_accum) combiner(combiner)
+static void my_short_MyStruct_1_accum(int *accum, short a, MyStruct b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short2_half_0) accumulator(my_short2_half_0_accum) combiner(combiner)
+static void my_short2_half_0_accum(int *accum, short2 a, half b) { }
+
+#pragma rs reduce(my_short2_half_1) accumulator(my_short2_half_1_accum) combiner(combiner)
+static void my_short2_half_1_accum(int *accum, short2 a, half b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short2_half2_0) accumulator(my_short2_half2_0_accum) combiner(combiner)
+static void my_short2_half2_0_accum(int *accum, short2 a, half2 b) { }
+
+#pragma rs reduce(my_short2_half2_1) accumulator(my_short2_half2_1_accum) combiner(combiner)
+static void my_short2_half2_1_accum(int *accum, short2 a, half2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short2_half4_0) accumulator(my_short2_half4_0_accum) combiner(combiner)
+static void my_short2_half4_0_accum(int *accum, short2 a, half4 b) { }
+
+#pragma rs reduce(my_short2_half4_1) accumulator(my_short2_half4_1_accum) combiner(combiner)
+static void my_short2_half4_1_accum(int *accum, short2 a, half4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short2_float_0) accumulator(my_short2_float_0_accum) combiner(combiner)
+static void my_short2_float_0_accum(int *accum, short2 a, float b) { }
+
+#pragma rs reduce(my_short2_float_1) accumulator(my_short2_float_1_accum) combiner(combiner)
+static void my_short2_float_1_accum(int *accum, short2 a, float b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short2_float2_0) accumulator(my_short2_float2_0_accum) combiner(combiner)
+static void my_short2_float2_0_accum(int *accum, short2 a, float2 b) { }
+
+#pragma rs reduce(my_short2_float2_1) accumulator(my_short2_float2_1_accum) combiner(combiner)
+static void my_short2_float2_1_accum(int *accum, short2 a, float2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short2_float4_0) accumulator(my_short2_float4_0_accum) combiner(combiner)
+static void my_short2_float4_0_accum(int *accum, short2 a, float4 b) { }
+
+#pragma rs reduce(my_short2_float4_1) accumulator(my_short2_float4_1_accum) combiner(combiner)
+static void my_short2_float4_1_accum(int *accum, short2 a, float4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short2_char_0) accumulator(my_short2_char_0_accum) combiner(combiner)
+static void my_short2_char_0_accum(int *accum, short2 a, char b) { }
+
+#pragma rs reduce(my_short2_char_1) accumulator(my_short2_char_1_accum) combiner(combiner)
+static void my_short2_char_1_accum(int *accum, short2 a, char b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short2_char2_0) accumulator(my_short2_char2_0_accum) combiner(combiner)
+static void my_short2_char2_0_accum(int *accum, short2 a, char2 b) { }
+
+#pragma rs reduce(my_short2_char2_1) accumulator(my_short2_char2_1_accum) combiner(combiner)
+static void my_short2_char2_1_accum(int *accum, short2 a, char2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short2_char4_0) accumulator(my_short2_char4_0_accum) combiner(combiner)
+static void my_short2_char4_0_accum(int *accum, short2 a, char4 b) { }
+
+#pragma rs reduce(my_short2_char4_1) accumulator(my_short2_char4_1_accum) combiner(combiner)
+static void my_short2_char4_1_accum(int *accum, short2 a, char4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short2_short_0) accumulator(my_short2_short_0_accum) combiner(combiner)
+static void my_short2_short_0_accum(int *accum, short2 a, short b) { }
+
+#pragma rs reduce(my_short2_short_1) accumulator(my_short2_short_1_accum) combiner(combiner)
+static void my_short2_short_1_accum(int *accum, short2 a, short b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short2_short2_0) accumulator(my_short2_short2_0_accum) combiner(combiner)
+static void my_short2_short2_0_accum(int *accum, short2 a, short2 b) { }
+
+#pragma rs reduce(my_short2_short2_1) accumulator(my_short2_short2_1_accum) combiner(combiner)
+static void my_short2_short2_1_accum(int *accum, short2 a, short2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short2_short4_0) accumulator(my_short2_short4_0_accum) combiner(combiner)
+static void my_short2_short4_0_accum(int *accum, short2 a, short4 b) { }
+
+#pragma rs reduce(my_short2_short4_1) accumulator(my_short2_short4_1_accum) combiner(combiner)
+static void my_short2_short4_1_accum(int *accum, short2 a, short4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short2_uchar_0) accumulator(my_short2_uchar_0_accum) combiner(combiner)
+static void my_short2_uchar_0_accum(int *accum, short2 a, uchar b) { }
+
+#pragma rs reduce(my_short2_uchar_1) accumulator(my_short2_uchar_1_accum) combiner(combiner)
+static void my_short2_uchar_1_accum(int *accum, short2 a, uchar b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short2_uchar2_0) accumulator(my_short2_uchar2_0_accum) combiner(combiner)
+static void my_short2_uchar2_0_accum(int *accum, short2 a, uchar2 b) { }
+
+#pragma rs reduce(my_short2_uchar2_1) accumulator(my_short2_uchar2_1_accum) combiner(combiner)
+static void my_short2_uchar2_1_accum(int *accum, short2 a, uchar2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short2_uchar4_0) accumulator(my_short2_uchar4_0_accum) combiner(combiner)
+static void my_short2_uchar4_0_accum(int *accum, short2 a, uchar4 b) { }
+
+#pragma rs reduce(my_short2_uchar4_1) accumulator(my_short2_uchar4_1_accum) combiner(combiner)
+static void my_short2_uchar4_1_accum(int *accum, short2 a, uchar4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short2_ushort_0) accumulator(my_short2_ushort_0_accum) combiner(combiner)
+static void my_short2_ushort_0_accum(int *accum, short2 a, ushort b) { }
+
+#pragma rs reduce(my_short2_ushort_1) accumulator(my_short2_ushort_1_accum) combiner(combiner)
+static void my_short2_ushort_1_accum(int *accum, short2 a, ushort b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short2_ushort2_0) accumulator(my_short2_ushort2_0_accum) combiner(combiner)
+static void my_short2_ushort2_0_accum(int *accum, short2 a, ushort2 b) { }
+
+#pragma rs reduce(my_short2_ushort2_1) accumulator(my_short2_ushort2_1_accum) combiner(combiner)
+static void my_short2_ushort2_1_accum(int *accum, short2 a, ushort2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short2_ushort4_0) accumulator(my_short2_ushort4_0_accum) combiner(combiner)
+static void my_short2_ushort4_0_accum(int *accum, short2 a, ushort4 b) { }
+
+#pragma rs reduce(my_short2_ushort4_1) accumulator(my_short2_ushort4_1_accum) combiner(combiner)
+static void my_short2_ushort4_1_accum(int *accum, short2 a, ushort4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short2_bool_0) accumulator(my_short2_bool_0_accum) combiner(combiner)
+static void my_short2_bool_0_accum(int *accum, short2 a, bool b) { }
+
+#pragma rs reduce(my_short2_bool_1) accumulator(my_short2_bool_1_accum) combiner(combiner)
+static void my_short2_bool_1_accum(int *accum, short2 a, bool b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short2_rs_matrix2x2_0) accumulator(my_short2_rs_matrix2x2_0_accum) combiner(combiner)
+static void my_short2_rs_matrix2x2_0_accum(int *accum, short2 a, rs_matrix2x2 b) { }
+
+#pragma rs reduce(my_short2_rs_matrix2x2_1) accumulator(my_short2_rs_matrix2x2_1_accum) combiner(combiner)
+static void my_short2_rs_matrix2x2_1_accum(int *accum, short2 a, rs_matrix2x2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short2_MyStruct_0) accumulator(my_short2_MyStruct_0_accum) combiner(combiner)
+static void my_short2_MyStruct_0_accum(int *accum, short2 a, MyStruct b) { }
+
+#pragma rs reduce(my_short2_MyStruct_1) accumulator(my_short2_MyStruct_1_accum) combiner(combiner)
+static void my_short2_MyStruct_1_accum(int *accum, short2 a, MyStruct b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short4_half_0) accumulator(my_short4_half_0_accum) combiner(combiner)
+static void my_short4_half_0_accum(int *accum, short4 a, half b) { }
+
+#pragma rs reduce(my_short4_half_1) accumulator(my_short4_half_1_accum) combiner(combiner)
+static void my_short4_half_1_accum(int *accum, short4 a, half b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short4_half2_0) accumulator(my_short4_half2_0_accum) combiner(combiner)
+static void my_short4_half2_0_accum(int *accum, short4 a, half2 b) { }
+
+#pragma rs reduce(my_short4_half2_1) accumulator(my_short4_half2_1_accum) combiner(combiner)
+static void my_short4_half2_1_accum(int *accum, short4 a, half2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short4_half4_0) accumulator(my_short4_half4_0_accum) combiner(combiner)
+static void my_short4_half4_0_accum(int *accum, short4 a, half4 b) { }
+
+#pragma rs reduce(my_short4_half4_1) accumulator(my_short4_half4_1_accum) combiner(combiner)
+static void my_short4_half4_1_accum(int *accum, short4 a, half4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short4_float_0) accumulator(my_short4_float_0_accum) combiner(combiner)
+static void my_short4_float_0_accum(int *accum, short4 a, float b) { }
+
+#pragma rs reduce(my_short4_float_1) accumulator(my_short4_float_1_accum) combiner(combiner)
+static void my_short4_float_1_accum(int *accum, short4 a, float b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short4_float2_0) accumulator(my_short4_float2_0_accum) combiner(combiner)
+static void my_short4_float2_0_accum(int *accum, short4 a, float2 b) { }
+
+#pragma rs reduce(my_short4_float2_1) accumulator(my_short4_float2_1_accum) combiner(combiner)
+static void my_short4_float2_1_accum(int *accum, short4 a, float2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short4_float4_0) accumulator(my_short4_float4_0_accum) combiner(combiner)
+static void my_short4_float4_0_accum(int *accum, short4 a, float4 b) { }
+
+#pragma rs reduce(my_short4_float4_1) accumulator(my_short4_float4_1_accum) combiner(combiner)
+static void my_short4_float4_1_accum(int *accum, short4 a, float4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short4_char_0) accumulator(my_short4_char_0_accum) combiner(combiner)
+static void my_short4_char_0_accum(int *accum, short4 a, char b) { }
+
+#pragma rs reduce(my_short4_char_1) accumulator(my_short4_char_1_accum) combiner(combiner)
+static void my_short4_char_1_accum(int *accum, short4 a, char b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short4_char2_0) accumulator(my_short4_char2_0_accum) combiner(combiner)
+static void my_short4_char2_0_accum(int *accum, short4 a, char2 b) { }
+
+#pragma rs reduce(my_short4_char2_1) accumulator(my_short4_char2_1_accum) combiner(combiner)
+static void my_short4_char2_1_accum(int *accum, short4 a, char2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short4_char4_0) accumulator(my_short4_char4_0_accum) combiner(combiner)
+static void my_short4_char4_0_accum(int *accum, short4 a, char4 b) { }
+
+#pragma rs reduce(my_short4_char4_1) accumulator(my_short4_char4_1_accum) combiner(combiner)
+static void my_short4_char4_1_accum(int *accum, short4 a, char4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short4_short_0) accumulator(my_short4_short_0_accum) combiner(combiner)
+static void my_short4_short_0_accum(int *accum, short4 a, short b) { }
+
+#pragma rs reduce(my_short4_short_1) accumulator(my_short4_short_1_accum) combiner(combiner)
+static void my_short4_short_1_accum(int *accum, short4 a, short b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short4_short2_0) accumulator(my_short4_short2_0_accum) combiner(combiner)
+static void my_short4_short2_0_accum(int *accum, short4 a, short2 b) { }
+
+#pragma rs reduce(my_short4_short2_1) accumulator(my_short4_short2_1_accum) combiner(combiner)
+static void my_short4_short2_1_accum(int *accum, short4 a, short2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short4_short4_0) accumulator(my_short4_short4_0_accum) combiner(combiner)
+static void my_short4_short4_0_accum(int *accum, short4 a, short4 b) { }
+
+#pragma rs reduce(my_short4_short4_1) accumulator(my_short4_short4_1_accum) combiner(combiner)
+static void my_short4_short4_1_accum(int *accum, short4 a, short4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short4_uchar_0) accumulator(my_short4_uchar_0_accum) combiner(combiner)
+static void my_short4_uchar_0_accum(int *accum, short4 a, uchar b) { }
+
+#pragma rs reduce(my_short4_uchar_1) accumulator(my_short4_uchar_1_accum) combiner(combiner)
+static void my_short4_uchar_1_accum(int *accum, short4 a, uchar b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short4_uchar2_0) accumulator(my_short4_uchar2_0_accum) combiner(combiner)
+static void my_short4_uchar2_0_accum(int *accum, short4 a, uchar2 b) { }
+
+#pragma rs reduce(my_short4_uchar2_1) accumulator(my_short4_uchar2_1_accum) combiner(combiner)
+static void my_short4_uchar2_1_accum(int *accum, short4 a, uchar2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short4_uchar4_0) accumulator(my_short4_uchar4_0_accum) combiner(combiner)
+static void my_short4_uchar4_0_accum(int *accum, short4 a, uchar4 b) { }
+
+#pragma rs reduce(my_short4_uchar4_1) accumulator(my_short4_uchar4_1_accum) combiner(combiner)
+static void my_short4_uchar4_1_accum(int *accum, short4 a, uchar4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short4_ushort_0) accumulator(my_short4_ushort_0_accum) combiner(combiner)
+static void my_short4_ushort_0_accum(int *accum, short4 a, ushort b) { }
+
+#pragma rs reduce(my_short4_ushort_1) accumulator(my_short4_ushort_1_accum) combiner(combiner)
+static void my_short4_ushort_1_accum(int *accum, short4 a, ushort b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short4_ushort2_0) accumulator(my_short4_ushort2_0_accum) combiner(combiner)
+static void my_short4_ushort2_0_accum(int *accum, short4 a, ushort2 b) { }
+
+#pragma rs reduce(my_short4_ushort2_1) accumulator(my_short4_ushort2_1_accum) combiner(combiner)
+static void my_short4_ushort2_1_accum(int *accum, short4 a, ushort2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short4_ushort4_0) accumulator(my_short4_ushort4_0_accum) combiner(combiner)
+static void my_short4_ushort4_0_accum(int *accum, short4 a, ushort4 b) { }
+
+#pragma rs reduce(my_short4_ushort4_1) accumulator(my_short4_ushort4_1_accum) combiner(combiner)
+static void my_short4_ushort4_1_accum(int *accum, short4 a, ushort4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short4_bool_0) accumulator(my_short4_bool_0_accum) combiner(combiner)
+static void my_short4_bool_0_accum(int *accum, short4 a, bool b) { }
+
+#pragma rs reduce(my_short4_bool_1) accumulator(my_short4_bool_1_accum) combiner(combiner)
+static void my_short4_bool_1_accum(int *accum, short4 a, bool b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short4_rs_matrix2x2_0) accumulator(my_short4_rs_matrix2x2_0_accum) combiner(combiner)
+static void my_short4_rs_matrix2x2_0_accum(int *accum, short4 a, rs_matrix2x2 b) { }
+
+#pragma rs reduce(my_short4_rs_matrix2x2_1) accumulator(my_short4_rs_matrix2x2_1_accum) combiner(combiner)
+static void my_short4_rs_matrix2x2_1_accum(int *accum, short4 a, rs_matrix2x2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_short4_MyStruct_0) accumulator(my_short4_MyStruct_0_accum) combiner(combiner)
+static void my_short4_MyStruct_0_accum(int *accum, short4 a, MyStruct b) { }
+
+#pragma rs reduce(my_short4_MyStruct_1) accumulator(my_short4_MyStruct_1_accum) combiner(combiner)
+static void my_short4_MyStruct_1_accum(int *accum, short4 a, MyStruct b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar_half_0) accumulator(my_uchar_half_0_accum) combiner(combiner)
+static void my_uchar_half_0_accum(int *accum, uchar a, half b) { }
+
+#pragma rs reduce(my_uchar_half_1) accumulator(my_uchar_half_1_accum) combiner(combiner)
+static void my_uchar_half_1_accum(int *accum, uchar a, half b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar_half2_0) accumulator(my_uchar_half2_0_accum) combiner(combiner)
+static void my_uchar_half2_0_accum(int *accum, uchar a, half2 b) { }
+
+#pragma rs reduce(my_uchar_half2_1) accumulator(my_uchar_half2_1_accum) combiner(combiner)
+static void my_uchar_half2_1_accum(int *accum, uchar a, half2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar_half4_0) accumulator(my_uchar_half4_0_accum) combiner(combiner)
+static void my_uchar_half4_0_accum(int *accum, uchar a, half4 b) { }
+
+#pragma rs reduce(my_uchar_half4_1) accumulator(my_uchar_half4_1_accum) combiner(combiner)
+static void my_uchar_half4_1_accum(int *accum, uchar a, half4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar_float_0) accumulator(my_uchar_float_0_accum) combiner(combiner)
+static void my_uchar_float_0_accum(int *accum, uchar a, float b) { }
+
+#pragma rs reduce(my_uchar_float_1) accumulator(my_uchar_float_1_accum) combiner(combiner)
+static void my_uchar_float_1_accum(int *accum, uchar a, float b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar_float2_0) accumulator(my_uchar_float2_0_accum) combiner(combiner)
+static void my_uchar_float2_0_accum(int *accum, uchar a, float2 b) { }
+
+#pragma rs reduce(my_uchar_float2_1) accumulator(my_uchar_float2_1_accum) combiner(combiner)
+static void my_uchar_float2_1_accum(int *accum, uchar a, float2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar_float4_0) accumulator(my_uchar_float4_0_accum) combiner(combiner)
+static void my_uchar_float4_0_accum(int *accum, uchar a, float4 b) { }
+
+#pragma rs reduce(my_uchar_float4_1) accumulator(my_uchar_float4_1_accum) combiner(combiner)
+static void my_uchar_float4_1_accum(int *accum, uchar a, float4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar_char_0) accumulator(my_uchar_char_0_accum) combiner(combiner)
+static void my_uchar_char_0_accum(int *accum, uchar a, char b) { }
+
+#pragma rs reduce(my_uchar_char_1) accumulator(my_uchar_char_1_accum) combiner(combiner)
+static void my_uchar_char_1_accum(int *accum, uchar a, char b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar_char2_0) accumulator(my_uchar_char2_0_accum) combiner(combiner)
+static void my_uchar_char2_0_accum(int *accum, uchar a, char2 b) { }
+
+#pragma rs reduce(my_uchar_char2_1) accumulator(my_uchar_char2_1_accum) combiner(combiner)
+static void my_uchar_char2_1_accum(int *accum, uchar a, char2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar_char4_0) accumulator(my_uchar_char4_0_accum) combiner(combiner)
+static void my_uchar_char4_0_accum(int *accum, uchar a, char4 b) { }
+
+#pragma rs reduce(my_uchar_char4_1) accumulator(my_uchar_char4_1_accum) combiner(combiner)
+static void my_uchar_char4_1_accum(int *accum, uchar a, char4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar_short_0) accumulator(my_uchar_short_0_accum) combiner(combiner)
+static void my_uchar_short_0_accum(int *accum, uchar a, short b) { }
+
+#pragma rs reduce(my_uchar_short_1) accumulator(my_uchar_short_1_accum) combiner(combiner)
+static void my_uchar_short_1_accum(int *accum, uchar a, short b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar_short2_0) accumulator(my_uchar_short2_0_accum) combiner(combiner)
+static void my_uchar_short2_0_accum(int *accum, uchar a, short2 b) { }
+
+#pragma rs reduce(my_uchar_short2_1) accumulator(my_uchar_short2_1_accum) combiner(combiner)
+static void my_uchar_short2_1_accum(int *accum, uchar a, short2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar_short4_0) accumulator(my_uchar_short4_0_accum) combiner(combiner)
+static void my_uchar_short4_0_accum(int *accum, uchar a, short4 b) { }
+
+#pragma rs reduce(my_uchar_short4_1) accumulator(my_uchar_short4_1_accum) combiner(combiner)
+static void my_uchar_short4_1_accum(int *accum, uchar a, short4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar_uchar_0) accumulator(my_uchar_uchar_0_accum) combiner(combiner)
+static void my_uchar_uchar_0_accum(int *accum, uchar a, uchar b) { }
+
+#pragma rs reduce(my_uchar_uchar_1) accumulator(my_uchar_uchar_1_accum) combiner(combiner)
+static void my_uchar_uchar_1_accum(int *accum, uchar a, uchar b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar_uchar2_0) accumulator(my_uchar_uchar2_0_accum) combiner(combiner)
+static void my_uchar_uchar2_0_accum(int *accum, uchar a, uchar2 b) { }
+
+#pragma rs reduce(my_uchar_uchar2_1) accumulator(my_uchar_uchar2_1_accum) combiner(combiner)
+static void my_uchar_uchar2_1_accum(int *accum, uchar a, uchar2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar_uchar4_0) accumulator(my_uchar_uchar4_0_accum) combiner(combiner)
+static void my_uchar_uchar4_0_accum(int *accum, uchar a, uchar4 b) { }
+
+#pragma rs reduce(my_uchar_uchar4_1) accumulator(my_uchar_uchar4_1_accum) combiner(combiner)
+static void my_uchar_uchar4_1_accum(int *accum, uchar a, uchar4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar_ushort_0) accumulator(my_uchar_ushort_0_accum) combiner(combiner)
+static void my_uchar_ushort_0_accum(int *accum, uchar a, ushort b) { }
+
+#pragma rs reduce(my_uchar_ushort_1) accumulator(my_uchar_ushort_1_accum) combiner(combiner)
+static void my_uchar_ushort_1_accum(int *accum, uchar a, ushort b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar_ushort2_0) accumulator(my_uchar_ushort2_0_accum) combiner(combiner)
+static void my_uchar_ushort2_0_accum(int *accum, uchar a, ushort2 b) { }
+
+#pragma rs reduce(my_uchar_ushort2_1) accumulator(my_uchar_ushort2_1_accum) combiner(combiner)
+static void my_uchar_ushort2_1_accum(int *accum, uchar a, ushort2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar_ushort4_0) accumulator(my_uchar_ushort4_0_accum) combiner(combiner)
+static void my_uchar_ushort4_0_accum(int *accum, uchar a, ushort4 b) { }
+
+#pragma rs reduce(my_uchar_ushort4_1) accumulator(my_uchar_ushort4_1_accum) combiner(combiner)
+static void my_uchar_ushort4_1_accum(int *accum, uchar a, ushort4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar_bool_0) accumulator(my_uchar_bool_0_accum) combiner(combiner)
+static void my_uchar_bool_0_accum(int *accum, uchar a, bool b) { }
+
+#pragma rs reduce(my_uchar_bool_1) accumulator(my_uchar_bool_1_accum) combiner(combiner)
+static void my_uchar_bool_1_accum(int *accum, uchar a, bool b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar_rs_matrix2x2_0) accumulator(my_uchar_rs_matrix2x2_0_accum) combiner(combiner)
+static void my_uchar_rs_matrix2x2_0_accum(int *accum, uchar a, rs_matrix2x2 b) { }
+
+#pragma rs reduce(my_uchar_rs_matrix2x2_1) accumulator(my_uchar_rs_matrix2x2_1_accum) combiner(combiner)
+static void my_uchar_rs_matrix2x2_1_accum(int *accum, uchar a, rs_matrix2x2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar_MyStruct_0) accumulator(my_uchar_MyStruct_0_accum) combiner(combiner)
+static void my_uchar_MyStruct_0_accum(int *accum, uchar a, MyStruct b) { }
+
+#pragma rs reduce(my_uchar_MyStruct_1) accumulator(my_uchar_MyStruct_1_accum) combiner(combiner)
+static void my_uchar_MyStruct_1_accum(int *accum, uchar a, MyStruct b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar2_half_0) accumulator(my_uchar2_half_0_accum) combiner(combiner)
+static void my_uchar2_half_0_accum(int *accum, uchar2 a, half b) { }
+
+#pragma rs reduce(my_uchar2_half_1) accumulator(my_uchar2_half_1_accum) combiner(combiner)
+static void my_uchar2_half_1_accum(int *accum, uchar2 a, half b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar2_half2_0) accumulator(my_uchar2_half2_0_accum) combiner(combiner)
+static void my_uchar2_half2_0_accum(int *accum, uchar2 a, half2 b) { }
+
+#pragma rs reduce(my_uchar2_half2_1) accumulator(my_uchar2_half2_1_accum) combiner(combiner)
+static void my_uchar2_half2_1_accum(int *accum, uchar2 a, half2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar2_half4_0) accumulator(my_uchar2_half4_0_accum) combiner(combiner)
+static void my_uchar2_half4_0_accum(int *accum, uchar2 a, half4 b) { }
+
+#pragma rs reduce(my_uchar2_half4_1) accumulator(my_uchar2_half4_1_accum) combiner(combiner)
+static void my_uchar2_half4_1_accum(int *accum, uchar2 a, half4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar2_float_0) accumulator(my_uchar2_float_0_accum) combiner(combiner)
+static void my_uchar2_float_0_accum(int *accum, uchar2 a, float b) { }
+
+#pragma rs reduce(my_uchar2_float_1) accumulator(my_uchar2_float_1_accum) combiner(combiner)
+static void my_uchar2_float_1_accum(int *accum, uchar2 a, float b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar2_float2_0) accumulator(my_uchar2_float2_0_accum) combiner(combiner)
+static void my_uchar2_float2_0_accum(int *accum, uchar2 a, float2 b) { }
+
+#pragma rs reduce(my_uchar2_float2_1) accumulator(my_uchar2_float2_1_accum) combiner(combiner)
+static void my_uchar2_float2_1_accum(int *accum, uchar2 a, float2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar2_float4_0) accumulator(my_uchar2_float4_0_accum) combiner(combiner)
+static void my_uchar2_float4_0_accum(int *accum, uchar2 a, float4 b) { }
+
+#pragma rs reduce(my_uchar2_float4_1) accumulator(my_uchar2_float4_1_accum) combiner(combiner)
+static void my_uchar2_float4_1_accum(int *accum, uchar2 a, float4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar2_char_0) accumulator(my_uchar2_char_0_accum) combiner(combiner)
+static void my_uchar2_char_0_accum(int *accum, uchar2 a, char b) { }
+
+#pragma rs reduce(my_uchar2_char_1) accumulator(my_uchar2_char_1_accum) combiner(combiner)
+static void my_uchar2_char_1_accum(int *accum, uchar2 a, char b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar2_char2_0) accumulator(my_uchar2_char2_0_accum) combiner(combiner)
+static void my_uchar2_char2_0_accum(int *accum, uchar2 a, char2 b) { }
+
+#pragma rs reduce(my_uchar2_char2_1) accumulator(my_uchar2_char2_1_accum) combiner(combiner)
+static void my_uchar2_char2_1_accum(int *accum, uchar2 a, char2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar2_char4_0) accumulator(my_uchar2_char4_0_accum) combiner(combiner)
+static void my_uchar2_char4_0_accum(int *accum, uchar2 a, char4 b) { }
+
+#pragma rs reduce(my_uchar2_char4_1) accumulator(my_uchar2_char4_1_accum) combiner(combiner)
+static void my_uchar2_char4_1_accum(int *accum, uchar2 a, char4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar2_short_0) accumulator(my_uchar2_short_0_accum) combiner(combiner)
+static void my_uchar2_short_0_accum(int *accum, uchar2 a, short b) { }
+
+#pragma rs reduce(my_uchar2_short_1) accumulator(my_uchar2_short_1_accum) combiner(combiner)
+static void my_uchar2_short_1_accum(int *accum, uchar2 a, short b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar2_short2_0) accumulator(my_uchar2_short2_0_accum) combiner(combiner)
+static void my_uchar2_short2_0_accum(int *accum, uchar2 a, short2 b) { }
+
+#pragma rs reduce(my_uchar2_short2_1) accumulator(my_uchar2_short2_1_accum) combiner(combiner)
+static void my_uchar2_short2_1_accum(int *accum, uchar2 a, short2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar2_short4_0) accumulator(my_uchar2_short4_0_accum) combiner(combiner)
+static void my_uchar2_short4_0_accum(int *accum, uchar2 a, short4 b) { }
+
+#pragma rs reduce(my_uchar2_short4_1) accumulator(my_uchar2_short4_1_accum) combiner(combiner)
+static void my_uchar2_short4_1_accum(int *accum, uchar2 a, short4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar2_uchar_0) accumulator(my_uchar2_uchar_0_accum) combiner(combiner)
+static void my_uchar2_uchar_0_accum(int *accum, uchar2 a, uchar b) { }
+
+#pragma rs reduce(my_uchar2_uchar_1) accumulator(my_uchar2_uchar_1_accum) combiner(combiner)
+static void my_uchar2_uchar_1_accum(int *accum, uchar2 a, uchar b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar2_uchar2_0) accumulator(my_uchar2_uchar2_0_accum) combiner(combiner)
+static void my_uchar2_uchar2_0_accum(int *accum, uchar2 a, uchar2 b) { }
+
+#pragma rs reduce(my_uchar2_uchar2_1) accumulator(my_uchar2_uchar2_1_accum) combiner(combiner)
+static void my_uchar2_uchar2_1_accum(int *accum, uchar2 a, uchar2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar2_uchar4_0) accumulator(my_uchar2_uchar4_0_accum) combiner(combiner)
+static void my_uchar2_uchar4_0_accum(int *accum, uchar2 a, uchar4 b) { }
+
+#pragma rs reduce(my_uchar2_uchar4_1) accumulator(my_uchar2_uchar4_1_accum) combiner(combiner)
+static void my_uchar2_uchar4_1_accum(int *accum, uchar2 a, uchar4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar2_ushort_0) accumulator(my_uchar2_ushort_0_accum) combiner(combiner)
+static void my_uchar2_ushort_0_accum(int *accum, uchar2 a, ushort b) { }
+
+#pragma rs reduce(my_uchar2_ushort_1) accumulator(my_uchar2_ushort_1_accum) combiner(combiner)
+static void my_uchar2_ushort_1_accum(int *accum, uchar2 a, ushort b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar2_ushort2_0) accumulator(my_uchar2_ushort2_0_accum) combiner(combiner)
+static void my_uchar2_ushort2_0_accum(int *accum, uchar2 a, ushort2 b) { }
+
+#pragma rs reduce(my_uchar2_ushort2_1) accumulator(my_uchar2_ushort2_1_accum) combiner(combiner)
+static void my_uchar2_ushort2_1_accum(int *accum, uchar2 a, ushort2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar2_ushort4_0) accumulator(my_uchar2_ushort4_0_accum) combiner(combiner)
+static void my_uchar2_ushort4_0_accum(int *accum, uchar2 a, ushort4 b) { }
+
+#pragma rs reduce(my_uchar2_ushort4_1) accumulator(my_uchar2_ushort4_1_accum) combiner(combiner)
+static void my_uchar2_ushort4_1_accum(int *accum, uchar2 a, ushort4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar2_bool_0) accumulator(my_uchar2_bool_0_accum) combiner(combiner)
+static void my_uchar2_bool_0_accum(int *accum, uchar2 a, bool b) { }
+
+#pragma rs reduce(my_uchar2_bool_1) accumulator(my_uchar2_bool_1_accum) combiner(combiner)
+static void my_uchar2_bool_1_accum(int *accum, uchar2 a, bool b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar2_rs_matrix2x2_0) accumulator(my_uchar2_rs_matrix2x2_0_accum) combiner(combiner)
+static void my_uchar2_rs_matrix2x2_0_accum(int *accum, uchar2 a, rs_matrix2x2 b) { }
+
+#pragma rs reduce(my_uchar2_rs_matrix2x2_1) accumulator(my_uchar2_rs_matrix2x2_1_accum) combiner(combiner)
+static void my_uchar2_rs_matrix2x2_1_accum(int *accum, uchar2 a, rs_matrix2x2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar2_MyStruct_0) accumulator(my_uchar2_MyStruct_0_accum) combiner(combiner)
+static void my_uchar2_MyStruct_0_accum(int *accum, uchar2 a, MyStruct b) { }
+
+#pragma rs reduce(my_uchar2_MyStruct_1) accumulator(my_uchar2_MyStruct_1_accum) combiner(combiner)
+static void my_uchar2_MyStruct_1_accum(int *accum, uchar2 a, MyStruct b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar4_half_0) accumulator(my_uchar4_half_0_accum) combiner(combiner)
+static void my_uchar4_half_0_accum(int *accum, uchar4 a, half b) { }
+
+#pragma rs reduce(my_uchar4_half_1) accumulator(my_uchar4_half_1_accum) combiner(combiner)
+static void my_uchar4_half_1_accum(int *accum, uchar4 a, half b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar4_half2_0) accumulator(my_uchar4_half2_0_accum) combiner(combiner)
+static void my_uchar4_half2_0_accum(int *accum, uchar4 a, half2 b) { }
+
+#pragma rs reduce(my_uchar4_half2_1) accumulator(my_uchar4_half2_1_accum) combiner(combiner)
+static void my_uchar4_half2_1_accum(int *accum, uchar4 a, half2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar4_half4_0) accumulator(my_uchar4_half4_0_accum) combiner(combiner)
+static void my_uchar4_half4_0_accum(int *accum, uchar4 a, half4 b) { }
+
+#pragma rs reduce(my_uchar4_half4_1) accumulator(my_uchar4_half4_1_accum) combiner(combiner)
+static void my_uchar4_half4_1_accum(int *accum, uchar4 a, half4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar4_float_0) accumulator(my_uchar4_float_0_accum) combiner(combiner)
+static void my_uchar4_float_0_accum(int *accum, uchar4 a, float b) { }
+
+#pragma rs reduce(my_uchar4_float_1) accumulator(my_uchar4_float_1_accum) combiner(combiner)
+static void my_uchar4_float_1_accum(int *accum, uchar4 a, float b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar4_float2_0) accumulator(my_uchar4_float2_0_accum) combiner(combiner)
+static void my_uchar4_float2_0_accum(int *accum, uchar4 a, float2 b) { }
+
+#pragma rs reduce(my_uchar4_float2_1) accumulator(my_uchar4_float2_1_accum) combiner(combiner)
+static void my_uchar4_float2_1_accum(int *accum, uchar4 a, float2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar4_float4_0) accumulator(my_uchar4_float4_0_accum) combiner(combiner)
+static void my_uchar4_float4_0_accum(int *accum, uchar4 a, float4 b) { }
+
+#pragma rs reduce(my_uchar4_float4_1) accumulator(my_uchar4_float4_1_accum) combiner(combiner)
+static void my_uchar4_float4_1_accum(int *accum, uchar4 a, float4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar4_char_0) accumulator(my_uchar4_char_0_accum) combiner(combiner)
+static void my_uchar4_char_0_accum(int *accum, uchar4 a, char b) { }
+
+#pragma rs reduce(my_uchar4_char_1) accumulator(my_uchar4_char_1_accum) combiner(combiner)
+static void my_uchar4_char_1_accum(int *accum, uchar4 a, char b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar4_char2_0) accumulator(my_uchar4_char2_0_accum) combiner(combiner)
+static void my_uchar4_char2_0_accum(int *accum, uchar4 a, char2 b) { }
+
+#pragma rs reduce(my_uchar4_char2_1) accumulator(my_uchar4_char2_1_accum) combiner(combiner)
+static void my_uchar4_char2_1_accum(int *accum, uchar4 a, char2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar4_char4_0) accumulator(my_uchar4_char4_0_accum) combiner(combiner)
+static void my_uchar4_char4_0_accum(int *accum, uchar4 a, char4 b) { }
+
+#pragma rs reduce(my_uchar4_char4_1) accumulator(my_uchar4_char4_1_accum) combiner(combiner)
+static void my_uchar4_char4_1_accum(int *accum, uchar4 a, char4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar4_short_0) accumulator(my_uchar4_short_0_accum) combiner(combiner)
+static void my_uchar4_short_0_accum(int *accum, uchar4 a, short b) { }
+
+#pragma rs reduce(my_uchar4_short_1) accumulator(my_uchar4_short_1_accum) combiner(combiner)
+static void my_uchar4_short_1_accum(int *accum, uchar4 a, short b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar4_short2_0) accumulator(my_uchar4_short2_0_accum) combiner(combiner)
+static void my_uchar4_short2_0_accum(int *accum, uchar4 a, short2 b) { }
+
+#pragma rs reduce(my_uchar4_short2_1) accumulator(my_uchar4_short2_1_accum) combiner(combiner)
+static void my_uchar4_short2_1_accum(int *accum, uchar4 a, short2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar4_short4_0) accumulator(my_uchar4_short4_0_accum) combiner(combiner)
+static void my_uchar4_short4_0_accum(int *accum, uchar4 a, short4 b) { }
+
+#pragma rs reduce(my_uchar4_short4_1) accumulator(my_uchar4_short4_1_accum) combiner(combiner)
+static void my_uchar4_short4_1_accum(int *accum, uchar4 a, short4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar4_uchar_0) accumulator(my_uchar4_uchar_0_accum) combiner(combiner)
+static void my_uchar4_uchar_0_accum(int *accum, uchar4 a, uchar b) { }
+
+#pragma rs reduce(my_uchar4_uchar_1) accumulator(my_uchar4_uchar_1_accum) combiner(combiner)
+static void my_uchar4_uchar_1_accum(int *accum, uchar4 a, uchar b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar4_uchar2_0) accumulator(my_uchar4_uchar2_0_accum) combiner(combiner)
+static void my_uchar4_uchar2_0_accum(int *accum, uchar4 a, uchar2 b) { }
+
+#pragma rs reduce(my_uchar4_uchar2_1) accumulator(my_uchar4_uchar2_1_accum) combiner(combiner)
+static void my_uchar4_uchar2_1_accum(int *accum, uchar4 a, uchar2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar4_uchar4_0) accumulator(my_uchar4_uchar4_0_accum) combiner(combiner)
+static void my_uchar4_uchar4_0_accum(int *accum, uchar4 a, uchar4 b) { }
+
+#pragma rs reduce(my_uchar4_uchar4_1) accumulator(my_uchar4_uchar4_1_accum) combiner(combiner)
+static void my_uchar4_uchar4_1_accum(int *accum, uchar4 a, uchar4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar4_ushort_0) accumulator(my_uchar4_ushort_0_accum) combiner(combiner)
+static void my_uchar4_ushort_0_accum(int *accum, uchar4 a, ushort b) { }
+
+#pragma rs reduce(my_uchar4_ushort_1) accumulator(my_uchar4_ushort_1_accum) combiner(combiner)
+static void my_uchar4_ushort_1_accum(int *accum, uchar4 a, ushort b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar4_ushort2_0) accumulator(my_uchar4_ushort2_0_accum) combiner(combiner)
+static void my_uchar4_ushort2_0_accum(int *accum, uchar4 a, ushort2 b) { }
+
+#pragma rs reduce(my_uchar4_ushort2_1) accumulator(my_uchar4_ushort2_1_accum) combiner(combiner)
+static void my_uchar4_ushort2_1_accum(int *accum, uchar4 a, ushort2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar4_ushort4_0) accumulator(my_uchar4_ushort4_0_accum) combiner(combiner)
+static void my_uchar4_ushort4_0_accum(int *accum, uchar4 a, ushort4 b) { }
+
+#pragma rs reduce(my_uchar4_ushort4_1) accumulator(my_uchar4_ushort4_1_accum) combiner(combiner)
+static void my_uchar4_ushort4_1_accum(int *accum, uchar4 a, ushort4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar4_bool_0) accumulator(my_uchar4_bool_0_accum) combiner(combiner)
+static void my_uchar4_bool_0_accum(int *accum, uchar4 a, bool b) { }
+
+#pragma rs reduce(my_uchar4_bool_1) accumulator(my_uchar4_bool_1_accum) combiner(combiner)
+static void my_uchar4_bool_1_accum(int *accum, uchar4 a, bool b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar4_rs_matrix2x2_0) accumulator(my_uchar4_rs_matrix2x2_0_accum) combiner(combiner)
+static void my_uchar4_rs_matrix2x2_0_accum(int *accum, uchar4 a, rs_matrix2x2 b) { }
+
+#pragma rs reduce(my_uchar4_rs_matrix2x2_1) accumulator(my_uchar4_rs_matrix2x2_1_accum) combiner(combiner)
+static void my_uchar4_rs_matrix2x2_1_accum(int *accum, uchar4 a, rs_matrix2x2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_uchar4_MyStruct_0) accumulator(my_uchar4_MyStruct_0_accum) combiner(combiner)
+static void my_uchar4_MyStruct_0_accum(int *accum, uchar4 a, MyStruct b) { }
+
+#pragma rs reduce(my_uchar4_MyStruct_1) accumulator(my_uchar4_MyStruct_1_accum) combiner(combiner)
+static void my_uchar4_MyStruct_1_accum(int *accum, uchar4 a, MyStruct b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort_half_0) accumulator(my_ushort_half_0_accum) combiner(combiner)
+static void my_ushort_half_0_accum(int *accum, ushort a, half b) { }
+
+#pragma rs reduce(my_ushort_half_1) accumulator(my_ushort_half_1_accum) combiner(combiner)
+static void my_ushort_half_1_accum(int *accum, ushort a, half b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort_half2_0) accumulator(my_ushort_half2_0_accum) combiner(combiner)
+static void my_ushort_half2_0_accum(int *accum, ushort a, half2 b) { }
+
+#pragma rs reduce(my_ushort_half2_1) accumulator(my_ushort_half2_1_accum) combiner(combiner)
+static void my_ushort_half2_1_accum(int *accum, ushort a, half2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort_half4_0) accumulator(my_ushort_half4_0_accum) combiner(combiner)
+static void my_ushort_half4_0_accum(int *accum, ushort a, half4 b) { }
+
+#pragma rs reduce(my_ushort_half4_1) accumulator(my_ushort_half4_1_accum) combiner(combiner)
+static void my_ushort_half4_1_accum(int *accum, ushort a, half4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort_float_0) accumulator(my_ushort_float_0_accum) combiner(combiner)
+static void my_ushort_float_0_accum(int *accum, ushort a, float b) { }
+
+#pragma rs reduce(my_ushort_float_1) accumulator(my_ushort_float_1_accum) combiner(combiner)
+static void my_ushort_float_1_accum(int *accum, ushort a, float b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort_float2_0) accumulator(my_ushort_float2_0_accum) combiner(combiner)
+static void my_ushort_float2_0_accum(int *accum, ushort a, float2 b) { }
+
+#pragma rs reduce(my_ushort_float2_1) accumulator(my_ushort_float2_1_accum) combiner(combiner)
+static void my_ushort_float2_1_accum(int *accum, ushort a, float2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort_float4_0) accumulator(my_ushort_float4_0_accum) combiner(combiner)
+static void my_ushort_float4_0_accum(int *accum, ushort a, float4 b) { }
+
+#pragma rs reduce(my_ushort_float4_1) accumulator(my_ushort_float4_1_accum) combiner(combiner)
+static void my_ushort_float4_1_accum(int *accum, ushort a, float4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort_char_0) accumulator(my_ushort_char_0_accum) combiner(combiner)
+static void my_ushort_char_0_accum(int *accum, ushort a, char b) { }
+
+#pragma rs reduce(my_ushort_char_1) accumulator(my_ushort_char_1_accum) combiner(combiner)
+static void my_ushort_char_1_accum(int *accum, ushort a, char b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort_char2_0) accumulator(my_ushort_char2_0_accum) combiner(combiner)
+static void my_ushort_char2_0_accum(int *accum, ushort a, char2 b) { }
+
+#pragma rs reduce(my_ushort_char2_1) accumulator(my_ushort_char2_1_accum) combiner(combiner)
+static void my_ushort_char2_1_accum(int *accum, ushort a, char2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort_char4_0) accumulator(my_ushort_char4_0_accum) combiner(combiner)
+static void my_ushort_char4_0_accum(int *accum, ushort a, char4 b) { }
+
+#pragma rs reduce(my_ushort_char4_1) accumulator(my_ushort_char4_1_accum) combiner(combiner)
+static void my_ushort_char4_1_accum(int *accum, ushort a, char4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort_short_0) accumulator(my_ushort_short_0_accum) combiner(combiner)
+static void my_ushort_short_0_accum(int *accum, ushort a, short b) { }
+
+#pragma rs reduce(my_ushort_short_1) accumulator(my_ushort_short_1_accum) combiner(combiner)
+static void my_ushort_short_1_accum(int *accum, ushort a, short b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort_short2_0) accumulator(my_ushort_short2_0_accum) combiner(combiner)
+static void my_ushort_short2_0_accum(int *accum, ushort a, short2 b) { }
+
+#pragma rs reduce(my_ushort_short2_1) accumulator(my_ushort_short2_1_accum) combiner(combiner)
+static void my_ushort_short2_1_accum(int *accum, ushort a, short2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort_short4_0) accumulator(my_ushort_short4_0_accum) combiner(combiner)
+static void my_ushort_short4_0_accum(int *accum, ushort a, short4 b) { }
+
+#pragma rs reduce(my_ushort_short4_1) accumulator(my_ushort_short4_1_accum) combiner(combiner)
+static void my_ushort_short4_1_accum(int *accum, ushort a, short4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort_uchar_0) accumulator(my_ushort_uchar_0_accum) combiner(combiner)
+static void my_ushort_uchar_0_accum(int *accum, ushort a, uchar b) { }
+
+#pragma rs reduce(my_ushort_uchar_1) accumulator(my_ushort_uchar_1_accum) combiner(combiner)
+static void my_ushort_uchar_1_accum(int *accum, ushort a, uchar b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort_uchar2_0) accumulator(my_ushort_uchar2_0_accum) combiner(combiner)
+static void my_ushort_uchar2_0_accum(int *accum, ushort a, uchar2 b) { }
+
+#pragma rs reduce(my_ushort_uchar2_1) accumulator(my_ushort_uchar2_1_accum) combiner(combiner)
+static void my_ushort_uchar2_1_accum(int *accum, ushort a, uchar2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort_uchar4_0) accumulator(my_ushort_uchar4_0_accum) combiner(combiner)
+static void my_ushort_uchar4_0_accum(int *accum, ushort a, uchar4 b) { }
+
+#pragma rs reduce(my_ushort_uchar4_1) accumulator(my_ushort_uchar4_1_accum) combiner(combiner)
+static void my_ushort_uchar4_1_accum(int *accum, ushort a, uchar4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort_ushort_0) accumulator(my_ushort_ushort_0_accum) combiner(combiner)
+static void my_ushort_ushort_0_accum(int *accum, ushort a, ushort b) { }
+
+#pragma rs reduce(my_ushort_ushort_1) accumulator(my_ushort_ushort_1_accum) combiner(combiner)
+static void my_ushort_ushort_1_accum(int *accum, ushort a, ushort b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort_ushort2_0) accumulator(my_ushort_ushort2_0_accum) combiner(combiner)
+static void my_ushort_ushort2_0_accum(int *accum, ushort a, ushort2 b) { }
+
+#pragma rs reduce(my_ushort_ushort2_1) accumulator(my_ushort_ushort2_1_accum) combiner(combiner)
+static void my_ushort_ushort2_1_accum(int *accum, ushort a, ushort2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort_ushort4_0) accumulator(my_ushort_ushort4_0_accum) combiner(combiner)
+static void my_ushort_ushort4_0_accum(int *accum, ushort a, ushort4 b) { }
+
+#pragma rs reduce(my_ushort_ushort4_1) accumulator(my_ushort_ushort4_1_accum) combiner(combiner)
+static void my_ushort_ushort4_1_accum(int *accum, ushort a, ushort4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort_bool_0) accumulator(my_ushort_bool_0_accum) combiner(combiner)
+static void my_ushort_bool_0_accum(int *accum, ushort a, bool b) { }
+
+#pragma rs reduce(my_ushort_bool_1) accumulator(my_ushort_bool_1_accum) combiner(combiner)
+static void my_ushort_bool_1_accum(int *accum, ushort a, bool b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort_rs_matrix2x2_0) accumulator(my_ushort_rs_matrix2x2_0_accum) combiner(combiner)
+static void my_ushort_rs_matrix2x2_0_accum(int *accum, ushort a, rs_matrix2x2 b) { }
+
+#pragma rs reduce(my_ushort_rs_matrix2x2_1) accumulator(my_ushort_rs_matrix2x2_1_accum) combiner(combiner)
+static void my_ushort_rs_matrix2x2_1_accum(int *accum, ushort a, rs_matrix2x2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort_MyStruct_0) accumulator(my_ushort_MyStruct_0_accum) combiner(combiner)
+static void my_ushort_MyStruct_0_accum(int *accum, ushort a, MyStruct b) { }
+
+#pragma rs reduce(my_ushort_MyStruct_1) accumulator(my_ushort_MyStruct_1_accum) combiner(combiner)
+static void my_ushort_MyStruct_1_accum(int *accum, ushort a, MyStruct b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort2_half_0) accumulator(my_ushort2_half_0_accum) combiner(combiner)
+static void my_ushort2_half_0_accum(int *accum, ushort2 a, half b) { }
+
+#pragma rs reduce(my_ushort2_half_1) accumulator(my_ushort2_half_1_accum) combiner(combiner)
+static void my_ushort2_half_1_accum(int *accum, ushort2 a, half b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort2_half2_0) accumulator(my_ushort2_half2_0_accum) combiner(combiner)
+static void my_ushort2_half2_0_accum(int *accum, ushort2 a, half2 b) { }
+
+#pragma rs reduce(my_ushort2_half2_1) accumulator(my_ushort2_half2_1_accum) combiner(combiner)
+static void my_ushort2_half2_1_accum(int *accum, ushort2 a, half2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort2_half4_0) accumulator(my_ushort2_half4_0_accum) combiner(combiner)
+static void my_ushort2_half4_0_accum(int *accum, ushort2 a, half4 b) { }
+
+#pragma rs reduce(my_ushort2_half4_1) accumulator(my_ushort2_half4_1_accum) combiner(combiner)
+static void my_ushort2_half4_1_accum(int *accum, ushort2 a, half4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort2_float_0) accumulator(my_ushort2_float_0_accum) combiner(combiner)
+static void my_ushort2_float_0_accum(int *accum, ushort2 a, float b) { }
+
+#pragma rs reduce(my_ushort2_float_1) accumulator(my_ushort2_float_1_accum) combiner(combiner)
+static void my_ushort2_float_1_accum(int *accum, ushort2 a, float b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort2_float2_0) accumulator(my_ushort2_float2_0_accum) combiner(combiner)
+static void my_ushort2_float2_0_accum(int *accum, ushort2 a, float2 b) { }
+
+#pragma rs reduce(my_ushort2_float2_1) accumulator(my_ushort2_float2_1_accum) combiner(combiner)
+static void my_ushort2_float2_1_accum(int *accum, ushort2 a, float2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort2_float4_0) accumulator(my_ushort2_float4_0_accum) combiner(combiner)
+static void my_ushort2_float4_0_accum(int *accum, ushort2 a, float4 b) { }
+
+#pragma rs reduce(my_ushort2_float4_1) accumulator(my_ushort2_float4_1_accum) combiner(combiner)
+static void my_ushort2_float4_1_accum(int *accum, ushort2 a, float4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort2_char_0) accumulator(my_ushort2_char_0_accum) combiner(combiner)
+static void my_ushort2_char_0_accum(int *accum, ushort2 a, char b) { }
+
+#pragma rs reduce(my_ushort2_char_1) accumulator(my_ushort2_char_1_accum) combiner(combiner)
+static void my_ushort2_char_1_accum(int *accum, ushort2 a, char b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort2_char2_0) accumulator(my_ushort2_char2_0_accum) combiner(combiner)
+static void my_ushort2_char2_0_accum(int *accum, ushort2 a, char2 b) { }
+
+#pragma rs reduce(my_ushort2_char2_1) accumulator(my_ushort2_char2_1_accum) combiner(combiner)
+static void my_ushort2_char2_1_accum(int *accum, ushort2 a, char2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort2_char4_0) accumulator(my_ushort2_char4_0_accum) combiner(combiner)
+static void my_ushort2_char4_0_accum(int *accum, ushort2 a, char4 b) { }
+
+#pragma rs reduce(my_ushort2_char4_1) accumulator(my_ushort2_char4_1_accum) combiner(combiner)
+static void my_ushort2_char4_1_accum(int *accum, ushort2 a, char4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort2_short_0) accumulator(my_ushort2_short_0_accum) combiner(combiner)
+static void my_ushort2_short_0_accum(int *accum, ushort2 a, short b) { }
+
+#pragma rs reduce(my_ushort2_short_1) accumulator(my_ushort2_short_1_accum) combiner(combiner)
+static void my_ushort2_short_1_accum(int *accum, ushort2 a, short b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort2_short2_0) accumulator(my_ushort2_short2_0_accum) combiner(combiner)
+static void my_ushort2_short2_0_accum(int *accum, ushort2 a, short2 b) { }
+
+#pragma rs reduce(my_ushort2_short2_1) accumulator(my_ushort2_short2_1_accum) combiner(combiner)
+static void my_ushort2_short2_1_accum(int *accum, ushort2 a, short2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort2_short4_0) accumulator(my_ushort2_short4_0_accum) combiner(combiner)
+static void my_ushort2_short4_0_accum(int *accum, ushort2 a, short4 b) { }
+
+#pragma rs reduce(my_ushort2_short4_1) accumulator(my_ushort2_short4_1_accum) combiner(combiner)
+static void my_ushort2_short4_1_accum(int *accum, ushort2 a, short4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort2_uchar_0) accumulator(my_ushort2_uchar_0_accum) combiner(combiner)
+static void my_ushort2_uchar_0_accum(int *accum, ushort2 a, uchar b) { }
+
+#pragma rs reduce(my_ushort2_uchar_1) accumulator(my_ushort2_uchar_1_accum) combiner(combiner)
+static void my_ushort2_uchar_1_accum(int *accum, ushort2 a, uchar b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort2_uchar2_0) accumulator(my_ushort2_uchar2_0_accum) combiner(combiner)
+static void my_ushort2_uchar2_0_accum(int *accum, ushort2 a, uchar2 b) { }
+
+#pragma rs reduce(my_ushort2_uchar2_1) accumulator(my_ushort2_uchar2_1_accum) combiner(combiner)
+static void my_ushort2_uchar2_1_accum(int *accum, ushort2 a, uchar2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort2_uchar4_0) accumulator(my_ushort2_uchar4_0_accum) combiner(combiner)
+static void my_ushort2_uchar4_0_accum(int *accum, ushort2 a, uchar4 b) { }
+
+#pragma rs reduce(my_ushort2_uchar4_1) accumulator(my_ushort2_uchar4_1_accum) combiner(combiner)
+static void my_ushort2_uchar4_1_accum(int *accum, ushort2 a, uchar4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort2_ushort_0) accumulator(my_ushort2_ushort_0_accum) combiner(combiner)
+static void my_ushort2_ushort_0_accum(int *accum, ushort2 a, ushort b) { }
+
+#pragma rs reduce(my_ushort2_ushort_1) accumulator(my_ushort2_ushort_1_accum) combiner(combiner)
+static void my_ushort2_ushort_1_accum(int *accum, ushort2 a, ushort b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort2_ushort2_0) accumulator(my_ushort2_ushort2_0_accum) combiner(combiner)
+static void my_ushort2_ushort2_0_accum(int *accum, ushort2 a, ushort2 b) { }
+
+#pragma rs reduce(my_ushort2_ushort2_1) accumulator(my_ushort2_ushort2_1_accum) combiner(combiner)
+static void my_ushort2_ushort2_1_accum(int *accum, ushort2 a, ushort2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort2_ushort4_0) accumulator(my_ushort2_ushort4_0_accum) combiner(combiner)
+static void my_ushort2_ushort4_0_accum(int *accum, ushort2 a, ushort4 b) { }
+
+#pragma rs reduce(my_ushort2_ushort4_1) accumulator(my_ushort2_ushort4_1_accum) combiner(combiner)
+static void my_ushort2_ushort4_1_accum(int *accum, ushort2 a, ushort4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort2_bool_0) accumulator(my_ushort2_bool_0_accum) combiner(combiner)
+static void my_ushort2_bool_0_accum(int *accum, ushort2 a, bool b) { }
+
+#pragma rs reduce(my_ushort2_bool_1) accumulator(my_ushort2_bool_1_accum) combiner(combiner)
+static void my_ushort2_bool_1_accum(int *accum, ushort2 a, bool b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort2_rs_matrix2x2_0) accumulator(my_ushort2_rs_matrix2x2_0_accum) combiner(combiner)
+static void my_ushort2_rs_matrix2x2_0_accum(int *accum, ushort2 a, rs_matrix2x2 b) { }
+
+#pragma rs reduce(my_ushort2_rs_matrix2x2_1) accumulator(my_ushort2_rs_matrix2x2_1_accum) combiner(combiner)
+static void my_ushort2_rs_matrix2x2_1_accum(int *accum, ushort2 a, rs_matrix2x2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort2_MyStruct_0) accumulator(my_ushort2_MyStruct_0_accum) combiner(combiner)
+static void my_ushort2_MyStruct_0_accum(int *accum, ushort2 a, MyStruct b) { }
+
+#pragma rs reduce(my_ushort2_MyStruct_1) accumulator(my_ushort2_MyStruct_1_accum) combiner(combiner)
+static void my_ushort2_MyStruct_1_accum(int *accum, ushort2 a, MyStruct b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort4_half_0) accumulator(my_ushort4_half_0_accum) combiner(combiner)
+static void my_ushort4_half_0_accum(int *accum, ushort4 a, half b) { }
+
+#pragma rs reduce(my_ushort4_half_1) accumulator(my_ushort4_half_1_accum) combiner(combiner)
+static void my_ushort4_half_1_accum(int *accum, ushort4 a, half b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort4_half2_0) accumulator(my_ushort4_half2_0_accum) combiner(combiner)
+static void my_ushort4_half2_0_accum(int *accum, ushort4 a, half2 b) { }
+
+#pragma rs reduce(my_ushort4_half2_1) accumulator(my_ushort4_half2_1_accum) combiner(combiner)
+static void my_ushort4_half2_1_accum(int *accum, ushort4 a, half2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort4_half4_0) accumulator(my_ushort4_half4_0_accum) combiner(combiner)
+static void my_ushort4_half4_0_accum(int *accum, ushort4 a, half4 b) { }
+
+#pragma rs reduce(my_ushort4_half4_1) accumulator(my_ushort4_half4_1_accum) combiner(combiner)
+static void my_ushort4_half4_1_accum(int *accum, ushort4 a, half4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort4_float_0) accumulator(my_ushort4_float_0_accum) combiner(combiner)
+static void my_ushort4_float_0_accum(int *accum, ushort4 a, float b) { }
+
+#pragma rs reduce(my_ushort4_float_1) accumulator(my_ushort4_float_1_accum) combiner(combiner)
+static void my_ushort4_float_1_accum(int *accum, ushort4 a, float b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort4_float2_0) accumulator(my_ushort4_float2_0_accum) combiner(combiner)
+static void my_ushort4_float2_0_accum(int *accum, ushort4 a, float2 b) { }
+
+#pragma rs reduce(my_ushort4_float2_1) accumulator(my_ushort4_float2_1_accum) combiner(combiner)
+static void my_ushort4_float2_1_accum(int *accum, ushort4 a, float2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort4_float4_0) accumulator(my_ushort4_float4_0_accum) combiner(combiner)
+static void my_ushort4_float4_0_accum(int *accum, ushort4 a, float4 b) { }
+
+#pragma rs reduce(my_ushort4_float4_1) accumulator(my_ushort4_float4_1_accum) combiner(combiner)
+static void my_ushort4_float4_1_accum(int *accum, ushort4 a, float4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort4_char_0) accumulator(my_ushort4_char_0_accum) combiner(combiner)
+static void my_ushort4_char_0_accum(int *accum, ushort4 a, char b) { }
+
+#pragma rs reduce(my_ushort4_char_1) accumulator(my_ushort4_char_1_accum) combiner(combiner)
+static void my_ushort4_char_1_accum(int *accum, ushort4 a, char b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort4_char2_0) accumulator(my_ushort4_char2_0_accum) combiner(combiner)
+static void my_ushort4_char2_0_accum(int *accum, ushort4 a, char2 b) { }
+
+#pragma rs reduce(my_ushort4_char2_1) accumulator(my_ushort4_char2_1_accum) combiner(combiner)
+static void my_ushort4_char2_1_accum(int *accum, ushort4 a, char2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort4_char4_0) accumulator(my_ushort4_char4_0_accum) combiner(combiner)
+static void my_ushort4_char4_0_accum(int *accum, ushort4 a, char4 b) { }
+
+#pragma rs reduce(my_ushort4_char4_1) accumulator(my_ushort4_char4_1_accum) combiner(combiner)
+static void my_ushort4_char4_1_accum(int *accum, ushort4 a, char4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort4_short_0) accumulator(my_ushort4_short_0_accum) combiner(combiner)
+static void my_ushort4_short_0_accum(int *accum, ushort4 a, short b) { }
+
+#pragma rs reduce(my_ushort4_short_1) accumulator(my_ushort4_short_1_accum) combiner(combiner)
+static void my_ushort4_short_1_accum(int *accum, ushort4 a, short b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort4_short2_0) accumulator(my_ushort4_short2_0_accum) combiner(combiner)
+static void my_ushort4_short2_0_accum(int *accum, ushort4 a, short2 b) { }
+
+#pragma rs reduce(my_ushort4_short2_1) accumulator(my_ushort4_short2_1_accum) combiner(combiner)
+static void my_ushort4_short2_1_accum(int *accum, ushort4 a, short2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort4_short4_0) accumulator(my_ushort4_short4_0_accum) combiner(combiner)
+static void my_ushort4_short4_0_accum(int *accum, ushort4 a, short4 b) { }
+
+#pragma rs reduce(my_ushort4_short4_1) accumulator(my_ushort4_short4_1_accum) combiner(combiner)
+static void my_ushort4_short4_1_accum(int *accum, ushort4 a, short4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort4_uchar_0) accumulator(my_ushort4_uchar_0_accum) combiner(combiner)
+static void my_ushort4_uchar_0_accum(int *accum, ushort4 a, uchar b) { }
+
+#pragma rs reduce(my_ushort4_uchar_1) accumulator(my_ushort4_uchar_1_accum) combiner(combiner)
+static void my_ushort4_uchar_1_accum(int *accum, ushort4 a, uchar b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort4_uchar2_0) accumulator(my_ushort4_uchar2_0_accum) combiner(combiner)
+static void my_ushort4_uchar2_0_accum(int *accum, ushort4 a, uchar2 b) { }
+
+#pragma rs reduce(my_ushort4_uchar2_1) accumulator(my_ushort4_uchar2_1_accum) combiner(combiner)
+static void my_ushort4_uchar2_1_accum(int *accum, ushort4 a, uchar2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort4_uchar4_0) accumulator(my_ushort4_uchar4_0_accum) combiner(combiner)
+static void my_ushort4_uchar4_0_accum(int *accum, ushort4 a, uchar4 b) { }
+
+#pragma rs reduce(my_ushort4_uchar4_1) accumulator(my_ushort4_uchar4_1_accum) combiner(combiner)
+static void my_ushort4_uchar4_1_accum(int *accum, ushort4 a, uchar4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort4_ushort_0) accumulator(my_ushort4_ushort_0_accum) combiner(combiner)
+static void my_ushort4_ushort_0_accum(int *accum, ushort4 a, ushort b) { }
+
+#pragma rs reduce(my_ushort4_ushort_1) accumulator(my_ushort4_ushort_1_accum) combiner(combiner)
+static void my_ushort4_ushort_1_accum(int *accum, ushort4 a, ushort b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort4_ushort2_0) accumulator(my_ushort4_ushort2_0_accum) combiner(combiner)
+static void my_ushort4_ushort2_0_accum(int *accum, ushort4 a, ushort2 b) { }
+
+#pragma rs reduce(my_ushort4_ushort2_1) accumulator(my_ushort4_ushort2_1_accum) combiner(combiner)
+static void my_ushort4_ushort2_1_accum(int *accum, ushort4 a, ushort2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort4_ushort4_0) accumulator(my_ushort4_ushort4_0_accum) combiner(combiner)
+static void my_ushort4_ushort4_0_accum(int *accum, ushort4 a, ushort4 b) { }
+
+#pragma rs reduce(my_ushort4_ushort4_1) accumulator(my_ushort4_ushort4_1_accum) combiner(combiner)
+static void my_ushort4_ushort4_1_accum(int *accum, ushort4 a, ushort4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort4_bool_0) accumulator(my_ushort4_bool_0_accum) combiner(combiner)
+static void my_ushort4_bool_0_accum(int *accum, ushort4 a, bool b) { }
+
+#pragma rs reduce(my_ushort4_bool_1) accumulator(my_ushort4_bool_1_accum) combiner(combiner)
+static void my_ushort4_bool_1_accum(int *accum, ushort4 a, bool b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort4_rs_matrix2x2_0) accumulator(my_ushort4_rs_matrix2x2_0_accum) combiner(combiner)
+static void my_ushort4_rs_matrix2x2_0_accum(int *accum, ushort4 a, rs_matrix2x2 b) { }
+
+#pragma rs reduce(my_ushort4_rs_matrix2x2_1) accumulator(my_ushort4_rs_matrix2x2_1_accum) combiner(combiner)
+static void my_ushort4_rs_matrix2x2_1_accum(int *accum, ushort4 a, rs_matrix2x2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_ushort4_MyStruct_0) accumulator(my_ushort4_MyStruct_0_accum) combiner(combiner)
+static void my_ushort4_MyStruct_0_accum(int *accum, ushort4 a, MyStruct b) { }
+
+#pragma rs reduce(my_ushort4_MyStruct_1) accumulator(my_ushort4_MyStruct_1_accum) combiner(combiner)
+static void my_ushort4_MyStruct_1_accum(int *accum, ushort4 a, MyStruct b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_bool_half_0) accumulator(my_bool_half_0_accum) combiner(combiner)
+static void my_bool_half_0_accum(int *accum, bool a, half b) { }
+
+#pragma rs reduce(my_bool_half_1) accumulator(my_bool_half_1_accum) combiner(combiner)
+static void my_bool_half_1_accum(int *accum, bool a, half b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_bool_half2_0) accumulator(my_bool_half2_0_accum) combiner(combiner)
+static void my_bool_half2_0_accum(int *accum, bool a, half2 b) { }
+
+#pragma rs reduce(my_bool_half2_1) accumulator(my_bool_half2_1_accum) combiner(combiner)
+static void my_bool_half2_1_accum(int *accum, bool a, half2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_bool_half4_0) accumulator(my_bool_half4_0_accum) combiner(combiner)
+static void my_bool_half4_0_accum(int *accum, bool a, half4 b) { }
+
+#pragma rs reduce(my_bool_half4_1) accumulator(my_bool_half4_1_accum) combiner(combiner)
+static void my_bool_half4_1_accum(int *accum, bool a, half4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_bool_float_0) accumulator(my_bool_float_0_accum) combiner(combiner)
+static void my_bool_float_0_accum(int *accum, bool a, float b) { }
+
+#pragma rs reduce(my_bool_float_1) accumulator(my_bool_float_1_accum) combiner(combiner)
+static void my_bool_float_1_accum(int *accum, bool a, float b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_bool_float2_0) accumulator(my_bool_float2_0_accum) combiner(combiner)
+static void my_bool_float2_0_accum(int *accum, bool a, float2 b) { }
+
+#pragma rs reduce(my_bool_float2_1) accumulator(my_bool_float2_1_accum) combiner(combiner)
+static void my_bool_float2_1_accum(int *accum, bool a, float2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_bool_float4_0) accumulator(my_bool_float4_0_accum) combiner(combiner)
+static void my_bool_float4_0_accum(int *accum, bool a, float4 b) { }
+
+#pragma rs reduce(my_bool_float4_1) accumulator(my_bool_float4_1_accum) combiner(combiner)
+static void my_bool_float4_1_accum(int *accum, bool a, float4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_bool_char_0) accumulator(my_bool_char_0_accum) combiner(combiner)
+static void my_bool_char_0_accum(int *accum, bool a, char b) { }
+
+#pragma rs reduce(my_bool_char_1) accumulator(my_bool_char_1_accum) combiner(combiner)
+static void my_bool_char_1_accum(int *accum, bool a, char b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_bool_char2_0) accumulator(my_bool_char2_0_accum) combiner(combiner)
+static void my_bool_char2_0_accum(int *accum, bool a, char2 b) { }
+
+#pragma rs reduce(my_bool_char2_1) accumulator(my_bool_char2_1_accum) combiner(combiner)
+static void my_bool_char2_1_accum(int *accum, bool a, char2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_bool_char4_0) accumulator(my_bool_char4_0_accum) combiner(combiner)
+static void my_bool_char4_0_accum(int *accum, bool a, char4 b) { }
+
+#pragma rs reduce(my_bool_char4_1) accumulator(my_bool_char4_1_accum) combiner(combiner)
+static void my_bool_char4_1_accum(int *accum, bool a, char4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_bool_short_0) accumulator(my_bool_short_0_accum) combiner(combiner)
+static void my_bool_short_0_accum(int *accum, bool a, short b) { }
+
+#pragma rs reduce(my_bool_short_1) accumulator(my_bool_short_1_accum) combiner(combiner)
+static void my_bool_short_1_accum(int *accum, bool a, short b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_bool_short2_0) accumulator(my_bool_short2_0_accum) combiner(combiner)
+static void my_bool_short2_0_accum(int *accum, bool a, short2 b) { }
+
+#pragma rs reduce(my_bool_short2_1) accumulator(my_bool_short2_1_accum) combiner(combiner)
+static void my_bool_short2_1_accum(int *accum, bool a, short2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_bool_short4_0) accumulator(my_bool_short4_0_accum) combiner(combiner)
+static void my_bool_short4_0_accum(int *accum, bool a, short4 b) { }
+
+#pragma rs reduce(my_bool_short4_1) accumulator(my_bool_short4_1_accum) combiner(combiner)
+static void my_bool_short4_1_accum(int *accum, bool a, short4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_bool_uchar_0) accumulator(my_bool_uchar_0_accum) combiner(combiner)
+static void my_bool_uchar_0_accum(int *accum, bool a, uchar b) { }
+
+#pragma rs reduce(my_bool_uchar_1) accumulator(my_bool_uchar_1_accum) combiner(combiner)
+static void my_bool_uchar_1_accum(int *accum, bool a, uchar b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_bool_uchar2_0) accumulator(my_bool_uchar2_0_accum) combiner(combiner)
+static void my_bool_uchar2_0_accum(int *accum, bool a, uchar2 b) { }
+
+#pragma rs reduce(my_bool_uchar2_1) accumulator(my_bool_uchar2_1_accum) combiner(combiner)
+static void my_bool_uchar2_1_accum(int *accum, bool a, uchar2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_bool_uchar4_0) accumulator(my_bool_uchar4_0_accum) combiner(combiner)
+static void my_bool_uchar4_0_accum(int *accum, bool a, uchar4 b) { }
+
+#pragma rs reduce(my_bool_uchar4_1) accumulator(my_bool_uchar4_1_accum) combiner(combiner)
+static void my_bool_uchar4_1_accum(int *accum, bool a, uchar4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_bool_ushort_0) accumulator(my_bool_ushort_0_accum) combiner(combiner)
+static void my_bool_ushort_0_accum(int *accum, bool a, ushort b) { }
+
+#pragma rs reduce(my_bool_ushort_1) accumulator(my_bool_ushort_1_accum) combiner(combiner)
+static void my_bool_ushort_1_accum(int *accum, bool a, ushort b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_bool_ushort2_0) accumulator(my_bool_ushort2_0_accum) combiner(combiner)
+static void my_bool_ushort2_0_accum(int *accum, bool a, ushort2 b) { }
+
+#pragma rs reduce(my_bool_ushort2_1) accumulator(my_bool_ushort2_1_accum) combiner(combiner)
+static void my_bool_ushort2_1_accum(int *accum, bool a, ushort2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_bool_ushort4_0) accumulator(my_bool_ushort4_0_accum) combiner(combiner)
+static void my_bool_ushort4_0_accum(int *accum, bool a, ushort4 b) { }
+
+#pragma rs reduce(my_bool_ushort4_1) accumulator(my_bool_ushort4_1_accum) combiner(combiner)
+static void my_bool_ushort4_1_accum(int *accum, bool a, ushort4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_bool_bool_0) accumulator(my_bool_bool_0_accum) combiner(combiner)
+static void my_bool_bool_0_accum(int *accum, bool a, bool b) { }
+
+#pragma rs reduce(my_bool_bool_1) accumulator(my_bool_bool_1_accum) combiner(combiner)
+static void my_bool_bool_1_accum(int *accum, bool a, bool b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_bool_rs_matrix2x2_0) accumulator(my_bool_rs_matrix2x2_0_accum) combiner(combiner)
+static void my_bool_rs_matrix2x2_0_accum(int *accum, bool a, rs_matrix2x2 b) { }
+
+#pragma rs reduce(my_bool_rs_matrix2x2_1) accumulator(my_bool_rs_matrix2x2_1_accum) combiner(combiner)
+static void my_bool_rs_matrix2x2_1_accum(int *accum, bool a, rs_matrix2x2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_bool_MyStruct_0) accumulator(my_bool_MyStruct_0_accum) combiner(combiner)
+static void my_bool_MyStruct_0_accum(int *accum, bool a, MyStruct b) { }
+
+#pragma rs reduce(my_bool_MyStruct_1) accumulator(my_bool_MyStruct_1_accum) combiner(combiner)
+static void my_bool_MyStruct_1_accum(int *accum, bool a, MyStruct b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_rs_matrix2x2_half_0) accumulator(my_rs_matrix2x2_half_0_accum) combiner(combiner)
+static void my_rs_matrix2x2_half_0_accum(int *accum, rs_matrix2x2 a, half b) { }
+
+#pragma rs reduce(my_rs_matrix2x2_half_1) accumulator(my_rs_matrix2x2_half_1_accum) combiner(combiner)
+static void my_rs_matrix2x2_half_1_accum(int *accum, rs_matrix2x2 a, half b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_rs_matrix2x2_half2_0) accumulator(my_rs_matrix2x2_half2_0_accum) combiner(combiner)
+static void my_rs_matrix2x2_half2_0_accum(int *accum, rs_matrix2x2 a, half2 b) { }
+
+#pragma rs reduce(my_rs_matrix2x2_half2_1) accumulator(my_rs_matrix2x2_half2_1_accum) combiner(combiner)
+static void my_rs_matrix2x2_half2_1_accum(int *accum, rs_matrix2x2 a, half2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_rs_matrix2x2_half4_0) accumulator(my_rs_matrix2x2_half4_0_accum) combiner(combiner)
+static void my_rs_matrix2x2_half4_0_accum(int *accum, rs_matrix2x2 a, half4 b) { }
+
+#pragma rs reduce(my_rs_matrix2x2_half4_1) accumulator(my_rs_matrix2x2_half4_1_accum) combiner(combiner)
+static void my_rs_matrix2x2_half4_1_accum(int *accum, rs_matrix2x2 a, half4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_rs_matrix2x2_float_0) accumulator(my_rs_matrix2x2_float_0_accum) combiner(combiner)
+static void my_rs_matrix2x2_float_0_accum(int *accum, rs_matrix2x2 a, float b) { }
+
+#pragma rs reduce(my_rs_matrix2x2_float_1) accumulator(my_rs_matrix2x2_float_1_accum) combiner(combiner)
+static void my_rs_matrix2x2_float_1_accum(int *accum, rs_matrix2x2 a, float b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_rs_matrix2x2_float2_0) accumulator(my_rs_matrix2x2_float2_0_accum) combiner(combiner)
+static void my_rs_matrix2x2_float2_0_accum(int *accum, rs_matrix2x2 a, float2 b) { }
+
+#pragma rs reduce(my_rs_matrix2x2_float2_1) accumulator(my_rs_matrix2x2_float2_1_accum) combiner(combiner)
+static void my_rs_matrix2x2_float2_1_accum(int *accum, rs_matrix2x2 a, float2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_rs_matrix2x2_float4_0) accumulator(my_rs_matrix2x2_float4_0_accum) combiner(combiner)
+static void my_rs_matrix2x2_float4_0_accum(int *accum, rs_matrix2x2 a, float4 b) { }
+
+#pragma rs reduce(my_rs_matrix2x2_float4_1) accumulator(my_rs_matrix2x2_float4_1_accum) combiner(combiner)
+static void my_rs_matrix2x2_float4_1_accum(int *accum, rs_matrix2x2 a, float4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_rs_matrix2x2_char_0) accumulator(my_rs_matrix2x2_char_0_accum) combiner(combiner)
+static void my_rs_matrix2x2_char_0_accum(int *accum, rs_matrix2x2 a, char b) { }
+
+#pragma rs reduce(my_rs_matrix2x2_char_1) accumulator(my_rs_matrix2x2_char_1_accum) combiner(combiner)
+static void my_rs_matrix2x2_char_1_accum(int *accum, rs_matrix2x2 a, char b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_rs_matrix2x2_char2_0) accumulator(my_rs_matrix2x2_char2_0_accum) combiner(combiner)
+static void my_rs_matrix2x2_char2_0_accum(int *accum, rs_matrix2x2 a, char2 b) { }
+
+#pragma rs reduce(my_rs_matrix2x2_char2_1) accumulator(my_rs_matrix2x2_char2_1_accum) combiner(combiner)
+static void my_rs_matrix2x2_char2_1_accum(int *accum, rs_matrix2x2 a, char2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_rs_matrix2x2_char4_0) accumulator(my_rs_matrix2x2_char4_0_accum) combiner(combiner)
+static void my_rs_matrix2x2_char4_0_accum(int *accum, rs_matrix2x2 a, char4 b) { }
+
+#pragma rs reduce(my_rs_matrix2x2_char4_1) accumulator(my_rs_matrix2x2_char4_1_accum) combiner(combiner)
+static void my_rs_matrix2x2_char4_1_accum(int *accum, rs_matrix2x2 a, char4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_rs_matrix2x2_short_0) accumulator(my_rs_matrix2x2_short_0_accum) combiner(combiner)
+static void my_rs_matrix2x2_short_0_accum(int *accum, rs_matrix2x2 a, short b) { }
+
+#pragma rs reduce(my_rs_matrix2x2_short_1) accumulator(my_rs_matrix2x2_short_1_accum) combiner(combiner)
+static void my_rs_matrix2x2_short_1_accum(int *accum, rs_matrix2x2 a, short b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_rs_matrix2x2_short2_0) accumulator(my_rs_matrix2x2_short2_0_accum) combiner(combiner)
+static void my_rs_matrix2x2_short2_0_accum(int *accum, rs_matrix2x2 a, short2 b) { }
+
+#pragma rs reduce(my_rs_matrix2x2_short2_1) accumulator(my_rs_matrix2x2_short2_1_accum) combiner(combiner)
+static void my_rs_matrix2x2_short2_1_accum(int *accum, rs_matrix2x2 a, short2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_rs_matrix2x2_short4_0) accumulator(my_rs_matrix2x2_short4_0_accum) combiner(combiner)
+static void my_rs_matrix2x2_short4_0_accum(int *accum, rs_matrix2x2 a, short4 b) { }
+
+#pragma rs reduce(my_rs_matrix2x2_short4_1) accumulator(my_rs_matrix2x2_short4_1_accum) combiner(combiner)
+static void my_rs_matrix2x2_short4_1_accum(int *accum, rs_matrix2x2 a, short4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_rs_matrix2x2_uchar_0) accumulator(my_rs_matrix2x2_uchar_0_accum) combiner(combiner)
+static void my_rs_matrix2x2_uchar_0_accum(int *accum, rs_matrix2x2 a, uchar b) { }
+
+#pragma rs reduce(my_rs_matrix2x2_uchar_1) accumulator(my_rs_matrix2x2_uchar_1_accum) combiner(combiner)
+static void my_rs_matrix2x2_uchar_1_accum(int *accum, rs_matrix2x2 a, uchar b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_rs_matrix2x2_uchar2_0) accumulator(my_rs_matrix2x2_uchar2_0_accum) combiner(combiner)
+static void my_rs_matrix2x2_uchar2_0_accum(int *accum, rs_matrix2x2 a, uchar2 b) { }
+
+#pragma rs reduce(my_rs_matrix2x2_uchar2_1) accumulator(my_rs_matrix2x2_uchar2_1_accum) combiner(combiner)
+static void my_rs_matrix2x2_uchar2_1_accum(int *accum, rs_matrix2x2 a, uchar2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_rs_matrix2x2_uchar4_0) accumulator(my_rs_matrix2x2_uchar4_0_accum) combiner(combiner)
+static void my_rs_matrix2x2_uchar4_0_accum(int *accum, rs_matrix2x2 a, uchar4 b) { }
+
+#pragma rs reduce(my_rs_matrix2x2_uchar4_1) accumulator(my_rs_matrix2x2_uchar4_1_accum) combiner(combiner)
+static void my_rs_matrix2x2_uchar4_1_accum(int *accum, rs_matrix2x2 a, uchar4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_rs_matrix2x2_ushort_0) accumulator(my_rs_matrix2x2_ushort_0_accum) combiner(combiner)
+static void my_rs_matrix2x2_ushort_0_accum(int *accum, rs_matrix2x2 a, ushort b) { }
+
+#pragma rs reduce(my_rs_matrix2x2_ushort_1) accumulator(my_rs_matrix2x2_ushort_1_accum) combiner(combiner)
+static void my_rs_matrix2x2_ushort_1_accum(int *accum, rs_matrix2x2 a, ushort b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_rs_matrix2x2_ushort2_0) accumulator(my_rs_matrix2x2_ushort2_0_accum) combiner(combiner)
+static void my_rs_matrix2x2_ushort2_0_accum(int *accum, rs_matrix2x2 a, ushort2 b) { }
+
+#pragma rs reduce(my_rs_matrix2x2_ushort2_1) accumulator(my_rs_matrix2x2_ushort2_1_accum) combiner(combiner)
+static void my_rs_matrix2x2_ushort2_1_accum(int *accum, rs_matrix2x2 a, ushort2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_rs_matrix2x2_ushort4_0) accumulator(my_rs_matrix2x2_ushort4_0_accum) combiner(combiner)
+static void my_rs_matrix2x2_ushort4_0_accum(int *accum, rs_matrix2x2 a, ushort4 b) { }
+
+#pragma rs reduce(my_rs_matrix2x2_ushort4_1) accumulator(my_rs_matrix2x2_ushort4_1_accum) combiner(combiner)
+static void my_rs_matrix2x2_ushort4_1_accum(int *accum, rs_matrix2x2 a, ushort4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_rs_matrix2x2_bool_0) accumulator(my_rs_matrix2x2_bool_0_accum) combiner(combiner)
+static void my_rs_matrix2x2_bool_0_accum(int *accum, rs_matrix2x2 a, bool b) { }
+
+#pragma rs reduce(my_rs_matrix2x2_bool_1) accumulator(my_rs_matrix2x2_bool_1_accum) combiner(combiner)
+static void my_rs_matrix2x2_bool_1_accum(int *accum, rs_matrix2x2 a, bool b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_rs_matrix2x2_rs_matrix2x2_0) accumulator(my_rs_matrix2x2_rs_matrix2x2_0_accum) combiner(combiner)
+static void my_rs_matrix2x2_rs_matrix2x2_0_accum(int *accum, rs_matrix2x2 a, rs_matrix2x2 b) { }
+
+#pragma rs reduce(my_rs_matrix2x2_rs_matrix2x2_1) accumulator(my_rs_matrix2x2_rs_matrix2x2_1_accum) combiner(combiner)
+static void my_rs_matrix2x2_rs_matrix2x2_1_accum(int *accum, rs_matrix2x2 a, rs_matrix2x2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_rs_matrix2x2_MyStruct_0) accumulator(my_rs_matrix2x2_MyStruct_0_accum) combiner(combiner)
+static void my_rs_matrix2x2_MyStruct_0_accum(int *accum, rs_matrix2x2 a, MyStruct b) { }
+
+#pragma rs reduce(my_rs_matrix2x2_MyStruct_1) accumulator(my_rs_matrix2x2_MyStruct_1_accum) combiner(combiner)
+static void my_rs_matrix2x2_MyStruct_1_accum(int *accum, rs_matrix2x2 a, MyStruct b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_MyStruct_half_0) accumulator(my_MyStruct_half_0_accum) combiner(combiner)
+static void my_MyStruct_half_0_accum(int *accum, MyStruct a, half b) { }
+
+#pragma rs reduce(my_MyStruct_half_1) accumulator(my_MyStruct_half_1_accum) combiner(combiner)
+static void my_MyStruct_half_1_accum(int *accum, MyStruct a, half b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_MyStruct_half2_0) accumulator(my_MyStruct_half2_0_accum) combiner(combiner)
+static void my_MyStruct_half2_0_accum(int *accum, MyStruct a, half2 b) { }
+
+#pragma rs reduce(my_MyStruct_half2_1) accumulator(my_MyStruct_half2_1_accum) combiner(combiner)
+static void my_MyStruct_half2_1_accum(int *accum, MyStruct a, half2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_MyStruct_half4_0) accumulator(my_MyStruct_half4_0_accum) combiner(combiner)
+static void my_MyStruct_half4_0_accum(int *accum, MyStruct a, half4 b) { }
+
+#pragma rs reduce(my_MyStruct_half4_1) accumulator(my_MyStruct_half4_1_accum) combiner(combiner)
+static void my_MyStruct_half4_1_accum(int *accum, MyStruct a, half4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_MyStruct_float_0) accumulator(my_MyStruct_float_0_accum) combiner(combiner)
+static void my_MyStruct_float_0_accum(int *accum, MyStruct a, float b) { }
+
+#pragma rs reduce(my_MyStruct_float_1) accumulator(my_MyStruct_float_1_accum) combiner(combiner)
+static void my_MyStruct_float_1_accum(int *accum, MyStruct a, float b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_MyStruct_float2_0) accumulator(my_MyStruct_float2_0_accum) combiner(combiner)
+static void my_MyStruct_float2_0_accum(int *accum, MyStruct a, float2 b) { }
+
+#pragma rs reduce(my_MyStruct_float2_1) accumulator(my_MyStruct_float2_1_accum) combiner(combiner)
+static void my_MyStruct_float2_1_accum(int *accum, MyStruct a, float2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_MyStruct_float4_0) accumulator(my_MyStruct_float4_0_accum) combiner(combiner)
+static void my_MyStruct_float4_0_accum(int *accum, MyStruct a, float4 b) { }
+
+#pragma rs reduce(my_MyStruct_float4_1) accumulator(my_MyStruct_float4_1_accum) combiner(combiner)
+static void my_MyStruct_float4_1_accum(int *accum, MyStruct a, float4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_MyStruct_char_0) accumulator(my_MyStruct_char_0_accum) combiner(combiner)
+static void my_MyStruct_char_0_accum(int *accum, MyStruct a, char b) { }
+
+#pragma rs reduce(my_MyStruct_char_1) accumulator(my_MyStruct_char_1_accum) combiner(combiner)
+static void my_MyStruct_char_1_accum(int *accum, MyStruct a, char b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_MyStruct_char2_0) accumulator(my_MyStruct_char2_0_accum) combiner(combiner)
+static void my_MyStruct_char2_0_accum(int *accum, MyStruct a, char2 b) { }
+
+#pragma rs reduce(my_MyStruct_char2_1) accumulator(my_MyStruct_char2_1_accum) combiner(combiner)
+static void my_MyStruct_char2_1_accum(int *accum, MyStruct a, char2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_MyStruct_char4_0) accumulator(my_MyStruct_char4_0_accum) combiner(combiner)
+static void my_MyStruct_char4_0_accum(int *accum, MyStruct a, char4 b) { }
+
+#pragma rs reduce(my_MyStruct_char4_1) accumulator(my_MyStruct_char4_1_accum) combiner(combiner)
+static void my_MyStruct_char4_1_accum(int *accum, MyStruct a, char4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_MyStruct_short_0) accumulator(my_MyStruct_short_0_accum) combiner(combiner)
+static void my_MyStruct_short_0_accum(int *accum, MyStruct a, short b) { }
+
+#pragma rs reduce(my_MyStruct_short_1) accumulator(my_MyStruct_short_1_accum) combiner(combiner)
+static void my_MyStruct_short_1_accum(int *accum, MyStruct a, short b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_MyStruct_short2_0) accumulator(my_MyStruct_short2_0_accum) combiner(combiner)
+static void my_MyStruct_short2_0_accum(int *accum, MyStruct a, short2 b) { }
+
+#pragma rs reduce(my_MyStruct_short2_1) accumulator(my_MyStruct_short2_1_accum) combiner(combiner)
+static void my_MyStruct_short2_1_accum(int *accum, MyStruct a, short2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_MyStruct_short4_0) accumulator(my_MyStruct_short4_0_accum) combiner(combiner)
+static void my_MyStruct_short4_0_accum(int *accum, MyStruct a, short4 b) { }
+
+#pragma rs reduce(my_MyStruct_short4_1) accumulator(my_MyStruct_short4_1_accum) combiner(combiner)
+static void my_MyStruct_short4_1_accum(int *accum, MyStruct a, short4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_MyStruct_uchar_0) accumulator(my_MyStruct_uchar_0_accum) combiner(combiner)
+static void my_MyStruct_uchar_0_accum(int *accum, MyStruct a, uchar b) { }
+
+#pragma rs reduce(my_MyStruct_uchar_1) accumulator(my_MyStruct_uchar_1_accum) combiner(combiner)
+static void my_MyStruct_uchar_1_accum(int *accum, MyStruct a, uchar b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_MyStruct_uchar2_0) accumulator(my_MyStruct_uchar2_0_accum) combiner(combiner)
+static void my_MyStruct_uchar2_0_accum(int *accum, MyStruct a, uchar2 b) { }
+
+#pragma rs reduce(my_MyStruct_uchar2_1) accumulator(my_MyStruct_uchar2_1_accum) combiner(combiner)
+static void my_MyStruct_uchar2_1_accum(int *accum, MyStruct a, uchar2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_MyStruct_uchar4_0) accumulator(my_MyStruct_uchar4_0_accum) combiner(combiner)
+static void my_MyStruct_uchar4_0_accum(int *accum, MyStruct a, uchar4 b) { }
+
+#pragma rs reduce(my_MyStruct_uchar4_1) accumulator(my_MyStruct_uchar4_1_accum) combiner(combiner)
+static void my_MyStruct_uchar4_1_accum(int *accum, MyStruct a, uchar4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_MyStruct_ushort_0) accumulator(my_MyStruct_ushort_0_accum) combiner(combiner)
+static void my_MyStruct_ushort_0_accum(int *accum, MyStruct a, ushort b) { }
+
+#pragma rs reduce(my_MyStruct_ushort_1) accumulator(my_MyStruct_ushort_1_accum) combiner(combiner)
+static void my_MyStruct_ushort_1_accum(int *accum, MyStruct a, ushort b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_MyStruct_ushort2_0) accumulator(my_MyStruct_ushort2_0_accum) combiner(combiner)
+static void my_MyStruct_ushort2_0_accum(int *accum, MyStruct a, ushort2 b) { }
+
+#pragma rs reduce(my_MyStruct_ushort2_1) accumulator(my_MyStruct_ushort2_1_accum) combiner(combiner)
+static void my_MyStruct_ushort2_1_accum(int *accum, MyStruct a, ushort2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_MyStruct_ushort4_0) accumulator(my_MyStruct_ushort4_0_accum) combiner(combiner)
+static void my_MyStruct_ushort4_0_accum(int *accum, MyStruct a, ushort4 b) { }
+
+#pragma rs reduce(my_MyStruct_ushort4_1) accumulator(my_MyStruct_ushort4_1_accum) combiner(combiner)
+static void my_MyStruct_ushort4_1_accum(int *accum, MyStruct a, ushort4 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_MyStruct_bool_0) accumulator(my_MyStruct_bool_0_accum) combiner(combiner)
+static void my_MyStruct_bool_0_accum(int *accum, MyStruct a, bool b) { }
+
+#pragma rs reduce(my_MyStruct_bool_1) accumulator(my_MyStruct_bool_1_accum) combiner(combiner)
+static void my_MyStruct_bool_1_accum(int *accum, MyStruct a, bool b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_MyStruct_rs_matrix2x2_0) accumulator(my_MyStruct_rs_matrix2x2_0_accum) combiner(combiner)
+static void my_MyStruct_rs_matrix2x2_0_accum(int *accum, MyStruct a, rs_matrix2x2 b) { }
+
+#pragma rs reduce(my_MyStruct_rs_matrix2x2_1) accumulator(my_MyStruct_rs_matrix2x2_1_accum) combiner(combiner)
+static void my_MyStruct_rs_matrix2x2_1_accum(int *accum, MyStruct a, rs_matrix2x2 b, rs_kernel_context context) { }
+
+#pragma rs reduce(my_MyStruct_MyStruct_0) accumulator(my_MyStruct_MyStruct_0_accum) combiner(combiner)
+static void my_MyStruct_MyStruct_0_accum(int *accum, MyStruct a, MyStruct b) { }
+
+#pragma rs reduce(my_MyStruct_MyStruct_1) accumulator(my_MyStruct_MyStruct_1_accum) combiner(combiner)
+static void my_MyStruct_MyStruct_1_accum(int *accum, MyStruct a, MyStruct b, rs_kernel_context context) { }
diff --git a/slang/tests/P_reduce_general_inputs/stderr.txt.expect b/slang/tests/P_reduce_general_inputs/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_reduce_general_inputs/stderr.txt.expect
diff --git a/slang/tests/P_reduce_general_inputs/stdout.txt.expect b/slang/tests/P_reduce_general_inputs/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_reduce_general_inputs/stdout.txt.expect
diff --git a/slang/tests/P_reduce_general_reflect/reduce_general_reflect.rs b/slang/tests/P_reduce_general_reflect/reduce_general_reflect.rs
new file mode 100644
index 0000000..a7ef619
--- /dev/null
+++ b/slang/tests/P_reduce_general_reflect/reduce_general_reflect.rs
@@ -0,0 +1,30 @@
+// -Wall -Werror
+#pragma version(1)
+#pragma rs java_package_name(reflect)
+
+// A few interesting reflection cases
+
+//////////////////////////////////////////////////////////////////
+
+// A given result type should only be reflected once
+
+#pragma rs reduce(d1) accumulator(d1_accum) outconverter(d1_out)
+static void d1_accum(float *accum, float val) { }
+static void d1_out(double *out, const float *val) { }
+
+#pragma rs reduce(d2) accumulator(d2_accum)
+static void d2_accum(double *accum, double val) { }
+
+//////////////////////////////////////////////////////////////////
+
+// Arrays of different sizes are reflected separately
+
+#pragma rs reduce(a3) accumulator(a3_accum) combiner(a3_comb)
+typedef int IntA3[3];
+static void a3_accum(IntA3 *accum, int val) { }
+static void a3_comb(IntA3 *accum, const IntA3 *other) { }
+
+#pragma rs reduce(a7) accumulator(a7_accum) combiner(a7_comb)
+typedef int IntA7[7];
+static void a7_accum(IntA7 *accum, int val) { }
+static void a7_comb(IntA7 *accum, const IntA7 *other) { }
diff --git a/slang/tests/P_reduce_general_reflect/stderr.txt.expect b/slang/tests/P_reduce_general_reflect/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_reduce_general_reflect/stderr.txt.expect
diff --git a/slang/tests/P_reduce_general_reflect/stdout.txt.expect b/slang/tests/P_reduce_general_reflect/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_reduce_general_reflect/stdout.txt.expect
diff --git a/slang/tests/P_reduce_general_result/ScriptC_reduce_general_result.java.expect b/slang/tests/P_reduce_general_result/ScriptC_reduce_general_result.java.expect
new file mode 100644
index 0000000..c1bd6d5
--- /dev/null
+++ b/slang/tests/P_reduce_general_result/ScriptC_reduce_general_result.java.expect
@@ -0,0 +1,5136 @@
+/*
+ * Copyright (C) 2011-2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * This file is auto-generated. DO NOT MODIFY!
+ * The source Renderscript file: reduce_general_result.rs
+ */
+
+package result;
+
+import android.renderscript.*;
+import result.reduce_general_resultBitCode;
+
+/**
+ * @hide
+ */
+public class ScriptC_reduce_general_result extends ScriptC {
+    private static final String __rs_resource_name = "reduce_general_result";
+    // Constructor
+    public  ScriptC_reduce_general_result(RenderScript rs) {
+        super(rs,
+              __rs_resource_name,
+              reduce_general_resultBitCode.getBitCode32(),
+              reduce_general_resultBitCode.getBitCode64());
+        mRSLocal = rs;
+        __F16 = Element.F16(rs);
+        __F16_2 = Element.F16_2(rs);
+        __F16_4 = Element.F16_4(rs);
+        __F32 = Element.F32(rs);
+        __F32_2 = Element.F32_2(rs);
+        __F32_4 = Element.F32_4(rs);
+        __F64 = Element.F64(rs);
+        __F64_2 = Element.F64_2(rs);
+        __F64_4 = Element.F64_4(rs);
+        __I8 = Element.I8(rs);
+        __I8_2 = Element.I8_2(rs);
+        __I8_4 = Element.I8_4(rs);
+        __I16 = Element.I16(rs);
+        __I16_2 = Element.I16_2(rs);
+        __I16_4 = Element.I16_4(rs);
+        __I32 = Element.I32(rs);
+        __I32_2 = Element.I32_2(rs);
+        __I32_4 = Element.I32_4(rs);
+        __I64 = Element.I64(rs);
+        __I64_2 = Element.I64_2(rs);
+        __I64_4 = Element.I64_4(rs);
+        __U8 = Element.U8(rs);
+        __U8_2 = Element.U8_2(rs);
+        __U8_4 = Element.U8_4(rs);
+        __U16 = Element.U16(rs);
+        __U16_2 = Element.U16_2(rs);
+        __U16_4 = Element.U16_4(rs);
+        __U32 = Element.U32(rs);
+        __U32_2 = Element.U32_2(rs);
+        __U32_4 = Element.U32_4(rs);
+        __U64 = Element.U64(rs);
+        __U64_2 = Element.U64_2(rs);
+        __U64_4 = Element.U64_4(rs);
+        __BOOLEAN = Element.BOOLEAN(rs);
+    }
+
+    private Element __BOOLEAN;
+    private Element __F16;
+    private Element __F16_2;
+    private Element __F16_4;
+    private Element __F32;
+    private Element __F32_2;
+    private Element __F32_4;
+    private Element __F64;
+    private Element __F64_2;
+    private Element __F64_4;
+    private Element __I16;
+    private Element __I16_2;
+    private Element __I16_4;
+    private Element __I32;
+    private Element __I32_2;
+    private Element __I32_4;
+    private Element __I64;
+    private Element __I64_2;
+    private Element __I64_4;
+    private Element __I8;
+    private Element __I8_2;
+    private Element __I8_4;
+    private Element __U16;
+    private Element __U16_2;
+    private Element __U16_4;
+    private Element __U32;
+    private Element __U32_2;
+    private Element __U32_4;
+    private Element __U64;
+    private Element __U64_2;
+    private Element __U64_4;
+    private Element __U8;
+    private Element __U8_2;
+    private Element __U8_4;
+    private RenderScript mRSLocal;
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_bool {
+        public boolean[] get() {
+            if (!mGotResult) {
+                byte[] outArray = new byte[7];
+                mOut.copyTo(outArray);
+                boolean[] result = new boolean[7];
+                for (int Idx = 0; Idx < 7; ++Idx) {
+                    result[Idx] = outArray[Idx] != 0;
+                }
+
+                mResult = result;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_bool(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private boolean[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_char {
+        public byte[] get() {
+            if (!mGotResult) {
+                byte[] outArray = new byte[7];
+                mOut.copyTo(outArray);
+                mResult = outArray;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_char(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private byte[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_char2 {
+        public Byte2[] get() {
+            if (!mGotResult) {
+                byte[] outArray = new byte[14];
+                mOut.copyTo(outArray);
+                Byte2[] result = new Byte2[7];
+                for (int Idx = 0; Idx < 7; ++Idx) {
+                    result[Idx] = new Byte2(outArray[2*Idx+0], outArray[2*Idx+1]);
+                }
+
+                mResult = result;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_char2(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Byte2[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_char4 {
+        public Byte4[] get() {
+            if (!mGotResult) {
+                byte[] outArray = new byte[28];
+                mOut.copyTo(outArray);
+                Byte4[] result = new Byte4[7];
+                for (int Idx = 0; Idx < 7; ++Idx) {
+                    result[Idx] = new Byte4(outArray[4*Idx+0], outArray[4*Idx+1], outArray[4*Idx+2], outArray[4*Idx+3]);
+                }
+
+                mResult = result;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_char4(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Byte4[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_double {
+        public double[] get() {
+            if (!mGotResult) {
+                double[] outArray = new double[7];
+                mOut.copyTo(outArray);
+                mResult = outArray;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_double(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private double[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_double2 {
+        public Double2[] get() {
+            if (!mGotResult) {
+                double[] outArray = new double[14];
+                mOut.copyTo(outArray);
+                Double2[] result = new Double2[7];
+                for (int Idx = 0; Idx < 7; ++Idx) {
+                    result[Idx] = new Double2(outArray[2*Idx+0], outArray[2*Idx+1]);
+                }
+
+                mResult = result;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_double2(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Double2[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_double4 {
+        public Double4[] get() {
+            if (!mGotResult) {
+                double[] outArray = new double[28];
+                mOut.copyTo(outArray);
+                Double4[] result = new Double4[7];
+                for (int Idx = 0; Idx < 7; ++Idx) {
+                    result[Idx] = new Double4(outArray[4*Idx+0], outArray[4*Idx+1], outArray[4*Idx+2], outArray[4*Idx+3]);
+                }
+
+                mResult = result;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_double4(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Double4[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_float {
+        public float[] get() {
+            if (!mGotResult) {
+                float[] outArray = new float[7];
+                mOut.copyTo(outArray);
+                mResult = outArray;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_float(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private float[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_float2 {
+        public Float2[] get() {
+            if (!mGotResult) {
+                float[] outArray = new float[14];
+                mOut.copyTo(outArray);
+                Float2[] result = new Float2[7];
+                for (int Idx = 0; Idx < 7; ++Idx) {
+                    result[Idx] = new Float2(outArray[2*Idx+0], outArray[2*Idx+1]);
+                }
+
+                mResult = result;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_float2(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Float2[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_float4 {
+        public Float4[] get() {
+            if (!mGotResult) {
+                float[] outArray = new float[28];
+                mOut.copyTo(outArray);
+                Float4[] result = new Float4[7];
+                for (int Idx = 0; Idx < 7; ++Idx) {
+                    result[Idx] = new Float4(outArray[4*Idx+0], outArray[4*Idx+1], outArray[4*Idx+2], outArray[4*Idx+3]);
+                }
+
+                mResult = result;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_float4(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Float4[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_half {
+        public short[] get() {
+            if (!mGotResult) {
+                short[] outArray = new short[7];
+                mOut.copyTo(outArray);
+                mResult = outArray;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_half(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private short[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_half2 {
+        public Short2[] get() {
+            if (!mGotResult) {
+                short[] outArray = new short[14];
+                mOut.copyTo(outArray);
+                Short2[] result = new Short2[7];
+                for (int Idx = 0; Idx < 7; ++Idx) {
+                    result[Idx] = new Short2(outArray[2*Idx+0], outArray[2*Idx+1]);
+                }
+
+                mResult = result;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_half2(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Short2[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_half4 {
+        public Short4[] get() {
+            if (!mGotResult) {
+                short[] outArray = new short[28];
+                mOut.copyTo(outArray);
+                Short4[] result = new Short4[7];
+                for (int Idx = 0; Idx < 7; ++Idx) {
+                    result[Idx] = new Short4(outArray[4*Idx+0], outArray[4*Idx+1], outArray[4*Idx+2], outArray[4*Idx+3]);
+                }
+
+                mResult = result;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_half4(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Short4[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_int {
+        public int[] get() {
+            if (!mGotResult) {
+                int[] outArray = new int[7];
+                mOut.copyTo(outArray);
+                mResult = outArray;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_int(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private int[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_int2 {
+        public Int2[] get() {
+            if (!mGotResult) {
+                int[] outArray = new int[14];
+                mOut.copyTo(outArray);
+                Int2[] result = new Int2[7];
+                for (int Idx = 0; Idx < 7; ++Idx) {
+                    result[Idx] = new Int2(outArray[2*Idx+0], outArray[2*Idx+1]);
+                }
+
+                mResult = result;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_int2(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Int2[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_int4 {
+        public Int4[] get() {
+            if (!mGotResult) {
+                int[] outArray = new int[28];
+                mOut.copyTo(outArray);
+                Int4[] result = new Int4[7];
+                for (int Idx = 0; Idx < 7; ++Idx) {
+                    result[Idx] = new Int4(outArray[4*Idx+0], outArray[4*Idx+1], outArray[4*Idx+2], outArray[4*Idx+3]);
+                }
+
+                mResult = result;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_int4(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Int4[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_long {
+        public long[] get() {
+            if (!mGotResult) {
+                long[] outArray = new long[7];
+                mOut.copyTo(outArray);
+                mResult = outArray;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_long(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private long[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_long2 {
+        public Long2[] get() {
+            if (!mGotResult) {
+                long[] outArray = new long[14];
+                mOut.copyTo(outArray);
+                Long2[] result = new Long2[7];
+                for (int Idx = 0; Idx < 7; ++Idx) {
+                    result[Idx] = new Long2(outArray[2*Idx+0], outArray[2*Idx+1]);
+                }
+
+                mResult = result;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_long2(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Long2[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_long4 {
+        public Long4[] get() {
+            if (!mGotResult) {
+                long[] outArray = new long[28];
+                mOut.copyTo(outArray);
+                Long4[] result = new Long4[7];
+                for (int Idx = 0; Idx < 7; ++Idx) {
+                    result[Idx] = new Long4(outArray[4*Idx+0], outArray[4*Idx+1], outArray[4*Idx+2], outArray[4*Idx+3]);
+                }
+
+                mResult = result;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_long4(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Long4[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_short {
+        public short[] get() {
+            if (!mGotResult) {
+                short[] outArray = new short[7];
+                mOut.copyTo(outArray);
+                mResult = outArray;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_short(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private short[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_short2 {
+        public Short2[] get() {
+            if (!mGotResult) {
+                short[] outArray = new short[14];
+                mOut.copyTo(outArray);
+                Short2[] result = new Short2[7];
+                for (int Idx = 0; Idx < 7; ++Idx) {
+                    result[Idx] = new Short2(outArray[2*Idx+0], outArray[2*Idx+1]);
+                }
+
+                mResult = result;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_short2(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Short2[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_short4 {
+        public Short4[] get() {
+            if (!mGotResult) {
+                short[] outArray = new short[28];
+                mOut.copyTo(outArray);
+                Short4[] result = new Short4[7];
+                for (int Idx = 0; Idx < 7; ++Idx) {
+                    result[Idx] = new Short4(outArray[4*Idx+0], outArray[4*Idx+1], outArray[4*Idx+2], outArray[4*Idx+3]);
+                }
+
+                mResult = result;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_short4(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Short4[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_uchar {
+        public short[] get() {
+            if (!mGotResult) {
+                byte[] outArray = new byte[7];
+                mOut.copyTo(outArray);
+                short[] result = new short[7];
+                for (int Idx = 0; Idx < 7; ++Idx) {
+                    result[Idx] = ((short) ((outArray[Idx]) & (short) 0xff));
+                }
+
+                mResult = result;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_uchar(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private short[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_uchar2 {
+        public Short2[] get() {
+            if (!mGotResult) {
+                byte[] outArray = new byte[14];
+                mOut.copyTo(outArray);
+                Short2[] result = new Short2[7];
+                for (int Idx = 0; Idx < 7; ++Idx) {
+                    result[Idx] = new Short2(((short) ((outArray[2*Idx+0]) & (short) 0xff)), ((short) ((outArray[2*Idx+1]) & (short) 0xff)));
+                }
+
+                mResult = result;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_uchar2(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Short2[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_uchar4 {
+        public Short4[] get() {
+            if (!mGotResult) {
+                byte[] outArray = new byte[28];
+                mOut.copyTo(outArray);
+                Short4[] result = new Short4[7];
+                for (int Idx = 0; Idx < 7; ++Idx) {
+                    result[Idx] = new Short4(((short) ((outArray[4*Idx+0]) & (short) 0xff)), ((short) ((outArray[4*Idx+1]) & (short) 0xff)), ((short) ((outArray[4*Idx+2]) & (short) 0xff)), ((short) ((outArray[4*Idx+3]) & (short) 0xff)));
+                }
+
+                mResult = result;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_uchar4(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Short4[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_uint {
+        public long[] get() {
+            if (!mGotResult) {
+                int[] outArray = new int[7];
+                mOut.copyTo(outArray);
+                long[] result = new long[7];
+                for (int Idx = 0; Idx < 7; ++Idx) {
+                    result[Idx] = ((long) ((outArray[Idx]) & 0xffffffffL));
+                }
+
+                mResult = result;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_uint(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private long[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_uint2 {
+        public Long2[] get() {
+            if (!mGotResult) {
+                int[] outArray = new int[14];
+                mOut.copyTo(outArray);
+                Long2[] result = new Long2[7];
+                for (int Idx = 0; Idx < 7; ++Idx) {
+                    result[Idx] = new Long2(((long) ((outArray[2*Idx+0]) & 0xffffffffL)), ((long) ((outArray[2*Idx+1]) & 0xffffffffL)));
+                }
+
+                mResult = result;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_uint2(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Long2[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_uint4 {
+        public Long4[] get() {
+            if (!mGotResult) {
+                int[] outArray = new int[28];
+                mOut.copyTo(outArray);
+                Long4[] result = new Long4[7];
+                for (int Idx = 0; Idx < 7; ++Idx) {
+                    result[Idx] = new Long4(((long) ((outArray[4*Idx+0]) & 0xffffffffL)), ((long) ((outArray[4*Idx+1]) & 0xffffffffL)), ((long) ((outArray[4*Idx+2]) & 0xffffffffL)), ((long) ((outArray[4*Idx+3]) & 0xffffffffL)));
+                }
+
+                mResult = result;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_uint4(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Long4[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_ulong {
+        public long[] get() {
+            if (!mGotResult) {
+                long[] outArray = new long[7];
+                mOut.copyTo(outArray);
+                for (int Idx = 0; Idx < 7; ++Idx) {
+                    if (outArray[Idx] < 0)
+                        throw new RSRuntimeException("Result is not representible in Java");
+                }
+
+                mResult = outArray;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_ulong(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private long[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_ulong2 {
+        public Long2[] get() {
+            if (!mGotResult) {
+                long[] outArray = new long[14];
+                mOut.copyTo(outArray);
+                for (int Idx = 0; Idx < 14; ++Idx) {
+                    if (outArray[Idx] < 0)
+                        throw new RSRuntimeException("Result is not representible in Java");
+                }
+
+                Long2[] result = new Long2[7];
+                for (int Idx = 0; Idx < 7; ++Idx) {
+                    result[Idx] = new Long2(outArray[2*Idx+0], outArray[2*Idx+1]);
+                }
+
+                mResult = result;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_ulong2(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Long2[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_ulong4 {
+        public Long4[] get() {
+            if (!mGotResult) {
+                long[] outArray = new long[28];
+                mOut.copyTo(outArray);
+                for (int Idx = 0; Idx < 28; ++Idx) {
+                    if (outArray[Idx] < 0)
+                        throw new RSRuntimeException("Result is not representible in Java");
+                }
+
+                Long4[] result = new Long4[7];
+                for (int Idx = 0; Idx < 7; ++Idx) {
+                    result[Idx] = new Long4(outArray[4*Idx+0], outArray[4*Idx+1], outArray[4*Idx+2], outArray[4*Idx+3]);
+                }
+
+                mResult = result;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_ulong4(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Long4[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_ushort {
+        public int[] get() {
+            if (!mGotResult) {
+                short[] outArray = new short[7];
+                mOut.copyTo(outArray);
+                int[] result = new int[7];
+                for (int Idx = 0; Idx < 7; ++Idx) {
+                    result[Idx] = ((int) ((outArray[Idx]) & 0xffff));
+                }
+
+                mResult = result;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_ushort(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private int[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_ushort2 {
+        public Int2[] get() {
+            if (!mGotResult) {
+                short[] outArray = new short[14];
+                mOut.copyTo(outArray);
+                Int2[] result = new Int2[7];
+                for (int Idx = 0; Idx < 7; ++Idx) {
+                    result[Idx] = new Int2(((int) ((outArray[2*Idx+0]) & 0xffff)), ((int) ((outArray[2*Idx+1]) & 0xffff)));
+                }
+
+                mResult = result;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_ushort2(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Int2[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class resultArray7_ushort4 {
+        public Int4[] get() {
+            if (!mGotResult) {
+                short[] outArray = new short[28];
+                mOut.copyTo(outArray);
+                Int4[] result = new Int4[7];
+                for (int Idx = 0; Idx < 7; ++Idx) {
+                    result[Idx] = new Int4(((int) ((outArray[4*Idx+0]) & 0xffff)), ((int) ((outArray[4*Idx+1]) & 0xffff)), ((int) ((outArray[4*Idx+2]) & 0xffff)), ((int) ((outArray[4*Idx+3]) & 0xffff)));
+                }
+
+                mResult = result;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  resultArray7_ushort4(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Int4[] mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_bool {
+        public boolean get() {
+            if (!mGotResult) {
+                byte[] outArray = new byte[1];
+                mOut.copyTo(outArray);
+                mResult = outArray[0] != 0;
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_bool(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private boolean mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_char {
+        public byte get() {
+            if (!mGotResult) {
+                byte[] outArray = new byte[1];
+                mOut.copyTo(outArray);
+                mResult = outArray[0];
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_char(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private byte mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_char2 {
+        public Byte2 get() {
+            if (!mGotResult) {
+                byte[] outArray = new byte[2];
+                mOut.copyTo(outArray);
+                mResult = new Byte2(outArray[0], outArray[1]);
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_char2(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Byte2 mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_char4 {
+        public Byte4 get() {
+            if (!mGotResult) {
+                byte[] outArray = new byte[4];
+                mOut.copyTo(outArray);
+                mResult = new Byte4(outArray[0], outArray[1], outArray[2], outArray[3]);
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_char4(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Byte4 mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_double {
+        public double get() {
+            if (!mGotResult) {
+                double[] outArray = new double[1];
+                mOut.copyTo(outArray);
+                mResult = outArray[0];
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_double(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private double mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_double2 {
+        public Double2 get() {
+            if (!mGotResult) {
+                double[] outArray = new double[2];
+                mOut.copyTo(outArray);
+                mResult = new Double2(outArray[0], outArray[1]);
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_double2(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Double2 mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_double4 {
+        public Double4 get() {
+            if (!mGotResult) {
+                double[] outArray = new double[4];
+                mOut.copyTo(outArray);
+                mResult = new Double4(outArray[0], outArray[1], outArray[2], outArray[3]);
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_double4(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Double4 mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_float {
+        public float get() {
+            if (!mGotResult) {
+                float[] outArray = new float[1];
+                mOut.copyTo(outArray);
+                mResult = outArray[0];
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_float(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private float mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_float2 {
+        public Float2 get() {
+            if (!mGotResult) {
+                float[] outArray = new float[2];
+                mOut.copyTo(outArray);
+                mResult = new Float2(outArray[0], outArray[1]);
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_float2(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Float2 mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_float4 {
+        public Float4 get() {
+            if (!mGotResult) {
+                float[] outArray = new float[4];
+                mOut.copyTo(outArray);
+                mResult = new Float4(outArray[0], outArray[1], outArray[2], outArray[3]);
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_float4(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Float4 mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_half {
+        public short get() {
+            if (!mGotResult) {
+                short[] outArray = new short[1];
+                mOut.copyTo(outArray);
+                mResult = outArray[0];
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_half(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private short mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_half2 {
+        public Short2 get() {
+            if (!mGotResult) {
+                short[] outArray = new short[2];
+                mOut.copyTo(outArray);
+                mResult = new Short2(outArray[0], outArray[1]);
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_half2(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Short2 mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_half4 {
+        public Short4 get() {
+            if (!mGotResult) {
+                short[] outArray = new short[4];
+                mOut.copyTo(outArray);
+                mResult = new Short4(outArray[0], outArray[1], outArray[2], outArray[3]);
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_half4(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Short4 mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_int {
+        public int get() {
+            if (!mGotResult) {
+                int[] outArray = new int[1];
+                mOut.copyTo(outArray);
+                mResult = outArray[0];
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_int(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private int mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_int2 {
+        public Int2 get() {
+            if (!mGotResult) {
+                int[] outArray = new int[2];
+                mOut.copyTo(outArray);
+                mResult = new Int2(outArray[0], outArray[1]);
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_int2(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Int2 mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_int4 {
+        public Int4 get() {
+            if (!mGotResult) {
+                int[] outArray = new int[4];
+                mOut.copyTo(outArray);
+                mResult = new Int4(outArray[0], outArray[1], outArray[2], outArray[3]);
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_int4(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Int4 mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_long {
+        public long get() {
+            if (!mGotResult) {
+                long[] outArray = new long[1];
+                mOut.copyTo(outArray);
+                mResult = outArray[0];
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_long(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private long mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_long2 {
+        public Long2 get() {
+            if (!mGotResult) {
+                long[] outArray = new long[2];
+                mOut.copyTo(outArray);
+                mResult = new Long2(outArray[0], outArray[1]);
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_long2(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Long2 mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_long4 {
+        public Long4 get() {
+            if (!mGotResult) {
+                long[] outArray = new long[4];
+                mOut.copyTo(outArray);
+                mResult = new Long4(outArray[0], outArray[1], outArray[2], outArray[3]);
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_long4(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Long4 mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_short {
+        public short get() {
+            if (!mGotResult) {
+                short[] outArray = new short[1];
+                mOut.copyTo(outArray);
+                mResult = outArray[0];
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_short(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private short mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_short2 {
+        public Short2 get() {
+            if (!mGotResult) {
+                short[] outArray = new short[2];
+                mOut.copyTo(outArray);
+                mResult = new Short2(outArray[0], outArray[1]);
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_short2(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Short2 mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_short4 {
+        public Short4 get() {
+            if (!mGotResult) {
+                short[] outArray = new short[4];
+                mOut.copyTo(outArray);
+                mResult = new Short4(outArray[0], outArray[1], outArray[2], outArray[3]);
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_short4(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Short4 mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_uchar {
+        public short get() {
+            if (!mGotResult) {
+                byte[] outArray = new byte[1];
+                mOut.copyTo(outArray);
+                mResult = ((short) ((outArray[0]) & (short) 0xff));
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_uchar(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private short mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_uchar2 {
+        public Short2 get() {
+            if (!mGotResult) {
+                byte[] outArray = new byte[2];
+                mOut.copyTo(outArray);
+                mResult = new Short2(((short) ((outArray[0]) & (short) 0xff)), ((short) ((outArray[1]) & (short) 0xff)));
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_uchar2(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Short2 mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_uchar4 {
+        public Short4 get() {
+            if (!mGotResult) {
+                byte[] outArray = new byte[4];
+                mOut.copyTo(outArray);
+                mResult = new Short4(((short) ((outArray[0]) & (short) 0xff)), ((short) ((outArray[1]) & (short) 0xff)), ((short) ((outArray[2]) & (short) 0xff)), ((short) ((outArray[3]) & (short) 0xff)));
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_uchar4(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Short4 mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_uint {
+        public long get() {
+            if (!mGotResult) {
+                int[] outArray = new int[1];
+                mOut.copyTo(outArray);
+                mResult = ((long) ((outArray[0]) & 0xffffffffL));
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_uint(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private long mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_uint2 {
+        public Long2 get() {
+            if (!mGotResult) {
+                int[] outArray = new int[2];
+                mOut.copyTo(outArray);
+                mResult = new Long2(((long) ((outArray[0]) & 0xffffffffL)), ((long) ((outArray[1]) & 0xffffffffL)));
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_uint2(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Long2 mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_uint4 {
+        public Long4 get() {
+            if (!mGotResult) {
+                int[] outArray = new int[4];
+                mOut.copyTo(outArray);
+                mResult = new Long4(((long) ((outArray[0]) & 0xffffffffL)), ((long) ((outArray[1]) & 0xffffffffL)), ((long) ((outArray[2]) & 0xffffffffL)), ((long) ((outArray[3]) & 0xffffffffL)));
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_uint4(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Long4 mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_ulong {
+        public long get() {
+            if (!mGotResult) {
+                long[] outArray = new long[1];
+                mOut.copyTo(outArray);
+                if (outArray[0] < 0)
+                    throw new RSRuntimeException("Result is not representible in Java");
+                mResult = outArray[0];
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_ulong(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private long mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_ulong2 {
+        public Long2 get() {
+            if (!mGotResult) {
+                long[] outArray = new long[2];
+                mOut.copyTo(outArray);
+                for (int Idx = 0; Idx < 2; ++Idx) {
+                    if (outArray[Idx] < 0)
+                        throw new RSRuntimeException("Result is not representible in Java");
+                }
+
+                mResult = new Long2(outArray[0], outArray[1]);
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_ulong2(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Long2 mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_ulong4 {
+        public Long4 get() {
+            if (!mGotResult) {
+                long[] outArray = new long[4];
+                mOut.copyTo(outArray);
+                for (int Idx = 0; Idx < 4; ++Idx) {
+                    if (outArray[Idx] < 0)
+                        throw new RSRuntimeException("Result is not representible in Java");
+                }
+
+                mResult = new Long4(outArray[0], outArray[1], outArray[2], outArray[3]);
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_ulong4(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Long4 mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_ushort {
+        public int get() {
+            if (!mGotResult) {
+                short[] outArray = new short[1];
+                mOut.copyTo(outArray);
+                mResult = ((int) ((outArray[0]) & 0xffff));
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_ushort(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private int mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_ushort2 {
+        public Int2 get() {
+            if (!mGotResult) {
+                short[] outArray = new short[2];
+                mOut.copyTo(outArray);
+                mResult = new Int2(((int) ((outArray[0]) & 0xffff)), ((int) ((outArray[1]) & 0xffff)));
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_ushort2(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Int2 mResult;
+    }
+
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_ushort4 {
+        public Int4 get() {
+            if (!mGotResult) {
+                short[] outArray = new short[4];
+                mOut.copyTo(outArray);
+                mResult = new Int4(((int) ((outArray[0]) & 0xffff)), ((int) ((outArray[1]) & 0xffff)), ((int) ((outArray[2]) & 0xffff)), ((int) ((outArray[3]) & 0xffff)));
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_ushort4(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private Int4 mResult;
+    }
+
+    private final static int mExportReduceIdx_my_half = 0;
+    // in1 = "val"
+    public result_half reduce_my_half(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_half result = reduce_my_half(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half val"
+    public result_half reduce_my_half(Allocation ain1) {
+        return reduce_my_half(ain1, null);
+    }
+
+    // ain1 = "half val"
+    public result_half reduce_my_half(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __F16, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half, new Allocation[]{ain1}, aout, sc);
+        return new result_half(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half2 = 1;
+    // in1 = "val", flattened 2-vectors
+    public result_half2 reduce_my_half2(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_half2 result = reduce_my_half2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half2 val"
+    public result_half2 reduce_my_half2(Allocation ain1) {
+        return reduce_my_half2(ain1, null);
+    }
+
+    // ain1 = "half2 val"
+    public result_half2 reduce_my_half2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __F16_2, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half2, new Allocation[]{ain1}, aout, sc);
+        return new result_half2(aout);
+    }
+
+    private final static int mExportReduceIdx_my_half4 = 2;
+    // in1 = "val", flattened 4-vectors
+    public result_half4 reduce_my_half4(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_half4 result = reduce_my_half4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half4 val"
+    public result_half4 reduce_my_half4(Allocation ain1) {
+        return reduce_my_half4(ain1, null);
+    }
+
+    // ain1 = "half4 val"
+    public result_half4 reduce_my_half4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __F16_4, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_half4, new Allocation[]{ain1}, aout, sc);
+        return new result_half4(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_half = 3;
+    // in1 = "val"
+    public resultArray7_half reduce_my_array_half(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_half result = reduce_my_array_half(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half val"
+    public resultArray7_half reduce_my_array_half(Allocation ain1) {
+        return reduce_my_array_half(ain1, null);
+    }
+
+    // ain1 = "half val"
+    public resultArray7_half reduce_my_array_half(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16)) {
+            throw new RSRuntimeException("Type mismatch with F16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __F16, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_half, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_half(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_half2 = 4;
+    // in1 = "val", flattened 2-vectors
+    public resultArray7_half2 reduce_my_array_half2(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_half2 result = reduce_my_array_half2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half2 val"
+    public resultArray7_half2 reduce_my_array_half2(Allocation ain1) {
+        return reduce_my_array_half2(ain1, null);
+    }
+
+    // ain1 = "half2 val"
+    public resultArray7_half2 reduce_my_array_half2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_2)) {
+            throw new RSRuntimeException("Type mismatch with F16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __F16_2, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_half2, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_half2(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_half4 = 5;
+    // in1 = "val", flattened 4-vectors
+    public resultArray7_half4 reduce_my_array_half4(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_half4 result = reduce_my_array_half4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "half4 val"
+    public resultArray7_half4 reduce_my_array_half4(Allocation ain1) {
+        return reduce_my_array_half4(ain1, null);
+    }
+
+    // ain1 = "half4 val"
+    public resultArray7_half4 reduce_my_array_half4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F16_4)) {
+            throw new RSRuntimeException("Type mismatch with F16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __F16_4, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_half4, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_half4(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float = 6;
+    // in1 = "val"
+    public result_float reduce_my_float(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_float result = reduce_my_float(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float val"
+    public result_float reduce_my_float(Allocation ain1) {
+        return reduce_my_float(ain1, null);
+    }
+
+    // ain1 = "float val"
+    public result_float reduce_my_float(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __F32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float, new Allocation[]{ain1}, aout, sc);
+        return new result_float(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float2 = 7;
+    // in1 = "val", flattened 2-vectors
+    public result_float2 reduce_my_float2(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_float2 result = reduce_my_float2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float2 val"
+    public result_float2 reduce_my_float2(Allocation ain1) {
+        return reduce_my_float2(ain1, null);
+    }
+
+    // ain1 = "float2 val"
+    public result_float2 reduce_my_float2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __F32_2, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float2, new Allocation[]{ain1}, aout, sc);
+        return new result_float2(aout);
+    }
+
+    private final static int mExportReduceIdx_my_float4 = 8;
+    // in1 = "val", flattened 4-vectors
+    public result_float4 reduce_my_float4(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_float4 result = reduce_my_float4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float4 val"
+    public result_float4 reduce_my_float4(Allocation ain1) {
+        return reduce_my_float4(ain1, null);
+    }
+
+    // ain1 = "float4 val"
+    public result_float4 reduce_my_float4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __F32_4, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_float4, new Allocation[]{ain1}, aout, sc);
+        return new result_float4(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_float = 9;
+    // in1 = "val"
+    public resultArray7_float reduce_my_array_float(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_float result = reduce_my_array_float(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float val"
+    public resultArray7_float reduce_my_array_float(Allocation ain1) {
+        return reduce_my_array_float(ain1, null);
+    }
+
+    // ain1 = "float val"
+    public resultArray7_float reduce_my_array_float(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32)) {
+            throw new RSRuntimeException("Type mismatch with F32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __F32, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_float, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_float(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_float2 = 10;
+    // in1 = "val", flattened 2-vectors
+    public resultArray7_float2 reduce_my_array_float2(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_float2 result = reduce_my_array_float2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float2 val"
+    public resultArray7_float2 reduce_my_array_float2(Allocation ain1) {
+        return reduce_my_array_float2(ain1, null);
+    }
+
+    // ain1 = "float2 val"
+    public resultArray7_float2 reduce_my_array_float2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_2)) {
+            throw new RSRuntimeException("Type mismatch with F32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __F32_2, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_float2, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_float2(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_float4 = 11;
+    // in1 = "val", flattened 4-vectors
+    public resultArray7_float4 reduce_my_array_float4(float[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_float4 result = reduce_my_array_float4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "float4 val"
+    public resultArray7_float4 reduce_my_array_float4(Allocation ain1) {
+        return reduce_my_array_float4(ain1, null);
+    }
+
+    // ain1 = "float4 val"
+    public resultArray7_float4 reduce_my_array_float4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F32_4)) {
+            throw new RSRuntimeException("Type mismatch with F32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __F32_4, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_float4, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_float4(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double = 12;
+    // in1 = "val"
+    public result_double reduce_my_double(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_double result = reduce_my_double(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double val"
+    public result_double reduce_my_double(Allocation ain1) {
+        return reduce_my_double(ain1, null);
+    }
+
+    // ain1 = "double val"
+    public result_double reduce_my_double(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64)) {
+            throw new RSRuntimeException("Type mismatch with F64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __F64, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double, new Allocation[]{ain1}, aout, sc);
+        return new result_double(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double2 = 13;
+    // in1 = "val", flattened 2-vectors
+    public result_double2 reduce_my_double2(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_double2 result = reduce_my_double2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double2 val"
+    public result_double2 reduce_my_double2(Allocation ain1) {
+        return reduce_my_double2(ain1, null);
+    }
+
+    // ain1 = "double2 val"
+    public result_double2 reduce_my_double2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_2)) {
+            throw new RSRuntimeException("Type mismatch with F64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __F64_2, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double2, new Allocation[]{ain1}, aout, sc);
+        return new result_double2(aout);
+    }
+
+    private final static int mExportReduceIdx_my_double4 = 14;
+    // in1 = "val", flattened 4-vectors
+    public result_double4 reduce_my_double4(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_double4 result = reduce_my_double4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double4 val"
+    public result_double4 reduce_my_double4(Allocation ain1) {
+        return reduce_my_double4(ain1, null);
+    }
+
+    // ain1 = "double4 val"
+    public result_double4 reduce_my_double4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_4)) {
+            throw new RSRuntimeException("Type mismatch with F64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __F64_4, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_double4, new Allocation[]{ain1}, aout, sc);
+        return new result_double4(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_double = 15;
+    // in1 = "val"
+    public resultArray7_double reduce_my_array_double(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_double result = reduce_my_array_double(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double val"
+    public resultArray7_double reduce_my_array_double(Allocation ain1) {
+        return reduce_my_array_double(ain1, null);
+    }
+
+    // ain1 = "double val"
+    public resultArray7_double reduce_my_array_double(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64)) {
+            throw new RSRuntimeException("Type mismatch with F64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __F64, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_double, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_double(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_double2 = 16;
+    // in1 = "val", flattened 2-vectors
+    public resultArray7_double2 reduce_my_array_double2(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_double2 result = reduce_my_array_double2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double2 val"
+    public resultArray7_double2 reduce_my_array_double2(Allocation ain1) {
+        return reduce_my_array_double2(ain1, null);
+    }
+
+    // ain1 = "double2 val"
+    public resultArray7_double2 reduce_my_array_double2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_2)) {
+            throw new RSRuntimeException("Type mismatch with F64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __F64_2, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_double2, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_double2(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_double4 = 17;
+    // in1 = "val", flattened 4-vectors
+    public resultArray7_double4 reduce_my_array_double4(double[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __F64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_double4 result = reduce_my_array_double4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "double4 val"
+    public resultArray7_double4 reduce_my_array_double4(Allocation ain1) {
+        return reduce_my_array_double4(ain1, null);
+    }
+
+    // ain1 = "double4 val"
+    public resultArray7_double4 reduce_my_array_double4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__F64_4)) {
+            throw new RSRuntimeException("Type mismatch with F64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __F64_4, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_double4, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_double4(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char = 18;
+    // in1 = "val"
+    public result_char reduce_my_char(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_char result = reduce_my_char(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char val"
+    public result_char reduce_my_char(Allocation ain1) {
+        return reduce_my_char(ain1, null);
+    }
+
+    // ain1 = "char val"
+    public result_char reduce_my_char(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I8, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char, new Allocation[]{ain1}, aout, sc);
+        return new result_char(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char2 = 19;
+    // in1 = "val", flattened 2-vectors
+    public result_char2 reduce_my_char2(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_char2 result = reduce_my_char2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char2 val"
+    public result_char2 reduce_my_char2(Allocation ain1) {
+        return reduce_my_char2(ain1, null);
+    }
+
+    // ain1 = "char2 val"
+    public result_char2 reduce_my_char2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I8_2, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char2, new Allocation[]{ain1}, aout, sc);
+        return new result_char2(aout);
+    }
+
+    private final static int mExportReduceIdx_my_char4 = 20;
+    // in1 = "val", flattened 4-vectors
+    public result_char4 reduce_my_char4(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_char4 result = reduce_my_char4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char4 val"
+    public result_char4 reduce_my_char4(Allocation ain1) {
+        return reduce_my_char4(ain1, null);
+    }
+
+    // ain1 = "char4 val"
+    public result_char4 reduce_my_char4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I8_4, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_char4, new Allocation[]{ain1}, aout, sc);
+        return new result_char4(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_char = 21;
+    // in1 = "val"
+    public resultArray7_char reduce_my_array_char(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_char result = reduce_my_array_char(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char val"
+    public resultArray7_char reduce_my_array_char(Allocation ain1) {
+        return reduce_my_array_char(ain1, null);
+    }
+
+    // ain1 = "char val"
+    public resultArray7_char reduce_my_array_char(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8)) {
+            throw new RSRuntimeException("Type mismatch with I8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I8, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_char, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_char(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_char2 = 22;
+    // in1 = "val", flattened 2-vectors
+    public resultArray7_char2 reduce_my_array_char2(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_char2 result = reduce_my_array_char2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char2 val"
+    public resultArray7_char2 reduce_my_array_char2(Allocation ain1) {
+        return reduce_my_array_char2(ain1, null);
+    }
+
+    // ain1 = "char2 val"
+    public resultArray7_char2 reduce_my_array_char2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_2)) {
+            throw new RSRuntimeException("Type mismatch with I8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I8_2, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_char2, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_char2(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_char4 = 23;
+    // in1 = "val", flattened 4-vectors
+    public resultArray7_char4 reduce_my_array_char4(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_char4 result = reduce_my_array_char4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "char4 val"
+    public resultArray7_char4 reduce_my_array_char4(Allocation ain1) {
+        return reduce_my_array_char4(ain1, null);
+    }
+
+    // ain1 = "char4 val"
+    public resultArray7_char4 reduce_my_array_char4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I8_4)) {
+            throw new RSRuntimeException("Type mismatch with I8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I8_4, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_char4, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_char4(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short = 24;
+    // in1 = "val"
+    public result_short reduce_my_short(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_short result = reduce_my_short(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short val"
+    public result_short reduce_my_short(Allocation ain1) {
+        return reduce_my_short(ain1, null);
+    }
+
+    // ain1 = "short val"
+    public result_short reduce_my_short(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I16, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short, new Allocation[]{ain1}, aout, sc);
+        return new result_short(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short2 = 25;
+    // in1 = "val", flattened 2-vectors
+    public result_short2 reduce_my_short2(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_short2 result = reduce_my_short2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short2 val"
+    public result_short2 reduce_my_short2(Allocation ain1) {
+        return reduce_my_short2(ain1, null);
+    }
+
+    // ain1 = "short2 val"
+    public result_short2 reduce_my_short2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I16_2, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short2, new Allocation[]{ain1}, aout, sc);
+        return new result_short2(aout);
+    }
+
+    private final static int mExportReduceIdx_my_short4 = 26;
+    // in1 = "val", flattened 4-vectors
+    public result_short4 reduce_my_short4(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_short4 result = reduce_my_short4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short4 val"
+    public result_short4 reduce_my_short4(Allocation ain1) {
+        return reduce_my_short4(ain1, null);
+    }
+
+    // ain1 = "short4 val"
+    public result_short4 reduce_my_short4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I16_4, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_short4, new Allocation[]{ain1}, aout, sc);
+        return new result_short4(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_short = 27;
+    // in1 = "val"
+    public resultArray7_short reduce_my_array_short(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_short result = reduce_my_array_short(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short val"
+    public resultArray7_short reduce_my_array_short(Allocation ain1) {
+        return reduce_my_array_short(ain1, null);
+    }
+
+    // ain1 = "short val"
+    public resultArray7_short reduce_my_array_short(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16)) {
+            throw new RSRuntimeException("Type mismatch with I16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I16, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_short, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_short(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_short2 = 28;
+    // in1 = "val", flattened 2-vectors
+    public resultArray7_short2 reduce_my_array_short2(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_short2 result = reduce_my_array_short2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short2 val"
+    public resultArray7_short2 reduce_my_array_short2(Allocation ain1) {
+        return reduce_my_array_short2(ain1, null);
+    }
+
+    // ain1 = "short2 val"
+    public resultArray7_short2 reduce_my_array_short2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_2)) {
+            throw new RSRuntimeException("Type mismatch with I16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I16_2, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_short2, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_short2(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_short4 = 29;
+    // in1 = "val", flattened 4-vectors
+    public resultArray7_short4 reduce_my_array_short4(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_short4 result = reduce_my_array_short4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "short4 val"
+    public resultArray7_short4 reduce_my_array_short4(Allocation ain1) {
+        return reduce_my_array_short4(ain1, null);
+    }
+
+    // ain1 = "short4 val"
+    public resultArray7_short4 reduce_my_array_short4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I16_4)) {
+            throw new RSRuntimeException("Type mismatch with I16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I16_4, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_short4, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_short4(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int = 30;
+    // in1 = "val"
+    public result_int reduce_my_int(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int result = reduce_my_int(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_int(Allocation ain1) {
+        return reduce_my_int(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public result_int reduce_my_int(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int2 = 31;
+    // in1 = "val", flattened 2-vectors
+    public result_int2 reduce_my_int2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int2 result = reduce_my_int2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int2 val"
+    public result_int2 reduce_my_int2(Allocation ain1) {
+        return reduce_my_int2(ain1, null);
+    }
+
+    // ain1 = "int2 val"
+    public result_int2 reduce_my_int2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_2)) {
+            throw new RSRuntimeException("Type mismatch with I32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32_2, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int2, new Allocation[]{ain1}, aout, sc);
+        return new result_int2(aout);
+    }
+
+    private final static int mExportReduceIdx_my_int4 = 32;
+    // in1 = "val", flattened 4-vectors
+    public result_int4 reduce_my_int4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_int4 result = reduce_my_int4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int4 val"
+    public result_int4 reduce_my_int4(Allocation ain1) {
+        return reduce_my_int4(ain1, null);
+    }
+
+    // ain1 = "int4 val"
+    public result_int4 reduce_my_int4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_4)) {
+            throw new RSRuntimeException("Type mismatch with I32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32_4, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_int4, new Allocation[]{ain1}, aout, sc);
+        return new result_int4(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_int = 33;
+    // in1 = "val"
+    public resultArray7_int reduce_my_array_int(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_int result = reduce_my_array_int(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int val"
+    public resultArray7_int reduce_my_array_int(Allocation ain1) {
+        return reduce_my_array_int(ain1, null);
+    }
+
+    // ain1 = "int val"
+    public resultArray7_int reduce_my_array_int(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32)) {
+            throw new RSRuntimeException("Type mismatch with I32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_int, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_int(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_int2 = 34;
+    // in1 = "val", flattened 2-vectors
+    public resultArray7_int2 reduce_my_array_int2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_int2 result = reduce_my_array_int2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int2 val"
+    public resultArray7_int2 reduce_my_array_int2(Allocation ain1) {
+        return reduce_my_array_int2(ain1, null);
+    }
+
+    // ain1 = "int2 val"
+    public resultArray7_int2 reduce_my_array_int2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_2)) {
+            throw new RSRuntimeException("Type mismatch with I32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32_2, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_int2, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_int2(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_int4 = 35;
+    // in1 = "val", flattened 4-vectors
+    public resultArray7_int4 reduce_my_array_int4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_int4 result = reduce_my_array_int4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "int4 val"
+    public resultArray7_int4 reduce_my_array_int4(Allocation ain1) {
+        return reduce_my_array_int4(ain1, null);
+    }
+
+    // ain1 = "int4 val"
+    public resultArray7_int4 reduce_my_array_int4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I32_4)) {
+            throw new RSRuntimeException("Type mismatch with I32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32_4, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_int4, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_int4(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long = 36;
+    // in1 = "val"
+    public result_long reduce_my_long(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_long result = reduce_my_long(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long val"
+    public result_long reduce_my_long(Allocation ain1) {
+        return reduce_my_long(ain1, null);
+    }
+
+    // ain1 = "long val"
+    public result_long reduce_my_long(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64)) {
+            throw new RSRuntimeException("Type mismatch with I64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I64, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long, new Allocation[]{ain1}, aout, sc);
+        return new result_long(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long2 = 37;
+    // in1 = "val", flattened 2-vectors
+    public result_long2 reduce_my_long2(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_long2 result = reduce_my_long2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long2 val"
+    public result_long2 reduce_my_long2(Allocation ain1) {
+        return reduce_my_long2(ain1, null);
+    }
+
+    // ain1 = "long2 val"
+    public result_long2 reduce_my_long2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_2)) {
+            throw new RSRuntimeException("Type mismatch with I64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I64_2, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long2, new Allocation[]{ain1}, aout, sc);
+        return new result_long2(aout);
+    }
+
+    private final static int mExportReduceIdx_my_long4 = 38;
+    // in1 = "val", flattened 4-vectors
+    public result_long4 reduce_my_long4(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_long4 result = reduce_my_long4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long4 val"
+    public result_long4 reduce_my_long4(Allocation ain1) {
+        return reduce_my_long4(ain1, null);
+    }
+
+    // ain1 = "long4 val"
+    public result_long4 reduce_my_long4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_4)) {
+            throw new RSRuntimeException("Type mismatch with I64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I64_4, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_long4, new Allocation[]{ain1}, aout, sc);
+        return new result_long4(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_long = 39;
+    // in1 = "val"
+    public resultArray7_long reduce_my_array_long(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_long result = reduce_my_array_long(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long val"
+    public resultArray7_long reduce_my_array_long(Allocation ain1) {
+        return reduce_my_array_long(ain1, null);
+    }
+
+    // ain1 = "long val"
+    public resultArray7_long reduce_my_array_long(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64)) {
+            throw new RSRuntimeException("Type mismatch with I64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I64, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_long, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_long(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_long2 = 40;
+    // in1 = "val", flattened 2-vectors
+    public resultArray7_long2 reduce_my_array_long2(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_long2 result = reduce_my_array_long2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long2 val"
+    public resultArray7_long2 reduce_my_array_long2(Allocation ain1) {
+        return reduce_my_array_long2(ain1, null);
+    }
+
+    // ain1 = "long2 val"
+    public resultArray7_long2 reduce_my_array_long2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_2)) {
+            throw new RSRuntimeException("Type mismatch with I64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I64_2, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_long2, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_long2(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_long4 = 41;
+    // in1 = "val", flattened 4-vectors
+    public resultArray7_long4 reduce_my_array_long4(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __I64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_long4 result = reduce_my_array_long4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "long4 val"
+    public resultArray7_long4 reduce_my_array_long4(Allocation ain1) {
+        return reduce_my_array_long4(ain1, null);
+    }
+
+    // ain1 = "long4 val"
+    public resultArray7_long4 reduce_my_array_long4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__I64_4)) {
+            throw new RSRuntimeException("Type mismatch with I64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I64_4, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_long4, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_long4(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar = 42;
+    // in1 = "val"
+    public result_uchar reduce_my_uchar(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_uchar result = reduce_my_uchar(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar val"
+    public result_uchar reduce_my_uchar(Allocation ain1) {
+        return reduce_my_uchar(ain1, null);
+    }
+
+    // ain1 = "uchar val"
+    public result_uchar reduce_my_uchar(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __U8, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar, new Allocation[]{ain1}, aout, sc);
+        return new result_uchar(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar2 = 43;
+    // in1 = "val", flattened 2-vectors
+    public result_uchar2 reduce_my_uchar2(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_uchar2 result = reduce_my_uchar2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar2 val"
+    public result_uchar2 reduce_my_uchar2(Allocation ain1) {
+        return reduce_my_uchar2(ain1, null);
+    }
+
+    // ain1 = "uchar2 val"
+    public result_uchar2 reduce_my_uchar2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __U8_2, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar2, new Allocation[]{ain1}, aout, sc);
+        return new result_uchar2(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uchar4 = 44;
+    // in1 = "val", flattened 4-vectors
+    public result_uchar4 reduce_my_uchar4(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_uchar4 result = reduce_my_uchar4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar4 val"
+    public result_uchar4 reduce_my_uchar4(Allocation ain1) {
+        return reduce_my_uchar4(ain1, null);
+    }
+
+    // ain1 = "uchar4 val"
+    public result_uchar4 reduce_my_uchar4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __U8_4, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uchar4, new Allocation[]{ain1}, aout, sc);
+        return new result_uchar4(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_uchar = 45;
+    // in1 = "val"
+    public resultArray7_uchar reduce_my_array_uchar(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_uchar result = reduce_my_array_uchar(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar val"
+    public resultArray7_uchar reduce_my_array_uchar(Allocation ain1) {
+        return reduce_my_array_uchar(ain1, null);
+    }
+
+    // ain1 = "uchar val"
+    public resultArray7_uchar reduce_my_array_uchar(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8)) {
+            throw new RSRuntimeException("Type mismatch with U8!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __U8, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_uchar, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_uchar(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_uchar2 = 46;
+    // in1 = "val", flattened 2-vectors
+    public resultArray7_uchar2 reduce_my_array_uchar2(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_uchar2 result = reduce_my_array_uchar2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar2 val"
+    public resultArray7_uchar2 reduce_my_array_uchar2(Allocation ain1) {
+        return reduce_my_array_uchar2(ain1, null);
+    }
+
+    // ain1 = "uchar2 val"
+    public resultArray7_uchar2 reduce_my_array_uchar2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_2)) {
+            throw new RSRuntimeException("Type mismatch with U8_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __U8_2, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_uchar2, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_uchar2(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_uchar4 = 47;
+    // in1 = "val", flattened 4-vectors
+    public resultArray7_uchar4 reduce_my_array_uchar4(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U8_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_uchar4 result = reduce_my_array_uchar4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uchar4 val"
+    public resultArray7_uchar4 reduce_my_array_uchar4(Allocation ain1) {
+        return reduce_my_array_uchar4(ain1, null);
+    }
+
+    // ain1 = "uchar4 val"
+    public resultArray7_uchar4 reduce_my_array_uchar4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U8_4)) {
+            throw new RSRuntimeException("Type mismatch with U8_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __U8_4, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_uchar4, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_uchar4(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort = 48;
+    // in1 = "val"
+    public result_ushort reduce_my_ushort(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_ushort result = reduce_my_ushort(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort val"
+    public result_ushort reduce_my_ushort(Allocation ain1) {
+        return reduce_my_ushort(ain1, null);
+    }
+
+    // ain1 = "ushort val"
+    public result_ushort reduce_my_ushort(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __U16, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort, new Allocation[]{ain1}, aout, sc);
+        return new result_ushort(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort2 = 49;
+    // in1 = "val", flattened 2-vectors
+    public result_ushort2 reduce_my_ushort2(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_ushort2 result = reduce_my_ushort2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort2 val"
+    public result_ushort2 reduce_my_ushort2(Allocation ain1) {
+        return reduce_my_ushort2(ain1, null);
+    }
+
+    // ain1 = "ushort2 val"
+    public result_ushort2 reduce_my_ushort2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __U16_2, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort2, new Allocation[]{ain1}, aout, sc);
+        return new result_ushort2(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ushort4 = 50;
+    // in1 = "val", flattened 4-vectors
+    public result_ushort4 reduce_my_ushort4(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_ushort4 result = reduce_my_ushort4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort4 val"
+    public result_ushort4 reduce_my_ushort4(Allocation ain1) {
+        return reduce_my_ushort4(ain1, null);
+    }
+
+    // ain1 = "ushort4 val"
+    public result_ushort4 reduce_my_ushort4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __U16_4, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ushort4, new Allocation[]{ain1}, aout, sc);
+        return new result_ushort4(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_ushort = 51;
+    // in1 = "val"
+    public resultArray7_ushort reduce_my_array_ushort(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_ushort result = reduce_my_array_ushort(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort val"
+    public resultArray7_ushort reduce_my_array_ushort(Allocation ain1) {
+        return reduce_my_array_ushort(ain1, null);
+    }
+
+    // ain1 = "ushort val"
+    public resultArray7_ushort reduce_my_array_ushort(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16)) {
+            throw new RSRuntimeException("Type mismatch with U16!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __U16, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_ushort, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_ushort(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_ushort2 = 52;
+    // in1 = "val", flattened 2-vectors
+    public resultArray7_ushort2 reduce_my_array_ushort2(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_ushort2 result = reduce_my_array_ushort2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort2 val"
+    public resultArray7_ushort2 reduce_my_array_ushort2(Allocation ain1) {
+        return reduce_my_array_ushort2(ain1, null);
+    }
+
+    // ain1 = "ushort2 val"
+    public resultArray7_ushort2 reduce_my_array_ushort2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_2)) {
+            throw new RSRuntimeException("Type mismatch with U16_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __U16_2, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_ushort2, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_ushort2(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_ushort4 = 53;
+    // in1 = "val", flattened 4-vectors
+    public resultArray7_ushort4 reduce_my_array_ushort4(short[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U16_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_ushort4 result = reduce_my_array_ushort4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ushort4 val"
+    public resultArray7_ushort4 reduce_my_array_ushort4(Allocation ain1) {
+        return reduce_my_array_ushort4(ain1, null);
+    }
+
+    // ain1 = "ushort4 val"
+    public resultArray7_ushort4 reduce_my_array_ushort4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U16_4)) {
+            throw new RSRuntimeException("Type mismatch with U16_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __U16_4, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_ushort4, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_ushort4(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint = 54;
+    // in1 = "val"
+    public result_uint reduce_my_uint(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_uint result = reduce_my_uint(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint val"
+    public result_uint reduce_my_uint(Allocation ain1) {
+        return reduce_my_uint(ain1, null);
+    }
+
+    // ain1 = "uint val"
+    public result_uint reduce_my_uint(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32)) {
+            throw new RSRuntimeException("Type mismatch with U32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __U32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint, new Allocation[]{ain1}, aout, sc);
+        return new result_uint(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint2 = 55;
+    // in1 = "val", flattened 2-vectors
+    public result_uint2 reduce_my_uint2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_uint2 result = reduce_my_uint2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint2 val"
+    public result_uint2 reduce_my_uint2(Allocation ain1) {
+        return reduce_my_uint2(ain1, null);
+    }
+
+    // ain1 = "uint2 val"
+    public result_uint2 reduce_my_uint2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_2)) {
+            throw new RSRuntimeException("Type mismatch with U32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __U32_2, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint2, new Allocation[]{ain1}, aout, sc);
+        return new result_uint2(aout);
+    }
+
+    private final static int mExportReduceIdx_my_uint4 = 56;
+    // in1 = "val", flattened 4-vectors
+    public result_uint4 reduce_my_uint4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_uint4 result = reduce_my_uint4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint4 val"
+    public result_uint4 reduce_my_uint4(Allocation ain1) {
+        return reduce_my_uint4(ain1, null);
+    }
+
+    // ain1 = "uint4 val"
+    public result_uint4 reduce_my_uint4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_4)) {
+            throw new RSRuntimeException("Type mismatch with U32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __U32_4, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_uint4, new Allocation[]{ain1}, aout, sc);
+        return new result_uint4(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_uint = 57;
+    // in1 = "val"
+    public resultArray7_uint reduce_my_array_uint(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_uint result = reduce_my_array_uint(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint val"
+    public resultArray7_uint reduce_my_array_uint(Allocation ain1) {
+        return reduce_my_array_uint(ain1, null);
+    }
+
+    // ain1 = "uint val"
+    public resultArray7_uint reduce_my_array_uint(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32)) {
+            throw new RSRuntimeException("Type mismatch with U32!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __U32, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_uint, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_uint(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_uint2 = 58;
+    // in1 = "val", flattened 2-vectors
+    public resultArray7_uint2 reduce_my_array_uint2(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_uint2 result = reduce_my_array_uint2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint2 val"
+    public resultArray7_uint2 reduce_my_array_uint2(Allocation ain1) {
+        return reduce_my_array_uint2(ain1, null);
+    }
+
+    // ain1 = "uint2 val"
+    public resultArray7_uint2 reduce_my_array_uint2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_2)) {
+            throw new RSRuntimeException("Type mismatch with U32_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __U32_2, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_uint2, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_uint2(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_uint4 = 59;
+    // in1 = "val", flattened 4-vectors
+    public resultArray7_uint4 reduce_my_array_uint4(int[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U32_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_uint4 result = reduce_my_array_uint4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "uint4 val"
+    public resultArray7_uint4 reduce_my_array_uint4(Allocation ain1) {
+        return reduce_my_array_uint4(ain1, null);
+    }
+
+    // ain1 = "uint4 val"
+    public resultArray7_uint4 reduce_my_array_uint4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U32_4)) {
+            throw new RSRuntimeException("Type mismatch with U32_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __U32_4, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_uint4, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_uint4(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong = 60;
+    // in1 = "val"
+    public result_ulong reduce_my_ulong(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_ulong result = reduce_my_ulong(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong val"
+    public result_ulong reduce_my_ulong(Allocation ain1) {
+        return reduce_my_ulong(ain1, null);
+    }
+
+    // ain1 = "ulong val"
+    public result_ulong reduce_my_ulong(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64)) {
+            throw new RSRuntimeException("Type mismatch with U64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __U64, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong, new Allocation[]{ain1}, aout, sc);
+        return new result_ulong(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong2 = 61;
+    // in1 = "val", flattened 2-vectors
+    public result_ulong2 reduce_my_ulong2(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_ulong2 result = reduce_my_ulong2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong2 val"
+    public result_ulong2 reduce_my_ulong2(Allocation ain1) {
+        return reduce_my_ulong2(ain1, null);
+    }
+
+    // ain1 = "ulong2 val"
+    public result_ulong2 reduce_my_ulong2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_2)) {
+            throw new RSRuntimeException("Type mismatch with U64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __U64_2, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong2, new Allocation[]{ain1}, aout, sc);
+        return new result_ulong2(aout);
+    }
+
+    private final static int mExportReduceIdx_my_ulong4 = 62;
+    // in1 = "val", flattened 4-vectors
+    public result_ulong4 reduce_my_ulong4(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_ulong4 result = reduce_my_ulong4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong4 val"
+    public result_ulong4 reduce_my_ulong4(Allocation ain1) {
+        return reduce_my_ulong4(ain1, null);
+    }
+
+    // ain1 = "ulong4 val"
+    public result_ulong4 reduce_my_ulong4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_4)) {
+            throw new RSRuntimeException("Type mismatch with U64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __U64_4, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_ulong4, new Allocation[]{ain1}, aout, sc);
+        return new result_ulong4(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_ulong = 63;
+    // in1 = "val"
+    public resultArray7_ulong reduce_my_array_ulong(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_ulong result = reduce_my_array_ulong(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong val"
+    public resultArray7_ulong reduce_my_array_ulong(Allocation ain1) {
+        return reduce_my_array_ulong(ain1, null);
+    }
+
+    // ain1 = "ulong val"
+    public resultArray7_ulong reduce_my_array_ulong(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64)) {
+            throw new RSRuntimeException("Type mismatch with U64!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __U64, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_ulong, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_ulong(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_ulong2 = 64;
+    // in1 = "val", flattened 2-vectors
+    public resultArray7_ulong2 reduce_my_array_ulong2(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 2 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 2 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_2, in1.length / 2);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_ulong2 result = reduce_my_array_ulong2(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong2 val"
+    public resultArray7_ulong2 reduce_my_array_ulong2(Allocation ain1) {
+        return reduce_my_array_ulong2(ain1, null);
+    }
+
+    // ain1 = "ulong2 val"
+    public resultArray7_ulong2 reduce_my_array_ulong2(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_2)) {
+            throw new RSRuntimeException("Type mismatch with U64_2!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __U64_2, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_ulong2, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_ulong2(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_ulong4 = 65;
+    // in1 = "val", flattened 4-vectors
+    public resultArray7_ulong4 reduce_my_array_ulong4(long[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        // Verify that the array length is a multiple of the vector size.
+        if (in1.length % 4 != 0) {
+            throw new RSIllegalArgumentException("Array \"in1\" is not a multiple of 4 in length!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __U64_4, in1.length / 4);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_ulong4 result = reduce_my_array_ulong4(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "ulong4 val"
+    public resultArray7_ulong4 reduce_my_array_ulong4(Allocation ain1) {
+        return reduce_my_array_ulong4(ain1, null);
+    }
+
+    // ain1 = "ulong4 val"
+    public resultArray7_ulong4 reduce_my_array_ulong4(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__U64_4)) {
+            throw new RSRuntimeException("Type mismatch with U64_4!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __U64_4, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_ulong4, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_ulong4(aout);
+    }
+
+    private final static int mExportReduceIdx_my_bool = 66;
+    // in1 = "val"
+    public result_bool reduce_my_bool(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        result_bool result = reduce_my_bool(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "bool val"
+    public result_bool reduce_my_bool(Allocation ain1) {
+        return reduce_my_bool(ain1, null);
+    }
+
+    // ain1 = "bool val"
+    public result_bool reduce_my_bool(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __BOOLEAN, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_bool, new Allocation[]{ain1}, aout, sc);
+        return new result_bool(aout);
+    }
+
+    private final static int mExportReduceIdx_my_array_bool = 67;
+    // in1 = "val"
+    public resultArray7_bool reduce_my_array_bool(byte[] in1) {
+        // Verify that "in1" is non-null.
+        if (in1 == null) {
+            throw new RSIllegalArgumentException("Array \"in1\" is null!");
+        }
+        Allocation ain1 = Allocation.createSized(mRSLocal, __BOOLEAN, in1.length);
+        ain1.setAutoPadding(true);
+        ain1.copyFrom(in1);
+
+        resultArray7_bool result = reduce_my_array_bool(ain1, null);
+        result.mTempIns = new Allocation[]{ain1};
+        return result;
+    }
+
+    // ain1 = "bool val"
+    public resultArray7_bool reduce_my_array_bool(Allocation ain1) {
+        return reduce_my_array_bool(ain1, null);
+    }
+
+    // ain1 = "bool val"
+    public resultArray7_bool reduce_my_array_bool(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__BOOLEAN)) {
+            throw new RSRuntimeException("Type mismatch with BOOLEAN!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __BOOLEAN, 7);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_my_array_bool, new Allocation[]{ain1}, aout, sc);
+        return new resultArray7_bool(aout);
+    }
+
+}
+
diff --git a/slang/tests/P_reduce_general_result/ScriptField_MyStruct.java.expect b/slang/tests/P_reduce_general_result/ScriptField_MyStruct.java.expect
new file mode 100644
index 0000000..9943781
--- /dev/null
+++ b/slang/tests/P_reduce_general_result/ScriptField_MyStruct.java.expect
@@ -0,0 +1,200 @@
+/*
+ * Copyright (C) 2011-2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * This file is auto-generated. DO NOT MODIFY!
+ * The source Renderscript file: reduce_general_result.rs
+ */
+
+package result;
+
+import android.renderscript.*;
+import result.reduce_general_resultBitCode;
+
+/**
+ * @hide
+ */
+public class ScriptField_MyStruct extends android.renderscript.Script.FieldBase {
+    static public class Item {
+
+        float f;
+        double d;
+
+        Item() {
+        }
+
+    }
+
+    private Item mItemArray[];
+    private FieldPacker mIOBuffer;
+    private static java.lang.ref.WeakReference<Element> mElementCache = new java.lang.ref.WeakReference<Element>(null);
+    public static Element createElement(RenderScript rs) {
+        Element.Builder eb = new Element.Builder(rs);
+        eb.add(Element.F32(rs), "f");
+        eb.add(Element.U32(rs), "#rs_padding_1");
+        eb.add(Element.F64(rs), "d");
+        return eb.create();
+    }
+
+    private  ScriptField_MyStruct(RenderScript rs) {
+        mItemArray = null;
+        mIOBuffer = null;
+        mElement = createElement(rs);
+    }
+
+    public  ScriptField_MyStruct(RenderScript rs, int count) {
+        mItemArray = null;
+        mIOBuffer = null;
+        mElement = createElement(rs);
+        init(rs, count);
+    }
+
+    public  ScriptField_MyStruct(RenderScript rs, int count, int usages) {
+        mItemArray = null;
+        mIOBuffer = null;
+        mElement = createElement(rs);
+        init(rs, count, usages);
+    }
+
+    public static ScriptField_MyStruct create1D(RenderScript rs, int dimX, int usages) {
+        ScriptField_MyStruct obj = new ScriptField_MyStruct(rs);
+        obj.mAllocation = Allocation.createSized(rs, obj.mElement, dimX, usages);
+        return obj;
+    }
+
+    public static ScriptField_MyStruct create1D(RenderScript rs, int dimX) {
+        return create1D(rs, dimX, Allocation.USAGE_SCRIPT);
+    }
+
+    public static ScriptField_MyStruct create2D(RenderScript rs, int dimX, int dimY) {
+        return create2D(rs, dimX, dimY, Allocation.USAGE_SCRIPT);
+    }
+
+    public static ScriptField_MyStruct create2D(RenderScript rs, int dimX, int dimY, int usages) {
+        ScriptField_MyStruct obj = new ScriptField_MyStruct(rs);
+        Type.Builder b = new Type.Builder(rs, obj.mElement);
+        b.setX(dimX);
+        b.setY(dimY);
+        Type t = b.create();
+        obj.mAllocation = Allocation.createTyped(rs, t, usages);
+        return obj;
+    }
+
+    public static Type.Builder createTypeBuilder(RenderScript rs) {
+        Element e = createElement(rs);
+        return new Type.Builder(rs, e);
+    }
+
+    public static ScriptField_MyStruct createCustom(RenderScript rs, Type.Builder tb, int usages) {
+        ScriptField_MyStruct obj = new ScriptField_MyStruct(rs);
+        Type t = tb.create();
+        if (t.getElement() != obj.mElement) {
+            throw new RSIllegalArgumentException("Type.Builder did not match expected element type.");
+        }
+        obj.mAllocation = Allocation.createTyped(rs, t, usages);
+        return obj;
+    }
+
+    private void copyToArrayLocal(Item i, FieldPacker fp) {
+        fp.addF32(i.f);
+        fp.skip(4);
+        fp.addF64(i.d);
+    }
+
+    private void copyToArray(Item i, int index) {
+        if (mIOBuffer == null) mIOBuffer = new FieldPacker(mElement.getBytesSize() * getType().getX()/* count */);
+        mIOBuffer.reset(index * mElement.getBytesSize());
+        copyToArrayLocal(i, mIOBuffer);
+    }
+
+    public synchronized void set(Item i, int index, boolean copyNow) {
+        if (mItemArray == null) mItemArray = new Item[getType().getX() /* count */];
+        mItemArray[index] = i;
+        if (copyNow)  {
+            copyToArray(i, index);
+            FieldPacker fp = new FieldPacker(mElement.getBytesSize());
+            copyToArrayLocal(i, fp);
+            mAllocation.setFromFieldPacker(index, fp);
+        }
+
+    }
+
+    public synchronized Item get(int index) {
+        if (mItemArray == null) return null;
+        return mItemArray[index];
+    }
+
+    public synchronized void set_f(int index, float v, boolean copyNow) {
+        if (mIOBuffer == null) mIOBuffer = new FieldPacker(mElement.getBytesSize() * getType().getX()/* count */);
+        if (mItemArray == null) mItemArray = new Item[getType().getX() /* count */];
+        if (mItemArray[index] == null) mItemArray[index] = new Item();
+        mItemArray[index].f = v;
+        if (copyNow)  {
+            mIOBuffer.reset(index * mElement.getBytesSize());
+            mIOBuffer.addF32(v);
+            FieldPacker fp = new FieldPacker(4);
+            fp.addF32(v);
+            mAllocation.setFromFieldPacker(index, 0, fp);
+        }
+
+    }
+
+    public synchronized void set_d(int index, double v, boolean copyNow) {
+        if (mIOBuffer == null) mIOBuffer = new FieldPacker(mElement.getBytesSize() * getType().getX()/* count */);
+        if (mItemArray == null) mItemArray = new Item[getType().getX() /* count */];
+        if (mItemArray[index] == null) mItemArray[index] = new Item();
+        mItemArray[index].d = v;
+        if (copyNow)  {
+            mIOBuffer.reset(index * mElement.getBytesSize() + 8);
+            mIOBuffer.addF64(v);
+            FieldPacker fp = new FieldPacker(8);
+            fp.addF64(v);
+            mAllocation.setFromFieldPacker(index, 2, fp);
+        }
+
+    }
+
+    public synchronized float get_f(int index) {
+        if (mItemArray == null) return 0;
+        return mItemArray[index].f;
+    }
+
+    public synchronized double get_d(int index) {
+        if (mItemArray == null) return 0;
+        return mItemArray[index].d;
+    }
+
+    public synchronized void copyAll() {
+        for (int ct = 0; ct < mItemArray.length; ct++) copyToArray(mItemArray[ct], ct);
+        mAllocation.setFromFieldPacker(0, mIOBuffer);
+    }
+
+    public synchronized void resize(int newSize) {
+        if (mItemArray != null)  {
+            int oldSize = mItemArray.length;
+            int copySize = Math.min(oldSize, newSize);
+            if (newSize == oldSize) return;
+            Item ni[] = new Item[newSize];
+            System.arraycopy(mItemArray, 0, ni, 0, copySize);
+            mItemArray = ni;
+        }
+
+        mAllocation.resize(newSize);
+        if (mIOBuffer != null) mIOBuffer = new FieldPacker(mElement.getBytesSize() * getType().getX()/* count */);
+    }
+
+}
+
diff --git a/slang/tests/P_reduce_general_result/gen-result.pl b/slang/tests/P_reduce_general_result/gen-result.pl
new file mode 100755
index 0000000..66dad34
--- /dev/null
+++ b/slang/tests/P_reduce_general_result/gen-result.pl
@@ -0,0 +1,47 @@
+#!/usr/bin/perl -w
+
+# Generate trivial test cases to exercise result types.
+
+use strict;
+
+my @basicTypes = ("half", "float", "double",
+                  "char", "short", "int", "long",
+                  "uchar", "ushort", "uint", "ulong",
+                  "bool",
+                  "MyStruct");
+
+# 1 signifies non-vector
+# 3 is not supported for exported types
+my @vecLengths = (1, 2, 4);
+
+print "// -Wall -Werror\n";
+print "#pragma version(1)\n";
+print "#pragma rs java_package_name(result)\n\n";
+print "// This test case was created by $0.\n";
+print "// It exercises all legal Java-reflectable result types, so that we can ensure\n";
+print "// (a) We do not choke when compiling them\n";
+print "// (b) We reflect them correctly\n\n";
+print "// One example struct type\n";
+print "typedef struct MyStruct { float f; double d; } MyStruct;\n";
+
+foreach my $basicType (@basicTypes) {
+  for (my $isArray = 0; $isArray <= 1; ++$isArray) {
+    foreach my $vecLen (@vecLengths) {
+
+      # There are no bool vectors or struct vectors
+      next if ($vecLen > 1) && (($basicType eq "bool") || ($basicType eq "MyStruct"));
+
+      my $eltName = $basicType;
+      $eltName .= $vecLen if ($vecLen > 1);
+      my $resultName = ($isArray ? "array_${eltName}" : $eltName);
+      my $reduceName = "my_${resultName}";
+      my $accumName = "${reduceName}_accum";
+      my $combName = "${reduceName}_comb";
+      print "\n";
+      print "#pragma rs reduce(${reduceName}) accumulator(${accumName}) combiner(${combName})\n";
+      print "typedef ${eltName} ${resultName}[7];\n" if ($isArray);
+      print "static void ${accumName}(${resultName} *accum, ${eltName} val) { }\n";
+      print "static void ${combName}(${resultName} *accum, const ${resultName} *other) { }\n";
+    }
+  }
+}
diff --git a/slang/tests/P_reduce_general_result/reduce_general_result.rs b/slang/tests/P_reduce_general_result/reduce_general_result.rs
new file mode 100644
index 0000000..06c38bc
--- /dev/null
+++ b/slang/tests/P_reduce_general_result/reduce_general_result.rs
@@ -0,0 +1,326 @@
+// -Wall -Werror
+#pragma version(1)
+#pragma rs java_package_name(result)
+
+// This test case was created by ./gen-result.pl.
+// It exercises all legal Java-reflectable result types, so that we can ensure
+// (a) We do not choke when compiling them
+// (b) We reflect them correctly
+
+// One example struct type
+typedef struct MyStruct { float f; double d; } MyStruct;
+
+#pragma rs reduce(my_half) accumulator(my_half_accum) combiner(my_half_comb)
+static void my_half_accum(half *accum, half val) { }
+static void my_half_comb(half *accum, const half *other) { }
+
+#pragma rs reduce(my_half2) accumulator(my_half2_accum) combiner(my_half2_comb)
+static void my_half2_accum(half2 *accum, half2 val) { }
+static void my_half2_comb(half2 *accum, const half2 *other) { }
+
+#pragma rs reduce(my_half4) accumulator(my_half4_accum) combiner(my_half4_comb)
+static void my_half4_accum(half4 *accum, half4 val) { }
+static void my_half4_comb(half4 *accum, const half4 *other) { }
+
+#pragma rs reduce(my_array_half) accumulator(my_array_half_accum) combiner(my_array_half_comb)
+typedef half array_half[7];
+static void my_array_half_accum(array_half *accum, half val) { }
+static void my_array_half_comb(array_half *accum, const array_half *other) { }
+
+#pragma rs reduce(my_array_half2) accumulator(my_array_half2_accum) combiner(my_array_half2_comb)
+typedef half2 array_half2[7];
+static void my_array_half2_accum(array_half2 *accum, half2 val) { }
+static void my_array_half2_comb(array_half2 *accum, const array_half2 *other) { }
+
+#pragma rs reduce(my_array_half4) accumulator(my_array_half4_accum) combiner(my_array_half4_comb)
+typedef half4 array_half4[7];
+static void my_array_half4_accum(array_half4 *accum, half4 val) { }
+static void my_array_half4_comb(array_half4 *accum, const array_half4 *other) { }
+
+#pragma rs reduce(my_float) accumulator(my_float_accum) combiner(my_float_comb)
+static void my_float_accum(float *accum, float val) { }
+static void my_float_comb(float *accum, const float *other) { }
+
+#pragma rs reduce(my_float2) accumulator(my_float2_accum) combiner(my_float2_comb)
+static void my_float2_accum(float2 *accum, float2 val) { }
+static void my_float2_comb(float2 *accum, const float2 *other) { }
+
+#pragma rs reduce(my_float4) accumulator(my_float4_accum) combiner(my_float4_comb)
+static void my_float4_accum(float4 *accum, float4 val) { }
+static void my_float4_comb(float4 *accum, const float4 *other) { }
+
+#pragma rs reduce(my_array_float) accumulator(my_array_float_accum) combiner(my_array_float_comb)
+typedef float array_float[7];
+static void my_array_float_accum(array_float *accum, float val) { }
+static void my_array_float_comb(array_float *accum, const array_float *other) { }
+
+#pragma rs reduce(my_array_float2) accumulator(my_array_float2_accum) combiner(my_array_float2_comb)
+typedef float2 array_float2[7];
+static void my_array_float2_accum(array_float2 *accum, float2 val) { }
+static void my_array_float2_comb(array_float2 *accum, const array_float2 *other) { }
+
+#pragma rs reduce(my_array_float4) accumulator(my_array_float4_accum) combiner(my_array_float4_comb)
+typedef float4 array_float4[7];
+static void my_array_float4_accum(array_float4 *accum, float4 val) { }
+static void my_array_float4_comb(array_float4 *accum, const array_float4 *other) { }
+
+#pragma rs reduce(my_double) accumulator(my_double_accum) combiner(my_double_comb)
+static void my_double_accum(double *accum, double val) { }
+static void my_double_comb(double *accum, const double *other) { }
+
+#pragma rs reduce(my_double2) accumulator(my_double2_accum) combiner(my_double2_comb)
+static void my_double2_accum(double2 *accum, double2 val) { }
+static void my_double2_comb(double2 *accum, const double2 *other) { }
+
+#pragma rs reduce(my_double4) accumulator(my_double4_accum) combiner(my_double4_comb)
+static void my_double4_accum(double4 *accum, double4 val) { }
+static void my_double4_comb(double4 *accum, const double4 *other) { }
+
+#pragma rs reduce(my_array_double) accumulator(my_array_double_accum) combiner(my_array_double_comb)
+typedef double array_double[7];
+static void my_array_double_accum(array_double *accum, double val) { }
+static void my_array_double_comb(array_double *accum, const array_double *other) { }
+
+#pragma rs reduce(my_array_double2) accumulator(my_array_double2_accum) combiner(my_array_double2_comb)
+typedef double2 array_double2[7];
+static void my_array_double2_accum(array_double2 *accum, double2 val) { }
+static void my_array_double2_comb(array_double2 *accum, const array_double2 *other) { }
+
+#pragma rs reduce(my_array_double4) accumulator(my_array_double4_accum) combiner(my_array_double4_comb)
+typedef double4 array_double4[7];
+static void my_array_double4_accum(array_double4 *accum, double4 val) { }
+static void my_array_double4_comb(array_double4 *accum, const array_double4 *other) { }
+
+#pragma rs reduce(my_char) accumulator(my_char_accum) combiner(my_char_comb)
+static void my_char_accum(char *accum, char val) { }
+static void my_char_comb(char *accum, const char *other) { }
+
+#pragma rs reduce(my_char2) accumulator(my_char2_accum) combiner(my_char2_comb)
+static void my_char2_accum(char2 *accum, char2 val) { }
+static void my_char2_comb(char2 *accum, const char2 *other) { }
+
+#pragma rs reduce(my_char4) accumulator(my_char4_accum) combiner(my_char4_comb)
+static void my_char4_accum(char4 *accum, char4 val) { }
+static void my_char4_comb(char4 *accum, const char4 *other) { }
+
+#pragma rs reduce(my_array_char) accumulator(my_array_char_accum) combiner(my_array_char_comb)
+typedef char array_char[7];
+static void my_array_char_accum(array_char *accum, char val) { }
+static void my_array_char_comb(array_char *accum, const array_char *other) { }
+
+#pragma rs reduce(my_array_char2) accumulator(my_array_char2_accum) combiner(my_array_char2_comb)
+typedef char2 array_char2[7];
+static void my_array_char2_accum(array_char2 *accum, char2 val) { }
+static void my_array_char2_comb(array_char2 *accum, const array_char2 *other) { }
+
+#pragma rs reduce(my_array_char4) accumulator(my_array_char4_accum) combiner(my_array_char4_comb)
+typedef char4 array_char4[7];
+static void my_array_char4_accum(array_char4 *accum, char4 val) { }
+static void my_array_char4_comb(array_char4 *accum, const array_char4 *other) { }
+
+#pragma rs reduce(my_short) accumulator(my_short_accum) combiner(my_short_comb)
+static void my_short_accum(short *accum, short val) { }
+static void my_short_comb(short *accum, const short *other) { }
+
+#pragma rs reduce(my_short2) accumulator(my_short2_accum) combiner(my_short2_comb)
+static void my_short2_accum(short2 *accum, short2 val) { }
+static void my_short2_comb(short2 *accum, const short2 *other) { }
+
+#pragma rs reduce(my_short4) accumulator(my_short4_accum) combiner(my_short4_comb)
+static void my_short4_accum(short4 *accum, short4 val) { }
+static void my_short4_comb(short4 *accum, const short4 *other) { }
+
+#pragma rs reduce(my_array_short) accumulator(my_array_short_accum) combiner(my_array_short_comb)
+typedef short array_short[7];
+static void my_array_short_accum(array_short *accum, short val) { }
+static void my_array_short_comb(array_short *accum, const array_short *other) { }
+
+#pragma rs reduce(my_array_short2) accumulator(my_array_short2_accum) combiner(my_array_short2_comb)
+typedef short2 array_short2[7];
+static void my_array_short2_accum(array_short2 *accum, short2 val) { }
+static void my_array_short2_comb(array_short2 *accum, const array_short2 *other) { }
+
+#pragma rs reduce(my_array_short4) accumulator(my_array_short4_accum) combiner(my_array_short4_comb)
+typedef short4 array_short4[7];
+static void my_array_short4_accum(array_short4 *accum, short4 val) { }
+static void my_array_short4_comb(array_short4 *accum, const array_short4 *other) { }
+
+#pragma rs reduce(my_int) accumulator(my_int_accum) combiner(my_int_comb)
+static void my_int_accum(int *accum, int val) { }
+static void my_int_comb(int *accum, const int *other) { }
+
+#pragma rs reduce(my_int2) accumulator(my_int2_accum) combiner(my_int2_comb)
+static void my_int2_accum(int2 *accum, int2 val) { }
+static void my_int2_comb(int2 *accum, const int2 *other) { }
+
+#pragma rs reduce(my_int4) accumulator(my_int4_accum) combiner(my_int4_comb)
+static void my_int4_accum(int4 *accum, int4 val) { }
+static void my_int4_comb(int4 *accum, const int4 *other) { }
+
+#pragma rs reduce(my_array_int) accumulator(my_array_int_accum) combiner(my_array_int_comb)
+typedef int array_int[7];
+static void my_array_int_accum(array_int *accum, int val) { }
+static void my_array_int_comb(array_int *accum, const array_int *other) { }
+
+#pragma rs reduce(my_array_int2) accumulator(my_array_int2_accum) combiner(my_array_int2_comb)
+typedef int2 array_int2[7];
+static void my_array_int2_accum(array_int2 *accum, int2 val) { }
+static void my_array_int2_comb(array_int2 *accum, const array_int2 *other) { }
+
+#pragma rs reduce(my_array_int4) accumulator(my_array_int4_accum) combiner(my_array_int4_comb)
+typedef int4 array_int4[7];
+static void my_array_int4_accum(array_int4 *accum, int4 val) { }
+static void my_array_int4_comb(array_int4 *accum, const array_int4 *other) { }
+
+#pragma rs reduce(my_long) accumulator(my_long_accum) combiner(my_long_comb)
+static void my_long_accum(long *accum, long val) { }
+static void my_long_comb(long *accum, const long *other) { }
+
+#pragma rs reduce(my_long2) accumulator(my_long2_accum) combiner(my_long2_comb)
+static void my_long2_accum(long2 *accum, long2 val) { }
+static void my_long2_comb(long2 *accum, const long2 *other) { }
+
+#pragma rs reduce(my_long4) accumulator(my_long4_accum) combiner(my_long4_comb)
+static void my_long4_accum(long4 *accum, long4 val) { }
+static void my_long4_comb(long4 *accum, const long4 *other) { }
+
+#pragma rs reduce(my_array_long) accumulator(my_array_long_accum) combiner(my_array_long_comb)
+typedef long array_long[7];
+static void my_array_long_accum(array_long *accum, long val) { }
+static void my_array_long_comb(array_long *accum, const array_long *other) { }
+
+#pragma rs reduce(my_array_long2) accumulator(my_array_long2_accum) combiner(my_array_long2_comb)
+typedef long2 array_long2[7];
+static void my_array_long2_accum(array_long2 *accum, long2 val) { }
+static void my_array_long2_comb(array_long2 *accum, const array_long2 *other) { }
+
+#pragma rs reduce(my_array_long4) accumulator(my_array_long4_accum) combiner(my_array_long4_comb)
+typedef long4 array_long4[7];
+static void my_array_long4_accum(array_long4 *accum, long4 val) { }
+static void my_array_long4_comb(array_long4 *accum, const array_long4 *other) { }
+
+#pragma rs reduce(my_uchar) accumulator(my_uchar_accum) combiner(my_uchar_comb)
+static void my_uchar_accum(uchar *accum, uchar val) { }
+static void my_uchar_comb(uchar *accum, const uchar *other) { }
+
+#pragma rs reduce(my_uchar2) accumulator(my_uchar2_accum) combiner(my_uchar2_comb)
+static void my_uchar2_accum(uchar2 *accum, uchar2 val) { }
+static void my_uchar2_comb(uchar2 *accum, const uchar2 *other) { }
+
+#pragma rs reduce(my_uchar4) accumulator(my_uchar4_accum) combiner(my_uchar4_comb)
+static void my_uchar4_accum(uchar4 *accum, uchar4 val) { }
+static void my_uchar4_comb(uchar4 *accum, const uchar4 *other) { }
+
+#pragma rs reduce(my_array_uchar) accumulator(my_array_uchar_accum) combiner(my_array_uchar_comb)
+typedef uchar array_uchar[7];
+static void my_array_uchar_accum(array_uchar *accum, uchar val) { }
+static void my_array_uchar_comb(array_uchar *accum, const array_uchar *other) { }
+
+#pragma rs reduce(my_array_uchar2) accumulator(my_array_uchar2_accum) combiner(my_array_uchar2_comb)
+typedef uchar2 array_uchar2[7];
+static void my_array_uchar2_accum(array_uchar2 *accum, uchar2 val) { }
+static void my_array_uchar2_comb(array_uchar2 *accum, const array_uchar2 *other) { }
+
+#pragma rs reduce(my_array_uchar4) accumulator(my_array_uchar4_accum) combiner(my_array_uchar4_comb)
+typedef uchar4 array_uchar4[7];
+static void my_array_uchar4_accum(array_uchar4 *accum, uchar4 val) { }
+static void my_array_uchar4_comb(array_uchar4 *accum, const array_uchar4 *other) { }
+
+#pragma rs reduce(my_ushort) accumulator(my_ushort_accum) combiner(my_ushort_comb)
+static void my_ushort_accum(ushort *accum, ushort val) { }
+static void my_ushort_comb(ushort *accum, const ushort *other) { }
+
+#pragma rs reduce(my_ushort2) accumulator(my_ushort2_accum) combiner(my_ushort2_comb)
+static void my_ushort2_accum(ushort2 *accum, ushort2 val) { }
+static void my_ushort2_comb(ushort2 *accum, const ushort2 *other) { }
+
+#pragma rs reduce(my_ushort4) accumulator(my_ushort4_accum) combiner(my_ushort4_comb)
+static void my_ushort4_accum(ushort4 *accum, ushort4 val) { }
+static void my_ushort4_comb(ushort4 *accum, const ushort4 *other) { }
+
+#pragma rs reduce(my_array_ushort) accumulator(my_array_ushort_accum) combiner(my_array_ushort_comb)
+typedef ushort array_ushort[7];
+static void my_array_ushort_accum(array_ushort *accum, ushort val) { }
+static void my_array_ushort_comb(array_ushort *accum, const array_ushort *other) { }
+
+#pragma rs reduce(my_array_ushort2) accumulator(my_array_ushort2_accum) combiner(my_array_ushort2_comb)
+typedef ushort2 array_ushort2[7];
+static void my_array_ushort2_accum(array_ushort2 *accum, ushort2 val) { }
+static void my_array_ushort2_comb(array_ushort2 *accum, const array_ushort2 *other) { }
+
+#pragma rs reduce(my_array_ushort4) accumulator(my_array_ushort4_accum) combiner(my_array_ushort4_comb)
+typedef ushort4 array_ushort4[7];
+static void my_array_ushort4_accum(array_ushort4 *accum, ushort4 val) { }
+static void my_array_ushort4_comb(array_ushort4 *accum, const array_ushort4 *other) { }
+
+#pragma rs reduce(my_uint) accumulator(my_uint_accum) combiner(my_uint_comb)
+static void my_uint_accum(uint *accum, uint val) { }
+static void my_uint_comb(uint *accum, const uint *other) { }
+
+#pragma rs reduce(my_uint2) accumulator(my_uint2_accum) combiner(my_uint2_comb)
+static void my_uint2_accum(uint2 *accum, uint2 val) { }
+static void my_uint2_comb(uint2 *accum, const uint2 *other) { }
+
+#pragma rs reduce(my_uint4) accumulator(my_uint4_accum) combiner(my_uint4_comb)
+static void my_uint4_accum(uint4 *accum, uint4 val) { }
+static void my_uint4_comb(uint4 *accum, const uint4 *other) { }
+
+#pragma rs reduce(my_array_uint) accumulator(my_array_uint_accum) combiner(my_array_uint_comb)
+typedef uint array_uint[7];
+static void my_array_uint_accum(array_uint *accum, uint val) { }
+static void my_array_uint_comb(array_uint *accum, const array_uint *other) { }
+
+#pragma rs reduce(my_array_uint2) accumulator(my_array_uint2_accum) combiner(my_array_uint2_comb)
+typedef uint2 array_uint2[7];
+static void my_array_uint2_accum(array_uint2 *accum, uint2 val) { }
+static void my_array_uint2_comb(array_uint2 *accum, const array_uint2 *other) { }
+
+#pragma rs reduce(my_array_uint4) accumulator(my_array_uint4_accum) combiner(my_array_uint4_comb)
+typedef uint4 array_uint4[7];
+static void my_array_uint4_accum(array_uint4 *accum, uint4 val) { }
+static void my_array_uint4_comb(array_uint4 *accum, const array_uint4 *other) { }
+
+#pragma rs reduce(my_ulong) accumulator(my_ulong_accum) combiner(my_ulong_comb)
+static void my_ulong_accum(ulong *accum, ulong val) { }
+static void my_ulong_comb(ulong *accum, const ulong *other) { }
+
+#pragma rs reduce(my_ulong2) accumulator(my_ulong2_accum) combiner(my_ulong2_comb)
+static void my_ulong2_accum(ulong2 *accum, ulong2 val) { }
+static void my_ulong2_comb(ulong2 *accum, const ulong2 *other) { }
+
+#pragma rs reduce(my_ulong4) accumulator(my_ulong4_accum) combiner(my_ulong4_comb)
+static void my_ulong4_accum(ulong4 *accum, ulong4 val) { }
+static void my_ulong4_comb(ulong4 *accum, const ulong4 *other) { }
+
+#pragma rs reduce(my_array_ulong) accumulator(my_array_ulong_accum) combiner(my_array_ulong_comb)
+typedef ulong array_ulong[7];
+static void my_array_ulong_accum(array_ulong *accum, ulong val) { }
+static void my_array_ulong_comb(array_ulong *accum, const array_ulong *other) { }
+
+#pragma rs reduce(my_array_ulong2) accumulator(my_array_ulong2_accum) combiner(my_array_ulong2_comb)
+typedef ulong2 array_ulong2[7];
+static void my_array_ulong2_accum(array_ulong2 *accum, ulong2 val) { }
+static void my_array_ulong2_comb(array_ulong2 *accum, const array_ulong2 *other) { }
+
+#pragma rs reduce(my_array_ulong4) accumulator(my_array_ulong4_accum) combiner(my_array_ulong4_comb)
+typedef ulong4 array_ulong4[7];
+static void my_array_ulong4_accum(array_ulong4 *accum, ulong4 val) { }
+static void my_array_ulong4_comb(array_ulong4 *accum, const array_ulong4 *other) { }
+
+#pragma rs reduce(my_bool) accumulator(my_bool_accum) combiner(my_bool_comb)
+static void my_bool_accum(bool *accum, bool val) { }
+static void my_bool_comb(bool *accum, const bool *other) { }
+
+#pragma rs reduce(my_array_bool) accumulator(my_array_bool_accum) combiner(my_array_bool_comb)
+typedef bool array_bool[7];
+static void my_array_bool_accum(array_bool *accum, bool val) { }
+static void my_array_bool_comb(array_bool *accum, const array_bool *other) { }
+
+#pragma rs reduce(my_MyStruct) accumulator(my_MyStruct_accum) combiner(my_MyStruct_comb)
+static void my_MyStruct_accum(MyStruct *accum, MyStruct val) { }
+static void my_MyStruct_comb(MyStruct *accum, const MyStruct *other) { }
+
+#pragma rs reduce(my_array_MyStruct) accumulator(my_array_MyStruct_accum) combiner(my_array_MyStruct_comb)
+typedef MyStruct array_MyStruct[7];
+static void my_array_MyStruct_accum(array_MyStruct *accum, MyStruct val) { }
+static void my_array_MyStruct_comb(array_MyStruct *accum, const array_MyStruct *other) { }
diff --git a/slang/tests/P_reduce_general_result/stderr.txt.expect b/slang/tests/P_reduce_general_result/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_reduce_general_result/stderr.txt.expect
diff --git a/slang/tests/P_reduce_general_result/stdout.txt.expect b/slang/tests/P_reduce_general_result/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_reduce_general_result/stdout.txt.expect
diff --git a/slang/tests/P_reduce_general_struct/ScriptC_reduce_general_struct.java.expect b/slang/tests/P_reduce_general_struct/ScriptC_reduce_general_struct.java.expect
new file mode 100644
index 0000000..983ea39
--- /dev/null
+++ b/slang/tests/P_reduce_general_struct/ScriptC_reduce_general_struct.java.expect
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2011-2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * This file is auto-generated. DO NOT MODIFY!
+ * The source Renderscript file: reduce_general_struct.rs
+ */
+
+package struct;
+
+import android.renderscript.*;
+import struct.reduce_general_structBitCode;
+
+/**
+ * @hide
+ */
+public class ScriptC_reduce_general_struct extends ScriptC {
+    private static final String __rs_resource_name = "reduce_general_struct";
+    // Constructor
+    public  ScriptC_reduce_general_struct(RenderScript rs) {
+        super(rs,
+              __rs_resource_name,
+              reduce_general_structBitCode.getBitCode32(),
+              reduce_general_structBitCode.getBitCode64());
+        mRSLocal = rs;
+        __I32 = Element.I32(rs);
+        __ScriptField_MyStruct = ScriptField_MyStruct.createElement(rs);
+    }
+
+    private Element __I32;
+    private Element __ScriptField_MyStruct;
+    private RenderScript mRSLocal;
+    // To obtain the result, invoke get(), which blocks
+    // until the asynchronously-launched operation has completed.
+    public static class result_int {
+        public int get() {
+            if (!mGotResult) {
+                int[] outArray = new int[1];
+                mOut.copyTo(outArray);
+                mResult = outArray[0];
+                mOut.destroy();
+                mOut = null;  // make Java object eligible for garbage collection
+                if (mTempIns != null) {
+                    for (Allocation tempIn : mTempIns) {
+                        tempIn.destroy();
+                    }
+
+                    mTempIns = null;  // make Java objects eligible for garbage collection
+                }
+
+                mGotResult = true;
+            }
+
+            return mResult;
+        }
+
+        private  result_int(Allocation out) {
+            mTempIns = null;
+            mOut = out;
+            mGotResult = false;
+        }
+
+        private Allocation[] mTempIns;
+        private Allocation mOut;
+        private boolean mGotResult;
+        private int mResult;
+    }
+
+    private final static int mExportReduceIdx_inStruct = 0;
+    // ain1 = "/* struct <> */ val"
+    public result_int reduce_inStruct(Allocation ain1) {
+        return reduce_inStruct(ain1, null);
+    }
+
+    // ain1 = "/* struct <> */ val"
+    public result_int reduce_inStruct(Allocation ain1, Script.LaunchOptions sc) {
+        // check ain1
+        if (!ain1.getType().getElement().isCompatible(__ScriptField_MyStruct)) {
+            throw new RSRuntimeException("Type mismatch with ScriptField_MyStruct!");
+        }
+        Allocation aout = Allocation.createSized(mRSLocal, __I32, 1);
+        aout.setAutoPadding(true);
+        reduce(mExportReduceIdx_inStruct, new Allocation[]{ain1}, aout, sc);
+        return new result_int(aout);
+    }
+
+}
+
diff --git a/slang/tests/P_reduce_general_struct/reduce_general_struct.rs b/slang/tests/P_reduce_general_struct/reduce_general_struct.rs
new file mode 100644
index 0000000..ac6951e
--- /dev/null
+++ b/slang/tests/P_reduce_general_struct/reduce_general_struct.rs
@@ -0,0 +1,15 @@
+// -target-api 0 -Wall
+#pragma version(1)
+#pragma rs java_package_name(struct)
+
+typedef struct MyStruct { int f; } MyStruct;
+
+// No Java array method reflection for kernel with struct input (only Allocation method reflection)
+#pragma rs reduce(inStruct) accumulator(inStructAccum) combiner(inStructComb)
+static void inStructAccum(int *accum, MyStruct val) { }
+static void inStructComb(int *accum, const int *other) { }
+
+// No Java reflection at all for kernel with struct result
+#pragma rs reduce(outStruct) accumulator(outStructAccum) outconverter(outStructOut)
+static void outStructAccum(int *accum, int val) { }
+static void outStructOut(MyStruct *out, const int *accum) { }
diff --git a/slang/tests/P_reduce_general_struct/stderr.txt.expect b/slang/tests/P_reduce_general_struct/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_reduce_general_struct/stderr.txt.expect
diff --git a/slang/tests/P_reduce_general_struct/stdout.txt.expect b/slang/tests/P_reduce_general_struct/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_reduce_general_struct/stdout.txt.expect
diff --git a/slang/tests/P_refcount/refcount.rs b/slang/tests/P_refcount/refcount.rs
new file mode 100644
index 0000000..96cb9d6
--- /dev/null
+++ b/slang/tests/P_refcount/refcount.rs
@@ -0,0 +1,33 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+rs_allocation globalAlloc;
+rs_allocation globalAlloc2;
+
+struct hasMatrix {
+    rs_matrix3x3 m;
+} ghm;
+
+static void foo() {
+
+    rs_allocation allocUninit;
+    rs_allocation allocArr[10];
+    allocUninit = globalAlloc;
+    for (int i = 0; i < 10; i++) {
+        allocArr[i] = globalAlloc;
+    }
+
+    return;
+}
+
+void singleStmt() {
+    struct hasMatrix h = ghm;
+    ghm = h;
+    globalAlloc = globalAlloc2;
+}
+
+int root(void) {
+    foo();
+    return 10;
+}
+
diff --git a/slang/tests/P_refcount/stderr.txt.expect b/slang/tests/P_refcount/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_refcount/stderr.txt.expect
diff --git a/slang/tests/P_refcount/stdout.txt.expect b/slang/tests/P_refcount/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_refcount/stdout.txt.expect
diff --git a/slang/tests/P_root_11_i/root_11_i.rs b/slang/tests/P_root_11_i/root_11_i.rs
new file mode 100644
index 0000000..105569f
--- /dev/null
+++ b/slang/tests/P_root_11_i/root_11_i.rs
@@ -0,0 +1,6 @@
+// -target-api 11
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void root(const int *in) {
+}
diff --git a/slang/tests/P_root_11_i/stderr.txt.expect b/slang/tests/P_root_11_i/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_root_11_i/stderr.txt.expect
diff --git a/slang/tests/P_root_11_i/stdout.txt.expect b/slang/tests/P_root_11_i/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_root_11_i/stdout.txt.expect
diff --git a/slang/tests/P_root_11_iouxy/root_11_iouxy.rs b/slang/tests/P_root_11_iouxy/root_11_iouxy.rs
new file mode 100644
index 0000000..2cd0667
--- /dev/null
+++ b/slang/tests/P_root_11_iouxy/root_11_iouxy.rs
@@ -0,0 +1,6 @@
+// -target-api 11
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void root(const int *in, int *out, const int *usrData, uint32_t x, uint32_t y) {
+}
diff --git a/slang/tests/P_root_11_iouxy/stderr.txt.expect b/slang/tests/P_root_11_iouxy/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_root_11_iouxy/stderr.txt.expect
diff --git a/slang/tests/P_root_11_iouxy/stdout.txt.expect b/slang/tests/P_root_11_iouxy/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_root_11_iouxy/stdout.txt.expect
diff --git a/slang/tests/P_root_compute/root_compute.rs b/slang/tests/P_root_compute/root_compute.rs
new file mode 100644
index 0000000..e668380
--- /dev/null
+++ b/slang/tests/P_root_compute/root_compute.rs
@@ -0,0 +1,6 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void root(const int *ain, int *aout, const void *usrData,
+          uint32_t x, uint32_t y) {
+}
diff --git a/slang/tests/P_root_compute/stderr.txt.expect b/slang/tests/P_root_compute/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_root_compute/stderr.txt.expect
diff --git a/slang/tests/P_root_compute/stdout.txt.expect b/slang/tests/P_root_compute/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_root_compute/stdout.txt.expect
diff --git a/slang/tests/P_root_compute_int32_xy/root_compute_int32_xy.rs b/slang/tests/P_root_compute_int32_xy/root_compute_int32_xy.rs
new file mode 100644
index 0000000..37df481
--- /dev/null
+++ b/slang/tests/P_root_compute_int32_xy/root_compute_int32_xy.rs
@@ -0,0 +1,10 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void root_old(const int *ain, int *aout, int x, int y) {
+  *aout = *ain + x + y;
+}
+
+int RS_KERNEL root_new(int in, int x, int y) {
+  return in + x + y;
+}
diff --git a/slang/tests/P_root_compute_int32_xy/stderr.txt.expect b/slang/tests/P_root_compute_int32_xy/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_root_compute_int32_xy/stderr.txt.expect
diff --git a/slang/tests/P_root_compute_int32_xy/stdout.txt.expect b/slang/tests/P_root_compute_int32_xy/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_root_compute_int32_xy/stdout.txt.expect
diff --git a/slang/tests/P_root_compute_non_void_ptr_usrData/root_compute_non_void_ptr_usrData.rs b/slang/tests/P_root_compute_non_void_ptr_usrData/root_compute_non_void_ptr_usrData.rs
new file mode 100644
index 0000000..cf7f318
--- /dev/null
+++ b/slang/tests/P_root_compute_non_void_ptr_usrData/root_compute_non_void_ptr_usrData.rs
@@ -0,0 +1,5 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void root(const int *ain, int *aout, const int *usrData) {
+}
diff --git a/slang/tests/P_root_compute_non_void_ptr_usrData/stderr.txt.expect b/slang/tests/P_root_compute_non_void_ptr_usrData/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_root_compute_non_void_ptr_usrData/stderr.txt.expect
diff --git a/slang/tests/P_root_compute_non_void_ptr_usrData/stdout.txt.expect b/slang/tests/P_root_compute_non_void_ptr_usrData/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_root_compute_non_void_ptr_usrData/stdout.txt.expect
diff --git a/slang/tests/P_root_graphics/root_graphics.rs b/slang/tests/P_root_graphics/root_graphics.rs
new file mode 100644
index 0000000..62ec241
--- /dev/null
+++ b/slang/tests/P_root_graphics/root_graphics.rs
@@ -0,0 +1,8 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+typedef int myInt;
+
+myInt root(void) {
+    return 10;
+}
diff --git a/slang/tests/P_root_graphics/stderr.txt.expect b/slang/tests/P_root_graphics/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_root_graphics/stderr.txt.expect
diff --git a/slang/tests/P_root_graphics/stdout.txt.expect b/slang/tests/P_root_graphics/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_root_graphics/stdout.txt.expect
diff --git a/slang/tests/P_root_graphics_13/root_graphics_13.rs b/slang/tests/P_root_graphics_13/root_graphics_13.rs
new file mode 100644
index 0000000..882bea1
--- /dev/null
+++ b/slang/tests/P_root_graphics_13/root_graphics_13.rs
@@ -0,0 +1,9 @@
+// -target-api 13
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+typedef int myInt;
+
+myInt root(myInt launchID) {
+    return 10;
+}
diff --git a/slang/tests/P_root_graphics_13/stderr.txt.expect b/slang/tests/P_root_graphics_13/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_root_graphics_13/stderr.txt.expect
diff --git a/slang/tests/P_root_graphics_13/stdout.txt.expect b/slang/tests/P_root_graphics_13/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_root_graphics_13/stdout.txt.expect
diff --git a/slang/tests/P_root_void/root_void.rs b/slang/tests/P_root_void/root_void.rs
new file mode 100644
index 0000000..13bed22
--- /dev/null
+++ b/slang/tests/P_root_void/root_void.rs
@@ -0,0 +1,83 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+void root(const void *ain, void *aout, const void *usrData,
+          uint32_t x, uint32_t y) {
+}
+
+void in_only(const void *ain) {
+}
+
+void in_x_only(const void *ain, uint32_t x) {
+}
+
+void in_y_only(const void *ain, uint32_t y) {
+}
+
+void in_x_y_only(const void *ain, uint32_t x, uint32_t y) {
+}
+
+void in_usrdata_only(const void *ain, const void *usrData) {
+}
+
+void in_usrdata_x_only(const void *ain, const void *usrData, uint32_t x) {
+}
+
+void in_usrdata_y_only(const void *ain, const void *usrData, uint32_t y) {
+}
+
+void in_usrdata_x_y_only(const void *ain, const void *usrData, uint32_t x,
+                         uint32_t y) {
+}
+
+void out_only(void *aout) {
+}
+
+void out_x_only(void *aout, uint32_t x) {
+}
+
+void out_y_only(void *aout, uint32_t y) {
+}
+
+void out_x_y_only(void *aout, uint32_t x, uint32_t y) {
+}
+
+void out_usrdata_only(void *aout, const void *usrData) {
+}
+
+void out_usrdata_x_only(void *aout, const void *usrData, uint32_t x) {
+}
+
+void out_usrdata_y_only(void *aout, const void *usrData, uint32_t y) {
+}
+
+void out_usrdata_x_y_only(void *aout, const void *usrData, uint32_t x,
+                         uint32_t y) {
+}
+
+void in_out_only(const void *ain, void *aout) {
+}
+
+void in_out_x_only(const void *ain, void *aout, uint32_t x) {
+}
+
+void in_out_y_only(const void *ain, void *aout, uint32_t y) {
+}
+
+void in_out_x_y_only(const void *ain, void *aout, uint32_t x, uint32_t y) {
+}
+
+void in_out_usrdata_only(const void *ain, void *aout, const void *usrData) {
+}
+
+void in_out_usrdata_x_only(const void *ain, void *aout, const void *usrData,
+                           uint32_t x) {
+}
+
+void in_out_usrdata_y_only(const void *ain, void *aout, const void *usrData,
+                           uint32_t y) {
+}
+
+void in_out_usrdata_x_y_only(const void *ain, void *aout, const void *usrData,
+                             uint32_t x, uint32_t y) {
+}
diff --git a/slang/tests/P_root_void/stderr.txt.expect b/slang/tests/P_root_void/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_root_void/stderr.txt.expect
diff --git a/slang/tests/P_root_void/stdout.txt.expect b/slang/tests/P_root_void/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_root_void/stdout.txt.expect
diff --git a/slang/tests/P_rs_fp_full/rs_fp_full.rs b/slang/tests/P_rs_fp_full/rs_fp_full.rs
new file mode 100644
index 0000000..35050fc
--- /dev/null
+++ b/slang/tests/P_rs_fp_full/rs_fp_full.rs
@@ -0,0 +1,5 @@
+#pragma version(1)
+#pragma rs java_package_name(android.renderscript.cts)
+
+#pragma rs_fp_full
+
diff --git a/slang/tests/P_rs_fp_full/stderr.txt.expect b/slang/tests/P_rs_fp_full/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_rs_fp_full/stderr.txt.expect
diff --git a/slang/tests/P_rs_fp_full/stdout.txt.expect b/slang/tests/P_rs_fp_full/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_rs_fp_full/stdout.txt.expect
diff --git a/slang/tests/P_rs_fp_imprecise/rs_fp_imprecise.rs b/slang/tests/P_rs_fp_imprecise/rs_fp_imprecise.rs
new file mode 100644
index 0000000..98c4c91
--- /dev/null
+++ b/slang/tests/P_rs_fp_imprecise/rs_fp_imprecise.rs
@@ -0,0 +1,5 @@
+#pragma version(1)
+#pragma rs java_package_name(android.renderscript.cts)
+
+#pragma rs_fp_imprecise
+
diff --git a/slang/tests/P_rs_fp_imprecise/stderr.txt.expect b/slang/tests/P_rs_fp_imprecise/stderr.txt.expect
new file mode 100644
index 0000000..0d86335
--- /dev/null
+++ b/slang/tests/P_rs_fp_imprecise/stderr.txt.expect
@@ -0,0 +1 @@
+rs_fp_imprecise.rs:4:9: warning: rs_fp_imprecise is deprecated.  Assuming rs_fp_relaxed instead.
diff --git a/slang/tests/P_rs_fp_imprecise/stdout.txt.expect b/slang/tests/P_rs_fp_imprecise/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_rs_fp_imprecise/stdout.txt.expect
diff --git a/slang/tests/P_rs_fp_relaxed/rs_fp_relaxed.rs b/slang/tests/P_rs_fp_relaxed/rs_fp_relaxed.rs
new file mode 100644
index 0000000..dfa8c82
--- /dev/null
+++ b/slang/tests/P_rs_fp_relaxed/rs_fp_relaxed.rs
@@ -0,0 +1,5 @@
+#pragma version(1)
+#pragma rs java_package_name(android.renderscript.cts)
+
+#pragma rs_fp_relaxed
+
diff --git a/slang/tests/P_rs_fp_relaxed/stderr.txt.expect b/slang/tests/P_rs_fp_relaxed/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_rs_fp_relaxed/stderr.txt.expect
diff --git a/slang/tests/P_rs_fp_relaxed/stdout.txt.expect b/slang/tests/P_rs_fp_relaxed/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_rs_fp_relaxed/stdout.txt.expect
diff --git a/slang/tests/P_rs_package_name/rs_package_name.rs b/slang/tests/P_rs_package_name/rs_package_name.rs
new file mode 100644
index 0000000..ac62324
--- /dev/null
+++ b/slang/tests/P_rs_package_name/rs_package_name.rs
@@ -0,0 +1,4 @@
+// -rs-package-name different.rs.package.name
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
diff --git a/slang/tests/P_rs_package_name/stderr.txt.expect b/slang/tests/P_rs_package_name/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_rs_package_name/stderr.txt.expect
diff --git a/slang/tests/P_rs_package_name/stdout.txt.expect b/slang/tests/P_rs_package_name/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_rs_package_name/stdout.txt.expect
diff --git a/slang/tests/P_set_target_api_11/IN_CTS b/slang/tests/P_set_target_api_11/IN_CTS
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_set_target_api_11/IN_CTS
diff --git a/slang/tests/P_set_target_api_11/set_target_api_11.rs b/slang/tests/P_set_target_api_11/set_target_api_11.rs
new file mode 100644
index 0000000..412b21d
--- /dev/null
+++ b/slang/tests/P_set_target_api_11/set_target_api_11.rs
@@ -0,0 +1,21 @@
+// -target-api 11
+#pragma version(1)
+#pragma rs java_package_name(android.renderscript.cts)
+
+#if RS_VERSION != 11
+#error Invalid RS_VERSION
+#endif
+
+#define RS_MSG_TEST_PASSED 100
+#define RS_MSG_TEST_FAILED 101
+
+void check(unsigned int version) {
+    if (version != RS_VERSION) {
+        rsDebug("version: ", version);
+        rsDebug("RS_VERSION: ", RS_VERSION);
+        rsSendToClient(RS_MSG_TEST_FAILED);
+    } else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/slang/tests/P_set_target_api_11/stderr.txt.expect b/slang/tests/P_set_target_api_11/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_set_target_api_11/stderr.txt.expect
diff --git a/slang/tests/P_set_target_api_11/stdout.txt.expect b/slang/tests/P_set_target_api_11/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_set_target_api_11/stdout.txt.expect
diff --git a/slang/tests/P_set_target_api_12/IN_CTS b/slang/tests/P_set_target_api_12/IN_CTS
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_set_target_api_12/IN_CTS
diff --git a/slang/tests/P_set_target_api_12/set_target_api_12.rs b/slang/tests/P_set_target_api_12/set_target_api_12.rs
new file mode 100644
index 0000000..69e36a4
--- /dev/null
+++ b/slang/tests/P_set_target_api_12/set_target_api_12.rs
@@ -0,0 +1,21 @@
+// -target-api 12
+#pragma version(1)
+#pragma rs java_package_name(android.renderscript.cts)
+
+#if RS_VERSION != 12
+#error Invalid RS_VERSION
+#endif
+
+#define RS_MSG_TEST_PASSED 100
+#define RS_MSG_TEST_FAILED 101
+
+void check(unsigned int version) {
+    if (version != RS_VERSION) {
+        rsDebug("version: ", version);
+        rsDebug("RS_VERSION: ", RS_VERSION);
+        rsSendToClient(RS_MSG_TEST_FAILED);
+    } else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/slang/tests/P_set_target_api_12/stderr.txt.expect b/slang/tests/P_set_target_api_12/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_set_target_api_12/stderr.txt.expect
diff --git a/slang/tests/P_set_target_api_12/stdout.txt.expect b/slang/tests/P_set_target_api_12/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_set_target_api_12/stdout.txt.expect
diff --git a/slang/tests/P_set_target_api_13/IN_CTS b/slang/tests/P_set_target_api_13/IN_CTS
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_set_target_api_13/IN_CTS
diff --git a/slang/tests/P_set_target_api_13/set_target_api_13.rs b/slang/tests/P_set_target_api_13/set_target_api_13.rs
new file mode 100644
index 0000000..64c8cac
--- /dev/null
+++ b/slang/tests/P_set_target_api_13/set_target_api_13.rs
@@ -0,0 +1,21 @@
+// -target-api 13
+#pragma version(1)
+#pragma rs java_package_name(android.renderscript.cts)
+
+#if RS_VERSION != 13
+#error Invalid RS_VERSION
+#endif
+
+#define RS_MSG_TEST_PASSED 100
+#define RS_MSG_TEST_FAILED 101
+
+void check(unsigned int version) {
+    if (version != RS_VERSION) {
+        rsDebug("version: ", version);
+        rsDebug("RS_VERSION: ", RS_VERSION);
+        rsSendToClient(RS_MSG_TEST_FAILED);
+    } else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/slang/tests/P_set_target_api_13/stderr.txt.expect b/slang/tests/P_set_target_api_13/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_set_target_api_13/stderr.txt.expect
diff --git a/slang/tests/P_set_target_api_13/stdout.txt.expect b/slang/tests/P_set_target_api_13/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_set_target_api_13/stdout.txt.expect
diff --git a/slang/tests/P_set_target_api_14/IN_CTS b/slang/tests/P_set_target_api_14/IN_CTS
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_set_target_api_14/IN_CTS
diff --git a/slang/tests/P_set_target_api_14/set_target_api_14.rs b/slang/tests/P_set_target_api_14/set_target_api_14.rs
new file mode 100644
index 0000000..b2be554
--- /dev/null
+++ b/slang/tests/P_set_target_api_14/set_target_api_14.rs
@@ -0,0 +1,21 @@
+// -target-api 14
+#pragma version(1)
+#pragma rs java_package_name(android.renderscript.cts)
+
+#if RS_VERSION != 14
+#error Invalid RS_VERSION
+#endif
+
+#define RS_MSG_TEST_PASSED 100
+#define RS_MSG_TEST_FAILED 101
+
+void check(unsigned int version) {
+    if (version != RS_VERSION) {
+        rsDebug("version: ", version);
+        rsDebug("RS_VERSION: ", RS_VERSION);
+        rsSendToClient(RS_MSG_TEST_FAILED);
+    } else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/slang/tests/P_set_target_api_14/stderr.txt.expect b/slang/tests/P_set_target_api_14/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_set_target_api_14/stderr.txt.expect
diff --git a/slang/tests/P_set_target_api_14/stdout.txt.expect b/slang/tests/P_set_target_api_14/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_set_target_api_14/stdout.txt.expect
diff --git a/slang/tests/P_set_target_api_15/IN_CTS b/slang/tests/P_set_target_api_15/IN_CTS
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_set_target_api_15/IN_CTS
diff --git a/slang/tests/P_set_target_api_15/set_target_api_15.rs b/slang/tests/P_set_target_api_15/set_target_api_15.rs
new file mode 100644
index 0000000..f9d2b59
--- /dev/null
+++ b/slang/tests/P_set_target_api_15/set_target_api_15.rs
@@ -0,0 +1,21 @@
+// -target-api 15
+#pragma version(1)
+#pragma rs java_package_name(android.renderscript.cts)
+
+#if RS_VERSION != 15
+#error Invalid RS_VERSION
+#endif
+
+#define RS_MSG_TEST_PASSED 100
+#define RS_MSG_TEST_FAILED 101
+
+void check(unsigned int version) {
+    if (version != RS_VERSION) {
+        rsDebug("version: ", version);
+        rsDebug("RS_VERSION: ", RS_VERSION);
+        rsSendToClient(RS_MSG_TEST_FAILED);
+    } else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/slang/tests/P_set_target_api_15/stderr.txt.expect b/slang/tests/P_set_target_api_15/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_set_target_api_15/stderr.txt.expect
diff --git a/slang/tests/P_set_target_api_15/stdout.txt.expect b/slang/tests/P_set_target_api_15/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_set_target_api_15/stdout.txt.expect
diff --git a/slang/tests/P_set_target_api_16/IN_CTS b/slang/tests/P_set_target_api_16/IN_CTS
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_set_target_api_16/IN_CTS
diff --git a/slang/tests/P_set_target_api_16/set_target_api_16.rs b/slang/tests/P_set_target_api_16/set_target_api_16.rs
new file mode 100644
index 0000000..a0f823f
--- /dev/null
+++ b/slang/tests/P_set_target_api_16/set_target_api_16.rs
@@ -0,0 +1,21 @@
+// -target-api 16
+#pragma version(1)
+#pragma rs java_package_name(android.renderscript.cts)
+
+#if RS_VERSION != 16
+#error Invalid RS_VERSION
+#endif
+
+#define RS_MSG_TEST_PASSED 100
+#define RS_MSG_TEST_FAILED 101
+
+void check(unsigned int version) {
+    if (version != RS_VERSION) {
+        rsDebug("version: ", version);
+        rsDebug("RS_VERSION: ", RS_VERSION);
+        rsSendToClient(RS_MSG_TEST_FAILED);
+    } else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/slang/tests/P_set_target_api_16/stderr.txt.expect b/slang/tests/P_set_target_api_16/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_set_target_api_16/stderr.txt.expect
diff --git a/slang/tests/P_set_target_api_16/stdout.txt.expect b/slang/tests/P_set_target_api_16/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_set_target_api_16/stdout.txt.expect
diff --git a/slang/tests/P_set_target_api_17/IN_CTS b/slang/tests/P_set_target_api_17/IN_CTS
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_set_target_api_17/IN_CTS
diff --git a/slang/tests/P_set_target_api_17/set_target_api_17.rs b/slang/tests/P_set_target_api_17/set_target_api_17.rs
new file mode 100644
index 0000000..3361c48
--- /dev/null
+++ b/slang/tests/P_set_target_api_17/set_target_api_17.rs
@@ -0,0 +1,21 @@
+// -target-api 17
+#pragma version(1)
+#pragma rs java_package_name(android.renderscript.cts)
+
+#if RS_VERSION != 17
+#error Invalid RS_VERSION
+#endif
+
+#define RS_MSG_TEST_PASSED 100
+#define RS_MSG_TEST_FAILED 101
+
+void check(unsigned int version) {
+    if (version != RS_VERSION) {
+        rsDebug("version: ", version);
+        rsDebug("RS_VERSION: ", RS_VERSION);
+        rsSendToClient(RS_MSG_TEST_FAILED);
+    } else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/slang/tests/P_set_target_api_17/stderr.txt.expect b/slang/tests/P_set_target_api_17/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_set_target_api_17/stderr.txt.expect
diff --git a/slang/tests/P_set_target_api_17/stdout.txt.expect b/slang/tests/P_set_target_api_17/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_set_target_api_17/stdout.txt.expect
diff --git a/slang/tests/P_set_target_api_18/IN_CTS b/slang/tests/P_set_target_api_18/IN_CTS
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_set_target_api_18/IN_CTS
diff --git a/slang/tests/P_set_target_api_18/set_target_api_18.rs b/slang/tests/P_set_target_api_18/set_target_api_18.rs
new file mode 100644
index 0000000..a898735
--- /dev/null
+++ b/slang/tests/P_set_target_api_18/set_target_api_18.rs
@@ -0,0 +1,21 @@
+// -target-api 18
+#pragma version(1)
+#pragma rs java_package_name(android.renderscript.cts)
+
+#if RS_VERSION != 18
+#error Invalid RS_VERSION
+#endif
+
+#define RS_MSG_TEST_PASSED 100
+#define RS_MSG_TEST_FAILED 101
+
+void check(unsigned int version) {
+    if (version != RS_VERSION) {
+        rsDebug("version: ", version);
+        rsDebug("RS_VERSION: ", RS_VERSION);
+        rsSendToClient(RS_MSG_TEST_FAILED);
+    } else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/slang/tests/P_set_target_api_18/stderr.txt.expect b/slang/tests/P_set_target_api_18/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_set_target_api_18/stderr.txt.expect
diff --git a/slang/tests/P_set_target_api_18/stdout.txt.expect b/slang/tests/P_set_target_api_18/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_set_target_api_18/stdout.txt.expect
diff --git a/slang/tests/P_set_target_api_19/IN_CTS b/slang/tests/P_set_target_api_19/IN_CTS
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_set_target_api_19/IN_CTS
diff --git a/slang/tests/P_set_target_api_19/set_target_api_19.rs b/slang/tests/P_set_target_api_19/set_target_api_19.rs
new file mode 100644
index 0000000..6d290b9
--- /dev/null
+++ b/slang/tests/P_set_target_api_19/set_target_api_19.rs
@@ -0,0 +1,21 @@
+// -target-api 19
+#pragma version(1)
+#pragma rs java_package_name(android.renderscript.cts)
+
+#if RS_VERSION != 19
+#error Invalid RS_VERSION
+#endif
+
+#define RS_MSG_TEST_PASSED 100
+#define RS_MSG_TEST_FAILED 101
+
+void check(unsigned int version) {
+    if (version != RS_VERSION) {
+        rsDebug("version: ", version);
+        rsDebug("RS_VERSION: ", RS_VERSION);
+        rsSendToClient(RS_MSG_TEST_FAILED);
+    } else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/slang/tests/P_set_target_api_19/stderr.txt.expect b/slang/tests/P_set_target_api_19/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_set_target_api_19/stderr.txt.expect
diff --git a/slang/tests/P_set_target_api_19/stdout.txt.expect b/slang/tests/P_set_target_api_19/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_set_target_api_19/stdout.txt.expect
diff --git a/slang/tests/P_set_target_api_development/set_target_api_development.rs b/slang/tests/P_set_target_api_development/set_target_api_development.rs
new file mode 100644
index 0000000..0bcad66
--- /dev/null
+++ b/slang/tests/P_set_target_api_development/set_target_api_development.rs
@@ -0,0 +1,17 @@
+// -target-api 0
+#pragma version(1)
+#pragma rs java_package_name(android.renderscript.cts)
+
+#define RS_MSG_TEST_PASSED 100
+#define RS_MSG_TEST_FAILED 101
+
+void check(unsigned int version) {
+    if (version != RS_VERSION) {
+        rsDebug("version: ", version);
+        rsDebug("RS_VERSION: ", RS_VERSION);
+        rsSendToClient(RS_MSG_TEST_FAILED);
+    } else {
+        rsSendToClientBlocking(RS_MSG_TEST_PASSED);
+    }
+}
+
diff --git a/slang/tests/P_set_target_api_development/stderr.txt.expect b/slang/tests/P_set_target_api_development/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_set_target_api_development/stderr.txt.expect
diff --git a/slang/tests/P_set_target_api_development/stdout.txt.expect b/slang/tests/P_set_target_api_development/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_set_target_api_development/stdout.txt.expect
diff --git a/slang/tests/P_static_struct/static_struct.rs b/slang/tests/P_static_struct/static_struct.rs
new file mode 100644
index 0000000..0b3e9ec
--- /dev/null
+++ b/slang/tests/P_static_struct/static_struct.rs
@@ -0,0 +1,11 @@
+// -target-api 12
+#pragma version(1)
+#pragma rs java_package_name(com.example);
+
+typedef struct Plane_s {
+    float3 point;
+} Plane;
+
+static Plane carouselPlane = {
+    { 0.0f, 0.0f, 0.0f }
+};
diff --git a/slang/tests/P_static_struct/stderr.txt.expect b/slang/tests/P_static_struct/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_static_struct/stderr.txt.expect
diff --git a/slang/tests/P_static_struct/stdout.txt.expect b/slang/tests/P_static_struct/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_static_struct/stdout.txt.expect
diff --git a/slang/tests/P_str_escape/stderr.txt.expect b/slang/tests/P_str_escape/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_str_escape/stderr.txt.expect
diff --git a/slang/tests/P_str_escape/stdout.txt.expect b/slang/tests/P_str_escape/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_str_escape/stdout.txt.expect
diff --git "a/slang/tests/P_str_escape/str\\\\escape.rs" "b/slang/tests/P_str_escape/str\\\\escape.rs"
new file mode 100644
index 0000000..b2072d5
--- /dev/null
+++ "b/slang/tests/P_str_escape/str\\\\escape.rs"
@@ -0,0 +1,2 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
diff --git a/slang/tests/P_struct_matrix/stderr.txt.expect b/slang/tests/P_struct_matrix/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_struct_matrix/stderr.txt.expect
diff --git a/slang/tests/P_struct_matrix/stdout.txt.expect b/slang/tests/P_struct_matrix/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_struct_matrix/stdout.txt.expect
diff --git a/slang/tests/P_struct_matrix/struct_matrix.rs b/slang/tests/P_struct_matrix/struct_matrix.rs
new file mode 100644
index 0000000..353238b
--- /dev/null
+++ b/slang/tests/P_struct_matrix/struct_matrix.rs
@@ -0,0 +1,31 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+struct hasMatrix {
+    int j;
+    rs_matrix3x3 m;
+    int i;
+} ghm;
+
+extern foo(struct hasMatrix*);
+
+void singleStmt() {
+    struct hasMatrix h = ghm;
+}
+
+struct new_matrix {
+    float f[2];
+};
+
+struct new_struct {
+    struct new_matrix m;
+    rs_matrix3x3 t;
+    int i;
+} newm;
+
+void newstmt() {
+    struct new_struct h = {1.f, 2.f, 3};
+    struct new_struct h_uninit;
+    struct new_struct empty_init = {};
+}
+
diff --git a/slang/tests/P_use_RS_VERSION/stderr.txt.expect b/slang/tests/P_use_RS_VERSION/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_use_RS_VERSION/stderr.txt.expect
diff --git a/slang/tests/P_use_RS_VERSION/stdout.txt.expect b/slang/tests/P_use_RS_VERSION/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_use_RS_VERSION/stdout.txt.expect
diff --git a/slang/tests/P_use_RS_VERSION/use_RS_VERSION.rs b/slang/tests/P_use_RS_VERSION/use_RS_VERSION.rs
new file mode 100644
index 0000000..ae7a3ad
--- /dev/null
+++ b/slang/tests/P_use_RS_VERSION/use_RS_VERSION.rs
@@ -0,0 +1,5 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+int i = RS_VERSION;
+
diff --git a/slang/tests/P_verbose/stderr.txt.expect b/slang/tests/P_verbose/stderr.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_verbose/stderr.txt.expect
diff --git a/slang/tests/P_verbose/stdout.txt.expect b/slang/tests/P_verbose/stdout.txt.expect
new file mode 100644
index 0000000..bb8a171
--- /dev/null
+++ b/slang/tests/P_verbose/stdout.txt.expect
@@ -0,0 +1 @@
+Generating ScriptC_verbose.java
diff --git a/slang/tests/P_verbose/verbose.rs b/slang/tests/P_verbose/verbose.rs
new file mode 100644
index 0000000..7815a77
--- /dev/null
+++ b/slang/tests/P_verbose/verbose.rs
@@ -0,0 +1,3 @@
+// -v
+#pragma version(1)
+#pragma rs java_package_name(foo)
diff --git a/slang/tests/P_warnings/stderr.txt.expect b/slang/tests/P_warnings/stderr.txt.expect
new file mode 100644
index 0000000..00d6d40
--- /dev/null
+++ b/slang/tests/P_warnings/stderr.txt.expect
@@ -0,0 +1,7 @@
+warnings.rs:6:1: warning: control reaches end of non-void function
+warnings.rs:9:7: warning: unused variable 'k'
+warnings.rs:11:7: warning: unused variable 'j'
+warnings.rs:11:11: warning: variable 'l' is uninitialized when used here
+warnings.rs:10:8: note: initialize the variable 'l' to silence this warning
+warnings.rs:5:12: warning: unused function 'foo'
+warnings.rs:8:13: warning: unused function 'bar'
diff --git a/slang/tests/P_warnings/stdout.txt.expect b/slang/tests/P_warnings/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_warnings/stdout.txt.expect
diff --git a/slang/tests/P_warnings/warnings.rs b/slang/tests/P_warnings/warnings.rs
new file mode 100644
index 0000000..f419d9c
--- /dev/null
+++ b/slang/tests/P_warnings/warnings.rs
@@ -0,0 +1,12 @@
+// -Wall
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+static int foo() {
+}
+
+static void bar() {
+  int k;
+  int l;
+  int j = l + 1;
+}
diff --git a/slang/tests/P_warnings_deprecated/deprecated.rs b/slang/tests/P_warnings_deprecated/deprecated.rs
new file mode 100644
index 0000000..4e5f5af
--- /dev/null
+++ b/slang/tests/P_warnings_deprecated/deprecated.rs
@@ -0,0 +1,11 @@
+// -target-api 22
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+char out;
+rs_allocation al;
+
+void foo(char in) {
+  out = rsClamp(in, (char) 1, (char) 4);
+  al = rsGetAllocation((void*) 33);
+}
diff --git a/slang/tests/P_warnings_deprecated/stderr.txt.expect b/slang/tests/P_warnings_deprecated/stderr.txt.expect
new file mode 100644
index 0000000..95402b7
--- /dev/null
+++ b/slang/tests/P_warnings_deprecated/stderr.txt.expect
@@ -0,0 +1,4 @@
+deprecated.rs:9:9: warning: 'rsClamp' is deprecated: Use clamp() instead.
+../../../../../frameworks/rs/scriptc/rs_math.rsh:6538:5: note: 'rsClamp' has been explicitly marked deprecated here
+deprecated.rs:10:8: warning: 'rsGetAllocation' is deprecated: This function is deprecated and will be removed from the SDK in a future release.
+../../../../../frameworks/rs/scriptc/rs_object_info.rsh:381:5: note: 'rsGetAllocation' has been explicitly marked deprecated here
diff --git a/slang/tests/P_warnings_deprecated/stdout.txt.expect b/slang/tests/P_warnings_deprecated/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_warnings_deprecated/stdout.txt.expect
diff --git a/slang/tests/P_warnings_rsSetElementAt/setelementat.rs b/slang/tests/P_warnings_rsSetElementAt/setelementat.rs
new file mode 100644
index 0000000..032a456
--- /dev/null
+++ b/slang/tests/P_warnings_rsSetElementAt/setelementat.rs
@@ -0,0 +1,52 @@
+#pragma version(1)
+#pragma rs java_package_name(foo)
+
+rs_allocation A;
+static void foo() {
+    // Basic scalar and floating point types.
+    float a = 4.0f;
+    double d = 4.0f;
+    float2 a2 = {4.0f, 4.0f};
+    float3 a3 = {4.0f, 4.0f, 4.0f};
+    float4 a4 = {4.0f, 4.0f, 4.0f, 4.0f};
+    char c = 4;
+    uchar uc = 4;
+    short s = 4;
+    ushort us = 4;
+    int i = 4;
+    uint ui = 4;
+    long l = 4;
+    ulong ul = 4;
+
+    rsSetElementAt(A, &a, 0, 0);
+    rsSetElementAt(A, &d, 0, 0);
+    rsSetElementAt(A, &a2, 0, 0);
+    rsSetElementAt(A, &a3, 0, 0);
+    rsSetElementAt(A, &a4, 0, 0);
+    rsSetElementAt(A, &c, 0, 0);
+    rsSetElementAt(A, &uc, 0, 0);
+    rsSetElementAt(A, &s, 0, 0);
+    rsSetElementAt(A, &us, 0, 0);
+    rsSetElementAt(A, &i, 0, 0);
+    rsSetElementAt(A, &ui, 0, 0);
+    rsSetElementAt(A, &l, 0, 0);
+    rsSetElementAt(A, &ul, 0, 0);
+
+    // No warnings for complex data types
+    struct {
+        int A;
+        int B;
+    } P;
+    rsSetElementAt(A, &P, 0, 0);
+
+    // No warning for 'long long'
+    long long LL = 4.0f;
+    rsSetElementAt(A, &LL, 0, 0);
+
+    // Unsupported vector width
+    typedef int int5 __attribute__((ext_vector_type(5)));
+    int5 i5 = {5, 5, 5, 5, 5};
+
+    rsSetElementAt(A, &i5, 0, 0);
+}
+
diff --git a/slang/tests/P_warnings_rsSetElementAt/stderr.txt.expect b/slang/tests/P_warnings_rsSetElementAt/stderr.txt.expect
new file mode 100644
index 0000000..d003f5e
--- /dev/null
+++ b/slang/tests/P_warnings_rsSetElementAt/stderr.txt.expect
@@ -0,0 +1,13 @@
+setelementat.rs:21:5: warning: untyped rsSetElementAt() can reduce performance. Use rsSetElementAt_float() instead.
+setelementat.rs:22:5: warning: untyped rsSetElementAt() can reduce performance. Use rsSetElementAt_double() instead.
+setelementat.rs:23:5: warning: untyped rsSetElementAt() can reduce performance. Use rsSetElementAt_float2() instead.
+setelementat.rs:24:5: warning: untyped rsSetElementAt() can reduce performance. Use rsSetElementAt_float3() instead.
+setelementat.rs:25:5: warning: untyped rsSetElementAt() can reduce performance. Use rsSetElementAt_float4() instead.
+setelementat.rs:26:5: warning: untyped rsSetElementAt() can reduce performance. Use rsSetElementAt_char() instead.
+setelementat.rs:27:5: warning: untyped rsSetElementAt() can reduce performance. Use rsSetElementAt_uchar() instead.
+setelementat.rs:28:5: warning: untyped rsSetElementAt() can reduce performance. Use rsSetElementAt_short() instead.
+setelementat.rs:29:5: warning: untyped rsSetElementAt() can reduce performance. Use rsSetElementAt_ushort() instead.
+setelementat.rs:30:5: warning: untyped rsSetElementAt() can reduce performance. Use rsSetElementAt_int() instead.
+setelementat.rs:31:5: warning: untyped rsSetElementAt() can reduce performance. Use rsSetElementAt_uint() instead.
+setelementat.rs:32:5: warning: untyped rsSetElementAt() can reduce performance. Use rsSetElementAt_long() instead.
+setelementat.rs:33:5: warning: untyped rsSetElementAt() can reduce performance. Use rsSetElementAt_ulong() instead.
diff --git a/slang/tests/P_warnings_rsSetElementAt/stdout.txt.expect b/slang/tests/P_warnings_rsSetElementAt/stdout.txt.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/slang/tests/P_warnings_rsSetElementAt/stdout.txt.expect
diff --git a/slang/tests/test.py b/slang/tests/test.py
new file mode 100755
index 0000000..2544c58
--- /dev/null
+++ b/slang/tests/test.py
@@ -0,0 +1,251 @@
+#!/usr/bin/python
+#
+# Copyright 2010-2012 Google Inc. All Rights Reserved.
+
+"""Renderscript Compiler Test.
+
+Runs subdirectories of tests for the Renderscript compiler.
+"""
+
+import filecmp
+import glob
+import os
+import re
+import shutil
+import subprocess
+import sys
+
+__author__ = 'Android'
+
+
+class Options(object):
+  def __init__(self):
+    return
+  verbose = 0
+  cleanup = 1
+  updateCTS = 0
+
+
+def CompareFiles(actual, expect):
+  """Compares actual and expect for equality."""
+  if not os.path.isfile(actual):
+    if Options.verbose:
+      print 'Could not find %s' % actual
+    return False
+  if not os.path.isfile(expect):
+    if Options.verbose:
+      print 'Could not find %s' % expect
+    return False
+
+  return filecmp.cmp(actual, expect, False)
+
+
+def UpdateFiles(src, dst):
+  """Update dst if it is different from src."""
+  if not CompareFiles(src, dst):
+    print 'Copying from %s to %s' % (src, dst)
+    shutil.copyfile(src, dst)
+
+
+def GetCommandLineArgs(filename):
+  """Extracts command line arguments from first comment line in a file."""
+  f = open(filename, 'r')
+  line = f.readline()
+  if line[0] == '/' and line [1] == '/':
+    return line[2:].strip()
+  else:
+    return ''
+
+
+def ExecTest(dirname):
+  """Executes an llvm-rs-cc test from dirname."""
+  passed = True
+
+  if Options.verbose != 0:
+    print 'Testing %s' % dirname
+
+  os.chdir(dirname)
+  stdout_file = open('stdout.txt', 'w+')
+  stderr_file = open('stderr.txt', 'w+')
+
+  out_dir = os.environ['ANDROID_HOST_OUT']
+  cmd_string = ('%s/bin/llvm-rs-cc -o tmp/ -p tmp/ -MD '
+                '-I ../../../../../frameworks/rs/scriptc/ '
+                '-I ../../../../../external/clang/lib/Headers/') % out_dir
+  base_args = cmd_string.split()
+  rs_files = glob.glob('*.rs')
+  fs_files = glob.glob('*.fs')
+  rs_files += fs_files;
+  rs_files.sort()
+
+  # Extra command line arguments can be placed as // comments at the start of
+  # any .rs file. We automatically bundle up all of these extra args and invoke
+  # llvm-rs-cc with them.
+  extra_args_str = ''
+  for rs_file in rs_files:
+    extra_args_str += GetCommandLineArgs(rs_file)
+  extra_args = extra_args_str.split()
+
+  args = base_args + extra_args + rs_files
+
+  if Options.verbose > 1:
+    print 'Executing:',
+    for arg in args:
+      print arg,
+    print
+
+  # Execute the command and check the resulting shell return value.
+  # All tests that are expected to FAIL have directory names that
+  # start with 'F_'. Other tests that are expected to PASS have
+  # directory names that start with 'P_'.
+  ret = 0
+  try:
+    ret = subprocess.call(args, stdout=stdout_file, stderr=stderr_file)
+  except:
+    passed = False
+
+  stdout_file.flush()
+  stderr_file.flush()
+
+  if Options.verbose > 1:
+    stdout_file.seek(0)
+    stderr_file.seek(0)
+    for line in stdout_file:
+      print 'STDOUT>', line,
+    for line in stderr_file:
+      print 'STDERR>', line,
+
+  stdout_file.close()
+  stderr_file.close()
+
+  if dirname[0:2] == 'F_':
+    if ret == 0:
+      passed = False
+      if Options.verbose:
+        print 'Command passed on invalid input'
+  elif dirname[0:2] == 'P_':
+    if ret != 0:
+      passed = False
+      if Options.verbose:
+        print 'Command failed on valid input'
+  else:
+    passed = (ret == 0)
+    if Options.verbose:
+      print 'Test Directory name should start with an F or a P'
+
+  if not CompareFiles('stdout.txt', 'stdout.txt.expect'):
+    passed = False
+    if Options.verbose:
+      print 'stdout is different'
+  if not CompareFiles('stderr.txt', 'stderr.txt.expect'):
+    passed = False
+    if Options.verbose:
+      print 'stderr is different'
+  java_expect = glob.glob('Script*.java.expect');
+  for expect in java_expect:
+    expect_base = expect[:-7] # strip ".expect" suffix
+    if Options.verbose:
+      print 'Comparing ' + expect_base
+    find = 'tmp/*/' + expect_base
+    found = glob.glob(find)
+    if len(found) != 1:
+      passed = False
+      if Options.verbose:
+        print 'unique ' + find + ' not found'
+    elif not CompareFiles(found[0], expect):
+      passed = False
+      if Options.verbose:
+        print expect_base + ' is different'
+
+  if Options.updateCTS:
+    # Copy resulting files to appropriate CTS directory (if different).
+    if passed and glob.glob('IN_CTS'):
+      cts_path = '../../../../../cts/'
+      cts_res_raw_path = cts_path + 'tests/res/raw/'
+      cts_src_path = cts_path + 'tests/tests/renderscript/src/'
+      for bc_src in glob.glob('tmp/*.bc'):
+        bc_dst = re.sub('tmp\/', cts_res_raw_path, bc_src, 1)
+        UpdateFiles(bc_src, bc_dst)
+      for java_src in glob.glob('tmp/android/renderscript/cts/*.java'):
+        java_dst = re.sub('tmp\/', cts_src_path, java_src, 1)
+        UpdateFiles(java_src, java_dst)
+
+  if Options.cleanup:
+    try:
+      os.remove('stdout.txt')
+      os.remove('stderr.txt')
+      shutil.rmtree('tmp/')
+    except:
+      pass
+
+  os.chdir('..')
+  return passed
+
+
+def Usage():
+  """Print out usage information."""
+  print ('Usage: %s [OPTION]... [TESTNAME]...'
+         'Renderscript Compiler Test Harness\n'
+         'Runs TESTNAMEs (all tests by default)\n'
+         'Available Options:\n'
+         '  -h, --help          Help message\n'
+         '  -n, --no-cleanup    Don\'t clean up after running tests\n'
+         '  -u, --update-cts    Update CTS test versions\n'
+         '  -v, --verbose       Verbose output.  Enter multiple -v to get more verbose.\n'
+        ) % (sys.argv[0]),
+  return
+
+
+def main():
+  passed = 0
+  failed = 0
+  files = []
+  failed_tests = []
+
+  for arg in sys.argv[1:]:
+    if arg in ('-h', '--help'):
+      Usage()
+      return 0
+    elif arg in ('-n', '--no-cleanup'):
+      Options.cleanup = 0
+    elif arg in ('-u', '--update-cts'):
+      Options.updateCTS = 1
+    elif arg in ('-v', '--verbose'):
+      Options.verbose += 1
+    else:
+      # Test list to run
+      if os.path.isdir(arg):
+        files.append(arg)
+      else:
+        print >> sys.stderr, 'Invalid test or option: %s' % arg
+        return 1
+
+  if not files:
+    tmp_files = os.listdir('.')
+    # Only run tests that are known to PASS or FAIL
+    # Disabled tests can be marked D_ and invoked explicitly
+    for f in tmp_files:
+      if os.path.isdir(f) and (f[0:2] == 'F_' or f[0:2] == 'P_'):
+        files.append(f)
+    files.sort()
+
+  for f in files:
+    if os.path.isdir(f):
+      if ExecTest(f):
+        passed += 1
+      else:
+        failed += 1
+        failed_tests.append(f)
+
+  print 'Tests Passed: %d\n' % passed,
+  print 'Tests Failed: %d\n' % failed,
+  if failed:
+    print 'Failures:',
+    for t in failed_tests:
+      print t,
+
+  return failed != 0
+
+
+if __name__ == '__main__':
+  sys.exit(main())