From 579c04e42ef1bb449fe86d7224ccfe0c2d569595 Mon Sep 17 00:00:00 2001 From: Alex Deucher Date: Sun, 13 Nov 2011 17:46:01 -0500 Subject: r600g: properly handle cayman in is_alu_vec_unit_inst() Signed-off-by: Alex Deucher --- src/gallium/drivers/r600/r600_asm.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'src/gallium/drivers/r600/r600_asm.c') diff --git a/src/gallium/drivers/r600/r600_asm.c b/src/gallium/drivers/r600/r600_asm.c index 0a1717c6168..f923c622f0b 100644 --- a/src/gallium/drivers/r600/r600_asm.c +++ b/src/gallium/drivers/r600/r600_asm.c @@ -440,13 +440,21 @@ static int is_alu_mova_inst(struct r600_bytecode *bc, struct r600_bytecode_alu * /* alu instructions that can only execute on the vector unit */ static int is_alu_vec_unit_inst(struct r600_bytecode *bc, struct r600_bytecode_alu *alu) { - return is_alu_reduction_inst(bc, alu) || - is_alu_mova_inst(bc, alu) || - (bc->chip_class == EVERGREEN && - (alu->inst == EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_FLT_TO_INT || - alu->inst == EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_FLT_TO_INT_FLOOR || - alu->inst == EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INTERP_XY || - alu->inst == EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INTERP_ZW)); + switch (bc->chip_class) { + case R600: + case R700: + return is_alu_reduction_inst(bc, alu) || + is_alu_mova_inst(bc, alu); + case EVERGREEN: + case CAYMAN: + default: + return is_alu_reduction_inst(bc, alu) || + is_alu_mova_inst(bc, alu) || + (alu->inst == EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_FLT_TO_INT || + alu->inst == EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_FLT_TO_INT_FLOOR || + alu->inst == EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INTERP_XY || + alu->inst == EG_V_SQ_ALU_WORD1_OP2_SQ_OP2_INTERP_ZW); + } } /* alu instructions that can only execute on the trans unit */ -- cgit v1.2.3