1599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt/* 2599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt * Copyright © 2012 Intel Corporation 3599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt * 4599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt * Permission is hereby granted, free of charge, to any person obtaining a 5599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt * copy of this software and associated documentation files (the "Software"), 6599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt * to deal in the Software without restriction, including without limitation 7599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt * and/or sell copies of the Software, and to permit persons to whom the 9599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt * Software is furnished to do so, subject to the following conditions: 10599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt * 11599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt * The above copyright notice and this permission notice (including the next 12599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt * paragraph) shall be included in all copies or substantial portions of the 13599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt * Software. 14599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt * 15599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt * IN THE SOFTWARE. 22599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt */ 23599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt 24599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt#include "ir_builder.h" 25b782352745d322596a9122969f5c0e57ea032c1bEric Anholt#include "program/prog_instruction.h" 26599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt 27599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholtusing namespace ir_builder; 28599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt 29599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholtnamespace ir_builder { 30599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt 317e88f8ce8f9d72bbda248554e0630b4aca7e1154Eric Anholtvoid 327e88f8ce8f9d72bbda248554e0630b4aca7e1154Eric Anholtir_factory::emit(ir_instruction *ir) 337e88f8ce8f9d72bbda248554e0630b4aca7e1154Eric Anholt{ 347e88f8ce8f9d72bbda248554e0630b4aca7e1154Eric Anholt instructions->push_tail(ir); 357e88f8ce8f9d72bbda248554e0630b4aca7e1154Eric Anholt} 367e88f8ce8f9d72bbda248554e0630b4aca7e1154Eric Anholt 378bb0091e6838aeee2a5819850c334fde71b5a439Eric Anholtir_variable * 388bb0091e6838aeee2a5819850c334fde71b5a439Eric Anholtir_factory::make_temp(const glsl_type *type, const char *name) 398bb0091e6838aeee2a5819850c334fde71b5a439Eric Anholt{ 408bb0091e6838aeee2a5819850c334fde71b5a439Eric Anholt ir_variable *var; 418bb0091e6838aeee2a5819850c334fde71b5a439Eric Anholt 428bb0091e6838aeee2a5819850c334fde71b5a439Eric Anholt var = new(mem_ctx) ir_variable(type, name, ir_var_temporary); 438bb0091e6838aeee2a5819850c334fde71b5a439Eric Anholt emit(var); 448bb0091e6838aeee2a5819850c334fde71b5a439Eric Anholt 458bb0091e6838aeee2a5819850c334fde71b5a439Eric Anholt return var; 468bb0091e6838aeee2a5819850c334fde71b5a439Eric Anholt} 478bb0091e6838aeee2a5819850c334fde71b5a439Eric Anholt 48d32780d5041a6d241834fe565739104f86300425Eric Anholtir_assignment * 49f72a8498e7e2c2d3233cdfd58de3b1124a247d39Kenneth Graunkeassign(deref lhs, operand rhs, operand condition, int writemask) 50d32780d5041a6d241834fe565739104f86300425Eric Anholt{ 51d32780d5041a6d241834fe565739104f86300425Eric Anholt void *mem_ctx = ralloc_parent(lhs.val); 52d32780d5041a6d241834fe565739104f86300425Eric Anholt 53d32780d5041a6d241834fe565739104f86300425Eric Anholt ir_assignment *assign = new(mem_ctx) ir_assignment(lhs.val, 542eec41f6f1b85b43e38721661f4b21bd982c6a46Timothy Arceri rhs.val, 55f72a8498e7e2c2d3233cdfd58de3b1124a247d39Kenneth Graunke condition.val, 56f72a8498e7e2c2d3233cdfd58de3b1124a247d39Kenneth Graunke writemask); 57d32780d5041a6d241834fe565739104f86300425Eric Anholt 58d32780d5041a6d241834fe565739104f86300425Eric Anholt return assign; 59d32780d5041a6d241834fe565739104f86300425Eric Anholt} 60d32780d5041a6d241834fe565739104f86300425Eric Anholt 61d32780d5041a6d241834fe565739104f86300425Eric Anholtir_assignment * 62d32780d5041a6d241834fe565739104f86300425Eric Anholtassign(deref lhs, operand rhs) 63d32780d5041a6d241834fe565739104f86300425Eric Anholt{ 64d32780d5041a6d241834fe565739104f86300425Eric Anholt return assign(lhs, rhs, (1 << lhs.val->type->vector_elements) - 1); 65d32780d5041a6d241834fe565739104f86300425Eric Anholt} 66d32780d5041a6d241834fe565739104f86300425Eric Anholt 67f72a8498e7e2c2d3233cdfd58de3b1124a247d39Kenneth Graunkeir_assignment * 68f72a8498e7e2c2d3233cdfd58de3b1124a247d39Kenneth Graunkeassign(deref lhs, operand rhs, int writemask) 69f72a8498e7e2c2d3233cdfd58de3b1124a247d39Kenneth Graunke{ 70f72a8498e7e2c2d3233cdfd58de3b1124a247d39Kenneth Graunke return assign(lhs, rhs, (ir_rvalue *) NULL, writemask); 71f72a8498e7e2c2d3233cdfd58de3b1124a247d39Kenneth Graunke} 72f72a8498e7e2c2d3233cdfd58de3b1124a247d39Kenneth Graunke 73f72a8498e7e2c2d3233cdfd58de3b1124a247d39Kenneth Graunkeir_assignment * 74f72a8498e7e2c2d3233cdfd58de3b1124a247d39Kenneth Graunkeassign(deref lhs, operand rhs, operand condition) 75f72a8498e7e2c2d3233cdfd58de3b1124a247d39Kenneth Graunke{ 76f72a8498e7e2c2d3233cdfd58de3b1124a247d39Kenneth Graunke return assign(lhs, rhs, condition, (1 << lhs.val->type->vector_elements) - 1); 77f72a8498e7e2c2d3233cdfd58de3b1124a247d39Kenneth Graunke} 78f72a8498e7e2c2d3233cdfd58de3b1124a247d39Kenneth Graunke 79d716b3376ccf66200d007852b30147ca7f7e7c68Kenneth Graunkeir_return * 80d716b3376ccf66200d007852b30147ca7f7e7c68Kenneth Graunkeret(operand retval) 81d716b3376ccf66200d007852b30147ca7f7e7c68Kenneth Graunke{ 82d716b3376ccf66200d007852b30147ca7f7e7c68Kenneth Graunke void *mem_ctx = ralloc_parent(retval.val); 83d716b3376ccf66200d007852b30147ca7f7e7c68Kenneth Graunke return new(mem_ctx) ir_return(retval.val); 84d716b3376ccf66200d007852b30147ca7f7e7c68Kenneth Graunke} 85d716b3376ccf66200d007852b30147ca7f7e7c68Kenneth Graunke 86b782352745d322596a9122969f5c0e57ea032c1bEric Anholtir_swizzle * 87b782352745d322596a9122969f5c0e57ea032c1bEric Anholtswizzle(operand a, int swizzle, int components) 88b782352745d322596a9122969f5c0e57ea032c1bEric Anholt{ 89b782352745d322596a9122969f5c0e57ea032c1bEric Anholt void *mem_ctx = ralloc_parent(a.val); 90b782352745d322596a9122969f5c0e57ea032c1bEric Anholt 91b782352745d322596a9122969f5c0e57ea032c1bEric Anholt return new(mem_ctx) ir_swizzle(a.val, 922eec41f6f1b85b43e38721661f4b21bd982c6a46Timothy Arceri GET_SWZ(swizzle, 0), 932eec41f6f1b85b43e38721661f4b21bd982c6a46Timothy Arceri GET_SWZ(swizzle, 1), 942eec41f6f1b85b43e38721661f4b21bd982c6a46Timothy Arceri GET_SWZ(swizzle, 2), 952eec41f6f1b85b43e38721661f4b21bd982c6a46Timothy Arceri GET_SWZ(swizzle, 3), 962eec41f6f1b85b43e38721661f4b21bd982c6a46Timothy Arceri components); 97b782352745d322596a9122969f5c0e57ea032c1bEric Anholt} 98b782352745d322596a9122969f5c0e57ea032c1bEric Anholt 99b782352745d322596a9122969f5c0e57ea032c1bEric Anholtir_swizzle * 100c3466315c004302b924e346ceab019ef8b446635Brian Paulswizzle_for_size(operand a, unsigned components) 101d9da350a8334201400a43d105b92fce2bd6a5f32Kenneth Graunke{ 102d9da350a8334201400a43d105b92fce2bd6a5f32Kenneth Graunke void *mem_ctx = ralloc_parent(a.val); 103d9da350a8334201400a43d105b92fce2bd6a5f32Kenneth Graunke 104d9da350a8334201400a43d105b92fce2bd6a5f32Kenneth Graunke if (a.val->type->vector_elements < components) 105d9da350a8334201400a43d105b92fce2bd6a5f32Kenneth Graunke components = a.val->type->vector_elements; 106d9da350a8334201400a43d105b92fce2bd6a5f32Kenneth Graunke 107d9da350a8334201400a43d105b92fce2bd6a5f32Kenneth Graunke unsigned s[4] = { 0, 1, 2, 3 }; 108d9da350a8334201400a43d105b92fce2bd6a5f32Kenneth Graunke for (int i = components; i < 4; i++) 109d9da350a8334201400a43d105b92fce2bd6a5f32Kenneth Graunke s[i] = components - 1; 110d9da350a8334201400a43d105b92fce2bd6a5f32Kenneth Graunke 111d9da350a8334201400a43d105b92fce2bd6a5f32Kenneth Graunke return new(mem_ctx) ir_swizzle(a.val, s, components); 112d9da350a8334201400a43d105b92fce2bd6a5f32Kenneth Graunke} 113d9da350a8334201400a43d105b92fce2bd6a5f32Kenneth Graunke 114d9da350a8334201400a43d105b92fce2bd6a5f32Kenneth Graunkeir_swizzle * 115b782352745d322596a9122969f5c0e57ea032c1bEric Anholtswizzle_xxxx(operand a) 116b782352745d322596a9122969f5c0e57ea032c1bEric Anholt{ 117b782352745d322596a9122969f5c0e57ea032c1bEric Anholt return swizzle(a, SWIZZLE_XXXX, 4); 118b782352745d322596a9122969f5c0e57ea032c1bEric Anholt} 119b782352745d322596a9122969f5c0e57ea032c1bEric Anholt 120b782352745d322596a9122969f5c0e57ea032c1bEric Anholtir_swizzle * 121b782352745d322596a9122969f5c0e57ea032c1bEric Anholtswizzle_yyyy(operand a) 122b782352745d322596a9122969f5c0e57ea032c1bEric Anholt{ 123b782352745d322596a9122969f5c0e57ea032c1bEric Anholt return swizzle(a, SWIZZLE_YYYY, 4); 124b782352745d322596a9122969f5c0e57ea032c1bEric Anholt} 125b782352745d322596a9122969f5c0e57ea032c1bEric Anholt 126b782352745d322596a9122969f5c0e57ea032c1bEric Anholtir_swizzle * 127b782352745d322596a9122969f5c0e57ea032c1bEric Anholtswizzle_zzzz(operand a) 128b782352745d322596a9122969f5c0e57ea032c1bEric Anholt{ 129b782352745d322596a9122969f5c0e57ea032c1bEric Anholt return swizzle(a, SWIZZLE_ZZZZ, 4); 130b782352745d322596a9122969f5c0e57ea032c1bEric Anholt} 131b782352745d322596a9122969f5c0e57ea032c1bEric Anholt 132b782352745d322596a9122969f5c0e57ea032c1bEric Anholtir_swizzle * 133b782352745d322596a9122969f5c0e57ea032c1bEric Anholtswizzle_wwww(operand a) 134b782352745d322596a9122969f5c0e57ea032c1bEric Anholt{ 135b782352745d322596a9122969f5c0e57ea032c1bEric Anholt return swizzle(a, SWIZZLE_WWWW, 4); 136b782352745d322596a9122969f5c0e57ea032c1bEric Anholt} 137b782352745d322596a9122969f5c0e57ea032c1bEric Anholt 138b782352745d322596a9122969f5c0e57ea032c1bEric Anholtir_swizzle * 139b782352745d322596a9122969f5c0e57ea032c1bEric Anholtswizzle_x(operand a) 140b782352745d322596a9122969f5c0e57ea032c1bEric Anholt{ 141b782352745d322596a9122969f5c0e57ea032c1bEric Anholt return swizzle(a, SWIZZLE_XXXX, 1); 142b782352745d322596a9122969f5c0e57ea032c1bEric Anholt} 143b782352745d322596a9122969f5c0e57ea032c1bEric Anholt 144b782352745d322596a9122969f5c0e57ea032c1bEric Anholtir_swizzle * 145b782352745d322596a9122969f5c0e57ea032c1bEric Anholtswizzle_y(operand a) 146b782352745d322596a9122969f5c0e57ea032c1bEric Anholt{ 147b782352745d322596a9122969f5c0e57ea032c1bEric Anholt return swizzle(a, SWIZZLE_YYYY, 1); 148b782352745d322596a9122969f5c0e57ea032c1bEric Anholt} 149b782352745d322596a9122969f5c0e57ea032c1bEric Anholt 150b782352745d322596a9122969f5c0e57ea032c1bEric Anholtir_swizzle * 151b782352745d322596a9122969f5c0e57ea032c1bEric Anholtswizzle_z(operand a) 152b782352745d322596a9122969f5c0e57ea032c1bEric Anholt{ 153b782352745d322596a9122969f5c0e57ea032c1bEric Anholt return swizzle(a, SWIZZLE_ZZZZ, 1); 154b782352745d322596a9122969f5c0e57ea032c1bEric Anholt} 155b782352745d322596a9122969f5c0e57ea032c1bEric Anholt 156b782352745d322596a9122969f5c0e57ea032c1bEric Anholtir_swizzle * 157b782352745d322596a9122969f5c0e57ea032c1bEric Anholtswizzle_w(operand a) 158b782352745d322596a9122969f5c0e57ea032c1bEric Anholt{ 159b782352745d322596a9122969f5c0e57ea032c1bEric Anholt return swizzle(a, SWIZZLE_WWWW, 1); 160b782352745d322596a9122969f5c0e57ea032c1bEric Anholt} 161b782352745d322596a9122969f5c0e57ea032c1bEric Anholt 162b782352745d322596a9122969f5c0e57ea032c1bEric Anholtir_swizzle * 163b782352745d322596a9122969f5c0e57ea032c1bEric Anholtswizzle_xy(operand a) 164b782352745d322596a9122969f5c0e57ea032c1bEric Anholt{ 165b782352745d322596a9122969f5c0e57ea032c1bEric Anholt return swizzle(a, SWIZZLE_XYZW, 2); 166b782352745d322596a9122969f5c0e57ea032c1bEric Anholt} 167b782352745d322596a9122969f5c0e57ea032c1bEric Anholt 168b782352745d322596a9122969f5c0e57ea032c1bEric Anholtir_swizzle * 169b782352745d322596a9122969f5c0e57ea032c1bEric Anholtswizzle_xyz(operand a) 170b782352745d322596a9122969f5c0e57ea032c1bEric Anholt{ 171b782352745d322596a9122969f5c0e57ea032c1bEric Anholt return swizzle(a, SWIZZLE_XYZW, 3); 172b782352745d322596a9122969f5c0e57ea032c1bEric Anholt} 173b782352745d322596a9122969f5c0e57ea032c1bEric Anholt 174b782352745d322596a9122969f5c0e57ea032c1bEric Anholtir_swizzle * 175b782352745d322596a9122969f5c0e57ea032c1bEric Anholtswizzle_xyzw(operand a) 176b782352745d322596a9122969f5c0e57ea032c1bEric Anholt{ 177b782352745d322596a9122969f5c0e57ea032c1bEric Anholt return swizzle(a, SWIZZLE_XYZW, 4); 178b782352745d322596a9122969f5c0e57ea032c1bEric Anholt} 179b782352745d322596a9122969f5c0e57ea032c1bEric Anholt 180599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholtir_expression * 1810bb3d4ba54f98f4d45abe598dabc905f08055cd5Kenneth Graunkeexpr(ir_expression_operation op, operand a) 1820bb3d4ba54f98f4d45abe598dabc905f08055cd5Kenneth Graunke{ 1830bb3d4ba54f98f4d45abe598dabc905f08055cd5Kenneth Graunke void *mem_ctx = ralloc_parent(a.val); 1840bb3d4ba54f98f4d45abe598dabc905f08055cd5Kenneth Graunke 1850bb3d4ba54f98f4d45abe598dabc905f08055cd5Kenneth Graunke return new(mem_ctx) ir_expression(op, a.val); 1860bb3d4ba54f98f4d45abe598dabc905f08055cd5Kenneth Graunke} 1870bb3d4ba54f98f4d45abe598dabc905f08055cd5Kenneth Graunke 1880bb3d4ba54f98f4d45abe598dabc905f08055cd5Kenneth Graunkeir_expression * 189d6e6566206029ace72ba037a3ef7950876eeb88bEric Anholtexpr(ir_expression_operation op, operand a, operand b) 190599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt{ 191d6e6566206029ace72ba037a3ef7950876eeb88bEric Anholt void *mem_ctx = ralloc_parent(a.val); 192599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt 193d6e6566206029ace72ba037a3ef7950876eeb88bEric Anholt return new(mem_ctx) ir_expression(op, a.val, b.val); 194599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt} 195599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt 196eff2ca1ac3f77da81a698b08c46f245b28930edeKenneth Graunkeir_expression * 197eff2ca1ac3f77da81a698b08c46f245b28930edeKenneth Graunkeexpr(ir_expression_operation op, operand a, operand b, operand c) 198eff2ca1ac3f77da81a698b08c46f245b28930edeKenneth Graunke{ 199eff2ca1ac3f77da81a698b08c46f245b28930edeKenneth Graunke void *mem_ctx = ralloc_parent(a.val); 200eff2ca1ac3f77da81a698b08c46f245b28930edeKenneth Graunke 201eff2ca1ac3f77da81a698b08c46f245b28930edeKenneth Graunke return new(mem_ctx) ir_expression(op, a.val, b.val, c.val); 202eff2ca1ac3f77da81a698b08c46f245b28930edeKenneth Graunke} 203eff2ca1ac3f77da81a698b08c46f245b28930edeKenneth Graunke 204d6e6566206029ace72ba037a3ef7950876eeb88bEric Anholtir_expression *add(operand a, operand b) 205599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt{ 206599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt return expr(ir_binop_add, a, b); 207599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt} 208599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt 209d6e6566206029ace72ba037a3ef7950876eeb88bEric Anholtir_expression *sub(operand a, operand b) 210599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt{ 211599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt return expr(ir_binop_sub, a, b); 212599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt} 213599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt 2148d1400fe123dc229e87a3a6316b0697f864695a3Brian Paulir_expression *min2(operand a, operand b) 21561c450fc81900131621e57fdd78a40e82239daf3Maxence Le Doré{ 21661c450fc81900131621e57fdd78a40e82239daf3Maxence Le Doré return expr(ir_binop_min, a, b); 21761c450fc81900131621e57fdd78a40e82239daf3Maxence Le Doré} 21861c450fc81900131621e57fdd78a40e82239daf3Maxence Le Doré 2198d1400fe123dc229e87a3a6316b0697f864695a3Brian Paulir_expression *max2(operand a, operand b) 22061c450fc81900131621e57fdd78a40e82239daf3Maxence Le Doré{ 22161c450fc81900131621e57fdd78a40e82239daf3Maxence Le Doré return expr(ir_binop_max, a, b); 22261c450fc81900131621e57fdd78a40e82239daf3Maxence Le Doré} 22361c450fc81900131621e57fdd78a40e82239daf3Maxence Le Doré 224d6e6566206029ace72ba037a3ef7950876eeb88bEric Anholtir_expression *mul(operand a, operand b) 225599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt{ 226599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt return expr(ir_binop_mul, a, b); 22706e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner} 22806e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner 22906e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turnerir_expression *imul_high(operand a, operand b) 23006e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner{ 23106e41a02a3564b00404dd3dd5d6f6b5897df36e9Matt Turner return expr(ir_binop_imul_high, a, b); 232599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt} 233599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt 2345790174e376e2b3543b902ae14c790c6eed2dd88Chad Versaceir_expression *div(operand a, operand b) 2355790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace{ 2365790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace return expr(ir_binop_div, a, b); 2375790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace} 2385790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace 239499d7a7f6e47403a4a3da448eddaf15bdf56395cMatt Turnerir_expression *carry(operand a, operand b) 240499d7a7f6e47403a4a3da448eddaf15bdf56395cMatt Turner{ 241499d7a7f6e47403a4a3da448eddaf15bdf56395cMatt Turner return expr(ir_binop_carry, a, b); 242499d7a7f6e47403a4a3da448eddaf15bdf56395cMatt Turner} 243499d7a7f6e47403a4a3da448eddaf15bdf56395cMatt Turner 244499d7a7f6e47403a4a3da448eddaf15bdf56395cMatt Turnerir_expression *borrow(operand a, operand b) 245499d7a7f6e47403a4a3da448eddaf15bdf56395cMatt Turner{ 246499d7a7f6e47403a4a3da448eddaf15bdf56395cMatt Turner return expr(ir_binop_borrow, a, b); 247499d7a7f6e47403a4a3da448eddaf15bdf56395cMatt Turner} 248499d7a7f6e47403a4a3da448eddaf15bdf56395cMatt Turner 249a5455ab1cae85dbe40c12ada9030bc4b4537ced7Matt Turnerir_expression *trunc(operand a) 250a5455ab1cae85dbe40c12ada9030bc4b4537ced7Matt Turner{ 251a5455ab1cae85dbe40c12ada9030bc4b4537ced7Matt Turner return expr(ir_unop_trunc, a); 252a5455ab1cae85dbe40c12ada9030bc4b4537ced7Matt Turner} 253a5455ab1cae85dbe40c12ada9030bc4b4537ced7Matt Turner 2545790174e376e2b3543b902ae14c790c6eed2dd88Chad Versaceir_expression *round_even(operand a) 2555790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace{ 2565790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace return expr(ir_unop_round_even, a); 2575790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace} 2585790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace 25941e9adfd83a35d3c147768b80b6b4c0b10c3a379Dave Airlieir_expression *fract(operand a) 26041e9adfd83a35d3c147768b80b6b4c0b10c3a379Dave Airlie{ 26141e9adfd83a35d3c147768b80b6b4c0b10c3a379Dave Airlie return expr(ir_unop_fract, a); 26241e9adfd83a35d3c147768b80b6b4c0b10c3a379Dave Airlie} 26341e9adfd83a35d3c147768b80b6b4c0b10c3a379Dave Airlie 264202238824bdde9ddac5753232eee4f3d1e2d67dbKenneth Graunke/* dot for vectors, mul for scalars */ 265c049dd4396d1639859810d6124faa863dae61d1bMatt Turnerir_expression *dot(operand a, operand b) 266202238824bdde9ddac5753232eee4f3d1e2d67dbKenneth Graunke{ 267202238824bdde9ddac5753232eee4f3d1e2d67dbKenneth Graunke assert(a.val->type == b.val->type); 268202238824bdde9ddac5753232eee4f3d1e2d67dbKenneth Graunke 269202238824bdde9ddac5753232eee4f3d1e2d67dbKenneth Graunke if (a.val->type->vector_elements == 1) 270202238824bdde9ddac5753232eee4f3d1e2d67dbKenneth Graunke return expr(ir_binop_mul, a, b); 271202238824bdde9ddac5753232eee4f3d1e2d67dbKenneth Graunke 272202238824bdde9ddac5753232eee4f3d1e2d67dbKenneth Graunke return expr(ir_binop_dot, a, b); 273202238824bdde9ddac5753232eee4f3d1e2d67dbKenneth Graunke} 274202238824bdde9ddac5753232eee4f3d1e2d67dbKenneth Graunke 2755790174e376e2b3543b902ae14c790c6eed2dd88Chad Versaceir_expression* 2765790174e376e2b3543b902ae14c790c6eed2dd88Chad Versaceclamp(operand a, operand b, operand c) 2775790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace{ 2785790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace return expr(ir_binop_min, expr(ir_binop_max, a, b), c); 2795790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace} 2805790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace 281599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholtir_expression * 282d6e6566206029ace72ba037a3ef7950876eeb88bEric Anholtsaturate(operand a) 283599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt{ 284cbd0d643a30901dabc5b3cc84121bafe16f8fc6fAbdiel Janulgue return expr(ir_unop_saturate, a); 285599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt} 286599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt 28716be6298c0d7aa1a06903e6768bc74358d339fbaMatt Turnerir_expression * 28816be6298c0d7aa1a06903e6768bc74358d339fbaMatt Turnerabs(operand a) 28916be6298c0d7aa1a06903e6768bc74358d339fbaMatt Turner{ 29016be6298c0d7aa1a06903e6768bc74358d339fbaMatt Turner return expr(ir_unop_abs, a); 29116be6298c0d7aa1a06903e6768bc74358d339fbaMatt Turner} 29216be6298c0d7aa1a06903e6768bc74358d339fbaMatt Turner 293666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunkeir_expression * 294666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunkeneg(operand a) 295666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke{ 296666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke return expr(ir_unop_neg, a); 297666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke} 298666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke 299666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunkeir_expression * 300666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunkesin(operand a) 301666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke{ 302666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke return expr(ir_unop_sin, a); 303666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke} 304666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke 305666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunkeir_expression * 306666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunkecos(operand a) 307666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke{ 308666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke return expr(ir_unop_cos, a); 309666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke} 310666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke 311666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunkeir_expression * 312666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunkeexp(operand a) 313666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke{ 314666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke return expr(ir_unop_exp, a); 315666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke} 316666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke 317666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunkeir_expression * 318666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunkersq(operand a) 319666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke{ 320666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke return expr(ir_unop_rsq, a); 321666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke} 322666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke 323666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunkeir_expression * 324666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunkesqrt(operand a) 325666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke{ 326666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke return expr(ir_unop_sqrt, a); 327666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke} 328666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke 329666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunkeir_expression * 330666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunkelog(operand a) 331666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke{ 332666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke return expr(ir_unop_log, a); 333666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke} 334666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke 335666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunkeir_expression * 336666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunkesign(operand a) 337666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke{ 338666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke return expr(ir_unop_sign, a); 339666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke} 340666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke 34157f24299b7fe0f7b20c2a3cf1e94c747825b568dDave Airlieir_expression * 34257f24299b7fe0f7b20c2a3cf1e94c747825b568dDave Airliesubr_to_int(operand a) 34357f24299b7fe0f7b20c2a3cf1e94c747825b568dDave Airlie{ 34457f24299b7fe0f7b20c2a3cf1e94c747825b568dDave Airlie return expr(ir_unop_subroutine_to_int, a); 34557f24299b7fe0f7b20c2a3cf1e94c747825b568dDave Airlie} 34657f24299b7fe0f7b20c2a3cf1e94c747825b568dDave Airlie 3475790174e376e2b3543b902ae14c790c6eed2dd88Chad Versaceir_expression* 3485790174e376e2b3543b902ae14c790c6eed2dd88Chad Versaceequal(operand a, operand b) 3495790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace{ 3505790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace return expr(ir_binop_equal, a, b); 3515790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace} 3525790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace 3535790174e376e2b3543b902ae14c790c6eed2dd88Chad Versaceir_expression* 3541cf76c72da37166dd75009ceea212bfa18626b2fMatt Turnernequal(operand a, operand b) 3551cf76c72da37166dd75009ceea212bfa18626b2fMatt Turner{ 3561cf76c72da37166dd75009ceea212bfa18626b2fMatt Turner return expr(ir_binop_nequal, a, b); 3571cf76c72da37166dd75009ceea212bfa18626b2fMatt Turner} 3581cf76c72da37166dd75009ceea212bfa18626b2fMatt Turner 3591cf76c72da37166dd75009ceea212bfa18626b2fMatt Turnerir_expression* 3605790174e376e2b3543b902ae14c790c6eed2dd88Chad Versaceless(operand a, operand b) 3615790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace{ 3625790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace return expr(ir_binop_less, a, b); 3635790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace} 3645790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace 3655790174e376e2b3543b902ae14c790c6eed2dd88Chad Versaceir_expression* 3665790174e376e2b3543b902ae14c790c6eed2dd88Chad Versacegreater(operand a, operand b) 3675790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace{ 3685790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace return expr(ir_binop_greater, a, b); 3695790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace} 3705790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace 3715790174e376e2b3543b902ae14c790c6eed2dd88Chad Versaceir_expression* 3725790174e376e2b3543b902ae14c790c6eed2dd88Chad Versacelequal(operand a, operand b) 3735790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace{ 3745790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace return expr(ir_binop_lequal, a, b); 3755790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace} 3765790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace 3775790174e376e2b3543b902ae14c790c6eed2dd88Chad Versaceir_expression* 3785790174e376e2b3543b902ae14c790c6eed2dd88Chad Versacegequal(operand a, operand b) 3795790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace{ 3805790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace return expr(ir_binop_gequal, a, b); 3815790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace} 3825790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace 3835790174e376e2b3543b902ae14c790c6eed2dd88Chad Versaceir_expression* 3845790174e376e2b3543b902ae14c790c6eed2dd88Chad Versacelogic_not(operand a) 3855790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace{ 3865790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace return expr(ir_unop_logic_not, a); 3875790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace} 3885790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace 3895790174e376e2b3543b902ae14c790c6eed2dd88Chad Versaceir_expression* 3905790174e376e2b3543b902ae14c790c6eed2dd88Chad Versacelogic_and(operand a, operand b) 3915790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace{ 3925790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace return expr(ir_binop_logic_and, a, b); 3935790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace} 3945790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace 3955790174e376e2b3543b902ae14c790c6eed2dd88Chad Versaceir_expression* 3965790174e376e2b3543b902ae14c790c6eed2dd88Chad Versacelogic_or(operand a, operand b) 3975790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace{ 3985790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace return expr(ir_binop_logic_or, a, b); 3995790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace} 4005790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace 4015790174e376e2b3543b902ae14c790c6eed2dd88Chad Versaceir_expression* 4025790174e376e2b3543b902ae14c790c6eed2dd88Chad Versacebit_not(operand a) 4035790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace{ 4045790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace return expr(ir_unop_bit_not, a); 4055790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace} 4065790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace 4075790174e376e2b3543b902ae14c790c6eed2dd88Chad Versaceir_expression* 4085790174e376e2b3543b902ae14c790c6eed2dd88Chad Versacebit_and(operand a, operand b) 4095790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace{ 4105790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace return expr(ir_binop_bit_and, a, b); 4115790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace} 4125790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace 4135790174e376e2b3543b902ae14c790c6eed2dd88Chad Versaceir_expression* 4145790174e376e2b3543b902ae14c790c6eed2dd88Chad Versacebit_or(operand a, operand b) 4155790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace{ 4165790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace return expr(ir_binop_bit_or, a, b); 4175790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace} 4185790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace 4195790174e376e2b3543b902ae14c790c6eed2dd88Chad Versaceir_expression* 4207f64041cee3101c673be6d7bffbb03dab69ccca4Ian Romanickbit_xor(operand a, operand b) 4217f64041cee3101c673be6d7bffbb03dab69ccca4Ian Romanick{ 4227f64041cee3101c673be6d7bffbb03dab69ccca4Ian Romanick return expr(ir_binop_bit_xor, a, b); 4237f64041cee3101c673be6d7bffbb03dab69ccca4Ian Romanick} 4247f64041cee3101c673be6d7bffbb03dab69ccca4Ian Romanick 4257f64041cee3101c673be6d7bffbb03dab69ccca4Ian Romanickir_expression* 4265790174e376e2b3543b902ae14c790c6eed2dd88Chad Versacelshift(operand a, operand b) 4275790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace{ 4285790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace return expr(ir_binop_lshift, a, b); 4295790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace} 4305790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace 4315790174e376e2b3543b902ae14c790c6eed2dd88Chad Versaceir_expression* 4325790174e376e2b3543b902ae14c790c6eed2dd88Chad Versacershift(operand a, operand b) 4335790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace{ 4345790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace return expr(ir_binop_rshift, a, b); 4355790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace} 4365790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace 4375790174e376e2b3543b902ae14c790c6eed2dd88Chad Versaceir_expression* 4385790174e376e2b3543b902ae14c790c6eed2dd88Chad Versacef2i(operand a) 4395790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace{ 4405790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace return expr(ir_unop_f2i, a); 4415790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace} 4425790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace 4435790174e376e2b3543b902ae14c790c6eed2dd88Chad Versaceir_expression* 4446bfb1a8344d58aa47a28cff87f508088233e70f6Matt Turnerbitcast_f2i(operand a) 4456bfb1a8344d58aa47a28cff87f508088233e70f6Matt Turner{ 4466bfb1a8344d58aa47a28cff87f508088233e70f6Matt Turner return expr(ir_unop_bitcast_f2i, a); 4476bfb1a8344d58aa47a28cff87f508088233e70f6Matt Turner} 4486bfb1a8344d58aa47a28cff87f508088233e70f6Matt Turner 4496bfb1a8344d58aa47a28cff87f508088233e70f6Matt Turnerir_expression* 4505790174e376e2b3543b902ae14c790c6eed2dd88Chad Versacei2f(operand a) 4515790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace{ 4525790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace return expr(ir_unop_i2f, a); 4535790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace} 4545790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace 4555790174e376e2b3543b902ae14c790c6eed2dd88Chad Versaceir_expression* 4566bfb1a8344d58aa47a28cff87f508088233e70f6Matt Turnerbitcast_i2f(operand a) 4576bfb1a8344d58aa47a28cff87f508088233e70f6Matt Turner{ 4586bfb1a8344d58aa47a28cff87f508088233e70f6Matt Turner return expr(ir_unop_bitcast_i2f, a); 4596bfb1a8344d58aa47a28cff87f508088233e70f6Matt Turner} 4606bfb1a8344d58aa47a28cff87f508088233e70f6Matt Turner 4616bfb1a8344d58aa47a28cff87f508088233e70f6Matt Turnerir_expression* 4625790174e376e2b3543b902ae14c790c6eed2dd88Chad Versacei2u(operand a) 4635790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace{ 4645790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace return expr(ir_unop_i2u, a); 4655790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace} 4665790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace 4675790174e376e2b3543b902ae14c790c6eed2dd88Chad Versaceir_expression* 4685790174e376e2b3543b902ae14c790c6eed2dd88Chad Versaceu2i(operand a) 4695790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace{ 4705790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace return expr(ir_unop_u2i, a); 4715790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace} 4725790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace 4735790174e376e2b3543b902ae14c790c6eed2dd88Chad Versaceir_expression* 4745790174e376e2b3543b902ae14c790c6eed2dd88Chad Versacef2u(operand a) 4755790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace{ 4765790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace return expr(ir_unop_f2u, a); 4775790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace} 4785790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace 4795790174e376e2b3543b902ae14c790c6eed2dd88Chad Versaceir_expression* 4806bfb1a8344d58aa47a28cff87f508088233e70f6Matt Turnerbitcast_f2u(operand a) 4816bfb1a8344d58aa47a28cff87f508088233e70f6Matt Turner{ 4826bfb1a8344d58aa47a28cff87f508088233e70f6Matt Turner return expr(ir_unop_bitcast_f2u, a); 4836bfb1a8344d58aa47a28cff87f508088233e70f6Matt Turner} 4846bfb1a8344d58aa47a28cff87f508088233e70f6Matt Turner 4856bfb1a8344d58aa47a28cff87f508088233e70f6Matt Turnerir_expression* 4865790174e376e2b3543b902ae14c790c6eed2dd88Chad Versaceu2f(operand a) 4875790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace{ 4885790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace return expr(ir_unop_u2f, a); 4895790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace} 4905790174e376e2b3543b902ae14c790c6eed2dd88Chad Versace 4916bfb1a8344d58aa47a28cff87f508088233e70f6Matt Turnerir_expression* 4926bfb1a8344d58aa47a28cff87f508088233e70f6Matt Turnerbitcast_u2f(operand a) 4936bfb1a8344d58aa47a28cff87f508088233e70f6Matt Turner{ 4946bfb1a8344d58aa47a28cff87f508088233e70f6Matt Turner return expr(ir_unop_bitcast_u2f, a); 4956bfb1a8344d58aa47a28cff87f508088233e70f6Matt Turner} 4966bfb1a8344d58aa47a28cff87f508088233e70f6Matt Turner 49757a6bcd56b956e7ff8aaed88e08bee9fd59dbd88Matt Turnerir_expression* 49857a6bcd56b956e7ff8aaed88e08bee9fd59dbd88Matt Turneri2b(operand a) 49957a6bcd56b956e7ff8aaed88e08bee9fd59dbd88Matt Turner{ 50057a6bcd56b956e7ff8aaed88e08bee9fd59dbd88Matt Turner return expr(ir_unop_i2b, a); 50157a6bcd56b956e7ff8aaed88e08bee9fd59dbd88Matt Turner} 50257a6bcd56b956e7ff8aaed88e08bee9fd59dbd88Matt Turner 50357a6bcd56b956e7ff8aaed88e08bee9fd59dbd88Matt Turnerir_expression* 50457a6bcd56b956e7ff8aaed88e08bee9fd59dbd88Matt Turnerb2i(operand a) 50557a6bcd56b956e7ff8aaed88e08bee9fd59dbd88Matt Turner{ 50657a6bcd56b956e7ff8aaed88e08bee9fd59dbd88Matt Turner return expr(ir_unop_b2i, a); 50757a6bcd56b956e7ff8aaed88e08bee9fd59dbd88Matt Turner} 50857a6bcd56b956e7ff8aaed88e08bee9fd59dbd88Matt Turner 509666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunkeir_expression * 510666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunkef2b(operand a) 511666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke{ 512666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke return expr(ir_unop_f2b, a); 513666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke} 514666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke 515666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunkeir_expression * 516666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunkeb2f(operand a) 517666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke{ 518666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke return expr(ir_unop_b2f, a); 519666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke} 520666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke 521666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunkeir_expression * 5221d5b06664fdd31a9447a1d10ec0615245aa46563Chris Forbesinterpolate_at_centroid(operand a) 5231d5b06664fdd31a9447a1d10ec0615245aa46563Chris Forbes{ 5241d5b06664fdd31a9447a1d10ec0615245aa46563Chris Forbes return expr(ir_unop_interpolate_at_centroid, a); 5251d5b06664fdd31a9447a1d10ec0615245aa46563Chris Forbes} 5261d5b06664fdd31a9447a1d10ec0615245aa46563Chris Forbes 5271d5b06664fdd31a9447a1d10ec0615245aa46563Chris Forbesir_expression * 5281d5b06664fdd31a9447a1d10ec0615245aa46563Chris Forbesinterpolate_at_offset(operand a, operand b) 5291d5b06664fdd31a9447a1d10ec0615245aa46563Chris Forbes{ 5301d5b06664fdd31a9447a1d10ec0615245aa46563Chris Forbes return expr(ir_binop_interpolate_at_offset, a, b); 5311d5b06664fdd31a9447a1d10ec0615245aa46563Chris Forbes} 5321d5b06664fdd31a9447a1d10ec0615245aa46563Chris Forbes 5331d5b06664fdd31a9447a1d10ec0615245aa46563Chris Forbesir_expression * 5341d5b06664fdd31a9447a1d10ec0615245aa46563Chris Forbesinterpolate_at_sample(operand a, operand b) 5351d5b06664fdd31a9447a1d10ec0615245aa46563Chris Forbes{ 5361d5b06664fdd31a9447a1d10ec0615245aa46563Chris Forbes return expr(ir_binop_interpolate_at_sample, a, b); 5371d5b06664fdd31a9447a1d10ec0615245aa46563Chris Forbes} 5381d5b06664fdd31a9447a1d10ec0615245aa46563Chris Forbes 5391d5b06664fdd31a9447a1d10ec0615245aa46563Chris Forbesir_expression * 54041e9adfd83a35d3c147768b80b6b4c0b10c3a379Dave Airlief2d(operand a) 54141e9adfd83a35d3c147768b80b6b4c0b10c3a379Dave Airlie{ 54241e9adfd83a35d3c147768b80b6b4c0b10c3a379Dave Airlie return expr(ir_unop_f2d, a); 54341e9adfd83a35d3c147768b80b6b4c0b10c3a379Dave Airlie} 54441e9adfd83a35d3c147768b80b6b4c0b10c3a379Dave Airlie 54541e9adfd83a35d3c147768b80b6b4c0b10c3a379Dave Airlieir_expression * 54641e9adfd83a35d3c147768b80b6b4c0b10c3a379Dave Airliei2d(operand a) 54741e9adfd83a35d3c147768b80b6b4c0b10c3a379Dave Airlie{ 54841e9adfd83a35d3c147768b80b6b4c0b10c3a379Dave Airlie return expr(ir_unop_i2d, a); 54941e9adfd83a35d3c147768b80b6b4c0b10c3a379Dave Airlie} 55041e9adfd83a35d3c147768b80b6b4c0b10c3a379Dave Airlie 55141e9adfd83a35d3c147768b80b6b4c0b10c3a379Dave Airlieir_expression * 55241e9adfd83a35d3c147768b80b6b4c0b10c3a379Dave Airlieu2d(operand a) 55341e9adfd83a35d3c147768b80b6b4c0b10c3a379Dave Airlie{ 55441e9adfd83a35d3c147768b80b6b4c0b10c3a379Dave Airlie return expr(ir_unop_u2d, a); 55541e9adfd83a35d3c147768b80b6b4c0b10c3a379Dave Airlie} 55641e9adfd83a35d3c147768b80b6b4c0b10c3a379Dave Airlie 55741e9adfd83a35d3c147768b80b6b4c0b10c3a379Dave Airlieir_expression * 558666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunkefma(operand a, operand b, operand c) 559666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke{ 560666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke return expr(ir_triop_fma, a, b, c); 561666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke} 562666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke 563666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunkeir_expression * 564666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunkelrp(operand x, operand y, operand a) 565666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke{ 566666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke return expr(ir_triop_lrp, x, y, a); 567666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke} 568666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke 569666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunkeir_expression * 5707aaa38728f93bfb69573e0d866f24e8cb41836f0Matt Turnercsel(operand a, operand b, operand c) 5717aaa38728f93bfb69573e0d866f24e8cb41836f0Matt Turner{ 5727aaa38728f93bfb69573e0d866f24e8cb41836f0Matt Turner return expr(ir_triop_csel, a, b, c); 5737aaa38728f93bfb69573e0d866f24e8cb41836f0Matt Turner} 5747aaa38728f93bfb69573e0d866f24e8cb41836f0Matt Turner 5757aaa38728f93bfb69573e0d866f24e8cb41836f0Matt Turnerir_expression * 576275c5810ca7e38560b2a77281e7a0498c50126f8Ilia Mirkinbitfield_extract(operand a, operand b, operand c) 577275c5810ca7e38560b2a77281e7a0498c50126f8Ilia Mirkin{ 578275c5810ca7e38560b2a77281e7a0498c50126f8Ilia Mirkin return expr(ir_triop_bitfield_extract, a, b, c); 579275c5810ca7e38560b2a77281e7a0498c50126f8Ilia Mirkin} 580275c5810ca7e38560b2a77281e7a0498c50126f8Ilia Mirkin 581275c5810ca7e38560b2a77281e7a0498c50126f8Ilia Mirkinir_expression * 582666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunkebitfield_insert(operand a, operand b, operand c, operand d) 583666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke{ 584666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke void *mem_ctx = ralloc_parent(a.val); 585666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke return new(mem_ctx) ir_expression(ir_quadop_bitfield_insert, 586666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke a.val->type, a.val, b.val, c.val, d.val); 587666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke} 588666df565519357833aabb265e42d1ed981bf2a4aKenneth Graunke 589f859e4fbd1424a5f4ba6ff01c1e896034cc7815fChad Versaceir_if* 590f859e4fbd1424a5f4ba6ff01c1e896034cc7815fChad Versaceif_tree(operand condition, 591f859e4fbd1424a5f4ba6ff01c1e896034cc7815fChad Versace ir_instruction *then_branch) 592f859e4fbd1424a5f4ba6ff01c1e896034cc7815fChad Versace{ 593f859e4fbd1424a5f4ba6ff01c1e896034cc7815fChad Versace assert(then_branch != NULL); 594f859e4fbd1424a5f4ba6ff01c1e896034cc7815fChad Versace 595f859e4fbd1424a5f4ba6ff01c1e896034cc7815fChad Versace void *mem_ctx = ralloc_parent(condition.val); 596f859e4fbd1424a5f4ba6ff01c1e896034cc7815fChad Versace 597f859e4fbd1424a5f4ba6ff01c1e896034cc7815fChad Versace ir_if *result = new(mem_ctx) ir_if(condition.val); 598f859e4fbd1424a5f4ba6ff01c1e896034cc7815fChad Versace result->then_instructions.push_tail(then_branch); 599f859e4fbd1424a5f4ba6ff01c1e896034cc7815fChad Versace return result; 600f859e4fbd1424a5f4ba6ff01c1e896034cc7815fChad Versace} 601f859e4fbd1424a5f4ba6ff01c1e896034cc7815fChad Versace 602f859e4fbd1424a5f4ba6ff01c1e896034cc7815fChad Versaceir_if* 603f859e4fbd1424a5f4ba6ff01c1e896034cc7815fChad Versaceif_tree(operand condition, 604f859e4fbd1424a5f4ba6ff01c1e896034cc7815fChad Versace ir_instruction *then_branch, 605f859e4fbd1424a5f4ba6ff01c1e896034cc7815fChad Versace ir_instruction *else_branch) 606f859e4fbd1424a5f4ba6ff01c1e896034cc7815fChad Versace{ 607f859e4fbd1424a5f4ba6ff01c1e896034cc7815fChad Versace assert(then_branch != NULL); 608f859e4fbd1424a5f4ba6ff01c1e896034cc7815fChad Versace assert(else_branch != NULL); 609f859e4fbd1424a5f4ba6ff01c1e896034cc7815fChad Versace 610f859e4fbd1424a5f4ba6ff01c1e896034cc7815fChad Versace void *mem_ctx = ralloc_parent(condition.val); 611f859e4fbd1424a5f4ba6ff01c1e896034cc7815fChad Versace 612f859e4fbd1424a5f4ba6ff01c1e896034cc7815fChad Versace ir_if *result = new(mem_ctx) ir_if(condition.val); 613f859e4fbd1424a5f4ba6ff01c1e896034cc7815fChad Versace result->then_instructions.push_tail(then_branch); 614f859e4fbd1424a5f4ba6ff01c1e896034cc7815fChad Versace result->else_instructions.push_tail(else_branch); 615f859e4fbd1424a5f4ba6ff01c1e896034cc7815fChad Versace return result; 616f859e4fbd1424a5f4ba6ff01c1e896034cc7815fChad Versace} 617f859e4fbd1424a5f4ba6ff01c1e896034cc7815fChad Versace 618599aac95ff2149d881177ed75a48d97d3dcf47bdEric Anholt} /* namespace ir_builder */ 619