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