diff options
| -rw-r--r-- | src/gallium/auxiliary/tgsi/tgsi_exec.c | 591 | ||||
| -rw-r--r-- | src/gallium/auxiliary/tgsi/tgsi_info.c | 25 | ||||
| -rw-r--r-- | src/gallium/auxiliary/tgsi/tgsi_opcode_tmp.h | 22 | 
3 files changed, 413 insertions, 225 deletions
| diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c b/src/gallium/auxiliary/tgsi/tgsi_exec.c index 517ae67d79..27af0c6057 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_exec.c +++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c @@ -446,20 +446,6 @@ micro_add(     dst->f[3] = src0->f[3] + src1->f[3];  } -#if 0 -static void -micro_iadd( -   union tgsi_exec_channel *dst, -   const union tgsi_exec_channel *src0, -   const union tgsi_exec_channel *src1 ) -{ -   dst->i[0] = src0->i[0] + src1->i[0]; -   dst->i[1] = src0->i[1] + src1->i[1]; -   dst->i[2] = src0->i[2] + src1->i[2]; -   dst->i[3] = src0->i[3] + src1->i[3]; -} -#endif -  static void  micro_and(     union tgsi_exec_channel *dst, @@ -536,20 +522,6 @@ micro_div(     }  } -#if 0 -static void -micro_udiv( -   union tgsi_exec_channel *dst, -   const union tgsi_exec_channel *src0, -   const union tgsi_exec_channel *src1 ) -{ -   dst->u[0] = src0->u[0] / src1->u[0]; -   dst->u[1] = src0->u[1] / src1->u[1]; -   dst->u[2] = src0->u[2] / src1->u[2]; -   dst->u[3] = src0->u[3] / src1->u[3]; -} -#endif -  static void  micro_eq(     union tgsi_exec_channel *dst, @@ -564,22 +536,6 @@ micro_eq(     dst->f[3] = src0->f[3] == src1->f[3] ? src2->f[3] : src3->f[3];  } -#if 0 -static void -micro_ieq( -   union tgsi_exec_channel *dst, -   const union tgsi_exec_channel *src0, -   const union tgsi_exec_channel *src1, -   const union tgsi_exec_channel *src2, -   const union tgsi_exec_channel *src3 ) -{ -   dst->i[0] = src0->i[0] == src1->i[0] ? src2->i[0] : src3->i[0]; -   dst->i[1] = src0->i[1] == src1->i[1] ? src2->i[1] : src3->i[1]; -   dst->i[2] = src0->i[2] == src1->i[2] ? src2->i[2] : src3->i[2]; -   dst->i[3] = src0->i[3] == src1->i[3] ? src2->i[3] : src3->i[3]; -} -#endif -  static void  micro_exp2(     union tgsi_exec_channel *dst, @@ -616,19 +572,6 @@ micro_exp2(  #endif  } -#if 0 -static void -micro_f2ut( -   union tgsi_exec_channel *dst, -   const union tgsi_exec_channel *src ) -{ -   dst->u[0] = (uint) src->f[0]; -   dst->u[1] = (uint) src->f[1]; -   dst->u[2] = (uint) src->f[2]; -   dst->u[3] = (uint) src->f[3]; -} -#endif -  static void  micro_float_clamp(union tgsi_exec_channel *dst,                    const union tgsi_exec_channel *src) @@ -734,38 +677,6 @@ micro_lt(     dst->f[3] = src0->f[3] < src1->f[3] ? src2->f[3] : src3->f[3];  } -#if 0 -static void -micro_ilt( -   union tgsi_exec_channel *dst, -   const union tgsi_exec_channel *src0, -   const union tgsi_exec_channel *src1, -   const union tgsi_exec_channel *src2, -   const union tgsi_exec_channel *src3 ) -{ -   dst->i[0] = src0->i[0] < src1->i[0] ? src2->i[0] : src3->i[0]; -   dst->i[1] = src0->i[1] < src1->i[1] ? src2->i[1] : src3->i[1]; -   dst->i[2] = src0->i[2] < src1->i[2] ? src2->i[2] : src3->i[2]; -   dst->i[3] = src0->i[3] < src1->i[3] ? src2->i[3] : src3->i[3]; -} -#endif - -#if 0 -static void -micro_ult( -   union tgsi_exec_channel *dst, -   const union tgsi_exec_channel *src0, -   const union tgsi_exec_channel *src1, -   const union tgsi_exec_channel *src2, -   const union tgsi_exec_channel *src3 ) -{ -   dst->u[0] = src0->u[0] < src1->u[0] ? src2->u[0] : src3->u[0]; -   dst->u[1] = src0->u[1] < src1->u[1] ? src2->u[1] : src3->u[1]; -   dst->u[2] = src0->u[2] < src1->u[2] ? src2->u[2] : src3->u[2]; -   dst->u[3] = src0->u[3] < src1->u[3] ? src2->u[3] : src3->u[3]; -} -#endif -  static void  micro_max(     union tgsi_exec_channel *dst, @@ -778,34 +689,6 @@ micro_max(     dst->f[3] = src0->f[3] > src1->f[3] ? src0->f[3] : src1->f[3];  } -#if 0 -static void -micro_imax( -   union tgsi_exec_channel *dst, -   const union tgsi_exec_channel *src0, -   const union tgsi_exec_channel *src1 ) -{ -   dst->i[0] = src0->i[0] > src1->i[0] ? src0->i[0] : src1->i[0]; -   dst->i[1] = src0->i[1] > src1->i[1] ? src0->i[1] : src1->i[1]; -   dst->i[2] = src0->i[2] > src1->i[2] ? src0->i[2] : src1->i[2]; -   dst->i[3] = src0->i[3] > src1->i[3] ? src0->i[3] : src1->i[3]; -} -#endif - -#if 0 -static void -micro_umax( -   union tgsi_exec_channel *dst, -   const union tgsi_exec_channel *src0, -   const union tgsi_exec_channel *src1 ) -{ -   dst->u[0] = src0->u[0] > src1->u[0] ? src0->u[0] : src1->u[0]; -   dst->u[1] = src0->u[1] > src1->u[1] ? src0->u[1] : src1->u[1]; -   dst->u[2] = src0->u[2] > src1->u[2] ? src0->u[2] : src1->u[2]; -   dst->u[3] = src0->u[3] > src1->u[3] ? src0->u[3] : src1->u[3]; -} -#endif -  static void  micro_min(     union tgsi_exec_channel *dst, @@ -820,34 +703,6 @@ micro_min(  #if 0  static void -micro_imin( -   union tgsi_exec_channel *dst, -   const union tgsi_exec_channel *src0, -   const union tgsi_exec_channel *src1 ) -{ -   dst->i[0] = src0->i[0] < src1->i[0] ? src0->i[0] : src1->i[0]; -   dst->i[1] = src0->i[1] < src1->i[1] ? src0->i[1] : src1->i[1]; -   dst->i[2] = src0->i[2] < src1->i[2] ? src0->i[2] : src1->i[2]; -   dst->i[3] = src0->i[3] < src1->i[3] ? src0->i[3] : src1->i[3]; -} -#endif - -#if 0 -static void -micro_umin( -   union tgsi_exec_channel *dst, -   const union tgsi_exec_channel *src0, -   const union tgsi_exec_channel *src1 ) -{ -   dst->u[0] = src0->u[0] < src1->u[0] ? src0->u[0] : src1->u[0]; -   dst->u[1] = src0->u[1] < src1->u[1] ? src0->u[1] : src1->u[1]; -   dst->u[2] = src0->u[2] < src1->u[2] ? src0->u[2] : src1->u[2]; -   dst->u[3] = src0->u[3] < src1->u[3] ? src0->u[3] : src1->u[3]; -} -#endif - -#if 0 -static void  micro_umod(     union tgsi_exec_channel *dst,     const union tgsi_exec_channel *src0, @@ -874,20 +729,6 @@ micro_mul(  #if 0  static void -micro_imul( -   union tgsi_exec_channel *dst, -   const union tgsi_exec_channel *src0, -   const union tgsi_exec_channel *src1 ) -{ -   dst->i[0] = src0->i[0] * src1->i[0]; -   dst->i[1] = src0->i[1] * src1->i[1]; -   dst->i[2] = src0->i[2] * src1->i[2]; -   dst->i[3] = src0->i[3] * src1->i[3]; -} -#endif - -#if 0 -static void  micro_imul64(     union tgsi_exec_channel *dst0,     union tgsi_exec_channel *dst1, @@ -951,19 +792,6 @@ micro_neg(     dst->f[3] = -src->f[3];  } -#if 0 -static void -micro_ineg( -   union tgsi_exec_channel *dst, -   const union tgsi_exec_channel *src ) -{ -   dst->i[0] = -src->i[0]; -   dst->i[1] = -src->i[1]; -   dst->i[2] = -src->i[2]; -   dst->i[3] = -src->i[3]; -} -#endif -  static void  micro_not(     union tgsi_exec_channel *dst, @@ -1041,18 +869,6 @@ micro_shl(  }  static void -micro_ishr( -   union tgsi_exec_channel *dst, -   const union tgsi_exec_channel *src0, -   const union tgsi_exec_channel *src1 ) -{ -   dst->i[0] = src0->i[0] >> src1->i[0]; -   dst->i[1] = src0->i[1] >> src1->i[1]; -   dst->i[2] = src0->i[2] >> src1->i[2]; -   dst->i[3] = src0->i[3] >> src1->i[3]; -} - -static void  micro_trunc(     union tgsi_exec_channel *dst,     const union tgsi_exec_channel *src0 ) @@ -1063,20 +879,6 @@ micro_trunc(     dst->f[3] = (float) (int) src0->f[3];  } -#if 0 -static void -micro_ushr( -   union tgsi_exec_channel *dst, -   const union tgsi_exec_channel *src0, -   const union tgsi_exec_channel *src1 ) -{ -   dst->u[0] = src0->u[0] >> src1->u[0]; -   dst->u[1] = src0->u[1] >> src1->u[1]; -   dst->u[2] = src0->u[2] >> src1->u[2]; -   dst->u[3] = src0->u[3] >> src1->u[3]; -} -#endif -  static void  micro_sin(     union tgsi_exec_channel *dst, @@ -1110,19 +912,6 @@ micro_sub(     dst->f[3] = src0->f[3] - src1->f[3];  } -#if 0 -static void -micro_u2f( -   union tgsi_exec_channel *dst, -   const union tgsi_exec_channel *src ) -{ -   dst->f[0] = (float) src->u[0]; -   dst->f[1] = (float) src->u[1]; -   dst->f[2] = (float) src->u[2]; -   dst->f[3] = (float) src->u[3]; -} -#endif -  static void  micro_xor(     union tgsi_exec_channel *dst, @@ -2001,6 +1790,291 @@ exec_declaration(struct tgsi_exec_machine *mach,     }  } +typedef void (* micro_op)(union tgsi_exec_channel *dst, +                          const union tgsi_exec_channel *src); + +static void +exec_vector_unary(struct tgsi_exec_machine *mach, +                  const struct tgsi_full_instruction *inst, +                  micro_op op) +{ +   unsigned int chan; +   struct tgsi_exec_vector dst; + +   for (chan = 0; chan < NUM_CHANNELS; chan++) { +      if (inst->Dst[0].Register.WriteMask & (1 << chan)) { +         union tgsi_exec_channel src; + +         fetch_source(mach, &src, &inst->Src[0], chan); +         op(&dst.xyzw[chan], &src); +      } +   } +   for (chan = 0; chan < NUM_CHANNELS; chan++) { +      if (inst->Dst[0].Register.WriteMask & (1 << chan)) { +         store_dest(mach, &dst.xyzw[chan], &inst->Dst[0], inst, chan); +      } +   } +} + +static void +exec_vector_binary(struct tgsi_exec_machine *mach, +                   const struct tgsi_full_instruction *inst, +                   micro_op op) +{ +   unsigned int chan; +   struct tgsi_exec_vector dst; + +   for (chan = 0; chan < NUM_CHANNELS; chan++) { +      if (inst->Dst[0].Register.WriteMask & (1 << chan)) { +         union tgsi_exec_channel src[2]; + +         fetch_source(mach, &src[0], &inst->Src[0], chan); +         fetch_source(mach, &src[1], &inst->Src[1], chan); +         op(&dst.xyzw[chan], src); +      } +   } +   for (chan = 0; chan < NUM_CHANNELS; chan++) { +      if (inst->Dst[0].Register.WriteMask & (1 << chan)) { +         store_dest(mach, &dst.xyzw[chan], &inst->Dst[0], inst, chan); +      } +   } +} + +static void +exec_vector_trinary(struct tgsi_exec_machine *mach, +                    const struct tgsi_full_instruction *inst, +                    micro_op op) +{ +   unsigned int chan; +   struct tgsi_exec_vector dst; + +   for (chan = 0; chan < NUM_CHANNELS; chan++) { +      if (inst->Dst[0].Register.WriteMask & (1 << chan)) { +         union tgsi_exec_channel src[3]; + +         fetch_source(mach, &src[0], &inst->Src[0], chan); +         fetch_source(mach, &src[1], &inst->Src[1], chan); +         fetch_source(mach, &src[2], &inst->Src[2], chan); +         op(&dst.xyzw[chan], src); +      } +   } +   for (chan = 0; chan < NUM_CHANNELS; chan++) { +      if (inst->Dst[0].Register.WriteMask & (1 << chan)) { +         store_dest(mach, &dst.xyzw[chan], &inst->Dst[0], inst, chan); +      } +   } +} + +static void +micro_f2i(union tgsi_exec_channel *dst, +          const union tgsi_exec_channel *src) +{ +   dst->i[0] = (int)src->f[0]; +   dst->i[1] = (int)src->f[1]; +   dst->i[2] = (int)src->f[2]; +   dst->i[3] = (int)src->f[3]; +} + +static void +micro_idiv(union tgsi_exec_channel *dst, +           const union tgsi_exec_channel *src) +{ +   dst->i[0] = src[0].i[0] / src[1].i[0]; +   dst->i[1] = src[0].i[1] / src[1].i[1]; +   dst->i[2] = src[0].i[2] / src[1].i[2]; +   dst->i[3] = src[0].i[3] / src[1].i[3]; +} + +static void +micro_imax(union tgsi_exec_channel *dst, +           const union tgsi_exec_channel *src) +{ +   dst->i[0] = src[0].i[0] > src[1].i[0] ? src[0].i[0] : src[1].i[0]; +   dst->i[1] = src[0].i[1] > src[1].i[1] ? src[0].i[1] : src[1].i[1]; +   dst->i[2] = src[0].i[2] > src[1].i[2] ? src[0].i[2] : src[1].i[2]; +   dst->i[3] = src[0].i[3] > src[1].i[3] ? src[0].i[3] : src[1].i[3]; +} + +static void +micro_imin(union tgsi_exec_channel *dst, +           const union tgsi_exec_channel *src) +{ +   dst->i[0] = src[0].i[0] < src[1].i[0] ? src[0].i[0] : src[1].i[0]; +   dst->i[1] = src[0].i[1] < src[1].i[1] ? src[0].i[1] : src[1].i[1]; +   dst->i[2] = src[0].i[2] < src[1].i[2] ? src[0].i[2] : src[1].i[2]; +   dst->i[3] = src[0].i[3] < src[1].i[3] ? src[0].i[3] : src[1].i[3]; +} + +static void +micro_ineg(union tgsi_exec_channel *dst, +           const union tgsi_exec_channel *src) +{ +   dst->i[0] = -src->i[0]; +   dst->i[1] = -src->i[1]; +   dst->i[2] = -src->i[2]; +   dst->i[3] = -src->i[3]; +} + +static void +micro_isge(union tgsi_exec_channel *dst, +           const union tgsi_exec_channel *src) +{ +   dst->i[0] = src[0].i[0] >= src[1].i[0] ? -1 : 0; +   dst->i[1] = src[0].i[1] >= src[1].i[1] ? -1 : 0; +   dst->i[2] = src[0].i[2] >= src[1].i[2] ? -1 : 0; +   dst->i[3] = src[0].i[3] >= src[1].i[3] ? -1 : 0; +} + +static void +micro_ishr(union tgsi_exec_channel *dst, +           const union tgsi_exec_channel *src) +{ +   dst->i[0] = src[0].i[0] >> src[1].i[0]; +   dst->i[1] = src[0].i[1] >> src[1].i[1]; +   dst->i[2] = src[0].i[2] >> src[1].i[2]; +   dst->i[3] = src[0].i[3] >> src[1].i[3]; +} + +static void +micro_islt(union tgsi_exec_channel *dst, +           const union tgsi_exec_channel *src) +{ +   dst->i[0] = src[0].i[0] < src[1].i[0] ? -1 : 0; +   dst->i[1] = src[0].i[1] < src[1].i[1] ? -1 : 0; +   dst->i[2] = src[0].i[2] < src[1].i[2] ? -1 : 0; +   dst->i[3] = src[0].i[3] < src[1].i[3] ? -1 : 0; +} + +static void +micro_f2u(union tgsi_exec_channel *dst, +          const union tgsi_exec_channel *src) +{ +   dst->u[0] = (uint)src->f[0]; +   dst->u[1] = (uint)src->f[1]; +   dst->u[2] = (uint)src->f[2]; +   dst->u[3] = (uint)src->f[3]; +} + +static void +micro_u2f(union tgsi_exec_channel *dst, +          const union tgsi_exec_channel *src) +{ +   dst->f[0] = (float)src->u[0]; +   dst->f[1] = (float)src->u[1]; +   dst->f[2] = (float)src->u[2]; +   dst->f[3] = (float)src->u[3]; +} + +static void +micro_uadd(union tgsi_exec_channel *dst, +           const union tgsi_exec_channel *src) +{ +   dst->u[0] = src[0].u[0] + src[1].u[0]; +   dst->u[1] = src[0].u[1] + src[1].u[1]; +   dst->u[2] = src[0].u[2] + src[1].u[2]; +   dst->u[3] = src[0].u[3] + src[1].u[3]; +} + +static void +micro_udiv(union tgsi_exec_channel *dst, +           const union tgsi_exec_channel *src) +{ +   dst->u[0] = src[0].u[0] / src[1].u[0]; +   dst->u[1] = src[0].u[1] / src[1].u[1]; +   dst->u[2] = src[0].u[2] / src[1].u[2]; +   dst->u[3] = src[0].u[3] / src[1].u[3]; +} + +static void +micro_umad(union tgsi_exec_channel *dst, +           const union tgsi_exec_channel *src) +{ +   dst->u[0] = src[0].u[0] * src[1].u[0] + src[2].u[0]; +   dst->u[1] = src[0].u[1] * src[1].u[1] + src[2].u[1]; +   dst->u[2] = src[0].u[2] * src[1].u[2] + src[2].u[2]; +   dst->u[3] = src[0].u[3] * src[1].u[3] + src[2].u[3]; +} + +static void +micro_umax(union tgsi_exec_channel *dst, +           const union tgsi_exec_channel *src) +{ +   dst->u[0] = src[0].u[0] > src[1].u[0] ? src[0].u[0] : src[1].u[0]; +   dst->u[1] = src[0].u[1] > src[1].u[1] ? src[0].u[1] : src[1].u[1]; +   dst->u[2] = src[0].u[2] > src[1].u[2] ? src[0].u[2] : src[1].u[2]; +   dst->u[3] = src[0].u[3] > src[1].u[3] ? src[0].u[3] : src[1].u[3]; +} + +static void +micro_umin(union tgsi_exec_channel *dst, +           const union tgsi_exec_channel *src) +{ +   dst->u[0] = src[0].u[0] < src[1].u[0] ? src[0].u[0] : src[1].u[0]; +   dst->u[1] = src[0].u[1] < src[1].u[1] ? src[0].u[1] : src[1].u[1]; +   dst->u[2] = src[0].u[2] < src[1].u[2] ? src[0].u[2] : src[1].u[2]; +   dst->u[3] = src[0].u[3] < src[1].u[3] ? src[0].u[3] : src[1].u[3]; +} + +static void +micro_umul(union tgsi_exec_channel *dst, +           const union tgsi_exec_channel *src) +{ +   dst->u[0] = src[0].u[0] * src[1].u[0]; +   dst->u[1] = src[0].u[1] * src[1].u[1]; +   dst->u[2] = src[0].u[2] * src[1].u[2]; +   dst->u[3] = src[0].u[3] * src[1].u[3]; +} + +static void +micro_useq(union tgsi_exec_channel *dst, +           const union tgsi_exec_channel *src) +{ +   dst->u[0] = src[0].u[0] == src[1].u[0] ? ~0 : 0; +   dst->u[1] = src[0].u[1] == src[1].u[1] ? ~0 : 0; +   dst->u[2] = src[0].u[2] == src[1].u[2] ? ~0 : 0; +   dst->u[3] = src[0].u[3] == src[1].u[3] ? ~0 : 0; +} + +static void +micro_usge(union tgsi_exec_channel *dst, +           const union tgsi_exec_channel *src) +{ +   dst->u[0] = src[0].u[0] >= src[1].u[0] ? ~0 : 0; +   dst->u[1] = src[0].u[1] >= src[1].u[1] ? ~0 : 0; +   dst->u[2] = src[0].u[2] >= src[1].u[2] ? ~0 : 0; +   dst->u[3] = src[0].u[3] >= src[1].u[3] ? ~0 : 0; +} + +static void +micro_ushr(union tgsi_exec_channel *dst, +           const union tgsi_exec_channel *src) +{ +   dst->u[0] = src[0].u[0] >> src[1].u[0]; +   dst->u[1] = src[0].u[1] >> src[1].u[1]; +   dst->u[2] = src[0].u[2] >> src[1].u[2]; +   dst->u[3] = src[0].u[3] >> src[1].u[3]; +} + +static void +micro_uslt(union tgsi_exec_channel *dst, +           const union tgsi_exec_channel *src) +{ +   dst->u[0] = src[0].u[0] < src[1].u[0] ? ~0 : 0; +   dst->u[1] = src[0].u[1] < src[1].u[1] ? ~0 : 0; +   dst->u[2] = src[0].u[2] < src[1].u[2] ? ~0 : 0; +   dst->u[3] = src[0].u[3] < src[1].u[3] ? ~0 : 0; +} + +static void +micro_usne(union tgsi_exec_channel *dst, +           const union tgsi_exec_channel *src) +{ +   dst->u[0] = src[0].u[0] != src[1].u[0] ? ~0 : 0; +   dst->u[1] = src[0].u[1] != src[1].u[1] ? ~0 : 0; +   dst->u[2] = src[0].u[2] != src[1].u[2] ? ~0 : 0; +   dst->u[3] = src[0].u[3] != src[1].u[3] ? ~0 : 0; +} +  static void  exec_instruction(     struct tgsi_exec_machine *mach, @@ -3073,17 +3147,6 @@ exec_instruction(        }        break; -   case TGSI_OPCODE_SHR: -      FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) { -         FETCH( &r[0], 0, chan_index ); -         FETCH( &r[1], 1, chan_index ); -         micro_ishr(&d[chan_index], &r[0], &r[1]); -      } -      FOR_EACH_ENABLED_CHANNEL(*inst, chan_index) { -         STORE(&d[chan_index], 0, chan_index); -      } -      break; -     case TGSI_OPCODE_AND:        FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) {           FETCH( &r[0], 0, chan_index ); @@ -3310,6 +3373,90 @@ exec_instruction(        UPDATE_EXEC_MASK(mach);        break; +   case TGSI_OPCODE_F2I: +      exec_vector_unary(mach, inst, micro_f2i); +      break; + +   case TGSI_OPCODE_IDIV: +      exec_vector_binary(mach, inst, micro_idiv); +      break; + +   case TGSI_OPCODE_IMAX: +      exec_vector_binary(mach, inst, micro_imax); +      break; + +   case TGSI_OPCODE_IMIN: +      exec_vector_binary(mach, inst, micro_imin); +      break; + +   case TGSI_OPCODE_INEG: +      exec_vector_unary(mach, inst, micro_ineg); +      break; + +   case TGSI_OPCODE_ISGE: +      exec_vector_binary(mach, inst, micro_isge); +      break; + +   case TGSI_OPCODE_ISHR: +      exec_vector_binary(mach, inst, micro_ishr); +      break; + +   case TGSI_OPCODE_ISLT: +      exec_vector_binary(mach, inst, micro_islt); +      break; + +   case TGSI_OPCODE_F2U: +      exec_vector_unary(mach, inst, micro_f2u); +      break; + +   case TGSI_OPCODE_U2F: +      exec_vector_unary(mach, inst, micro_u2f); +      break; + +   case TGSI_OPCODE_UADD: +      exec_vector_binary(mach, inst, micro_uadd); +      break; + +   case TGSI_OPCODE_UDIV: +      exec_vector_binary(mach, inst, micro_udiv); +      break; + +   case TGSI_OPCODE_UMAD: +      exec_vector_trinary(mach, inst, micro_umad); +      break; + +   case TGSI_OPCODE_UMAX: +      exec_vector_binary(mach, inst, micro_umax); +      break; + +   case TGSI_OPCODE_UMIN: +      exec_vector_binary(mach, inst, micro_umin); +      break; + +   case TGSI_OPCODE_UMUL: +      exec_vector_binary(mach, inst, micro_umul); +      break; + +   case TGSI_OPCODE_USEQ: +      exec_vector_binary(mach, inst, micro_useq); +      break; + +   case TGSI_OPCODE_USGE: +      exec_vector_binary(mach, inst, micro_usge); +      break; + +   case TGSI_OPCODE_USHR: +      exec_vector_binary(mach, inst, micro_ushr); +      break; + +   case TGSI_OPCODE_USLT: +      exec_vector_binary(mach, inst, micro_uslt); +      break; + +   case TGSI_OPCODE_USNE: +      exec_vector_binary(mach, inst, micro_usne); +      break; +     default:        assert( 0 );     } diff --git a/src/gallium/auxiliary/tgsi/tgsi_info.c b/src/gallium/auxiliary/tgsi/tgsi_info.c index be375cabb8..c7cdd163ec 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_info.c +++ b/src/gallium/auxiliary/tgsi/tgsi_info.c @@ -119,7 +119,7 @@ static const struct tgsi_opcode_info opcode_info[TGSI_OPCODE_LAST] =     { 1, 1, 0, 0, 0, 0, "NOT", TGSI_OPCODE_NOT },     { 1, 1, 0, 0, 0, 0, "TRUNC", TGSI_OPCODE_TRUNC },     { 1, 2, 0, 0, 0, 0, "SHL", TGSI_OPCODE_SHL }, -   { 1, 2, 0, 0, 0, 0, "SHR", TGSI_OPCODE_SHR }, +   { 0, 0, 0, 0, 0, 0, "", 88 },      /* removed */     { 1, 2, 0, 0, 0, 0, "AND", TGSI_OPCODE_AND },     { 1, 2, 0, 0, 0, 0, "OR", TGSI_OPCODE_OR },     { 1, 2, 0, 0, 0, 0, "MOD", TGSI_OPCODE_MOD }, @@ -149,7 +149,28 @@ static const struct tgsi_opcode_info opcode_info[TGSI_OPCODE_LAST] =     { 0, 1, 0, 0, 0, 0, "BREAKC", TGSI_OPCODE_BREAKC },     { 0, 1, 0, 0, 0, 0, "KIL", TGSI_OPCODE_KIL },     { 0, 0, 0, 0, 0, 0, "END", TGSI_OPCODE_END }, -   { 0, 0, 0, 0, 0, 0, "", 118 }      /* removed */ +   { 0, 0, 0, 0, 0, 0, "", 118 },     /* removed */ +   { 1, 1, 0, 0, 0, 0, "F2I", TGSI_OPCODE_F2I }, +   { 1, 2, 0, 0, 0, 0, "IDIV", TGSI_OPCODE_IDIV }, +   { 1, 2, 0, 0, 0, 0, "IMAX", TGSI_OPCODE_IMAX }, +   { 1, 2, 0, 0, 0, 0, "IMIN", TGSI_OPCODE_IMIN }, +   { 1, 1, 0, 0, 0, 0, "INEG", TGSI_OPCODE_INEG }, +   { 1, 2, 0, 0, 0, 0, "ISGE", TGSI_OPCODE_ISGE }, +   { 1, 2, 0, 0, 0, 0, "ISHR", TGSI_OPCODE_ISHR }, +   { 1, 2, 0, 0, 0, 0, "ISLT", TGSI_OPCODE_ISLT }, +   { 1, 1, 0, 0, 0, 0, "F2U", TGSI_OPCODE_F2U }, +   { 1, 1, 0, 0, 0, 0, "U2F", TGSI_OPCODE_U2F }, +   { 1, 2, 0, 0, 0, 0, "UADD", TGSI_OPCODE_UADD }, +   { 1, 2, 0, 0, 0, 0, "UDIV", TGSI_OPCODE_UDIV }, +   { 1, 3, 0, 0, 0, 0, "UMAD", TGSI_OPCODE_UMAD }, +   { 1, 2, 0, 0, 0, 0, "UMAX", TGSI_OPCODE_UMAX }, +   { 1, 2, 0, 0, 0, 0, "UMIN", TGSI_OPCODE_UMIN }, +   { 1, 2, 0, 0, 0, 0, "UMUL", TGSI_OPCODE_UMUL }, +   { 1, 2, 0, 0, 0, 0, "USEQ", TGSI_OPCODE_USEQ }, +   { 1, 2, 0, 0, 0, 0, "USGE", TGSI_OPCODE_USGE }, +   { 1, 2, 0, 0, 0, 0, "USHR", TGSI_OPCODE_USHR }, +   { 1, 2, 0, 0, 0, 0, "USLT", TGSI_OPCODE_USLT }, +   { 1, 2, 0, 0, 0, 0, "USNE", TGSI_OPCODE_USNE }  };  const struct tgsi_opcode_info * diff --git a/src/gallium/auxiliary/tgsi/tgsi_opcode_tmp.h b/src/gallium/auxiliary/tgsi/tgsi_opcode_tmp.h index b34263da48..a35186c223 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_opcode_tmp.h +++ b/src/gallium/auxiliary/tgsi/tgsi_opcode_tmp.h @@ -124,7 +124,6 @@ OP11(I2F)  OP11(NOT)  OP11(TRUNC)  OP12(SHL) -OP12(SHR)  OP12(AND)  OP12(OR)  OP12(MOD) @@ -146,6 +145,27 @@ OP01(IFC)  OP01(BREAKC)  OP01(KIL)  OP00(END) +OP11(F2I) +OP12(IDIV) +OP12(IMAX) +OP12(IMIN) +OP11(INEG) +OP12(ISGE) +OP12(ISHR) +OP12(ISLT) +OP11(F2U) +OP11(U2F) +OP12(UADD) +OP12(UDIV) +OP13(UMAD) +OP12(UMAX) +OP12(UMIN) +OP12(UMUL) +OP12(USEQ) +OP12(USGE) +OP12(USHR) +OP12(USLT) +OP12(USNE)  #undef OP00 | 
