diff options
author | Qiang Yu <yuq825@gmail.com> | 2017-10-13 17:09:38 +0800 |
---|---|---|
committer | Qiang Yu <yuq825@gmail.com> | 2017-10-13 18:56:44 +0800 |
commit | 2fe255bc82c859ecb140d399c26a773e17652acb (patch) | |
tree | f8b1a8e55d04e15f53c9cfaae3fe92708ed2e96c | |
parent | f0d05c476cb0638fbc1a08cbf6188ade27075770 (diff) |
lima/gpir: add rcp codegen
Signed-off-by: Qiang Yu <yuq825@gmail.com>
-rw-r--r-- | src/gallium/drivers/lima/ir/gp/codegen.c | 30 |
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) |