From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LKYJi-0007ra-Ir for qemu-devel@nongnu.org; Wed, 07 Jan 2009 08:19:26 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LKYJg-0007qk-Qf for qemu-devel@nongnu.org; Wed, 07 Jan 2009 08:19:25 -0500 Received: from [199.232.76.173] (port=50354 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LKYJg-0007qg-Ki for qemu-devel@nongnu.org; Wed, 07 Jan 2009 08:19:24 -0500 Received: from savannah.gnu.org ([199.232.41.3]:57466 helo=sv.gnu.org) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1LKYJg-0003Me-Af for qemu-devel@nongnu.org; Wed, 07 Jan 2009 08:19:24 -0500 Received: from cvs.savannah.gnu.org ([199.232.41.69]) by sv.gnu.org with esmtp (Exim 4.63) (envelope-from ) id 1LKYJf-0000Cm-8B for qemu-devel@nongnu.org; Wed, 07 Jan 2009 13:19:23 +0000 Received: from edgar_igl by cvs.savannah.gnu.org with local (Exim 4.63) (envelope-from ) id 1LKYJe-0000Cb-O1 for qemu-devel@nongnu.org; Wed, 07 Jan 2009 13:19:22 +0000 MIME-Version: 1.0 Errors-To: edgar_igl Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: "Edgar E. Iglesias" Message-Id: Date: Wed, 07 Jan 2009 13:19:22 +0000 Subject: [Qemu-devel] [6205] CRIS: Use a helper for lz. Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Revision: 6205 http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=6205 Author: edgar_igl Date: 2009-01-07 13:19:21 +0000 (Wed, 07 Jan 2009) Log Message: ----------- CRIS: Use a helper for lz. Signed-off-by: Edgar E. Iglesias Modified Paths: -------------- trunk/target-cris/helper.h trunk/target-cris/op_helper.c trunk/target-cris/translate.c Modified: trunk/target-cris/helper.h =================================================================== --- trunk/target-cris/helper.h 2009-01-07 13:15:29 UTC (rev 6204) +++ trunk/target-cris/helper.h 2009-01-07 13:19:21 UTC (rev 6205) @@ -10,6 +10,7 @@ DEF_HELPER_2(movl_sreg_reg, void, i32, i32) DEF_HELPER_2(movl_reg_sreg, void, i32, i32) +DEF_HELPER_FLAGS_1(lz, TCG_CALL_PURE, i32, i32); DEF_HELPER_FLAGS_3(btst, TCG_CALL_PURE, i32, i32, i32, i32); DEF_HELPER_0(evaluate_flags_muls, void) Modified: trunk/target-cris/op_helper.c =================================================================== --- trunk/target-cris/op_helper.c 2009-01-07 13:15:29 UTC (rev 6204) +++ trunk/target-cris/op_helper.c 2009-01-07 13:19:21 UTC (rev 6205) @@ -23,6 +23,7 @@ #include "exec.h" #include "mmu.h" #include "helper.h" +#include "host-utils.h" #define D(x) @@ -243,6 +244,11 @@ env->pregs[PR_CCS] |= M_FLAG; } +uint32_t helper_lz(uint32_t t0) +{ + return clz32(t0); +} + uint32_t helper_btst(uint32_t t0, uint32_t t1, uint32_t ccs) { /* FIXME: clean this up. */ Modified: trunk/target-cris/translate.c =================================================================== --- trunk/target-cris/translate.c 2009-01-07 13:15:29 UTC (rev 6204) +++ trunk/target-cris/translate.c 2009-01-07 13:19:21 UTC (rev 6205) @@ -320,74 +320,6 @@ tcg_temp_free_i64(t1); } -/* 32bit branch-free binary search for counting leading zeros. */ -static void t_gen_lz_i32(TCGv d, TCGv x) -{ - TCGv_i32 y, m, n; - - y = tcg_temp_new_i32(); - m = tcg_temp_new_i32(); - n = tcg_temp_new_i32(); - - /* y = -(x >> 16) */ - tcg_gen_shri_i32(y, x, 16); - tcg_gen_neg_i32(y, y); - - /* m = (y >> 16) & 16 */ - tcg_gen_sari_i32(m, y, 16); - tcg_gen_andi_i32(m, m, 16); - - /* n = 16 - m */ - tcg_gen_sub_i32(n, tcg_const_i32(16), m); - /* x = x >> m */ - tcg_gen_shr_i32(x, x, m); - - /* y = x - 0x100 */ - tcg_gen_subi_i32(y, x, 0x100); - /* m = (y >> 16) & 8 */ - tcg_gen_sari_i32(m, y, 16); - tcg_gen_andi_i32(m, m, 8); - /* n = n + m */ - tcg_gen_add_i32(n, n, m); - /* x = x << m */ - tcg_gen_shl_i32(x, x, m); - - /* y = x - 0x1000 */ - tcg_gen_subi_i32(y, x, 0x1000); - /* m = (y >> 16) & 4 */ - tcg_gen_sari_i32(m, y, 16); - tcg_gen_andi_i32(m, m, 4); - /* n = n + m */ - tcg_gen_add_i32(n, n, m); - /* x = x << m */ - tcg_gen_shl_i32(x, x, m); - - /* y = x - 0x4000 */ - tcg_gen_subi_i32(y, x, 0x4000); - /* m = (y >> 16) & 2 */ - tcg_gen_sari_i32(m, y, 16); - tcg_gen_andi_i32(m, m, 2); - /* n = n + m */ - tcg_gen_add_i32(n, n, m); - /* x = x << m */ - tcg_gen_shl_i32(x, x, m); - - /* y = x >> 14 */ - tcg_gen_shri_i32(y, x, 14); - /* m = y & ~(y >> 1) */ - tcg_gen_sari_i32(m, y, 1); - tcg_gen_not_i32(m, m); - tcg_gen_and_i32(m, m, y); - - /* d = n + 2 - m */ - tcg_gen_addi_i32(d, n, 2); - tcg_gen_sub_i32(d, d, m); - - tcg_temp_free(y); - tcg_temp_free(m); - tcg_temp_free(n); -} - static void t_gen_cris_dstep(TCGv d, TCGv a, TCGv b) { int l1; @@ -825,7 +757,7 @@ t_gen_subx_carry(dc, dst); break; case CC_OP_LZ: - t_gen_lz_i32(dst, b); + gen_helper_lz(dst, b); break; case CC_OP_MULS: t_gen_muls(dst, cpu_PR[PR_MOF], a, b);