193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca/************************************************************************** 293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * 393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * Copyright 2010 VMware, Inc. 493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * All Rights Reserved. 593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * 693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * Permission is hereby granted, free of charge, to any person obtaining a 793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * copy of this software and associated documentation files (the 893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * "Software"), to deal in the Software without restriction, including 993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * without limitation the rights to use, copy, modify, merge, publish, 1093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * distribute, sub license, and/or sell copies of the Software, and to 1193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * permit persons to whom the Software is furnished to do so, subject to 1293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * the following conditions: 1393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * 1493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * The above copyright notice and this permission notice (including the 1593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * next paragraph) shall be included in all copies or substantial portions 1693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * of the Software. 1793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * 1893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 1993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 2093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 2193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 2293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 2393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 2493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 2593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * 2693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca **************************************************************************/ 2793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 2893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca/** 2993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * @file 3093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * TGSI to LLVM IR translation -- AoS. 3193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * 3293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * FIXME: 3393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * - No control flow support: the existing control flow code should be factored 3493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * out into from the SoA code into a common module and shared. 3593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * - No derivatives. Derivate logic should be pluggable, just like the samplers. 3693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * 3793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * @author Jose Fonseca <jfonseca@vmware.com> 3893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca */ 3993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 4093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca#include "pipe/p_config.h" 4193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca#include "pipe/p_shader_tokens.h" 4293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca#include "util/u_debug.h" 4393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca#include "util/u_math.h" 4493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca#include "util/u_memory.h" 4593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca#include "tgsi/tgsi_dump.h" 4693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca#include "tgsi/tgsi_info.h" 4793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca#include "tgsi/tgsi_parse.h" 4893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca#include "tgsi/tgsi_util.h" 4993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca#include "tgsi/tgsi_scan.h" 5093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca#include "lp_bld_type.h" 5193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca#include "lp_bld_const.h" 5293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca#include "lp_bld_arit.h" 5393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca#include "lp_bld_logic.h" 5493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca#include "lp_bld_swizzle.h" 5593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca#include "lp_bld_flow.h" 5693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca#include "lp_bld_quad.h" 5793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca#include "lp_bld_tgsi.h" 5893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca#include "lp_bld_debug.h" 593469715a8a171512cf9b528702e70393f01c6041José Fonseca#include "lp_bld_sample.h" 6093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 6193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 6293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca/** 63697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca * Wrapper around lp_build_swizzle_aos which translates swizzles to another 64697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca * ordering. 65697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca */ 66697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonsecastatic LLVMValueRef 67bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellardswizzle_aos(struct lp_build_tgsi_context *bld_base, 68697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca LLVMValueRef a, 69697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca unsigned swizzle_x, 70697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca unsigned swizzle_y, 71697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca unsigned swizzle_z, 72697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca unsigned swizzle_w) 73697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca{ 74697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca unsigned char swizzles[4]; 75bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard struct lp_build_tgsi_aos_context *bld = lp_aos_context(bld_base); 76697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca 77697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca assert(swizzle_x < 4); 78697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca assert(swizzle_y < 4); 79697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca assert(swizzle_z < 4); 80697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca assert(swizzle_w < 4); 81697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca 82697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca swizzles[bld->inv_swizzles[0]] = bld->swizzles[swizzle_x]; 83697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca swizzles[bld->inv_swizzles[1]] = bld->swizzles[swizzle_y]; 84697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca swizzles[bld->inv_swizzles[2]] = bld->swizzles[swizzle_z]; 85697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca swizzles[bld->inv_swizzles[3]] = bld->swizzles[swizzle_w]; 86697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca 87bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard return lp_build_swizzle_aos(&bld->bld_base.base, a, swizzles); 88697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca} 89697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca 90697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca 91697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonsecastatic LLVMValueRef 92697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonsecaswizzle_scalar_aos(struct lp_build_tgsi_aos_context *bld, 93697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca LLVMValueRef a, 94697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca unsigned chan) 95697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca{ 96697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca chan = bld->swizzles[chan]; 97bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard return lp_build_swizzle_scalar_aos(&bld->bld_base.base, a, chan); 98697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca} 99697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca 100697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca 10193158622e26df1227f6eca8d619b5521f4cb1368José Fonsecastatic LLVMValueRef 102bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellardemit_fetch_constant( 103bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard struct lp_build_tgsi_context * bld_base, 104bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard const struct tgsi_full_src_register * reg, 105141f2c2fc9325a5d30629373bb962f42517967aeDave Airlie enum tgsi_opcode_type stype, 106141f2c2fc9325a5d30629373bb962f42517967aeDave Airlie unsigned swizzle) 10793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca{ 108bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard struct lp_build_tgsi_aos_context * bld = lp_aos_context(bld_base); 109bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard LLVMBuilderRef builder = bld_base->base.gallivm->builder; 110bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard struct lp_type type = bld_base->base.type; 11193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca LLVMValueRef res; 11293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca unsigned chan; 11393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 11493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(!reg->Register.Indirect); 11593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 11693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* 117bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard * Get the constants components 11893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca */ 11993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 120bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard res = bld->bld_base.base.undef; 121bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard for (chan = 0; chan < 4; ++chan) { 122bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard LLVMValueRef index; 123bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard LLVMValueRef scalar_ptr; 124bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard LLVMValueRef scalar; 125bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard LLVMValueRef swizzle; 12693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 127bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard index = lp_build_const_int32(bld->bld_base.base.gallivm, 128bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard reg->Register.Index * 4 + chan); 12993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 130bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard scalar_ptr = LLVMBuildGEP(builder, bld->consts_ptr, &index, 1, ""); 13193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 132bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard scalar = LLVMBuildLoad(builder, scalar_ptr, ""); 13393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 134bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard lp_build_name(scalar, "const[%u].%c", reg->Register.Index, "xyzw"[chan]); 13593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 13693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* 137bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard * NOTE: constants array is always assumed to be RGBA 13893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca */ 13993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 140bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard swizzle = lp_build_const_int32(bld->bld_base.base.gallivm, 141bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard bld->swizzles[chan]); 14293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 143bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard res = LLVMBuildInsertElement(builder, res, scalar, swizzle, ""); 144bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard } 14593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 146bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard /* 147bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard * Broadcast the first quaternion to all others. 148bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard * 149bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard * XXX: could be factored into a reusable function. 150bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard */ 15193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 152bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard if (type.length > 4) { 153bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard LLVMValueRef shuffles[LP_MAX_VECTOR_LENGTH]; 154bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard unsigned i; 15593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 156bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard for (chan = 0; chan < 4; ++chan) { 157bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard shuffles[chan] = lp_build_const_int32(bld->bld_base.base.gallivm, chan); 15893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } 15993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 160bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard for (i = 4; i < type.length; ++i) { 161bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard shuffles[i] = shuffles[i % 4]; 162bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard } 16393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 164bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard res = LLVMBuildShuffleVector(builder, 165bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard res, bld->bld_base.base.undef, 166bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard LLVMConstVector(shuffles, type.length), 167bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard ""); 16893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } 169bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard return res; 170bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard} 17193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 172bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellardstatic LLVMValueRef 173bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellardemit_fetch_immediate( 174bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard struct lp_build_tgsi_context * bld_base, 175bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard const struct tgsi_full_src_register * reg, 176141f2c2fc9325a5d30629373bb962f42517967aeDave Airlie enum tgsi_opcode_type stype, 177141f2c2fc9325a5d30629373bb962f42517967aeDave Airlie unsigned swizzle) 178bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard{ 179bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard struct lp_build_tgsi_aos_context * bld = lp_aos_context(bld_base); 180bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard LLVMValueRef res = bld->immediates[reg->Register.Index]; 181bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard assert(res); 182bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard return res; 183bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard} 18493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 185bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellardstatic LLVMValueRef 186bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellardemit_fetch_input( 187bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard struct lp_build_tgsi_context * bld_base, 188bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard const struct tgsi_full_src_register * reg, 189141f2c2fc9325a5d30629373bb962f42517967aeDave Airlie enum tgsi_opcode_type stype, 190141f2c2fc9325a5d30629373bb962f42517967aeDave Airlie unsigned swizzle) 191bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard{ 192bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard struct lp_build_tgsi_aos_context * bld = lp_aos_context(bld_base); 193bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard LLVMValueRef res = bld->inputs[reg->Register.Index]; 194bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard assert(!reg->Register.Indirect); 195bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard assert(res); 196bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard return res; 197bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard} 19893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 199bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellardstatic LLVMValueRef 200bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellardemit_fetch_temporary( 201bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard struct lp_build_tgsi_context * bld_base, 202bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard const struct tgsi_full_src_register * reg, 203141f2c2fc9325a5d30629373bb962f42517967aeDave Airlie enum tgsi_opcode_type stype, 204141f2c2fc9325a5d30629373bb962f42517967aeDave Airlie unsigned swizzle) 205bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard{ 206bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard struct lp_build_tgsi_aos_context * bld = lp_aos_context(bld_base); 207bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard LLVMBuilderRef builder = bld_base->base.gallivm->builder; 208bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard LLVMValueRef temp_ptr = bld->temps[reg->Register.Index]; 209bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard LLVMValueRef res = LLVMBuildLoad(builder, temp_ptr, ""); 210bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard assert(!reg->Register.Indirect); 211bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard if (!res) 212bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard return bld->bld_base.base.undef; 21393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 21493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return res; 21593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca} 21693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 21793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca/** 21893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * Register store. 21993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca */ 220bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellardvoid 221bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellardlp_emit_store_aos( 22293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca struct lp_build_tgsi_aos_context *bld, 22393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca const struct tgsi_full_instruction *inst, 22493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca unsigned index, 22593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca LLVMValueRef value) 22693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca{ 227bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard LLVMBuilderRef builder = bld->bld_base.base.gallivm->builder; 22893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca const struct tgsi_full_dst_register *reg = &inst->Dst[index]; 22993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca LLVMValueRef mask = NULL; 23093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca LLVMValueRef ptr; 23193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 23293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* 23393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * Saturate the value 23493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca */ 23593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 23693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca switch (inst->Instruction.Saturate) { 23793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_SAT_NONE: 23893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 23993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 24093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_SAT_ZERO_ONE: 241bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard value = lp_build_max(&bld->bld_base.base, value, bld->bld_base.base.zero); 242bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard value = lp_build_min(&bld->bld_base.base, value, bld->bld_base.base.one); 24393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 24493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 24593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_SAT_MINUS_PLUS_ONE: 246bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard value = lp_build_max(&bld->bld_base.base, value, lp_build_const_vec(bld->bld_base.base.gallivm, bld->bld_base.base.type, -1.0)); 247bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard value = lp_build_min(&bld->bld_base.base, value, bld->bld_base.base.one); 24893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 24993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 25093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca default: 25193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(0); 25293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } 25393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 25493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* 25593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * Translate the register file 25693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca */ 25793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 25893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(!reg->Register.Indirect); 25993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 26093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca switch (reg->Register.File) { 26193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_FILE_OUTPUT: 26293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca ptr = bld->outputs[reg->Register.Index]; 26393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 26493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 26593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_FILE_TEMPORARY: 26693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca ptr = bld->temps[reg->Register.Index]; 26793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 26893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 26993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_FILE_ADDRESS: 27093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca ptr = bld->addr[reg->Indirect.Index]; 27193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 27293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 27393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_FILE_PREDICATE: 27493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca ptr = bld->preds[reg->Register.Index]; 27593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 27693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 27793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca default: 27893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(0); 27993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return; 28093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } 28193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 282bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard if (!ptr) 283bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard return; 28493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* 28593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * Predicate 28693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca */ 28793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 28893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca if (inst->Instruction.Predicate) { 28993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca LLVMValueRef pred; 29093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 29193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(inst->Predicate.Index < LP_MAX_TGSI_PREDS); 29293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 2936299f241e9fdd86e705d144a42d9b1979c13f9adBrian Paul pred = LLVMBuildLoad(builder, 29493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca bld->preds[inst->Predicate.Index], ""); 29593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 29693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* 29793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * Convert the value to an integer mask. 29893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca */ 299bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard pred = lp_build_compare(bld->bld_base.base.gallivm, 300bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard bld->bld_base.base.type, 30193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca PIPE_FUNC_NOTEQUAL, 30293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca pred, 303bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard bld->bld_base.base.zero); 30493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 30593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca if (inst->Predicate.Negate) { 3066299f241e9fdd86e705d144a42d9b1979c13f9adBrian Paul pred = LLVMBuildNot(builder, pred, ""); 30793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } 30893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 309bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard pred = bld->bld_base.emit_swizzle(&bld->bld_base, pred, 310697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca inst->Predicate.SwizzleX, 311697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca inst->Predicate.SwizzleY, 312697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca inst->Predicate.SwizzleZ, 313697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca inst->Predicate.SwizzleW); 31493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 31593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca if (mask) { 3166299f241e9fdd86e705d144a42d9b1979c13f9adBrian Paul mask = LLVMBuildAnd(builder, mask, pred, ""); 31793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } else { 31893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca mask = pred; 31993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } 32093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } 32193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 32293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* 32393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * Writemask 32493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca */ 32593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 32693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca if (reg->Register.WriteMask != TGSI_WRITEMASK_XYZW) { 32793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca LLVMValueRef writemask; 32893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 329c23fd547c060c4137eab0f878a1028c5903384ebJames Benton writemask = lp_build_const_mask_aos_swizzled(bld->bld_base.base.gallivm, 330c23fd547c060c4137eab0f878a1028c5903384ebJames Benton bld->bld_base.base.type, 331c23fd547c060c4137eab0f878a1028c5903384ebJames Benton reg->Register.WriteMask, 332c23fd547c060c4137eab0f878a1028c5903384ebJames Benton bld->swizzles); 33393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 33493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca if (mask) { 3356299f241e9fdd86e705d144a42d9b1979c13f9adBrian Paul mask = LLVMBuildAnd(builder, mask, writemask, ""); 33693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } else { 33793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca mask = writemask; 33893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } 33993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } 34093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 34193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca if (mask) { 34293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca LLVMValueRef orig_value; 34393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 3446299f241e9fdd86e705d144a42d9b1979c13f9adBrian Paul orig_value = LLVMBuildLoad(builder, ptr, ""); 345bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard value = lp_build_select(&bld->bld_base.base, 34693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca mask, value, orig_value); 34793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } 34893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 3496299f241e9fdd86e705d144a42d9b1979c13f9adBrian Paul LLVMBuildStore(builder, value, ptr); 35093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca} 35193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 35293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 35393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca/** 35493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * High-level instruction translators. 35593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca */ 35693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 35793158622e26df1227f6eca8d619b5521f4cb1368José Fonsecastatic LLVMValueRef 35893158622e26df1227f6eca8d619b5521f4cb1368José Fonsecaemit_tex(struct lp_build_tgsi_aos_context *bld, 35993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca const struct tgsi_full_instruction *inst, 36093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca enum lp_build_tex_modifier modifier) 36193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca{ 36293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca unsigned target; 36393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca unsigned unit; 36493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca LLVMValueRef coords; 36593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca LLVMValueRef ddx; 36693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca LLVMValueRef ddy; 3673469715a8a171512cf9b528702e70393f01c6041José Fonseca struct lp_derivatives derivs; 36893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 36993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca if (!bld->sampler) { 37093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca _debug_printf("warning: found texture instruction but no sampler generator supplied\n"); 371bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard return bld->bld_base.base.undef; 37293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } 37393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 37493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca target = inst->Texture.Texture; 37593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 376bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard coords = lp_build_emit_fetch( &bld->bld_base, inst, 0 , LP_CHAN_ALL); 37793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 3783469715a8a171512cf9b528702e70393f01c6041José Fonseca if (0 && modifier == LP_BLD_TEX_MODIFIER_EXPLICIT_DERIV) { 379bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard ddx = lp_build_emit_fetch( &bld->bld_base, inst, 1 , LP_CHAN_ALL); 380bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard ddy = lp_build_emit_fetch( &bld->bld_base, inst, 2 , LP_CHAN_ALL); 38193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca unit = inst->Src[3].Register.Index; 38293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } else { 38393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca#if 0 384bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard ddx = lp_build_ddx( &bld->bld_base.base, coords ); 385bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard ddy = lp_build_ddy( &bld->bld_base.base, coords ); 38693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca#else 38793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* TODO */ 3883469715a8a171512cf9b528702e70393f01c6041José Fonseca derivs.ddx_ddy[0] = bld->bld_base.base.one; 3893469715a8a171512cf9b528702e70393f01c6041José Fonseca derivs.ddx_ddy[1] = bld->bld_base.base.one; 39093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca#endif 39193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca unit = inst->Src[1].Register.Index; 39293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } 39393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 39493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return bld->sampler->emit_fetch_texel(bld->sampler, 395bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard &bld->bld_base.base, 39693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca target, unit, 3973469715a8a171512cf9b528702e70393f01c6041José Fonseca coords, derivs, 39893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca modifier); 39993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca} 40093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 40193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 402bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellardvoid 403bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellardlp_emit_declaration_aos( 40493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca struct lp_build_tgsi_aos_context *bld, 40593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca const struct tgsi_full_declaration *decl) 40693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca{ 407bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard struct gallivm_state *gallivm = bld->bld_base.base.gallivm; 408bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard LLVMTypeRef vec_type = lp_build_vec_type(bld->bld_base.base.gallivm, bld->bld_base.base.type); 40993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 41093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca unsigned first = decl->Range.First; 41193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca unsigned last = decl->Range.Last; 41293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca unsigned idx; 41393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 41493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca for (idx = first; idx <= last; ++idx) { 41593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca switch (decl->Declaration.File) { 41693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_FILE_TEMPORARY: 41793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(idx < LP_MAX_TGSI_TEMPS); 41893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca if (bld->indirect_files & (1 << TGSI_FILE_TEMPORARY)) { 419efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul LLVMValueRef array_size = lp_build_const_int32(gallivm, last + 1); 420bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard bld->temps_array = lp_build_array_alloca(bld->bld_base.base.gallivm, 42193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca vec_type, array_size, ""); 42293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } else { 423efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul bld->temps[idx] = lp_build_alloca(gallivm, vec_type, ""); 42493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } 42593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 42693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 42793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_FILE_OUTPUT: 428efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul bld->outputs[idx] = lp_build_alloca(gallivm, vec_type, ""); 42993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 43093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 43193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_FILE_ADDRESS: 43293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(idx < LP_MAX_TGSI_ADDRS); 433efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul bld->addr[idx] = lp_build_alloca(gallivm, vec_type, ""); 43493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 43593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 43693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_FILE_PREDICATE: 43793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(idx < LP_MAX_TGSI_PREDS); 438efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul bld->preds[idx] = lp_build_alloca(gallivm, vec_type, ""); 43993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 44093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 44193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca default: 44293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* don't need to declare other vars */ 44393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 44493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } 44593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } 44693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca} 44793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 44893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 44993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca/** 45093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * Emit LLVM for one TGSI instruction. 45193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * \param return TRUE for success, FALSE otherwise 45293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca */ 453bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellardboolean 454bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellardlp_emit_instruction_aos( 45593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca struct lp_build_tgsi_aos_context *bld, 45693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca const struct tgsi_full_instruction *inst, 45793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca const struct tgsi_opcode_info *info, 45893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca int *pc) 45993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca{ 46093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca LLVMValueRef src0, src1, src2; 46193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca LLVMValueRef tmp0, tmp1; 46250095ac87c9a57e2b87220401c2dbdb255cabb4bVinson Lee LLVMValueRef dst0 = NULL; 46393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 46493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* 46593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * Stores and write masks are handled in a general fashion after the long 46693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * instruction opcode switch statement. 46793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * 46893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * Although not stricitly necessary, we avoid generating instructions for 46993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * channels which won't be stored, in cases where's that easy. For some 47093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * complex instructions, like texture sampling, it is more convenient to 47193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * assume a full writemask and then let LLVM optimization passes eliminate 47293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca * redundant code. 47393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca */ 47493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 47593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca (*pc)++; 47693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 47793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(info->num_dst <= 1); 47893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca if (info->num_dst) { 479bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = bld->bld_base.base.undef; 48093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } 48193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 48293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca switch (inst->Instruction.Opcode) { 48393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_ARL: 484bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 485bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_floor(&bld->bld_base.base, src0); 48693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 48793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 48893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_MOV: 489bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 49093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 49193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 49293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_LIT: 49393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 49493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 49593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_RCP: 49693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* TGSI_OPCODE_RECIP */ 497bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 498bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_rcp(&bld->bld_base.base, src0); 49993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 50093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 50193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_RSQ: 50293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* TGSI_OPCODE_RECIPSQRT */ 503bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 504bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard tmp0 = lp_build_emit_llvm_unary(&bld->bld_base, TGSI_OPCODE_ABS, src0); 505bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_rsqrt(&bld->bld_base.base, tmp0); 50693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 50793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 50893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_EXP: 50993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 51093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 51193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_LOG: 51293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 51393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 51493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_MUL: 515bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 516bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src1 = lp_build_emit_fetch(&bld->bld_base, inst, 1, LP_CHAN_ALL); 517bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_mul(&bld->bld_base.base, src0, src1); 51893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 51993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 52093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_ADD: 521bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 522bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src1 = lp_build_emit_fetch(&bld->bld_base, inst, 1, LP_CHAN_ALL); 523bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_add(&bld->bld_base.base, src0, src1); 52493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 52593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 52693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_DP3: 52793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* TGSI_OPCODE_DOT3 */ 52893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 52993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 53093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_DP4: 53193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* TGSI_OPCODE_DOT4 */ 53293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 53393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 53493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_DST: 53593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 53693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 53793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_MIN: 538bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 539bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src1 = lp_build_emit_fetch(&bld->bld_base, inst, 1, LP_CHAN_ALL); 540bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_max(&bld->bld_base.base, src0, src1); 54193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 54293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 54393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_MAX: 544bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 545bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src1 = lp_build_emit_fetch(&bld->bld_base, inst, 1, LP_CHAN_ALL); 546bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_max(&bld->bld_base.base, src0, src1); 54793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 54893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 54993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_SLT: 55093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* TGSI_OPCODE_SETLT */ 551bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 552bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src1 = lp_build_emit_fetch(&bld->bld_base, inst, 1, LP_CHAN_ALL); 553bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard tmp0 = lp_build_cmp(&bld->bld_base.base, PIPE_FUNC_LESS, src0, src1); 554bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_select(&bld->bld_base.base, tmp0, bld->bld_base.base.one, bld->bld_base.base.zero); 55593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 55693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 55793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_SGE: 55893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* TGSI_OPCODE_SETGE */ 559bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 560bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src1 = lp_build_emit_fetch(&bld->bld_base, inst, 1, LP_CHAN_ALL); 561bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard tmp0 = lp_build_cmp(&bld->bld_base.base, PIPE_FUNC_GEQUAL, src0, src1); 562bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_select(&bld->bld_base.base, tmp0, bld->bld_base.base.one, bld->bld_base.base.zero); 56393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 56493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 56593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_MAD: 56693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* TGSI_OPCODE_MADD */ 567bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 568bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src1 = lp_build_emit_fetch(&bld->bld_base, inst, 1, LP_CHAN_ALL); 569bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src2 = lp_build_emit_fetch(&bld->bld_base, inst, 2, LP_CHAN_ALL); 570bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard tmp0 = lp_build_mul(&bld->bld_base.base, src0, src1); 571bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_add(&bld->bld_base.base, tmp0, src2); 57293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 57393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 57493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_SUB: 575bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 576bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src1 = lp_build_emit_fetch(&bld->bld_base, inst, 1, LP_CHAN_ALL); 577bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_sub(&bld->bld_base.base, src0, src1); 57893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 57993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 58093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_LRP: 581bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 582bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src1 = lp_build_emit_fetch(&bld->bld_base, inst, 1, LP_CHAN_ALL); 583bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src2 = lp_build_emit_fetch(&bld->bld_base, inst, 2, LP_CHAN_ALL); 584bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard tmp0 = lp_build_sub(&bld->bld_base.base, src1, src2); 585bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard tmp0 = lp_build_mul(&bld->bld_base.base, src0, tmp0); 586bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_add(&bld->bld_base.base, tmp0, src2); 58793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 58893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 58993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_CND: 590bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 591bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src1 = lp_build_emit_fetch(&bld->bld_base, inst, 1, LP_CHAN_ALL); 592bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src2 = lp_build_emit_fetch(&bld->bld_base, inst, 2, LP_CHAN_ALL); 593bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard tmp1 = lp_build_const_vec(bld->bld_base.base.gallivm, bld->bld_base.base.type, 0.5); 594bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard tmp0 = lp_build_cmp(&bld->bld_base.base, PIPE_FUNC_GREATER, src2, tmp1); 595bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_select(&bld->bld_base.base, tmp0, src0, src1); 59693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 59793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 59893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_DP2A: 59993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 60093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 60193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_FRC: 602bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 603bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard tmp0 = lp_build_floor(&bld->bld_base.base, src0); 604bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_sub(&bld->bld_base.base, src0, tmp0); 60593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 60693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 60793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_CLAMP: 608bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 609bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src1 = lp_build_emit_fetch(&bld->bld_base, inst, 1, LP_CHAN_ALL); 610bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src2 = lp_build_emit_fetch(&bld->bld_base, inst, 2, LP_CHAN_ALL); 611bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard tmp0 = lp_build_max(&bld->bld_base.base, src0, src1); 612bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_min(&bld->bld_base.base, tmp0, src2); 61393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 61493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 61593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_FLR: 616bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 617bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_floor(&bld->bld_base.base, src0); 61893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 61993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 62093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_ROUND: 621bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 622bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_round(&bld->bld_base.base, src0); 62393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 62493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 62593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_EX2: 626bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 627bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard tmp0 = lp_build_swizzle_scalar_aos(&bld->bld_base.base, src0, TGSI_SWIZZLE_X); 628bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_exp2(&bld->bld_base.base, tmp0); 62993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 63093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 63193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_LG2: 632bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 633697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca tmp0 = swizzle_scalar_aos(bld, src0, TGSI_SWIZZLE_X); 634bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_log2(&bld->bld_base.base, tmp0); 63593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 63693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 63793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_POW: 638bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 639697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca src0 = swizzle_scalar_aos(bld, src0, TGSI_SWIZZLE_X); 640bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src1 = lp_build_emit_fetch(&bld->bld_base, inst, 1, LP_CHAN_ALL); 641697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca src1 = swizzle_scalar_aos(bld, src1, TGSI_SWIZZLE_X); 642bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_pow(&bld->bld_base.base, src0, src1); 64393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 64493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 64593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_XPD: 64693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 64793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 64893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_RCC: 64993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* deprecated? */ 65093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(0); 65193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 65293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 65393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_DPH: 65493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 65593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 65693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_COS: 657bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 658697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca tmp0 = swizzle_scalar_aos(bld, src0, TGSI_SWIZZLE_X); 659bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_cos(&bld->bld_base.base, tmp0); 66093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 66193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 66293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_DDX: 66393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 66493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 66593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_DDY: 66693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 66793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 66893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_KILP: 66993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* predicated kill */ 67093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 67193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 67293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_KIL: 67393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* conditional kill */ 67493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 67593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 67693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_PK2H: 67793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 67893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 67993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 68093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_PK2US: 68193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 68293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 68393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 68493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_PK4B: 68593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 68693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 68793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 68893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_PK4UB: 68993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 69093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 69193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_RFL: 69293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 69393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 69493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_SEQ: 695bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 696bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src1 = lp_build_emit_fetch(&bld->bld_base, inst, 1, LP_CHAN_ALL); 697bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard tmp0 = lp_build_cmp(&bld->bld_base.base, PIPE_FUNC_EQUAL, src0, src1); 698bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_select(&bld->bld_base.base, tmp0, bld->bld_base.base.one, bld->bld_base.base.zero); 69993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 70093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 70193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_SFL: 702bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = bld->bld_base.base.zero; 70393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 70493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 70593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_SGT: 706bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 707bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src1 = lp_build_emit_fetch(&bld->bld_base, inst, 1, LP_CHAN_ALL); 708bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard tmp0 = lp_build_cmp(&bld->bld_base.base, PIPE_FUNC_GREATER, src0, src1); 709bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_select(&bld->bld_base.base, tmp0, bld->bld_base.base.one, bld->bld_base.base.zero); 71093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 71193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 71293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_SIN: 713bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 714697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca tmp0 = swizzle_scalar_aos(bld, src0, TGSI_SWIZZLE_X); 715bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_sin(&bld->bld_base.base, tmp0); 71693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 71793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 71893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_SLE: 719bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 720bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src1 = lp_build_emit_fetch(&bld->bld_base, inst, 1, LP_CHAN_ALL); 721bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard tmp0 = lp_build_cmp(&bld->bld_base.base, PIPE_FUNC_LEQUAL, src0, src1); 722bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_select(&bld->bld_base.base, tmp0, bld->bld_base.base.one, bld->bld_base.base.zero); 72393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 72493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 72593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_SNE: 726bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 727bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src1 = lp_build_emit_fetch(&bld->bld_base, inst, 1, LP_CHAN_ALL); 728bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard tmp0 = lp_build_cmp(&bld->bld_base.base, PIPE_FUNC_NOTEQUAL, src0, src1); 729bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_select(&bld->bld_base.base, tmp0, bld->bld_base.base.one, bld->bld_base.base.zero); 73093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 73193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 73293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_STR: 733bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = bld->bld_base.base.one; 73493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 73593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 73693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_TEX: 73793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca dst0 = emit_tex(bld, inst, LP_BLD_TEX_MODIFIER_NONE); 73893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 73993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 74093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_TXD: 74193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca dst0 = emit_tex(bld, inst, LP_BLD_TEX_MODIFIER_EXPLICIT_DERIV); 74293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 74393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 74493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_UP2H: 74593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* deprecated */ 74693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert (0); 74793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 74893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 74993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 75093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_UP2US: 75193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* deprecated */ 75293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(0); 75393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 75493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 75593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 75693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_UP4B: 75793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* deprecated */ 75893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(0); 75993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 76093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 76193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 76293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_UP4UB: 76393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* deprecated */ 76493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(0); 76593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 76693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 76793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 76893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_X2D: 76993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* deprecated? */ 77093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(0); 77193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 77293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 77393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 77493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_ARA: 77593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* deprecated */ 77693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(0); 77793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 77893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 77993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 78093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_ARR: 781bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 782bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_round(&bld->bld_base.base, src0); 78393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 78493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 78593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_BRA: 78693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* deprecated */ 78793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(0); 78893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 78993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 79093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 79193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_CAL: 79293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 79393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 79493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_RET: 79593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 79693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 79793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_END: 79893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca *pc = -1; 79993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 80093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 80193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_SSG: 80293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* TGSI_OPCODE_SGN */ 803bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard tmp0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 804bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_sgn(&bld->bld_base.base, tmp0); 80593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 80693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 80793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_CMP: 808bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 809bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src1 = lp_build_emit_fetch(&bld->bld_base, inst, 1, LP_CHAN_ALL); 810bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src2 = lp_build_emit_fetch(&bld->bld_base, inst, 2, LP_CHAN_ALL); 811bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard tmp0 = lp_build_cmp(&bld->bld_base.base, PIPE_FUNC_LESS, src0, bld->bld_base.base.zero); 812bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_select(&bld->bld_base.base, tmp0, src1, src2); 81393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 81493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 81593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_SCS: 81693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 81793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 81893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_TXB: 81993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca dst0 = emit_tex(bld, inst, LP_BLD_TEX_MODIFIER_LOD_BIAS); 82093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 82193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 82293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_NRM: 82393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* fall-through */ 82493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_NRM4: 82593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 82693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 82793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_DIV: 82893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* deprecated */ 82993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(0); 83093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 83193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 83293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 83393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_DP2: 83493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 83593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 83693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_TXL: 83793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca dst0 = emit_tex(bld, inst, LP_BLD_TEX_MODIFIER_EXPLICIT_LOD); 83893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 83993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 84093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_TXP: 84193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca dst0 = emit_tex(bld, inst, LP_BLD_TEX_MODIFIER_PROJECTED); 84293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 84393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 84493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_BRK: 84593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 84693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 84793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_IF: 84893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 84993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 85093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_BGNLOOP: 85193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 85293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 85393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_BGNSUB: 85493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 85593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 85693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_ELSE: 85793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 85893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 85993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_ENDIF: 86093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 86193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 86293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_ENDLOOP: 86393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 86493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 86593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_ENDSUB: 86693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 86793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 86893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_PUSHA: 86993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* deprecated? */ 87093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(0); 87193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 87293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 87393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 87493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_POPA: 87593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* deprecated? */ 87693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(0); 87793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 87893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 87993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 88093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_CEIL: 881bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 882bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_ceil(&bld->bld_base.base, src0); 88393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 88493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 88593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_I2F: 88693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* deprecated? */ 88793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(0); 88893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 88993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 89093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 89193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_NOT: 89293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* deprecated? */ 89393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(0); 89493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 89593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 89693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 89793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_TRUNC: 898bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard src0 = lp_build_emit_fetch(&bld->bld_base, inst, 0, LP_CHAN_ALL); 899bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard dst0 = lp_build_trunc(&bld->bld_base.base, src0); 90093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 90193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 90293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_SHL: 90393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* deprecated? */ 90493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(0); 90593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 90693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 90793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 90893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_ISHR: 90993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* deprecated? */ 91093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(0); 91193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 91293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 91393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 91493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_AND: 91593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* deprecated? */ 91693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(0); 91793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 91893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 91993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 92093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_OR: 92193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* deprecated? */ 92293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(0); 92393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 92493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 92593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 92693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_MOD: 92793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* deprecated? */ 92893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(0); 92993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 93093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 93193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 93293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_XOR: 93393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* deprecated? */ 93493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(0); 93593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 93693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 93793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 93893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_SAD: 93993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* deprecated? */ 94093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(0); 94193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 94293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 94393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 94493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_TXF: 94593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* deprecated? */ 94693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(0); 94793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 94893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 94993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 95093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_TXQ: 95193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* deprecated? */ 95293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(0); 95393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 95493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 95593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 95693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_CONT: 95793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 95893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 95993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_EMIT: 96093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 96193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 96293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 96393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_ENDPRIM: 96493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 96593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 96693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 96793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_OPCODE_NOP: 96893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 96993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 97093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca default: 97193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return FALSE; 97293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } 97393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 97493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca if (info->num_dst) { 975bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard lp_emit_store_aos(bld, inst, 0, dst0); 97693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } 97793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 97893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return TRUE; 97993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca} 98093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 98193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 98293158622e26df1227f6eca8d619b5521f4cb1368José Fonsecavoid 983efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paullp_build_tgsi_aos(struct gallivm_state *gallivm, 98493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca const struct tgsi_token *tokens, 98593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca struct lp_type type, 98674f6edaee46505935b21e1d34f621b4aaf52fd35José Fonseca const unsigned char swizzles[4], 98793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca LLVMValueRef consts_ptr, 98893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca const LLVMValueRef *inputs, 98993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca LLVMValueRef *outputs, 99093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca struct lp_build_sampler_aos *sampler, 99193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca const struct tgsi_shader_info *info) 99293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca{ 99393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca struct lp_build_tgsi_aos_context bld; 99493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca struct tgsi_parse_context parse; 99593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca uint num_immediates = 0; 99693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca unsigned chan; 99793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca int pc = 0; 99893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 99993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* Setup build context */ 100093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca memset(&bld, 0, sizeof bld); 1001bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard lp_build_context_init(&bld.bld_base.base, gallivm, type); 100266461aa249a95053fd5887df75ab791558c3a486Dave Airlie lp_build_context_init(&bld.bld_base.uint_bld, gallivm, lp_uint_type(type)); 100366461aa249a95053fd5887df75ab791558c3a486Dave Airlie lp_build_context_init(&bld.bld_base.int_bld, gallivm, lp_int_type(type)); 1004efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul lp_build_context_init(&bld.int_bld, gallivm, lp_int_type(type)); 1005697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca 1006697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca for (chan = 0; chan < 4; ++chan) { 1007697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca bld.swizzles[chan] = swizzles[chan]; 1008697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca bld.inv_swizzles[swizzles[chan]] = chan; 1009697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca } 1010697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca 101193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca bld.inputs = inputs; 101293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca bld.outputs = outputs; 101393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca bld.consts_ptr = consts_ptr; 101493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca bld.sampler = sampler; 101593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca bld.indirect_files = info->indirect_files; 1016bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard bld.bld_base.emit_swizzle = swizzle_aos; 1017bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard bld.bld_base.info = info; 1018bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard 1019bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard bld.bld_base.emit_fetch_funcs[TGSI_FILE_CONSTANT] = emit_fetch_constant; 1020bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard bld.bld_base.emit_fetch_funcs[TGSI_FILE_IMMEDIATE] = emit_fetch_immediate; 1021bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard bld.bld_base.emit_fetch_funcs[TGSI_FILE_INPUT] = emit_fetch_input; 1022bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard bld.bld_base.emit_fetch_funcs[TGSI_FILE_TEMPORARY] = emit_fetch_temporary; 102393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 1024bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard /* Set opcode actions */ 1025bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard lp_set_default_actions_cpu(&bld.bld_base); 1026bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard 1027bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard if (!lp_bld_tgsi_list_init(&bld.bld_base)) { 102893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca return; 102993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } 103093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 103193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca tgsi_parse_init(&parse, tokens); 103293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 103393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca while (!tgsi_parse_end_of_tokens(&parse)) { 103493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca tgsi_parse_token(&parse); 103593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 103693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca switch(parse.FullToken.Token.Type) { 103793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_TOKEN_TYPE_DECLARATION: 103893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* Inputs already interpolated */ 1039bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard lp_emit_declaration_aos(&bld, &parse.FullToken.FullDeclaration); 104093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 104193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 104293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_TOKEN_TYPE_INSTRUCTION: 1043bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard /* save expanded instruction */ 1044bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard lp_bld_tgsi_add_instruction(&bld.bld_base, 1045bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard &parse.FullToken.FullInstruction); 104693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 104793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 104893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_TOKEN_TYPE_IMMEDIATE: 104993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca /* simply copy the immediate values into the next immediates[] slot */ 105093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca { 105193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca const uint size = parse.FullToken.FullImmediate.Immediate.NrTokens - 1; 1052697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca float imm[4]; 105393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(size <= 4); 105493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(num_immediates < LP_MAX_TGSI_IMMEDIATES); 1055697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca for (chan = 0; chan < 4; ++chan) { 1056697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca imm[chan] = 0.0f; 105793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } 1058697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca for (chan = 0; chan < size; ++chan) { 1059697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca unsigned swizzle = bld.swizzles[chan]; 1060697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca imm[swizzle] = parse.FullToken.FullImmediate.u[chan].Float; 106193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } 106293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca bld.immediates[num_immediates] = 1063efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul lp_build_const_aos(gallivm, type, 1064697fdf3fff98943c44bc67f6c6cc17f6334724ddJosé Fonseca imm[0], imm[1], imm[2], imm[3], 106593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca NULL); 106693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca num_immediates++; 106793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } 106893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 106993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 107093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca case TGSI_TOKEN_TYPE_PROPERTY: 107193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca break; 107293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 107393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca default: 107493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca assert(0); 107593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } 107693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } 107793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 107893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca while (pc != -1) { 1079bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard struct tgsi_full_instruction *instr = bld.bld_base.instructions + pc; 108093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca const struct tgsi_opcode_info *opcode_info = 108193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca tgsi_get_opcode_info(instr->Instruction.Opcode); 1082bc2875aa483a0fef7f6e32c1886f6e2edaba7694Tom Stellard if (!lp_emit_instruction_aos(&bld, instr, opcode_info, &pc)) 108393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca _debug_printf("warning: failed to translate tgsi opcode %s to LLVM\n", 108493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca opcode_info->mnemonic); 108593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } 108693158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 108793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca if (0) { 1088efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul LLVMBasicBlockRef block = LLVMGetInsertBlock(gallivm->builder); 108993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca LLVMValueRef function = LLVMGetBasicBlockParent(block); 109093158622e26df1227f6eca8d619b5521f4cb1368José Fonseca debug_printf("11111111111111111111111111111 \n"); 109193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca tgsi_dump(tokens, 0); 109293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca lp_debug_dump_value(function); 109393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca debug_printf("2222222222222222222222222222 \n"); 109493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } 109593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca tgsi_parse_free(&parse); 1096c426e63aa064debc23f9819c3862f357f1726bceJames Benton FREE(bld.bld_base.instructions); 109793158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 109893158622e26df1227f6eca8d619b5521f4cb1368José Fonseca if (0) { 109993158622e26df1227f6eca8d619b5521f4cb1368José Fonseca LLVMModuleRef module = LLVMGetGlobalParent( 11006299f241e9fdd86e705d144a42d9b1979c13f9adBrian Paul LLVMGetBasicBlockParent(LLVMGetInsertBlock(gallivm->builder))); 110193158622e26df1227f6eca8d619b5521f4cb1368José Fonseca LLVMDumpModule(module); 110293158622e26df1227f6eca8d619b5521f4cb1368José Fonseca } 110393158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 110493158622e26df1227f6eca8d619b5521f4cb1368José Fonseca} 110593158622e26df1227f6eca8d619b5521f4cb1368José Fonseca 1106