1421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca/************************************************************************** 2421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca * 3421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca * Copyright 2009 VMware, Inc. 4421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca * All Rights Reserved. 5421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca * 6421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca * Permission is hereby granted, free of charge, to any person obtaining a 7421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca * copy of this software and associated documentation files (the 8421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca * "Software"), to deal in the Software without restriction, including 9421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca * without limitation the rights to use, copy, modify, merge, publish, 10421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca * distribute, sub license, and/or sell copies of the Software, and to 11421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca * permit persons to whom the Software is furnished to do so, subject to 12421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca * the following conditions: 13421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca * 14421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca * The above copyright notice and this permission notice (including the 15421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca * next paragraph) shall be included in all copies or substantial portions 16421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca * of the Software. 17421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca * 18421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 22421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca * 26421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca **************************************************************************/ 27421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca 28421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca/** 29421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca * @file 30421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca * Helper functions for packing/unpacking conversions. 31421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca * 32421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca * @author Jose Fonseca <jfonseca@vmware.com> 33421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca */ 34421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca 35421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca 36421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca#ifndef LP_BLD_PACK_H 37421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca#define LP_BLD_PACK_H 38421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca 39421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca 4072ae834fa16a32cc58ae7a93e74f6e11822fcac0Vinson Lee#include "pipe/p_compiler.h" 4172ae834fa16a32cc58ae7a93e74f6e11822fcac0Vinson Lee 420d71ba46e613230c84165106c1fcc9027dec4cd3Brian Paul#include "gallivm/lp_bld.h" 43421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca 44421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca 45421507de06bd42a322c5864d887e67e385eb458cJosé Fonsecastruct lp_type; 46421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca 473469715a8a171512cf9b528702e70393f01c6041José FonsecaLLVMValueRef 483469715a8a171512cf9b528702e70393f01c6041José Fonsecalp_build_interleave2_half(struct gallivm_state *gallivm, 493469715a8a171512cf9b528702e70393f01c6041José Fonseca struct lp_type type, 503469715a8a171512cf9b528702e70393f01c6041José Fonseca LLVMValueRef a, 513469715a8a171512cf9b528702e70393f01c6041José Fonseca LLVMValueRef b, 523469715a8a171512cf9b528702e70393f01c6041José Fonseca unsigned lo_hi); 53421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca 54421507de06bd42a322c5864d887e67e385eb458cJosé FonsecaLLVMValueRef 55efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paullp_build_interleave2(struct gallivm_state *gallivm, 56421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca struct lp_type type, 57421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca LLVMValueRef a, 58421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca LLVMValueRef b, 59421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca unsigned lo_hi); 60421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca 61421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca 62421507de06bd42a322c5864d887e67e385eb458cJosé Fonsecavoid 63efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paullp_build_unpack2(struct gallivm_state *gallivm, 64421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca struct lp_type src_type, 65421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca struct lp_type dst_type, 66421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca LLVMValueRef src, 67421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca LLVMValueRef *dst_lo, 68421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca LLVMValueRef *dst_hi); 69421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca 70421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca 71421507de06bd42a322c5864d887e67e385eb458cJosé Fonsecavoid 72efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paullp_build_unpack(struct gallivm_state *gallivm, 73421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca struct lp_type src_type, 74421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca struct lp_type dst_type, 75421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca LLVMValueRef src, 76421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca LLVMValueRef *dst, unsigned num_dsts); 77421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca 783469715a8a171512cf9b528702e70393f01c6041José FonsecaLLVMValueRef 793469715a8a171512cf9b528702e70393f01c6041José Fonsecalp_build_extract_range(struct gallivm_state *gallivm, 803469715a8a171512cf9b528702e70393f01c6041José Fonseca LLVMValueRef src, 813469715a8a171512cf9b528702e70393f01c6041José Fonseca unsigned start, 823469715a8a171512cf9b528702e70393f01c6041José Fonseca unsigned size); 833469715a8a171512cf9b528702e70393f01c6041José Fonseca 843469715a8a171512cf9b528702e70393f01c6041José FonsecaLLVMValueRef 853469715a8a171512cf9b528702e70393f01c6041José Fonsecalp_build_concat(struct gallivm_state *gallivm, 863469715a8a171512cf9b528702e70393f01c6041José Fonseca LLVMValueRef src[], 873469715a8a171512cf9b528702e70393f01c6041José Fonseca struct lp_type src_type, 883469715a8a171512cf9b528702e70393f01c6041José Fonseca unsigned num_vectors); 89421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca 90421507de06bd42a322c5864d887e67e385eb458cJosé FonsecaLLVMValueRef 91efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paullp_build_packs2(struct gallivm_state *gallivm, 92421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca struct lp_type src_type, 93421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca struct lp_type dst_type, 94421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca LLVMValueRef lo, 95421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca LLVMValueRef hi); 96421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca 97421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca 98421507de06bd42a322c5864d887e67e385eb458cJosé FonsecaLLVMValueRef 99efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paullp_build_pack2(struct gallivm_state *gallivm, 100421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca struct lp_type src_type, 101421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca struct lp_type dst_type, 102421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca LLVMValueRef lo, 103421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca LLVMValueRef hi); 104421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca 105421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca 106421507de06bd42a322c5864d887e67e385eb458cJosé FonsecaLLVMValueRef 107efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paullp_build_pack(struct gallivm_state *gallivm, 108421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca struct lp_type src_type, 109421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca struct lp_type dst_type, 110421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca boolean clamped, 111421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca const LLVMValueRef *src, unsigned num_srcs); 112421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca 113421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca 114b919bb7f6119d59751fe846cabe5b0d587f46edcJosé Fonsecavoid 115efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paullp_build_resize(struct gallivm_state *gallivm, 116b919bb7f6119d59751fe846cabe5b0d587f46edcJosé Fonseca struct lp_type src_type, 117b919bb7f6119d59751fe846cabe5b0d587f46edcJosé Fonseca struct lp_type dst_type, 118b919bb7f6119d59751fe846cabe5b0d587f46edcJosé Fonseca const LLVMValueRef *src, unsigned num_srcs, 119b919bb7f6119d59751fe846cabe5b0d587f46edcJosé Fonseca LLVMValueRef *dst, unsigned num_dsts); 120b919bb7f6119d59751fe846cabe5b0d587f46edcJosé Fonseca 121b919bb7f6119d59751fe846cabe5b0d587f46edcJosé Fonseca 1223469715a8a171512cf9b528702e70393f01c6041José FonsecaLLVMValueRef 1233469715a8a171512cf9b528702e70393f01c6041José Fonsecalp_build_pad_vector(struct gallivm_state *gallivm, 1243469715a8a171512cf9b528702e70393f01c6041José Fonseca LLVMValueRef src, 1253469715a8a171512cf9b528702e70393f01c6041José Fonseca struct lp_type src_type, 1263469715a8a171512cf9b528702e70393f01c6041José Fonseca unsigned dst_length); 1273469715a8a171512cf9b528702e70393f01c6041José Fonseca 128421507de06bd42a322c5864d887e67e385eb458cJosé Fonseca#endif /* !LP_BLD_PACK_H */ 129