From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53118) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YOYRA-0000HC-Ul for qemu-devel@nongnu.org; Thu, 19 Feb 2015 16:15:10 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YOYR9-0007J5-KK for qemu-devel@nongnu.org; Thu, 19 Feb 2015 16:15:08 -0500 Received: from mail-qg0-x235.google.com ([2607:f8b0:400d:c04::235]:43432) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YOYR9-0007Ho-7n for qemu-devel@nongnu.org; Thu, 19 Feb 2015 16:15:07 -0500 Received: by mail-qg0-f53.google.com with SMTP id f51so9644029qge.12 for ; Thu, 19 Feb 2015 13:15:07 -0800 (PST) Sender: Richard Henderson From: Richard Henderson Date: Thu, 19 Feb 2015 13:14:21 -0800 Message-Id: <1424380469-20138-4-git-send-email-rth@twiddle.net> In-Reply-To: <1424380469-20138-1-git-send-email-rth@twiddle.net> References: <1424380469-20138-1-git-send-email-rth@twiddle.net> Subject: [Qemu-devel] [PATCH 03/11] target-arm: Handle always condition codes within arm_test_cc List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org Handling this with TCG_COND_ALWAYS will allow these unlikely cases to be handled without special cases in the rest of the translator. The TCG optimizer ought to be able to reduce these ALWAYS conditions completely. Signed-off-by: Richard Henderson --- target-arm/translate-a64.c | 9 +++++++++ target-arm/translate.c | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/target-arm/translate-a64.c b/target-arm/translate-a64.c index 763bf35..219e257 100644 --- a/target-arm/translate-a64.c +++ b/target-arm/translate-a64.c @@ -1056,6 +1056,14 @@ static void arm_test_cc(DisasCompare *cmp, int cc) tcg_gen_andc_i64(value, cpu_ZF, value); break; + case 14: /* always */ + case 15: /* always */ + /* Use the ALWAYS condition, which will fold early. + It doesn't matter what we use for the value. */ + cond = TCG_COND_ALWAYS; + value = cpu_ZF; + goto no_invert; + default: fprintf(stderr, "Bad condition code 0x%x\n", cc); abort(); @@ -1065,6 +1073,7 @@ static void arm_test_cc(DisasCompare *cmp, int cc) cond = tcg_invert_cond(cond); } + no_invert: cmp->cond = cond; cmp->value = value; cmp->value_global = global; diff --git a/target-arm/translate.c b/target-arm/translate.c index 0d0a4d1..54edc33 100644 --- a/target-arm/translate.c +++ b/target-arm/translate.c @@ -816,6 +816,14 @@ static void arm_test_cc(DisasCompare *cmp, int cc) tcg_gen_andc_i32(value, cpu_ZF, value); break; + case 14: /* always */ + case 15: /* always */ + /* Use the ALWAYS condition, which will fold early. + It doesn't matter what we use for the value. */ + cond = TCG_COND_ALWAYS; + value = cpu_ZF; + goto no_invert; + default: fprintf(stderr, "Bad condition code 0x%x\n", cc); abort(); @@ -825,6 +833,7 @@ static void arm_test_cc(DisasCompare *cmp, int cc) cond = tcg_invert_cond(cond); } + no_invert: cmp->cond = cond; cmp->value = value; cmp->value_global = global; -- 2.1.0