From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Li3nP-0002e0-Ij for qemu-devel@nongnu.org; Fri, 13 Mar 2009 05:35:15 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Li3nP-0002dR-54 for qemu-devel@nongnu.org; Fri, 13 Mar 2009 05:35:15 -0400 Received: from [199.232.76.173] (port=34652 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Li3nO-0002dH-Ow for qemu-devel@nongnu.org; Fri, 13 Mar 2009 05:35:14 -0400 Received: from savannah.gnu.org ([199.232.41.3]:54174 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 1Li3nO-0006MC-CM for qemu-devel@nongnu.org; Fri, 13 Mar 2009 05:35:14 -0400 Received: from cvs.savannah.gnu.org ([199.232.41.69]) by sv.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Li3nN-0006zB-KE for qemu-devel@nongnu.org; Fri, 13 Mar 2009 09:35:13 +0000 Received: from aurel32 by cvs.savannah.gnu.org with local (Exim 4.69) (envelope-from ) id 1Li3nN-0006z3-0y for qemu-devel@nongnu.org; Fri, 13 Mar 2009 09:35:13 +0000 MIME-Version: 1.0 Errors-To: aurel32 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Aurelien Jarno Message-Id: Date: Fri, 13 Mar 2009 09:35:13 +0000 Subject: [Qemu-devel] [6832] tcg: add bswap16_i64 and bswap32_i64 TCG ops 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: 6832 http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=6832 Author: aurel32 Date: 2009-03-13 09:35:12 +0000 (Fri, 13 Mar 2009) Log Message: ----------- tcg: add bswap16_i64 and bswap32_i64 TCG ops Signed-off-by: Aurelien Jarno Modified Paths: -------------- trunk/tcg/tcg-op.h trunk/tcg/tcg-opc.h Modified: trunk/tcg/tcg-op.h =================================================================== --- trunk/tcg/tcg-op.h 2009-03-13 09:35:03 UTC (rev 6831) +++ trunk/tcg/tcg-op.h 2009-03-13 09:35:12 UTC (rev 6832) @@ -1297,6 +1297,20 @@ tcg_gen_sari_i32(TCGV_HIGH(ret), TCGV_LOW(ret), 31); } +/* Note: we assume the six high bytes are set to zero */ +static inline void tcg_gen_bswap16_i64(TCGv_i64 ret, TCGv_i64 arg) +{ + tcg_gen_mov_i32(TCGV_HIGH(ret), TCGV_HIGH(arg)); + tcg_gen_bswap16_i32(TCGV_LOW(ret), TCGV_LOW(arg)); +} + +/* Note: we assume the four high bytes are set to zero */ +static inline void tcg_gen_bswap32_i64(TCGv_i64 ret, TCGv_i64 arg) +{ + tcg_gen_mov_i32(TCGV_HIGH(ret), TCGV_HIGH(arg)); + tcg_gen_bswap32_i32(TCGV_LOW(ret), TCGV_LOW(arg)); +} + static inline void tcg_gen_bswap64_i64(TCGv_i64 ret, TCGv_i64 arg) { TCGv_i32 t0, t1; @@ -1378,6 +1392,50 @@ tcg_gen_ext32s_i64(ret, MAKE_TCGV_I64(GET_TCGV_I32(arg))); } +/* Note: we assume the six high bytes are set to zero */ +static inline void tcg_gen_bswap16_i64(TCGv_i64 ret, TCGv_i64 arg) +{ +#ifdef TCG_TARGET_HAS_bswap16_i64 + tcg_gen_op2_i64(INDEX_op_bswap16_i64, ret, arg); +#else + TCGv_i64 t0 = tcg_temp_new_i64(); + + tcg_gen_ext8u_i64(t0, arg); + tcg_gen_shli_i64(t0, t0, 8); + tcg_gen_shri_i64(ret, arg, 8); + tcg_gen_or_i64(ret, ret, t0); + tcg_temp_free_i64(t0); +#endif +} + +/* Note: we assume the four high bytes are set to zero */ +static inline void tcg_gen_bswap32_i64(TCGv_i64 ret, TCGv_i64 arg) +{ +#ifdef TCG_TARGET_HAS_bswap32_i64 + tcg_gen_op2_i64(INDEX_op_bswap32_i64, ret, arg); +#else + TCGv_i64 t0, t1; + t0 = tcg_temp_new_i64(); + t1 = tcg_temp_new_i64(); + + tcg_gen_shli_i64(t0, arg, 24); + tcg_gen_ext32u_i64(t0, t0); + + tcg_gen_andi_i64(t1, arg, 0x0000ff00); + tcg_gen_shli_i64(t1, t1, 8); + tcg_gen_or_i64(t0, t0, t1); + + tcg_gen_shri_i64(t1, arg, 8); + tcg_gen_andi_i64(t1, t1, 0x0000ff00); + tcg_gen_or_i64(t0, t0, t1); + + tcg_gen_shri_i64(t1, arg, 24); + tcg_gen_or_i64(ret, t0, t1); + tcg_temp_free_i64(t0); + tcg_temp_free_i64(t1); +#endif +} + static inline void tcg_gen_bswap64_i64(TCGv_i64 ret, TCGv_i64 arg) { #ifdef TCG_TARGET_HAS_bswap64_i64 Modified: trunk/tcg/tcg-opc.h =================================================================== --- trunk/tcg/tcg-opc.h 2009-03-13 09:35:03 UTC (rev 6831) +++ trunk/tcg/tcg-opc.h 2009-03-13 09:35:12 UTC (rev 6832) @@ -152,6 +152,12 @@ #ifdef TCG_TARGET_HAS_ext32s_i64 DEF2(ext32s_i64, 1, 1, 0, 0) #endif +#ifdef TCG_TARGET_HAS_bswap16_i64 +DEF2(bswap16_i64, 1, 1, 0, 0) +#endif +#ifdef TCG_TARGET_HAS_bswap32_i64 +DEF2(bswap32_i64, 1, 1, 0, 0) +#endif #ifdef TCG_TARGET_HAS_bswap64_i64 DEF2(bswap64_i64, 1, 1, 0, 0) #endif