summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQiang Yu <yuq825@gmail.com>2017-10-13 17:09:38 +0800
committerQiang Yu <yuq825@gmail.com>2017-10-13 18:56:44 +0800
commit2fe255bc82c859ecb140d399c26a773e17652acb (patch)
treef8b1a8e55d04e15f53c9cfaae3fe92708ed2e96c
parentf0d05c476cb0638fbc1a08cbf6188ade27075770 (diff)
lima/gpir: add rcp codegen
Signed-off-by: Qiang Yu <yuq825@gmail.com>
-rw-r--r--src/gallium/drivers/lima/ir/gp/codegen.c30
1 files changed, 29 insertions, 1 deletions
diff --git a/src/gallium/drivers/lima/ir/gp/codegen.c b/src/gallium/drivers/lima/ir/gp/codegen.c
index 6b6a8ec624..4d25e3aa7b 100644
--- a/src/gallium/drivers/lima/ir/gp/codegen.c
+++ b/src/gallium/drivers/lima/ir/gp/codegen.c
@@ -117,6 +117,18 @@ static void gpir_codegen_mul0_slot(gpir_codegen_instr *code, gpir_instr *instr)
code->mul0_src1 = gpir_codegen_src_ident;
break;
+ case gpir_op_complex1:
+ code->mul0_src0 = gpir_get_alu_input(node, alu->children[0]);
+ code->mul0_src1 = gpir_get_alu_input(node, alu->children[1]);
+ code->mul_op = gpir_codegen_mul_op_complex1;
+ break;
+
+ case gpir_op_complex2:
+ code->mul0_src0 = gpir_get_alu_input(node, alu->children[0]);
+ code->mul0_src1 = code->mul0_src0;
+ code->mul_op = gpir_codegen_mul_op_complex2;
+ break;
+
default:
assert(0);
}
@@ -156,6 +168,11 @@ static void gpir_codegen_mul1_slot(gpir_codegen_instr *code, gpir_instr *instr)
code->mul1_src1 = gpir_codegen_src_ident;
break;
+ case gpir_op_complex1:
+ code->mul0_src0 = gpir_get_alu_input(node, alu->children[0]);
+ code->mul0_src1 = gpir_get_alu_input(node, alu->children[2]);
+ break;
+
default:
assert(0);
}
@@ -254,15 +271,26 @@ static void gpir_codegen_complex_slot(gpir_codegen_instr *code, gpir_instr *inst
switch (node->op) {
case gpir_op_mov:
+ case gpir_op_rcp_impl:
{
gpir_alu_node *alu = gpir_node_to_alu(node);
code->complex_src = gpir_get_alu_input(node, alu->children[0]);
- code->complex_op = gpir_codegen_complex_op_pass;
break;
}
default:
assert(0);
}
+
+ switch (node->op) {
+ case gpir_op_mov:
+ code->complex_op = gpir_codegen_complex_op_pass;
+ break;
+ case gpir_op_rcp_impl:
+ code->complex_op = gpir_codegen_complex_op_rcp;
+ break;
+ default:
+ assert(0);
+ }
}
static void gpir_codegen_pass_slot(gpir_codegen_instr *code, gpir_instr *instr)