[Mesa-dev] [PATCH 8/9] tgsi: implement micro_imsb() and micro_umsb()
Maxence Le Doré
maxence.ledore at gmail.com
Sat Jan 4 15:42:43 PST 2014
From: Maxence Le Doré <Maxence Le Doré>
---
src/gallium/auxiliary/tgsi/tgsi_exec.c | 44 ++++++++++++++++++++++++++++++++++
1 file changed, 44 insertions(+)
diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c b/src/gallium/auxiliary/tgsi/tgsi_exec.c
index aa1b140..10bce5e 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_exec.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c
@@ -350,6 +350,42 @@ micro_mov(union tgsi_exec_channel *dst,
}
static void
+micro_imsb(union tgsi_exec_channel *dst,
+ const union tgsi_exec_channel *src)
+{
+ int i = 0, j = 0;
+
+ for(i = 0; i < 4; i++) {
+ int x = src->i[i];
+ int mask;
+ int res = -1;
+ if (x < 0)
+ x = ~x;
+ for(j = 0; j < 32; j++) {
+ mask = 0x80000000 >> j;
+ if (x & mask) {
+ res = 31 - j;
+ break;
+ }
+ }
+ dst->i[i] = res;
+ }
+}
+
+static void
+micro_umsb(union tgsi_exec_channel *dst,
+ const union tgsi_exec_channel *src)
+{
+ int i = 0;
+ for(i = 0 ; i < 4 ; i++) {
+ if(src->u[i] == 0)
+ dst->i[i] = -1;
+ else
+ dst->i[i] = util_last_bit(src->u[i]) - 1; /* see u_math.h */
+ }
+}
+
+static void
micro_popcnt(union tgsi_exec_channel *dst,
const union tgsi_exec_channel *src)
{
@@ -4322,6 +4358,10 @@ exec_instruction(
exec_vector_binary(mach, inst, micro_imin, TGSI_EXEC_DATA_INT, TGSI_EXEC_DATA_INT);
break;
+ case TGSI_OPCODE_IMSB:
+ exec_vector_unary(mach, inst, micro_imsb, TGSI_EXEC_DATA_INT, TGSI_EXEC_DATA_INT);
+ break;
+
case TGSI_OPCODE_INEG:
exec_vector_unary(mach, inst, micro_ineg, TGSI_EXEC_DATA_INT, TGSI_EXEC_DATA_INT);
break;
@@ -4386,6 +4426,10 @@ exec_instruction(
exec_vector_binary(mach, inst, micro_umul_hi, TGSI_EXEC_DATA_UINT, TGSI_EXEC_DATA_UINT);
break;
+ case TGSI_OPCODE_UMSB:
+ exec_vector_unary(mach, inst, micro_umsb, TGSI_EXEC_DATA_INT, TGSI_EXEC_DATA_UINT);
+ break;
+
case TGSI_OPCODE_USEQ:
exec_vector_binary(mach, inst, micro_useq, TGSI_EXEC_DATA_UINT, TGSI_EXEC_DATA_UINT);
break;
--
1.8.5.2
More information about the mesa-dev
mailing list