From patchwork Tue Apr 2 04:23:28 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 232869 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 539412C0134 for ; Tue, 2 Apr 2013 15:33:20 +1100 (EST) Received: from localhost ([::1]:55206 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UMsuM-000659-GN for incoming@patchwork.ozlabs.org; Tue, 02 Apr 2013 00:33:18 -0400 Received: from eggs.gnu.org ([208.118.235.92]:58098) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UMsm0-0003dH-Rz for qemu-devel@nongnu.org; Tue, 02 Apr 2013 00:24:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UMsly-0007jj-6h for qemu-devel@nongnu.org; Tue, 02 Apr 2013 00:24:40 -0400 Received: from mail-gh0-f169.google.com ([209.85.160.169]:63215) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UMslx-0007jb-V4 for qemu-devel@nongnu.org; Tue, 02 Apr 2013 00:24:38 -0400 Received: by mail-gh0-f169.google.com with SMTP id r18so2747ghr.28 for ; Mon, 01 Apr 2013 21:24:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:sender:from:to:cc:subject:date:message-id:x-mailer :in-reply-to:references; bh=XrPI4LaG9OlsCBeQkhCDPTkdzGcTlNjaDdBTfekG5q0=; b=RLNkzy/oQUJ9CEXBk3vfqkrqBjTNOTl0XbdIsH59WHGIDZNVfwEdKj87F2q9ovAjzn 5atZLhUwR48c5PjYe1DthKGxo2ZdNAdyeNpvMdNWGjgNEHcGR5nKr9GFEXVrMYtBkBsB MiZjIfmiCFYztfMvCM8c9ZgAx/U7469chYrsqUQNtBk1iyw8HjGgyldx0DWTNXDK/570 Pq0sawgoiCUbOJDxMH41Kid2G1EO2Z+ji7XUQOCydpRH6YrcdUuGNEExE7ji3ZQtg+ou bzpQIOD3N1fY9P/4WYVFcazjCc6m5N7fjSXPtJlq44IfDKysXlDWlbbkt/4EPrg48tX0 RoaQ== X-Received: by 10.236.179.36 with SMTP id g24mr12964179yhm.90.1364876677584; Mon, 01 Apr 2013 21:24:37 -0700 (PDT) Received: from pebble.com ([12.236.175.36]) by mx.google.com with ESMTPS id z64sm32502731yhc.24.2013.04.01.21.24.35 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Mon, 01 Apr 2013 21:24:36 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Mon, 1 Apr 2013 21:23:28 -0700 Message-Id: <1364876610-3933-26-git-send-email-rth@twiddle.net> X-Mailer: git-send-email 1.8.1.4 In-Reply-To: <1364876610-3933-1-git-send-email-rth@twiddle.net> References: <1364876610-3933-1-git-send-email-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 209.85.160.169 Cc: av1474@comtv.ru, agraf@suse.de, aurelien@aurel32.net Subject: [Qemu-devel] [PATCH v3 25/27] tcg-ppc64: Use getauxval for ISA detection X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Glibc 2.16 includes an easy way to get feature bits previously buried in /proc or the program startup auxiliary vector. Use it. Signed-off-by: Richard Henderson Reviewed-by: Aurelien Jarno --- configure | 18 ++++++++++++++++++ tcg/ppc64/tcg-target.c | 16 +++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/configure b/configure index fbea75e..e675b9d 100755 --- a/configure +++ b/configure @@ -3252,6 +3252,20 @@ if compile_prog "" "" ; then int128=yes fi +######################################## +# check if getauxval is available. + +getauxval=no +cat > $TMPC << EOF +#include +int main(void) { + return getauxval(AT_HWCAP) == 0; +} +EOF +if compile_prog "" "" ; then + getauxval=yes +fi + ########################################## # End of CC checks # After here, no more $cc or $ld runs @@ -3809,6 +3823,10 @@ if test "$int128" = "yes" ; then echo "CONFIG_INT128=y" >> $config_host_mak fi +if test "$getauxval" = "yes" ; then + echo "CONFIG_GETAUXVAL=y" >> $config_host_mak +fi + if test "$glusterfs" = "yes" ; then echo "CONFIG_GLUSTERFS=y" >> $config_host_mak fi diff --git a/tcg/ppc64/tcg-target.c b/tcg/ppc64/tcg-target.c index 4ade501..cc1161a 100644 --- a/tcg/ppc64/tcg-target.c +++ b/tcg/ppc64/tcg-target.c @@ -44,8 +44,15 @@ static uint8_t *tb_ret_addr; #define GUEST_BASE 0 #endif +#ifdef CONFIG_GETAUXVAL +#include +static bool have_isa_2_06; +#define HAVE_ISA_2_06 have_isa_2_06 +#define HAVE_ISEL have_isa_2_06 +#else #define HAVE_ISA_2_06 0 -#define HAVE_ISEL 0 +#define HAVE_ISA_ISEL 0 +#endif #ifdef CONFIG_USE_GUEST_BASE #define TCG_GUEST_BASE_REG 30 @@ -2084,6 +2091,13 @@ static const TCGTargetOpDef ppc_op_defs[] = { static void tcg_target_init (TCGContext *s) { +#ifdef CONFIG_GETAUXVAL + unsigned long hwcap = getauxval(AT_HWCAP); + if (hwcap & PPC_FEATURE_ARCH_2_06) { + have_isa_2_06 = true; + } +#endif + tcg_regset_set32 (tcg_target_available_regs[TCG_TYPE_I32], 0, 0xffffffff); tcg_regset_set32 (tcg_target_available_regs[TCG_TYPE_I64], 0, 0xffffffff); tcg_regset_set32 (tcg_target_call_clobber_regs, 0,