Browse Source

tgsi: Implement new integer opcodes.

Update interpreter and ureg.
Also, get rid of SHR -- it's actually an alias for ISHR.
tags/7.8-rc1
Michal Krol 16 years ago
parent
commit
df0826fba3

+ 369
- 222
src/gallium/auxiliary/tgsi/tgsi_exec.c View File

@@ -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,
@@ -818,34 +701,6 @@ micro_min(
dst->f[3] = src0->f[3] < src1->f[3] ? src0->f[3] : src1->f[3];
}

#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(
@@ -872,20 +727,6 @@ micro_mul(
dst->f[3] = src0->f[3] * src1->f[3];
}

#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(
@@ -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,
@@ -1040,18 +868,6 @@ micro_shl(
dst->i[3] = src0->i[3] << src1->i[3];
}

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,
@@ -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 );
}

+ 23
- 2
src/gallium/auxiliary/tgsi/tgsi_info.c View File

@@ -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 *

+ 21
- 1
src/gallium/auxiliary/tgsi/tgsi_opcode_tmp.h View File

@@ -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

Loading…
Cancel
Save