summaryrefslogtreecommitdiff
path: root/src/gallium/auxiliary/tgsi/tgsi_ppc.c
diff options
context:
space:
mode:
authorBrian Paul <brianp@vmware.com>2009-01-09 21:46:08 -0700
committerBrian Paul <brianp@vmware.com>2009-01-10 14:58:44 -0700
commit1922ea965ac5c411cf5a3ed0ac7c8dbb873dba6c (patch)
treefbf71f501b2c1667770d5e0d455d8c118a0274fe /src/gallium/auxiliary/tgsi/tgsi_ppc.c
parent2ebd969f0f0d0e45e6ac462059cf322f037775f1 (diff)
gallium: emit comments in TGSI->PPC codegen
Diffstat (limited to 'src/gallium/auxiliary/tgsi/tgsi_ppc.c')
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_ppc.c92
1 files changed, 90 insertions, 2 deletions
diff --git a/src/gallium/auxiliary/tgsi/tgsi_ppc.c b/src/gallium/auxiliary/tgsi/tgsi_ppc.c
index a92b1902e3..1a26504738 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_ppc.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_ppc.c
@@ -555,6 +555,18 @@ emit_scalar_unaryop(struct gen_context *gen, struct tgsi_full_instruction *inst)
int v0, v1;
uint chan_index;
+ switch (inst->Instruction.Opcode) {
+ case TGSI_OPCODE_RSQ:
+ ppc_comment(gen->f, -4, "RSQ:");
+ break;
+ case TGSI_OPCODE_RCP:
+ ppc_comment(gen->f, -4, "LCP:");
+ break;
+ default:
+ assert(0);
+ }
+
+
v0 = get_src_vec(gen, inst, 0, CHAN_X);
v1 = ppc_allocate_vec_register(gen->f);
@@ -584,6 +596,33 @@ static void
emit_unaryop(struct gen_context *gen, struct tgsi_full_instruction *inst)
{
uint chan_index;
+
+ switch (inst->Instruction.Opcode) {
+ case TGSI_OPCODE_ABS:
+ ppc_comment(gen->f, -4, "ABS:");
+ break;
+ case TGSI_OPCODE_FLOOR:
+ ppc_comment(gen->f, -4, "FLOOR:");
+ break;
+ case TGSI_OPCODE_FRAC:
+ ppc_comment(gen->f, -4, "FRAC:");
+ break;
+ case TGSI_OPCODE_EXPBASE2:
+ ppc_comment(gen->f, -4, "EXPBASE2:");
+ break;
+ case TGSI_OPCODE_LOGBASE2:
+ ppc_comment(gen->f, -4, "LOGBASE2:");
+ break;
+ case TGSI_OPCODE_MOV:
+ ppc_comment(gen->f, -4, "MOV:");
+ break;
+ case TGSI_OPCODE_SWZ:
+ ppc_comment(gen->f, -4, "SWZ:");
+ break;
+ default:
+ assert(0);
+ }
+
FOR_EACH_DST0_ENABLED_CHANNEL(*inst, chan_index) {
int v0 = get_src_vec(gen, inst, 0, chan_index); /* v0 = srcreg[0] */
int v1 = get_dst_vec(gen, inst, chan_index);
@@ -630,6 +669,26 @@ emit_binop(struct gen_context *gen, struct tgsi_full_instruction *inst)
int zero_vec = -1;
uint chan;
+ switch (inst->Instruction.Opcode) {
+ case TGSI_OPCODE_ADD:
+ ppc_comment(gen->f, -4, "ADD:");
+ break;
+ case TGSI_OPCODE_SUB:
+ ppc_comment(gen->f, -4, "SUB:");
+ break;
+ case TGSI_OPCODE_MUL:
+ ppc_comment(gen->f, -4, "MUL:");
+ break;
+ case TGSI_OPCODE_MIN:
+ ppc_comment(gen->f, -4, "MIN:");
+ break;
+ case TGSI_OPCODE_MAX:
+ ppc_comment(gen->f, -4, "MAX:");
+ break;
+ default:
+ assert(0);
+ }
+
if (inst->Instruction.Opcode == TGSI_OPCODE_MUL) {
zero_vec = ppc_allocate_vec_register(gen->f);
ppc_vzero(gen->f, zero_vec);
@@ -678,6 +737,17 @@ emit_triop(struct gen_context *gen, struct tgsi_full_instruction *inst)
{
uint chan;
+ switch (inst->Instruction.Opcode) {
+ case TGSI_OPCODE_MAD:
+ ppc_comment(gen->f, -4, "MAD:");
+ break;
+ case TGSI_OPCODE_LRP:
+ ppc_comment(gen->f, -4, "LRP:");
+ break;
+ default:
+ assert(0);
+ }
+
FOR_EACH_DST0_ENABLED_CHANNEL(*inst, chan) {
/* fetch src operands */
int v0 = get_src_vec(gen, inst, 0, chan);
@@ -768,9 +838,23 @@ emit_dotprod(struct gen_context *gen, struct tgsi_full_instruction *inst)
int v0, v1, v2;
uint chan_index;
+ switch (inst->Instruction.Opcode) {
+ case TGSI_OPCODE_DP3:
+ ppc_comment(gen->f, -4, "DP3:");
+ break;
+ case TGSI_OPCODE_DP4:
+ ppc_comment(gen->f, -4, "DP4:");
+ break;
+ case TGSI_OPCODE_DPH:
+ ppc_comment(gen->f, -4, "DPH:");
+ break;
+ default:
+ assert(0);
+ }
+
v2 = ppc_allocate_vec_register(gen->f);
- ppc_vxor(gen->f, v2, v2, v2); /* v2 = {0, 0, 0, 0} */
+ ppc_vzero(gen->f, v2); /* v2 = {0, 0, 0, 0} */
v0 = get_src_vec(gen, inst, 0, CHAN_X); /* v0 = src0.XXXX */
v1 = get_src_vec(gen, inst, 1, CHAN_X); /* v1 = src1.XXXX */
@@ -812,10 +896,11 @@ ppc_vec_pow(struct ppc_function *f, int vr, int va, int vb)
int t_vec = ppc_allocate_vec_register(f);
int zero_vec = ppc_allocate_vec_register(f);
+ ppc_comment(f, -4, "POW:");
ppc_vzero(f, zero_vec);
ppc_vlogefp(f, t_vec, va); /* t = log2(va) */
- ppc_vmaddfp(f, t_vec, t_vec, vb, zero_vec); /* t = t * vb */
+ ppc_vmaddfp(f, t_vec, t_vec, vb, zero_vec); /* t = t * vb + zero */
ppc_vexptefp(f, vr, t_vec); /* vr = 2^t */
ppc_release_vec_register(f, t_vec);
@@ -1221,9 +1306,12 @@ emit_prologue(struct ppc_function *func)
static void
emit_epilogue(struct ppc_function *func)
{
+ ppc_comment(func, -4, "Epilogue:");
ppc_return(func);
/* XXX restore prev stack frame */
+#if 0
debug_printf("PPC: Emitted %u instructions\n", func->num_inst);
+#endif
}