1ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca/************************************************************************** 2ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca * 3ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca * Copyright 2010 VMware, Inc. 4ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca * All Rights Reserved. 5ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca * 6ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca * Permission is hereby granted, free of charge, to any person obtaining a 7ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca * copy of this software and associated documentation files (the 8ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca * "Software"), to deal in the Software without restriction, including 9ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca * without limitation the rights to use, copy, modify, merge, publish, 10ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca * distribute, sub license, and/or sell copies of the Software, and to 11ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca * permit persons to whom the Software is furnished to do so, subject to 12ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca * the following conditions: 13ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca * 14ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 17ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, 18ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 19ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 20ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca * USE OR OTHER DEALINGS IN THE SOFTWARE. 21ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca * 22ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca * The above copyright notice and this permission notice (including the 23ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca * next paragraph) shall be included in all copies or substantial portions 24ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca * of the Software. 25ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca * 26ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca **************************************************************************/ 27ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca 28ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca 29ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca#include "lp_bld_type.h" 30ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca#include "lp_bld_arit.h" 31efc82aef35a2aac5d2ed9774f6d28f2626796416Brian Paul#include "lp_bld_const.h" 32ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca#include "lp_bld_swizzle.h" 33ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca#include "lp_bld_quad.h" 34fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton#include "lp_bld_pack.h" 35ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca 36ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca 37ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonsecastatic const unsigned char 38ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonsecaswizzle_left[4] = { 39ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca LP_BLD_QUAD_TOP_LEFT, LP_BLD_QUAD_TOP_LEFT, 40ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca LP_BLD_QUAD_BOTTOM_LEFT, LP_BLD_QUAD_BOTTOM_LEFT 41ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca}; 42ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca 43ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonsecastatic const unsigned char 44ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonsecaswizzle_right[4] = { 45ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca LP_BLD_QUAD_TOP_RIGHT, LP_BLD_QUAD_TOP_RIGHT, 46ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca LP_BLD_QUAD_BOTTOM_RIGHT, LP_BLD_QUAD_BOTTOM_RIGHT 47ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca}; 48ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca 49ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonsecastatic const unsigned char 50ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonsecaswizzle_top[4] = { 51ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca LP_BLD_QUAD_TOP_LEFT, LP_BLD_QUAD_TOP_RIGHT, 52ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca LP_BLD_QUAD_TOP_LEFT, LP_BLD_QUAD_TOP_RIGHT 53ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca}; 54ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca 55ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonsecastatic const unsigned char 56ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonsecaswizzle_bottom[4] = { 57ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca LP_BLD_QUAD_BOTTOM_LEFT, LP_BLD_QUAD_BOTTOM_RIGHT, 58ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca LP_BLD_QUAD_BOTTOM_LEFT, LP_BLD_QUAD_BOTTOM_RIGHT 59ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca}; 60ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca 61ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca 62ef81779850d1343b3ae284eb9beabeaf11934d4aJosé FonsecaLLVMValueRef 63ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonsecalp_build_ddx(struct lp_build_context *bld, 64ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca LLVMValueRef a) 65ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca{ 66a70ec096aaece3aaadc1a8307e32554f7ad4d082José Fonseca LLVMValueRef a_left = lp_build_swizzle_aos(bld, a, swizzle_left); 67a70ec096aaece3aaadc1a8307e32554f7ad4d082José Fonseca LLVMValueRef a_right = lp_build_swizzle_aos(bld, a, swizzle_right); 68ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca return lp_build_sub(bld, a_right, a_left); 69ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca} 70ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca 71ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca 72ef81779850d1343b3ae284eb9beabeaf11934d4aJosé FonsecaLLVMValueRef 73ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonsecalp_build_ddy(struct lp_build_context *bld, 74ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca LLVMValueRef a) 75ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca{ 76a70ec096aaece3aaadc1a8307e32554f7ad4d082José Fonseca LLVMValueRef a_top = lp_build_swizzle_aos(bld, a, swizzle_top); 77a70ec096aaece3aaadc1a8307e32554f7ad4d082José Fonseca LLVMValueRef a_bottom = lp_build_swizzle_aos(bld, a, swizzle_bottom); 78ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca return lp_build_sub(bld, a_bottom, a_top); 79ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca} 80ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca 813469715a8a171512cf9b528702e70393f01c6041José Fonseca/* 825c41d1c22282fe2fd72a77339246de8e861b4b22Roland Scheidegger * Helper for building packed ddx/ddy vector for one coord (scalar per quad 835c41d1c22282fe2fd72a77339246de8e861b4b22Roland Scheidegger * values). The vector will look like this (8-wide): 84bdfbeb9633eb3f8cf1ad76723f6c3839e57a08a3Roland Scheidegger * dr1dx _____ -dr1dy _____ dr2dx _____ -dr2dy _____ 85bdfbeb9633eb3f8cf1ad76723f6c3839e57a08a3Roland Scheidegger * This only requires one shuffle instead of two for more straightforward packing. 863469715a8a171512cf9b528702e70393f01c6041José Fonseca */ 87ef81779850d1343b3ae284eb9beabeaf11934d4aJosé FonsecaLLVMValueRef 883469715a8a171512cf9b528702e70393f01c6041José Fonsecalp_build_packed_ddx_ddy_onecoord(struct lp_build_context *bld, 893469715a8a171512cf9b528702e70393f01c6041José Fonseca LLVMValueRef a) 90ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca{ 913469715a8a171512cf9b528702e70393f01c6041José Fonseca struct gallivm_state *gallivm = bld->gallivm; 923469715a8a171512cf9b528702e70393f01c6041José Fonseca LLVMBuilderRef builder = gallivm->builder; 933469715a8a171512cf9b528702e70393f01c6041José Fonseca LLVMValueRef vec1, vec2; 943469715a8a171512cf9b528702e70393f01c6041José Fonseca 95bdfbeb9633eb3f8cf1ad76723f6c3839e57a08a3Roland Scheidegger /* use aos swizzle helper */ 963469715a8a171512cf9b528702e70393f01c6041José Fonseca 97bdfbeb9633eb3f8cf1ad76723f6c3839e57a08a3Roland Scheidegger static const unsigned char swizzle1[] = { /* no-op swizzle */ 98bdfbeb9633eb3f8cf1ad76723f6c3839e57a08a3Roland Scheidegger LP_BLD_QUAD_TOP_LEFT, LP_BLD_SWIZZLE_DONTCARE, 99bdfbeb9633eb3f8cf1ad76723f6c3839e57a08a3Roland Scheidegger LP_BLD_QUAD_BOTTOM_LEFT, LP_BLD_SWIZZLE_DONTCARE 1003469715a8a171512cf9b528702e70393f01c6041José Fonseca }; 1013469715a8a171512cf9b528702e70393f01c6041José Fonseca static const unsigned char swizzle2[] = { 102bdfbeb9633eb3f8cf1ad76723f6c3839e57a08a3Roland Scheidegger LP_BLD_QUAD_TOP_RIGHT, LP_BLD_SWIZZLE_DONTCARE, 103bdfbeb9633eb3f8cf1ad76723f6c3839e57a08a3Roland Scheidegger LP_BLD_QUAD_TOP_LEFT, LP_BLD_SWIZZLE_DONTCARE 1043469715a8a171512cf9b528702e70393f01c6041José Fonseca }; 1053469715a8a171512cf9b528702e70393f01c6041José Fonseca 1063469715a8a171512cf9b528702e70393f01c6041José Fonseca vec1 = lp_build_swizzle_aos(bld, a, swizzle1); 1073469715a8a171512cf9b528702e70393f01c6041José Fonseca vec2 = lp_build_swizzle_aos(bld, a, swizzle2); 1083469715a8a171512cf9b528702e70393f01c6041José Fonseca 10917dbd41cf23e7e7de2f27e5e9252d7f792d932f3José Fonseca if (bld->type.floating) 1103469715a8a171512cf9b528702e70393f01c6041José Fonseca return LLVMBuildFSub(builder, vec2, vec1, "ddxddy"); 11117dbd41cf23e7e7de2f27e5e9252d7f792d932f3José Fonseca else 1123469715a8a171512cf9b528702e70393f01c6041José Fonseca return LLVMBuildSub(builder, vec2, vec1, "ddxddy"); 113ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca} 114ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca 115ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca 1165c41d1c22282fe2fd72a77339246de8e861b4b22Roland Scheidegger/* 1175c41d1c22282fe2fd72a77339246de8e861b4b22Roland Scheidegger * Helper for building packed ddx/ddy vector for one coord (scalar per quad 1185c41d1c22282fe2fd72a77339246de8e861b4b22Roland Scheidegger * values). The vector will look like this (8-wide): 1195c41d1c22282fe2fd72a77339246de8e861b4b22Roland Scheidegger * ds1dx ds1dy dt1dx dt1dy ds2dx ds2dy dt2dx dt2dy 120bdfbeb9633eb3f8cf1ad76723f6c3839e57a08a3Roland Scheidegger * This only needs 2 (v)shufps. 1215c41d1c22282fe2fd72a77339246de8e861b4b22Roland Scheidegger */ 122ef81779850d1343b3ae284eb9beabeaf11934d4aJosé FonsecaLLVMValueRef 1233469715a8a171512cf9b528702e70393f01c6041José Fonsecalp_build_packed_ddx_ddy_twocoord(struct lp_build_context *bld, 1243469715a8a171512cf9b528702e70393f01c6041José Fonseca LLVMValueRef a, LLVMValueRef b) 125ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca{ 1263469715a8a171512cf9b528702e70393f01c6041José Fonseca struct gallivm_state *gallivm = bld->gallivm; 1273469715a8a171512cf9b528702e70393f01c6041José Fonseca LLVMBuilderRef builder = gallivm->builder; 1283469715a8a171512cf9b528702e70393f01c6041José Fonseca LLVMValueRef shuffles1[LP_MAX_VECTOR_LENGTH/4]; 1293469715a8a171512cf9b528702e70393f01c6041José Fonseca LLVMValueRef shuffles2[LP_MAX_VECTOR_LENGTH/4]; 1303469715a8a171512cf9b528702e70393f01c6041José Fonseca LLVMValueRef vec1, vec2; 1313469715a8a171512cf9b528702e70393f01c6041José Fonseca unsigned length, num_quads, i; 1323469715a8a171512cf9b528702e70393f01c6041José Fonseca 1333469715a8a171512cf9b528702e70393f01c6041José Fonseca /* XXX: do hsub version */ 1343469715a8a171512cf9b528702e70393f01c6041José Fonseca length = bld->type.length; 1353469715a8a171512cf9b528702e70393f01c6041José Fonseca num_quads = length / 4; 1363469715a8a171512cf9b528702e70393f01c6041José Fonseca for (i = 0; i < num_quads; i++) { 1373469715a8a171512cf9b528702e70393f01c6041José Fonseca unsigned s1 = 4 * i; 1383469715a8a171512cf9b528702e70393f01c6041José Fonseca unsigned s2 = 4 * i + length; 1393469715a8a171512cf9b528702e70393f01c6041José Fonseca shuffles1[4*i + 0] = lp_build_const_int32(gallivm, LP_BLD_QUAD_TOP_LEFT + s1); 1403469715a8a171512cf9b528702e70393f01c6041José Fonseca shuffles1[4*i + 1] = lp_build_const_int32(gallivm, LP_BLD_QUAD_TOP_LEFT + s1); 1413469715a8a171512cf9b528702e70393f01c6041José Fonseca shuffles1[4*i + 2] = lp_build_const_int32(gallivm, LP_BLD_QUAD_TOP_LEFT + s2); 1423469715a8a171512cf9b528702e70393f01c6041José Fonseca shuffles1[4*i + 3] = lp_build_const_int32(gallivm, LP_BLD_QUAD_TOP_LEFT + s2); 1433469715a8a171512cf9b528702e70393f01c6041José Fonseca shuffles2[4*i + 0] = lp_build_const_int32(gallivm, LP_BLD_QUAD_TOP_RIGHT + s1); 1443469715a8a171512cf9b528702e70393f01c6041José Fonseca shuffles2[4*i + 1] = lp_build_const_int32(gallivm, LP_BLD_QUAD_BOTTOM_LEFT + s1); 1453469715a8a171512cf9b528702e70393f01c6041José Fonseca shuffles2[4*i + 2] = lp_build_const_int32(gallivm, LP_BLD_QUAD_TOP_RIGHT + s2); 1463469715a8a171512cf9b528702e70393f01c6041José Fonseca shuffles2[4*i + 3] = lp_build_const_int32(gallivm, LP_BLD_QUAD_BOTTOM_LEFT + s2); 1473469715a8a171512cf9b528702e70393f01c6041José Fonseca } 1483469715a8a171512cf9b528702e70393f01c6041José Fonseca vec1 = LLVMBuildShuffleVector(builder, a, b, 1493469715a8a171512cf9b528702e70393f01c6041José Fonseca LLVMConstVector(shuffles1, length), ""); 1503469715a8a171512cf9b528702e70393f01c6041José Fonseca vec2 = LLVMBuildShuffleVector(builder, a, b, 1513469715a8a171512cf9b528702e70393f01c6041José Fonseca LLVMConstVector(shuffles2, length), ""); 15217dbd41cf23e7e7de2f27e5e9252d7f792d932f3José Fonseca if (bld->type.floating) 1533469715a8a171512cf9b528702e70393f01c6041José Fonseca return LLVMBuildFSub(builder, vec2, vec1, "ddxddyddxddy"); 15417dbd41cf23e7e7de2f27e5e9252d7f792d932f3José Fonseca else 1553469715a8a171512cf9b528702e70393f01c6041José Fonseca return LLVMBuildSub(builder, vec2, vec1, "ddxddyddxddy"); 156ef81779850d1343b3ae284eb9beabeaf11934d4aJosé Fonseca} 1573469715a8a171512cf9b528702e70393f01c6041José Fonseca 158fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton 159fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton/** 160fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton * Twiddle from quad format to row format 161fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton * 162fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton * src0 src1 163fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton * ######### ######### ################# 164fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton * # 0 | 1 # # 4 | 5 # # 0 | 1 | 4 | 5 # src0 165fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton * #---+---# #---+---# -> ################# 166fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton * # 2 | 3 # # 6 | 7 # # 2 | 3 | 6 | 7 # src1 167fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton * ######### ######### ################# 168fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton * 169fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton */ 170fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Bentonvoid 171fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Bentonlp_bld_quad_twiddle(struct gallivm_state *gallivm, 172fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton struct lp_type lp_dst_type, 173fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton const LLVMValueRef* src, 174fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton unsigned src_count, 175fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton LLVMValueRef* dst) 176fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton{ 177fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton LLVMBuilderRef builder = gallivm->builder; 178fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton LLVMTypeRef dst_type_ref; 179fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton LLVMTypeRef type2_ref; 180fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton struct lp_type type2; 181fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton unsigned i; 182fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton 183fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton assert((src_count % 2) == 0); 184fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton 185fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton /* Create a type with only 2 elements */ 186fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton type2 = lp_dst_type; 187fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton type2.width = (lp_dst_type.width * lp_dst_type.length) / 2; 188fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton type2.length = 2; 189fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton type2.floating = 0; 190fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton 191fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton type2_ref = lp_build_vec_type(gallivm, type2); 192fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton dst_type_ref = lp_build_vec_type(gallivm, lp_dst_type); 193fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton 194fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton for (i = 0; i < src_count; i += 2) { 195fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton LLVMValueRef src0, src1; 196fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton 197fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton src0 = LLVMBuildBitCast(builder, src[i + 0], type2_ref, ""); 198fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton src1 = LLVMBuildBitCast(builder, src[i + 1], type2_ref, ""); 199fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton 200fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton dst[i + 0] = lp_build_interleave2(gallivm, type2, src0, src1, 0); 201fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton dst[i + 1] = lp_build_interleave2(gallivm, type2, src0, src1, 1); 202fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton 203fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton dst[i + 0] = LLVMBuildBitCast(builder, dst[i + 0], dst_type_ref, ""); 204fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton dst[i + 1] = LLVMBuildBitCast(builder, dst[i + 1], dst_type_ref, ""); 205fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton } 206fa1b481c09b14e01eca1b3db8e0854033f6dee3dJames Benton} 207