From 0a2f58f6ed3f4db98c1826e5e5be3159815042f6 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Thu, 29 Nov 2012 23:43:05 +0100 Subject: [PATCH] gallivm: have a default emit function for fdiv/rcp Reveiwed-by: Tom Stellard --- .../auxiliary/gallivm/lp_bld_tgsi_action.c | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c index 17f288f964e..cd57faef0c0 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c @@ -584,6 +584,29 @@ mul_emit( emit_data->args[0], emit_data->args[1]); } +/*.TGSI_OPCODE_DIV.*/ +static void fdiv_emit( + const struct lp_build_tgsi_action * action, + struct lp_build_tgsi_context * bld_base, + struct lp_build_emit_data * emit_data) +{ + emit_data->output[emit_data->chan] = LLVMBuildFDiv( + bld_base->base.gallivm->builder, + emit_data->args[0], emit_data->args[1], ""); +} + +/*.TGSI_OPCODE_RCP.*/ +static void rcp_emit( + const struct lp_build_tgsi_action * action, + struct lp_build_tgsi_context * bld_base, + struct lp_build_emit_data * emit_data) +{ + LLVMValueRef one; + one = lp_build_const_float(bld_base->base.gallivm, 1.0f); + emit_data->output[emit_data->chan] = lp_build_emit_llvm_binary(bld_base, + TGSI_OPCODE_DIV, one, emit_data->args[0]); +} + /* TGSI_OPCODE_POW */ static void @@ -811,6 +834,8 @@ lp_set_default_actions(struct lp_build_tgsi_context * bld_base) bld_base->op_actions[TGSI_OPCODE_MAD].emit = mad_emit; bld_base->op_actions[TGSI_OPCODE_MOV].emit = mov_emit; bld_base->op_actions[TGSI_OPCODE_MUL].emit = mul_emit; + bld_base->op_actions[TGSI_OPCODE_DIV].emit = fdiv_emit; + bld_base->op_actions[TGSI_OPCODE_RCP].emit = rcp_emit; bld_base->op_actions[TGSI_OPCODE_SFL].emit = sfl_emit; bld_base->op_actions[TGSI_OPCODE_STR].emit = str_emit; bld_base->op_actions[TGSI_OPCODE_SUB].emit = sub_emit; -- 2.30.2