spirv: Update the OpenCL.std.h header

This corresponds to commit 8b911bd2ba37677037b38c9bd286c7c05701bcda on
GitHub.

We previously tweaked OpenCL.std.h from upstream to be included in C
code.  Now upstream header can be included, however the symbol names
are slightly different (include an OpenCLstd_ prefix), so this patch
also fixes vtn_opencl.c to use those.

Reviewed-by: Karol Herbst <kherbst@redhat.com>
This commit is contained in:
Caio Marcelo de Oliveira Filho 2019-06-03 14:41:46 -07:00
parent 9701cb1034
commit d482a8f680
2 changed files with 339 additions and 144 deletions

View file

@ -27,7 +27,10 @@
#ifndef OPENCLstd_H #ifndef OPENCLstd_H
#define OPENCLstd_H #define OPENCLstd_H
enum OpenCLstd { #ifdef __cplusplus
namespace OpenCLLIB {
enum Entrypoints {
// Section 2.1: Math extended instructions // Section 2.1: Math extended instructions
Acos = 0, Acos = 0,
@ -208,4 +211,191 @@ enum OpenCLstd {
Prefetch = 185, Prefetch = 185,
}; };
} // end namespace OpenCLLIB
#else
enum OpenCLstd_Entrypoints {
// Section 2.1: Math extended instructions
OpenCLstd_Acos = 0,
OpenCLstd_Acosh = 1,
OpenCLstd_Acospi = 2,
OpenCLstd_Asin = 3,
OpenCLstd_Asinh = 4,
OpenCLstd_Asinpi = 5,
OpenCLstd_Atan = 6,
OpenCLstd_Atan2 = 7,
OpenCLstd_Atanh = 8,
OpenCLstd_Atanpi = 9,
OpenCLstd_Atan2pi = 10,
OpenCLstd_Cbrt = 11,
OpenCLstd_Ceil = 12,
OpenCLstd_Copysign = 13,
OpenCLstd_Cos = 14,
OpenCLstd_Cosh = 15,
OpenCLstd_Cospi = 16,
OpenCLstd_Erfc = 17,
OpenCLstd_Erf = 18,
OpenCLstd_Exp = 19,
OpenCLstd_Exp2 = 20,
OpenCLstd_Exp10 = 21,
OpenCLstd_Expm1 = 22,
OpenCLstd_Fabs = 23,
OpenCLstd_Fdim = 24,
OpenCLstd_Floor = 25,
OpenCLstd_Fma = 26,
OpenCLstd_Fmax = 27,
OpenCLstd_Fmin = 28,
OpenCLstd_Fmod = 29,
OpenCLstd_Fract = 30,
OpenCLstd_Frexp = 31,
OpenCLstd_Hypot = 32,
OpenCLstd_Ilogb = 33,
OpenCLstd_Ldexp = 34,
OpenCLstd_Lgamma = 35,
OpenCLstd_Lgamma_r = 36,
OpenCLstd_Log = 37,
OpenCLstd_Log2 = 38,
OpenCLstd_Log10 = 39,
OpenCLstd_Log1p = 40,
OpenCLstd_Logb = 41,
OpenCLstd_Mad = 42,
OpenCLstd_Maxmag = 43,
OpenCLstd_Minmag = 44,
OpenCLstd_Modf = 45,
OpenCLstd_Nan = 46,
OpenCLstd_Nextafter = 47,
OpenCLstd_Pow = 48,
OpenCLstd_Pown = 49,
OpenCLstd_Powr = 50,
OpenCLstd_Remainder = 51,
OpenCLstd_Remquo = 52,
OpenCLstd_Rint = 53,
OpenCLstd_Rootn = 54,
OpenCLstd_Round = 55,
OpenCLstd_Rsqrt = 56,
OpenCLstd_Sin = 57,
OpenCLstd_Sincos = 58,
OpenCLstd_Sinh = 59,
OpenCLstd_Sinpi = 60,
OpenCLstd_Sqrt = 61,
OpenCLstd_Tan = 62,
OpenCLstd_Tanh = 63,
OpenCLstd_Tanpi = 64,
OpenCLstd_Tgamma = 65,
OpenCLstd_Trunc = 66,
OpenCLstd_Half_cos = 67,
OpenCLstd_Half_divide = 68,
OpenCLstd_Half_exp = 69,
OpenCLstd_Half_exp2 = 70,
OpenCLstd_Half_exp10 = 71,
OpenCLstd_Half_log = 72,
OpenCLstd_Half_log2 = 73,
OpenCLstd_Half_log10 = 74,
OpenCLstd_Half_powr = 75,
OpenCLstd_Half_recip = 76,
OpenCLstd_Half_rsqrt = 77,
OpenCLstd_Half_sin = 78,
OpenCLstd_Half_sqrt = 79,
OpenCLstd_Half_tan = 80,
OpenCLstd_Native_cos = 81,
OpenCLstd_Native_divide = 82,
OpenCLstd_Native_exp = 83,
OpenCLstd_Native_exp2 = 84,
OpenCLstd_Native_exp10 = 85,
OpenCLstd_Native_log = 86,
OpenCLstd_Native_log2 = 87,
OpenCLstd_Native_log10 = 88,
OpenCLstd_Native_powr = 89,
OpenCLstd_Native_recip = 90,
OpenCLstd_Native_rsqrt = 91,
OpenCLstd_Native_sin = 92,
OpenCLstd_Native_sqrt = 93,
OpenCLstd_Native_tan = 94,
// Section 2.2: Integer instructions
OpenCLstd_SAbs = 141,
OpenCLstd_SAbs_diff = 142,
OpenCLstd_SAdd_sat = 143,
OpenCLstd_UAdd_sat = 144,
OpenCLstd_SHadd = 145,
OpenCLstd_UHadd = 146,
OpenCLstd_SRhadd = 147,
OpenCLstd_URhadd = 148,
OpenCLstd_SClamp = 149,
OpenCLstd_UClamp = 150,
OpenCLstd_Clz = 151,
OpenCLstd_Ctz = 152,
OpenCLstd_SMad_hi = 153,
OpenCLstd_UMad_sat = 154,
OpenCLstd_SMad_sat = 155,
OpenCLstd_SMax = 156,
OpenCLstd_UMax = 157,
OpenCLstd_SMin = 158,
OpenCLstd_UMin = 159,
OpenCLstd_SMul_hi = 160,
OpenCLstd_Rotate = 161,
OpenCLstd_SSub_sat = 162,
OpenCLstd_USub_sat = 163,
OpenCLstd_U_Upsample = 164,
OpenCLstd_S_Upsample = 165,
OpenCLstd_Popcount = 166,
OpenCLstd_SMad24 = 167,
OpenCLstd_UMad24 = 168,
OpenCLstd_SMul24 = 169,
OpenCLstd_UMul24 = 170,
OpenCLstd_UAbs = 201,
OpenCLstd_UAbs_diff = 202,
OpenCLstd_UMul_hi = 203,
OpenCLstd_UMad_hi = 204,
// Section 2.3: Common instructions
OpenCLstd_FClamp = 95,
OpenCLstd_Degrees = 96,
OpenCLstd_FMax_common = 97,
OpenCLstd_FMin_common = 98,
OpenCLstd_Mix = 99,
OpenCLstd_Radians = 100,
OpenCLstd_Step = 101,
OpenCLstd_Smoothstep = 102,
OpenCLstd_Sign = 103,
// Section 2.4: Geometric instructions
OpenCLstd_Cross = 104,
OpenCLstd_Distance = 105,
OpenCLstd_Length = 106,
OpenCLstd_Normalize = 107,
OpenCLstd_Fast_distance = 108,
OpenCLstd_Fast_length = 109,
OpenCLstd_Fast_normalize = 110,
// Section 2.5: Relational instructions
OpenCLstd_Bitselect = 186,
OpenCLstd_Select = 187,
// Section 2.6: Vector Data Load and Store instructions
OpenCLstd_Vloadn = 171,
OpenCLstd_Vstoren = 172,
OpenCLstd_Vload_half = 173,
OpenCLstd_Vload_halfn = 174,
OpenCLstd_Vstore_half = 175,
OpenCLstd_Vstore_half_r = 176,
OpenCLstd_Vstore_halfn = 177,
OpenCLstd_Vstore_halfn_r = 178,
OpenCLstd_Vloada_halfn = 179,
OpenCLstd_Vstorea_halfn = 180,
OpenCLstd_Vstorea_halfn_r = 181,
// Section 2.7: Miscellaneous Vector instructions
OpenCLstd_Shuffle = 182,
OpenCLstd_Shuffle2 = 183,
// Section 2.8: Misc instructions
OpenCLstd_Printf = 184,
OpenCLstd_Prefetch = 185,
};
#endif
#endif // #ifndef OPENCLstd_H #endif // #ifndef OPENCLstd_H

View file

@ -31,13 +31,14 @@
#include "vtn_private.h" #include "vtn_private.h"
#include "OpenCL.std.h" #include "OpenCL.std.h"
typedef nir_ssa_def *(*nir_handler)(struct vtn_builder *b, enum OpenCLstd opcode, typedef nir_ssa_def *(*nir_handler)(struct vtn_builder *b,
enum OpenCLstd_Entrypoints opcode,
unsigned num_srcs, nir_ssa_def **srcs, unsigned num_srcs, nir_ssa_def **srcs,
const struct glsl_type *dest_type); const struct glsl_type *dest_type);
static void static void
handle_instr(struct vtn_builder *b, enum OpenCLstd opcode, const uint32_t *w, handle_instr(struct vtn_builder *b, enum OpenCLstd_Entrypoints opcode,
unsigned count, nir_handler handler) const uint32_t *w, unsigned count, nir_handler handler)
{ {
const struct glsl_type *dest_type = const struct glsl_type *dest_type =
vtn_value(b, w[1], vtn_value_type_type)->type->type; vtn_value(b, w[1], vtn_value_type_type)->type->type;
@ -60,121 +61,124 @@ handle_instr(struct vtn_builder *b, enum OpenCLstd opcode, const uint32_t *w,
} }
static nir_op static nir_op
nir_alu_op_for_opencl_opcode(struct vtn_builder *b, enum OpenCLstd opcode) nir_alu_op_for_opencl_opcode(struct vtn_builder *b,
enum OpenCLstd_Entrypoints opcode)
{ {
switch (opcode) { switch (opcode) {
case Fabs: return nir_op_fabs; case OpenCLstd_Fabs: return nir_op_fabs;
case SAbs: return nir_op_iabs; case OpenCLstd_SAbs: return nir_op_iabs;
case SAdd_sat: return nir_op_iadd_sat; case OpenCLstd_SAdd_sat: return nir_op_iadd_sat;
case UAdd_sat: return nir_op_uadd_sat; case OpenCLstd_UAdd_sat: return nir_op_uadd_sat;
case Ceil: return nir_op_fceil; case OpenCLstd_Ceil: return nir_op_fceil;
case Cos: return nir_op_fcos; case OpenCLstd_Cos: return nir_op_fcos;
case Exp2: return nir_op_fexp2; case OpenCLstd_Exp2: return nir_op_fexp2;
case Log2: return nir_op_flog2; case OpenCLstd_Log2: return nir_op_flog2;
case Floor: return nir_op_ffloor; case OpenCLstd_Floor: return nir_op_ffloor;
case SHadd: return nir_op_ihadd; case OpenCLstd_SHadd: return nir_op_ihadd;
case UHadd: return nir_op_uhadd; case OpenCLstd_UHadd: return nir_op_uhadd;
case Fma: return nir_op_ffma; case OpenCLstd_Fma: return nir_op_ffma;
case Fmax: return nir_op_fmax; case OpenCLstd_Fmax: return nir_op_fmax;
case SMax: return nir_op_imax; case OpenCLstd_SMax: return nir_op_imax;
case UMax: return nir_op_umax; case OpenCLstd_UMax: return nir_op_umax;
case Fmin: return nir_op_fmin; case OpenCLstd_Fmin: return nir_op_fmin;
case SMin: return nir_op_imin; case OpenCLstd_SMin: return nir_op_imin;
case UMin: return nir_op_umin; case OpenCLstd_UMin: return nir_op_umin;
case Fmod: return nir_op_fmod; case OpenCLstd_Fmod: return nir_op_fmod;
case Mix: return nir_op_flrp; case OpenCLstd_Mix: return nir_op_flrp;
case SMul_hi: return nir_op_imul_high; case OpenCLstd_SMul_hi: return nir_op_imul_high;
case UMul_hi: return nir_op_umul_high; case OpenCLstd_UMul_hi: return nir_op_umul_high;
case Popcount: return nir_op_bit_count; case OpenCLstd_Popcount: return nir_op_bit_count;
case Pow: return nir_op_fpow; case OpenCLstd_Pow: return nir_op_fpow;
case Remainder: return nir_op_frem; case OpenCLstd_Remainder: return nir_op_frem;
case SRhadd: return nir_op_irhadd; case OpenCLstd_SRhadd: return nir_op_irhadd;
case URhadd: return nir_op_urhadd; case OpenCLstd_URhadd: return nir_op_urhadd;
case Rsqrt: return nir_op_frsq; case OpenCLstd_Rsqrt: return nir_op_frsq;
case Sign: return nir_op_fsign; case OpenCLstd_Sign: return nir_op_fsign;
case Sin: return nir_op_fsin; case OpenCLstd_Sin: return nir_op_fsin;
case Sqrt: return nir_op_fsqrt; case OpenCLstd_Sqrt: return nir_op_fsqrt;
case SSub_sat: return nir_op_isub_sat; case OpenCLstd_SSub_sat: return nir_op_isub_sat;
case USub_sat: return nir_op_usub_sat; case OpenCLstd_USub_sat: return nir_op_usub_sat;
case Trunc: return nir_op_ftrunc; case OpenCLstd_Trunc: return nir_op_ftrunc;
/* uhm... */ /* uhm... */
case UAbs: return nir_op_mov; case OpenCLstd_UAbs: return nir_op_mov;
default: default:
vtn_fail("No NIR equivalent"); vtn_fail("No NIR equivalent");
} }
} }
static nir_ssa_def * static nir_ssa_def *
handle_alu(struct vtn_builder *b, enum OpenCLstd opcode, unsigned num_srcs, handle_alu(struct vtn_builder *b, enum OpenCLstd_Entrypoints opcode,
nir_ssa_def **srcs, const struct glsl_type *dest_type) unsigned num_srcs, nir_ssa_def **srcs,
const struct glsl_type *dest_type)
{ {
return nir_build_alu(&b->nb, nir_alu_op_for_opencl_opcode(b, opcode), return nir_build_alu(&b->nb, nir_alu_op_for_opencl_opcode(b, opcode),
srcs[0], srcs[1], srcs[2], NULL); srcs[0], srcs[1], srcs[2], NULL);
} }
static nir_ssa_def * static nir_ssa_def *
handle_special(struct vtn_builder *b, enum OpenCLstd opcode, unsigned num_srcs, handle_special(struct vtn_builder *b, enum OpenCLstd_Entrypoints opcode,
nir_ssa_def **srcs, const struct glsl_type *dest_type) unsigned num_srcs, nir_ssa_def **srcs,
const struct glsl_type *dest_type)
{ {
nir_builder *nb = &b->nb; nir_builder *nb = &b->nb;
switch (opcode) { switch (opcode) {
case SAbs_diff: case OpenCLstd_SAbs_diff:
return nir_iabs_diff(nb, srcs[0], srcs[1]); return nir_iabs_diff(nb, srcs[0], srcs[1]);
case UAbs_diff: case OpenCLstd_UAbs_diff:
return nir_uabs_diff(nb, srcs[0], srcs[1]); return nir_uabs_diff(nb, srcs[0], srcs[1]);
case Bitselect: case OpenCLstd_Bitselect:
return nir_bitselect(nb, srcs[0], srcs[1], srcs[2]); return nir_bitselect(nb, srcs[0], srcs[1], srcs[2]);
case FClamp: case OpenCLstd_FClamp:
return nir_fclamp(nb, srcs[0], srcs[1], srcs[2]); return nir_fclamp(nb, srcs[0], srcs[1], srcs[2]);
case SClamp: case OpenCLstd_SClamp:
return nir_iclamp(nb, srcs[0], srcs[1], srcs[2]); return nir_iclamp(nb, srcs[0], srcs[1], srcs[2]);
case UClamp: case OpenCLstd_UClamp:
return nir_uclamp(nb, srcs[0], srcs[1], srcs[2]); return nir_uclamp(nb, srcs[0], srcs[1], srcs[2]);
case Copysign: case OpenCLstd_Copysign:
return nir_copysign(nb, srcs[0], srcs[1]); return nir_copysign(nb, srcs[0], srcs[1]);
case Cross: case OpenCLstd_Cross:
if (glsl_get_components(dest_type) == 4) if (glsl_get_components(dest_type) == 4)
return nir_cross4(nb, srcs[0], srcs[1]); return nir_cross4(nb, srcs[0], srcs[1]);
return nir_cross3(nb, srcs[0], srcs[1]); return nir_cross3(nb, srcs[0], srcs[1]);
case Degrees: case OpenCLstd_Degrees:
return nir_degrees(nb, srcs[0]); return nir_degrees(nb, srcs[0]);
case Fdim: case OpenCLstd_Fdim:
return nir_fdim(nb, srcs[0], srcs[1]); return nir_fdim(nb, srcs[0], srcs[1]);
case Distance: case OpenCLstd_Distance:
return nir_distance(nb, srcs[0], srcs[1]); return nir_distance(nb, srcs[0], srcs[1]);
case Fast_distance: case OpenCLstd_Fast_distance:
return nir_fast_distance(nb, srcs[0], srcs[1]); return nir_fast_distance(nb, srcs[0], srcs[1]);
case Fast_length: case OpenCLstd_Fast_length:
return nir_fast_length(nb, srcs[0]); return nir_fast_length(nb, srcs[0]);
case Fast_normalize: case OpenCLstd_Fast_normalize:
return nir_fast_normalize(nb, srcs[0]); return nir_fast_normalize(nb, srcs[0]);
case Length: case OpenCLstd_Length:
return nir_length(nb, srcs[0]); return nir_length(nb, srcs[0]);
case Mad: case OpenCLstd_Mad:
return nir_fmad(nb, srcs[0], srcs[1], srcs[2]); return nir_fmad(nb, srcs[0], srcs[1], srcs[2]);
case Maxmag: case OpenCLstd_Maxmag:
return nir_maxmag(nb, srcs[0], srcs[1]); return nir_maxmag(nb, srcs[0], srcs[1]);
case Minmag: case OpenCLstd_Minmag:
return nir_minmag(nb, srcs[0], srcs[1]); return nir_minmag(nb, srcs[0], srcs[1]);
case Nan: case OpenCLstd_Nan:
return nir_nan(nb, srcs[0]); return nir_nan(nb, srcs[0]);
case Nextafter: case OpenCLstd_Nextafter:
return nir_nextafter(nb, srcs[0], srcs[1]); return nir_nextafter(nb, srcs[0], srcs[1]);
case Normalize: case OpenCLstd_Normalize:
return nir_normalize(nb, srcs[0]); return nir_normalize(nb, srcs[0]);
case Radians: case OpenCLstd_Radians:
return nir_radians(nb, srcs[0]); return nir_radians(nb, srcs[0]);
case Rotate: case OpenCLstd_Rotate:
return nir_rotate(nb, srcs[0], srcs[1]); return nir_rotate(nb, srcs[0], srcs[1]);
case Smoothstep: case OpenCLstd_Smoothstep:
return nir_smoothstep(nb, srcs[0], srcs[1], srcs[2]); return nir_smoothstep(nb, srcs[0], srcs[1], srcs[2]);
case Select: case OpenCLstd_Select:
return nir_select(nb, srcs[0], srcs[1], srcs[2]); return nir_select(nb, srcs[0], srcs[1], srcs[2]);
case Step: case OpenCLstd_Step:
return nir_sge(nb, srcs[1], srcs[0]); return nir_sge(nb, srcs[1], srcs[0]);
case S_Upsample: case OpenCLstd_S_Upsample:
case U_Upsample: case OpenCLstd_U_Upsample:
return nir_upsample(nb, srcs[0], srcs[1]); return nir_upsample(nb, srcs[0], srcs[1]);
default: default:
vtn_fail("No NIR equivalent"); vtn_fail("No NIR equivalent");
@ -183,7 +187,7 @@ handle_special(struct vtn_builder *b, enum OpenCLstd opcode, unsigned num_srcs,
} }
static void static void
_handle_v_load_store(struct vtn_builder *b, enum OpenCLstd opcode, _handle_v_load_store(struct vtn_builder *b, enum OpenCLstd_Entrypoints opcode,
const uint32_t *w, unsigned count, bool load) const uint32_t *w, unsigned count, bool load)
{ {
struct vtn_type *type; struct vtn_type *type;
@ -218,22 +222,23 @@ _handle_v_load_store(struct vtn_builder *b, enum OpenCLstd opcode,
} }
static void static void
vtn_handle_opencl_vload(struct vtn_builder *b, enum OpenCLstd opcode, vtn_handle_opencl_vload(struct vtn_builder *b, enum OpenCLstd_Entrypoints opcode,
const uint32_t *w, unsigned count) const uint32_t *w, unsigned count)
{ {
_handle_v_load_store(b, opcode, w, count, true); _handle_v_load_store(b, opcode, w, count, true);
} }
static void static void
vtn_handle_opencl_vstore(struct vtn_builder *b, enum OpenCLstd opcode, vtn_handle_opencl_vstore(struct vtn_builder *b, enum OpenCLstd_Entrypoints opcode,
const uint32_t *w, unsigned count) const uint32_t *w, unsigned count)
{ {
_handle_v_load_store(b, opcode, w, count, false); _handle_v_load_store(b, opcode, w, count, false);
} }
static nir_ssa_def * static nir_ssa_def *
handle_printf(struct vtn_builder *b, enum OpenCLstd opcode, unsigned num_srcs, handle_printf(struct vtn_builder *b, enum OpenCLstd_Entrypoints opcode,
nir_ssa_def **srcs, const struct glsl_type *dest_type) unsigned num_srcs, nir_ssa_def **srcs,
const struct glsl_type *dest_type)
{ {
/* hahah, yeah, right.. */ /* hahah, yeah, right.. */
return nir_imm_int(&b->nb, -1); return nir_imm_int(&b->nb, -1);
@ -244,83 +249,83 @@ vtn_handle_opencl_instruction(struct vtn_builder *b, uint32_t ext_opcode,
const uint32_t *w, unsigned count) const uint32_t *w, unsigned count)
{ {
switch (ext_opcode) { switch (ext_opcode) {
case Fabs: case OpenCLstd_Fabs:
case SAbs: case OpenCLstd_SAbs:
case UAbs: case OpenCLstd_UAbs:
case SAdd_sat: case OpenCLstd_SAdd_sat:
case UAdd_sat: case OpenCLstd_UAdd_sat:
case Ceil: case OpenCLstd_Ceil:
case Cos: case OpenCLstd_Cos:
case Exp2: case OpenCLstd_Exp2:
case Log2: case OpenCLstd_Log2:
case Floor: case OpenCLstd_Floor:
case Fma: case OpenCLstd_Fma:
case Fmax: case OpenCLstd_Fmax:
case SHadd: case OpenCLstd_SHadd:
case UHadd: case OpenCLstd_UHadd:
case SMax: case OpenCLstd_SMax:
case UMax: case OpenCLstd_UMax:
case Fmin: case OpenCLstd_Fmin:
case SMin: case OpenCLstd_SMin:
case UMin: case OpenCLstd_UMin:
case Mix: case OpenCLstd_Mix:
case Fmod: case OpenCLstd_Fmod:
case SMul_hi: case OpenCLstd_SMul_hi:
case UMul_hi: case OpenCLstd_UMul_hi:
case Popcount: case OpenCLstd_Popcount:
case Pow: case OpenCLstd_Pow:
case Remainder: case OpenCLstd_Remainder:
case SRhadd: case OpenCLstd_SRhadd:
case URhadd: case OpenCLstd_URhadd:
case Rsqrt: case OpenCLstd_Rsqrt:
case Sign: case OpenCLstd_Sign:
case Sin: case OpenCLstd_Sin:
case Sqrt: case OpenCLstd_Sqrt:
case SSub_sat: case OpenCLstd_SSub_sat:
case USub_sat: case OpenCLstd_USub_sat:
case Trunc: case OpenCLstd_Trunc:
handle_instr(b, ext_opcode, w, count, handle_alu); handle_instr(b, ext_opcode, w, count, handle_alu);
return true; return true;
case SAbs_diff: case OpenCLstd_SAbs_diff:
case UAbs_diff: case OpenCLstd_UAbs_diff:
case Bitselect: case OpenCLstd_Bitselect:
case FClamp: case OpenCLstd_FClamp:
case SClamp: case OpenCLstd_SClamp:
case UClamp: case OpenCLstd_UClamp:
case Copysign: case OpenCLstd_Copysign:
case Cross: case OpenCLstd_Cross:
case Degrees: case OpenCLstd_Degrees:
case Fdim: case OpenCLstd_Fdim:
case Distance: case OpenCLstd_Distance:
case Fast_distance: case OpenCLstd_Fast_distance:
case Fast_length: case OpenCLstd_Fast_length:
case Fast_normalize: case OpenCLstd_Fast_normalize:
case Length: case OpenCLstd_Length:
case Mad: case OpenCLstd_Mad:
case Maxmag: case OpenCLstd_Maxmag:
case Minmag: case OpenCLstd_Minmag:
case Nan: case OpenCLstd_Nan:
case Nextafter: case OpenCLstd_Nextafter:
case Normalize: case OpenCLstd_Normalize:
case Radians: case OpenCLstd_Radians:
case Rotate: case OpenCLstd_Rotate:
case Select: case OpenCLstd_Select:
case Step: case OpenCLstd_Step:
case Smoothstep: case OpenCLstd_Smoothstep:
case S_Upsample: case OpenCLstd_S_Upsample:
case U_Upsample: case OpenCLstd_U_Upsample:
handle_instr(b, ext_opcode, w, count, handle_special); handle_instr(b, ext_opcode, w, count, handle_special);
return true; return true;
case Vloadn: case OpenCLstd_Vloadn:
vtn_handle_opencl_vload(b, ext_opcode, w, count); vtn_handle_opencl_vload(b, ext_opcode, w, count);
return true; return true;
case Vstoren: case OpenCLstd_Vstoren:
vtn_handle_opencl_vstore(b, ext_opcode, w, count); vtn_handle_opencl_vstore(b, ext_opcode, w, count);
return true; return true;
case Printf: case OpenCLstd_Printf:
handle_instr(b, ext_opcode, w, count, handle_printf); handle_instr(b, ext_opcode, w, count, handle_printf);
return true; return true;
case Prefetch: case OpenCLstd_Prefetch:
/* TODO maybe add a nir instruction for this? */ /* TODO maybe add a nir instruction for this? */
return true; return true;
default: default: