From patchwork Thu Jan 10 12:17:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 155137 Delivered-To: patch@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp1832032jaa; Thu, 10 Jan 2019 04:21:24 -0800 (PST) X-Google-Smtp-Source: ALg8bN4XceQ9KXWT57/fwyaLp9z5al2LZIKB3ExFtL3vJJfyqy7jBmdkPxdGsFjuoCpFfBuh2U5a X-Received: by 2002:a1c:2c44:: with SMTP id s65mr10306035wms.80.1547122884439; Thu, 10 Jan 2019 04:21:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1547122884; cv=none; d=google.com; s=arc-20160816; b=ImnePc/BTwoOv95CD6ibbA1AlWDIZTRLyi/bjcFPFFyce+tDFAU3JnW1G3STcJGvVb 8We6VU2D3pZZrSTTQnXdzuXfcbELFWDrTOXbLAk3uh3FGy/vo8C07w7qcMhvT87a9zks YBZHnJfR2jC8bf35YhXLvtwjRc3fhObVW4N9kuupx5Tgtzs60EPec7kSAG/XIaXf18mb 5iinSdcS5wjszlKIPBbGPNngvfEglnBeooLY/7nxy6yETWKXRa/88MGVO4tW6depZwwo jGWdDgBTB8J1fNo7VmHJko2jAG0wJWAewRMYFX/mtQBUtsh2YnSJr7DOCIwiZWMKijN/ mEUA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:subject:references:in-reply-to :message-id:date:to:from:dkim-signature; bh=oasvDAmRt5epJt1fiYz/E8kNR8BOc+EcbCwre/X4ac8=; b=fUWYwOX9koKfP4LeMJnTHI3BNqrVYFVP9g7LVcyz2bCk9gkvAM4Jih75m583fEoesm m4yg81cOaWH10k/HRL8tCbMNKD8hF4JtivpJGks9HZCGjd38d75Y7ibBVeGHuOpxIOhX xMY3E74Bef5llfdQd6bNwg3DcWvtXlhsSUOAuzig+L08TLAOPiR/UZi53KIJpeRpAEoR QpQTch50v3Ll5gomC6o6eizVQD2RBLNGavRSjAu3CMivTeWmSOXMNasWeAs2128KiJhS ZvFbzlS0czGuG8T+Fp2urWnAo1EG5/6NrQ0s/0WO/AbUUvn2Pr9ojfh+AOG4BVMDoJiH moGg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=dI88+ojo; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id g192si10982530wmg.71.2019.01.10.04.21.24 for (version=TLS1 cipher=AES128-SHA bits=128/128); Thu, 10 Jan 2019 04:21:24 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=fail header.i=@linaro.org header.s=google header.b=dI88+ojo; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([127.0.0.1]:56680 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ghZKt-0005xp-C2 for patch@linaro.org; Thu, 10 Jan 2019 07:21:23 -0500 Received: from eggs.gnu.org ([209.51.188.92]:55897) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ghZHT-0004ST-Aa for qemu-devel@nongnu.org; Thu, 10 Jan 2019 07:17:52 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ghZHS-0007WY-Ez for qemu-devel@nongnu.org; Thu, 10 Jan 2019 07:17:51 -0500 Received: from mail-pg1-x542.google.com ([2607:f8b0:4864:20::542]:34144) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1ghZHS-0007Vt-8K for qemu-devel@nongnu.org; Thu, 10 Jan 2019 07:17:50 -0500 Received: by mail-pg1-x542.google.com with SMTP id j10so4776332pga.1 for ; Thu, 10 Jan 2019 04:17:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=oasvDAmRt5epJt1fiYz/E8kNR8BOc+EcbCwre/X4ac8=; b=dI88+ojopaP7ka3+0IfkC2DvwOJZTwhAhr+sL34Up+DjtE9tarODcIE3vxFLrIwdgd VoPOyZdy+mDYUgTSnVFJo7e0RPB3MTHOEzOGoEmgmq5dOMZhXkBaoEaJq5KdEF6X6Xjs /o8uOLk+NbTEZxbUJH791zMyabE+RE/GCLjK8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=oasvDAmRt5epJt1fiYz/E8kNR8BOc+EcbCwre/X4ac8=; b=FzBTuMexK0lg/18dULyGa9hoiObNpudKx6vP1GpVHMRBXaoCIjQZx0QPUQjiIK8/Vl SU7/czK0HyEdiNBa5WfK2xQy1uAVe0VmpX336mr5tk0PKBab6xip2ys3lnt830q174OS ACuwZWHTIlW4TGvVRbc0qi/X75K/0sTNnzLxw76rcmshUutakCcacM52TP4i7ZjGLkZH kjRcfzyfEQ/jaViTSfUTWbK9+38J6nvF5Z4tXoMioHSfIlNK6Oii7HGdvzXjUBvEo6P8 U4nCvflia4wZwP4LRqN7unZgip9uOrRKRahlv0Id6V1bIFCm9CChz4Kl2gzZj77XYUhZ aFFQ== X-Gm-Message-State: AJcUukdFmqo0jr1RwjduuM/mM3G/tSBtXJ55J7aYDLDdsR8BrsN3JQtt 5ZXwtKTHQwphw8JTELXnuWR/LEw644ZjrA== X-Received: by 2002:a62:4c5:: with SMTP id 188mr10175480pfe.130.1547122668952; Thu, 10 Jan 2019 04:17:48 -0800 (PST) Received: from cloudburst.twiddle.net (c220-239-117-135.belrs4.nsw.optusnet.com.au. [220.239.117.135]) by smtp.gmail.com with ESMTPSA id h74sm140934699pfd.35.2019.01.10.04.17.46 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 10 Jan 2019 04:17:48 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 10 Jan 2019 23:17:27 +1100 Message-Id: <20190110121736.23448-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.17.2 In-Reply-To: <20190110121736.23448-1-richard.henderson@linaro.org> References: <20190110121736.23448-1-richard.henderson@linaro.org> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::542 Subject: [Qemu-devel] [PATCH 02/11] target/arm: Add PSTATE.BTYPE X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Place this in its own field within ENV, as that will make it easier to reset from within TCG generated code. With the change to pstate_read/write, exception entry and return are automatically handled. Signed-off-by: Richard Henderson --- target/arm/cpu.h | 8 ++++++-- target/arm/translate-a64.c | 3 +++ 2 files changed, 9 insertions(+), 2 deletions(-) -- 2.17.2 Reviewed-by: Peter Maydell diff --git a/target/arm/cpu.h b/target/arm/cpu.h index fadb74d9a6..8179c07250 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -234,6 +234,7 @@ typedef struct CPUARMState { * semantics as for AArch32, as described in the comments on each field) * nRW (also known as M[4]) is kept, inverted, in env->aarch64 * DAIF (exception masks) are kept in env->daif + * BTYPE is kept in env->btype * all other bits are stored in their correct places in env->pstate */ uint32_t pstate; @@ -263,6 +264,7 @@ typedef struct CPUARMState { uint32_t GE; /* cpsr[19:16] */ uint32_t thumb; /* cpsr[5]. 0 = arm mode, 1 = thumb mode. */ uint32_t condexec_bits; /* IT bits. cpsr[15:10,26:25]. */ + uint32_t btype; /* BTI branch type. spsr[11:10]. */ uint64_t daif; /* exception masks, in the bits they are in PSTATE */ uint64_t elr_el[4]; /* AArch64 exception link regs */ @@ -1155,6 +1157,7 @@ void pmccntr_sync(CPUARMState *env); #define PSTATE_I (1U << 7) #define PSTATE_A (1U << 8) #define PSTATE_D (1U << 9) +#define PSTATE_BTYPE (3U << 10) #define PSTATE_IL (1U << 20) #define PSTATE_SS (1U << 21) #define PSTATE_V (1U << 28) @@ -1163,7 +1166,7 @@ void pmccntr_sync(CPUARMState *env); #define PSTATE_N (1U << 31) #define PSTATE_NZCV (PSTATE_N | PSTATE_Z | PSTATE_C | PSTATE_V) #define PSTATE_DAIF (PSTATE_D | PSTATE_A | PSTATE_I | PSTATE_F) -#define CACHED_PSTATE_BITS (PSTATE_NZCV | PSTATE_DAIF) +#define CACHED_PSTATE_BITS (PSTATE_NZCV | PSTATE_DAIF | PSTATE_BTYPE) /* Mode values for AArch64 */ #define PSTATE_MODE_EL3h 13 #define PSTATE_MODE_EL3t 12 @@ -1195,7 +1198,7 @@ static inline uint32_t pstate_read(CPUARMState *env) ZF = (env->ZF == 0); return (env->NF & 0x80000000) | (ZF << 30) | (env->CF << 29) | ((env->VF & 0x80000000) >> 3) - | env->pstate | env->daif; + | env->pstate | env->daif | (env->btype << 10); } static inline void pstate_write(CPUARMState *env, uint32_t val) @@ -1205,6 +1208,7 @@ static inline void pstate_write(CPUARMState *env, uint32_t val) env->CF = (val >> 29) & 1; env->VF = (val << 3) & 0x80000000; env->daif = val & PSTATE_DAIF; + env->btype = (val >> 10) & 3; env->pstate = val & ~CACHED_PSTATE_BITS; } diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index 2c5ad1774a..e43f0982f9 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -163,6 +163,9 @@ void aarch64_cpu_dump_state(CPUState *cs, FILE *f, el, psr & PSTATE_SP ? 'h' : 't'); + if (cpu_isar_feature(aa64_bti, cpu)) { + cpu_fprintf(f, " BTYPE=%d", (psr & PSTATE_BTYPE) >> 10); + } if (!(flags & CPU_DUMP_FPU)) { cpu_fprintf(f, "\n"); return;