From patchwork Mon Jul 2 13:57:42 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 140752 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp4029690ljj; Mon, 2 Jul 2018 06:58:42 -0700 (PDT) X-Google-Smtp-Source: AAOMgpcbN5NBYG9SYg1m0EMXf2DFUsQIr95fgHGMYrGOEw6hq8yngZ/3T4txcb+wVlsdx1cbolnY X-Received: by 2002:a0c:86f3:: with SMTP id 48-v6mr22293322qvg.165.1530539921934; Mon, 02 Jul 2018 06:58:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530539921; cv=none; d=google.com; s=arc-20160816; b=NWQHkSzckoClDQi/iBYdHyZBsFV7fEhbzvNJlBeA2vJemJ1pv19djnuwen3V/toBW+ G2JfCkj1dX4VA30Mc86xCB2Gj5tbIKRS+zrwFgffmIZEuxhV+pdl0BJP72eYB5yOJfWk 6tJ1xu7fzyMTMZrypkB3pF7j2QVbi/ZRzeNrPY+6SaB+4flImSV7e82nSmvGxsqpFXX2 bGQy/iYdaJHsqWEFaZCQ+nUm+AQU+A4i0resu01Dqz7CJS5/E4z9Vc4aPDbKMqasEhlx nEEXBSnNgYnmr5zZhkKP/RO97VmPs77b5ma5cxUlNDilzSd49T+BfbK3uutupREQrzKx NRtQ== 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 :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:arc-authentication-results; bh=4kKcrKeV9F/Qdu736T7k95sF9L6dvtl4xdV9jCWRIzA=; b=CsnSRtnSPLe9JqzUJywDVZNxpzJuePb7/sBjZpRepTNKTBujVRmlOhGgHUeG1IEs22 xeQPXClrsd8TnL4C7H0oUoxaNiz3a3S7Np86wDCVdkrRKIE5i43KMh/0GvLWDy3FLjTS 9jJGV73fm28l92legMsTWqBXnA/xV7WYwTEVoVuO9+U6yI/GWXkI9ThzOrP7dOP23/DY CjooM0sLrO3DFFQ2JtIvV/rEzWDt5Ll2HGOf8GKXm4TA6ZjQd0VuigOClH9IRm2dvA3s FlYdql0pr1gF2HnGAtikRLrIWqxmWOLI+Ay+0rbRi2xDzTz4h0882arSnp6iVPNi1m00 93mw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=GVuIY9nF; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id l1-v6si532807qkk.184.2018.07.02.06.58.41 for (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 02 Jul 2018 06:58:41 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=GVuIY9nF; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from localhost ([::1]:32935 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzLl-00027f-6Q for patch@linaro.org; Mon, 02 Jul 2018 09:58:41 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47184) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzLN-00026O-Cw for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:18 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fZzLM-0007nJ-G7 for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:17 -0400 Received: from mail-pg0-x244.google.com ([2607:f8b0:400e:c05::244]:46152) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fZzLM-0007mu-9y for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:16 -0400 Received: by mail-pg0-x244.google.com with SMTP id q14-v6so7184234pgt.13 for ; Mon, 02 Jul 2018 06:58:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=4kKcrKeV9F/Qdu736T7k95sF9L6dvtl4xdV9jCWRIzA=; b=GVuIY9nFnjgt+PYqZRXdZM4SkeqhxyiF19y304CCy5XfKz6vjQEbBhp+iJXY+BNJtV RSeFPoVEBEYZWWsEkrQdX4E7mABVqyIpcNGucPM2sLkmzuVaP/Gl2Z6uX0C0A6MsQngs LSZvrV+JMeNKm3iY+A01wS5sEpHISnH7KIlfG1Medzsa16jGawRRVcru/E8woONT76rm dogaQM4dRyJMbonwC2y/Oyto6fAqWBFe6QANnVzJTc1JYYR/Fb0XzHk3dfnh3pFqXKe9 QU/a+vnoVBC4cJNBym3kfUavxbnCW+BR33razyv2QVCDailvAkaROJWlNNm4V7M594N+ 74LQ== 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:mime-version:content-transfer-encoding; bh=4kKcrKeV9F/Qdu736T7k95sF9L6dvtl4xdV9jCWRIzA=; b=Y9ifKv+qTDduOWMOP/Nt9F8uWK+w7fQ3ycyvm3y3tu4/lX5hsPrJu1OTkT47hC+b6j Q7nexBCXPIOWv/J84WTS9OJci3Aew7yTlx4f4KqxnN+/HsEZ0PfkFCiMR1x/d6vM3cby 0HK7oNEvysgK6t2aro96bjFKKUrzqbJ040i88uJWjGN5n6lo5uy3LojzjWxjANKjHE7W Wwk2RRnZdrmUcf+S7aTPYClt5hM1DIQ5C9mUARFa8OkGh7akKsr05LwpX+C7NaFKISnR IYwoy8m/14KdXC9lfOgkerh4I0mIIwJ6qVw6gb629SZj1C+22whU9xsry26JvQ9yZ3vB qvWQ== X-Gm-Message-State: APt69E0dd4gnMUA50+N1cWvGmCwZZYdh5BnOYe/IpFLgIcCxPdsrjy2M o6ESa6zCrGN5t1gGKTW1lpU= X-Received: by 2002:aa7:8004:: with SMTP id j4-v6mr25343025pfi.174.1530539895309; Mon, 02 Jul 2018 06:58:15 -0700 (PDT) Received: from localhost (g90.124-44-6.ppp.wakwak.ne.jp. [124.44.6.90]) by smtp.gmail.com with ESMTPSA id q9-v6sm23098124pgv.84.2018.07.02.06.58.14 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 02 Jul 2018 06:58:14 -0700 (PDT) From: Stafford Horne To: Peter Maydell Date: Mon, 2 Jul 2018 22:57:42 +0900 Message-Id: <20180702135806.7087-2-shorne@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180702135806.7087-1-shorne@gmail.com> References: <20180702135806.7087-1-shorne@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::244 Subject: [Qemu-devel] [PULL 01/25] target/openrisc: Fix mtspr shadow gprs 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: Stafford Horne , Richard Henderson , QEMU Development Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson Missing break when this feature was added in 89e71e873d ("target/openrisc: implement shadow registers"). This was causing strange issues as we get writes into the translation block jump cache and other bits of state. Fixes: 89e71e873d ("target/openrisc: implement shadow registers") Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: Richard Henderson Signed-off-by: Stafford Horne --- target/openrisc/sys_helper.c | 1 + 1 file changed, 1 insertion(+) -- 2.17.0 diff --git a/target/openrisc/sys_helper.c b/target/openrisc/sys_helper.c index b284064381..2f337363ec 100644 --- a/target/openrisc/sys_helper.c +++ b/target/openrisc/sys_helper.c @@ -98,6 +98,7 @@ void HELPER(mtspr)(CPUOpenRISCState *env, case TO_SPR(0, 1024) ... TO_SPR(0, 1024 + (16 * 32)): /* Shadow GPRs */ idx = (spr - 1024); env->shadow_gpr[idx / 32][idx % 32] = rb; + break; case TO_SPR(1, 512) ... TO_SPR(1, 512+DTLB_SIZE-1): /* DTLBW0MR 0-127 */ idx = spr - TO_SPR(1, 512); From patchwork Mon Jul 2 13:57:43 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 140753 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp4029882ljj; Mon, 2 Jul 2018 06:58:56 -0700 (PDT) X-Google-Smtp-Source: AAOMgpc+oiMavClN0B3DaR/39/v8YrZof9xXB5PY4qZ1SiDIJTF7QR/XD8P/TvAQM1kjWvE7w0yr X-Received: by 2002:a37:b943:: with SMTP id j64-v6mr21579238qkf.291.1530539936738; Mon, 02 Jul 2018 06:58:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530539936; cv=none; d=google.com; s=arc-20160816; b=WkKsUuWD5FGHagpL9TTX5UiPE9izr47w4nhb2XPWClYeJSv+Qc6t6ti2z6SXA+JjI5 aPpRI5k54OJ+sKivXvfmL/+Eq9Br8fp/fc4HD1nKnXfVEV5N4v1BKU+s/y5g3e5CpTOK uZjjpyQR4nxXTXlibPVRvDFiLEXjmyCjXMmuyJcXohhkVa8kBMNXqamInT2nEwfkhkrK zk3Y38DRKWeQP/2NeNtWCS7ZNuSqjnnUzhZ2/QHgLkDUpGSxSdAppiV+GDwheGEfi5g/ axEF3PfGVWei0qWz8yYUALrmtOQkqMb2FyXYQxNYmVeUDe1oCQUiLZEfou96bo1J8fa/ u8kA== 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 :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:arc-authentication-results; bh=tUUvpb68vTv90Id4M0eVgfDVqa1eGjBbA+4rXZaxRHE=; b=d0kEw+THvtP7MHC74NytAgMUxz7z3RstgbZx6X/tvD+GgyRfwD2mJCdtC/b+qGxu/y Ldf/u8SBw/Vvd8rSp0i5+fZMIPXrHZDraPaME77gr74vVCLbwddQwHC4VqPWs8pFOK86 7pa2y8mO1Nia8gI0K3q0e30LYk2RKlb6SPib04ipfQteL5YrAdF90d4VCMluOPMM1Yu9 nU6WC0yT+ysViAqTi1HlBCca5B48SDHyANrc948M/a/AYQKzhAjjoRipXzN7xEc8ehvP 6vIjVcSIG4Y5q/wGunSo+l2Jqkl5kvwvypivCSswDMAkr3aBVf0/Crns4H2MaVUEDbrH 6u0A== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=TnKAczuw; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id k31-v6si718313qvc.79.2018.07.02.06.58.56 for (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 02 Jul 2018 06:58:56 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=TnKAczuw; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from localhost ([::1]:32937 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzM0-0002GO-3N for patch@linaro.org; Mon, 02 Jul 2018 09:58:56 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47229) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzLU-0002BV-7y for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fZzLP-0007s5-U6 for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:24 -0400 Received: from mail-pl0-x244.google.com ([2607:f8b0:400e:c01::244]:41417) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fZzLP-0007qj-Gk for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:19 -0400 Received: by mail-pl0-x244.google.com with SMTP id w8-v6so8015549ply.8 for ; Mon, 02 Jul 2018 06:58:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=tUUvpb68vTv90Id4M0eVgfDVqa1eGjBbA+4rXZaxRHE=; b=TnKAczuwyrIuggjcoNycJpG59oyggVRLy7LRZP+l/edeSWQdnJc5eJobQlz8pYfOjV QlTeXrO0O5mGmqYlqDwmBiyW4Hf4iRzbqQ/FwJ0oAysYdQxjedF9MHK/s2LmAqCKPMC+ zEjqb/L9DF+Z/SWFQe2KFyjo6ATDzt3TmKZr2SqJHSVHKzz3kuEqOYvH4wW8AV3NOw46 ejoygqDAVRDGDdZsxUD+THzWFwiJROt1blzXWWoKgphPrzYEmA1gABKvX4M0v83tqDpB evy3qxlHo4r5k1OHNnjNa68ysMBMeDmVWNkjpCQxs2PIoO9zYBg7UWu2HebI35LPbEK7 m2gg== 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:mime-version:content-transfer-encoding; bh=tUUvpb68vTv90Id4M0eVgfDVqa1eGjBbA+4rXZaxRHE=; b=L89wahgIBFAlh8H5ke/bKkrcRMWVLnUo/GfZCTqtjCvX9zffN8buTpPLdS3kr3Hy8S XpyGYhZssL99gq94dq4RKxl8Bk3DU9Bul2NDCR0QtmqzZWustAsdla7fuarZMvJKqqmm MgBgUCsrUZ28yeS7hy6mGkhptWRiEHIQtT4Y1X2ca/mTsmWOeqCPqewjS6hKXId31ZiO bIdQCvIAgS7U0WQf8ZynKesZ0YBHqenAVwaKA5QRgJZqsZuuzzpQSDv1o00L13NRB9eY hQZF8CFolIvkYDGvDp+bKugIvvGwmTERJeR1CEOIsm5Xx/xX+KuQiFSf0FP6nIh1pdnz UFRw== X-Gm-Message-State: APt69E2fORAAINjQ+ulw6bPqdonDBU2UeelPNYmyg24LtFh3Y5JbOZBR vwHeFRrGhW0esWtj0ZSmrxA= X-Received: by 2002:a17:902:7c8b:: with SMTP id y11-v6mr25234389pll.222.1530539898029; Mon, 02 Jul 2018 06:58:18 -0700 (PDT) Received: from localhost (g90.124-44-6.ppp.wakwak.ne.jp. [124.44.6.90]) by smtp.gmail.com with ESMTPSA id k71-v6sm38965301pga.62.2018.07.02.06.58.16 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 02 Jul 2018 06:58:17 -0700 (PDT) From: Stafford Horne To: Peter Maydell Date: Mon, 2 Jul 2018 22:57:43 +0900 Message-Id: <20180702135806.7087-3-shorne@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180702135806.7087-1-shorne@gmail.com> References: <20180702135806.7087-1-shorne@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c01::244 Subject: [Qemu-devel] [PULL 02/25] target/openrisc: Add print_insn_or1k 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: Stafford Horne , Richard Henderson , QEMU Development Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson Rather than emit disassembly while translating, reuse the generated decoder to build a separate disassembler. Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: Richard Henderson Signed-off-by: Stafford Horne --- target/openrisc/Makefile.objs | 3 +- target/openrisc/cpu.c | 6 ++ target/openrisc/cpu.h | 1 + target/openrisc/disas.c | 170 ++++++++++++++++++++++++++++++++++ target/openrisc/translate.c | 114 ----------------------- 5 files changed, 179 insertions(+), 115 deletions(-) create mode 100644 target/openrisc/disas.c -- 2.17.0 diff --git a/target/openrisc/Makefile.objs b/target/openrisc/Makefile.objs index 1b98a911ea..8b8a890c59 100644 --- a/target/openrisc/Makefile.objs +++ b/target/openrisc/Makefile.objs @@ -1,5 +1,5 @@ obj-$(CONFIG_SOFTMMU) += machine.o -obj-y += cpu.o exception.o interrupt.o mmu.o translate.o +obj-y += cpu.o exception.o interrupt.o mmu.o translate.o disas.o obj-y += exception_helper.o fpu_helper.o \ interrupt_helper.o mmu_helper.o sys_helper.o obj-y += gdbstub.o @@ -12,3 +12,4 @@ target/openrisc/decode.inc.c: \ $(PYTHON) $(DECODETREE) -o $@ $<, "GEN", $(TARGET_DIR)$@) target/openrisc/translate.o: target/openrisc/decode.inc.c +target/openrisc/disas.o: target/openrisc/decode.inc.c diff --git a/target/openrisc/cpu.c b/target/openrisc/cpu.c index a692a98ec0..fa8e342ff7 100644 --- a/target/openrisc/cpu.c +++ b/target/openrisc/cpu.c @@ -35,6 +35,11 @@ static bool openrisc_cpu_has_work(CPUState *cs) CPU_INTERRUPT_TIMER); } +static void openrisc_disas_set_info(CPUState *cpu, disassemble_info *info) +{ + info->print_insn = print_insn_or1k; +} + /* CPUClass::reset() */ static void openrisc_cpu_reset(CPUState *s) { @@ -152,6 +157,7 @@ static void openrisc_cpu_class_init(ObjectClass *oc, void *data) #endif cc->gdb_num_core_regs = 32 + 3; cc->tcg_initialize = openrisc_translate_init; + cc->disas_set_info = openrisc_disas_set_info; } /* Sort alphabetically by type name, except for "any". */ diff --git a/target/openrisc/cpu.h b/target/openrisc/cpu.h index 35cab65f11..c871d6bfe1 100644 --- a/target/openrisc/cpu.h +++ b/target/openrisc/cpu.h @@ -358,6 +358,7 @@ void openrisc_translate_init(void); int openrisc_cpu_handle_mmu_fault(CPUState *cpu, vaddr address, int size, int rw, int mmu_idx); int cpu_openrisc_signal_handler(int host_signum, void *pinfo, void *puc); +int print_insn_or1k(bfd_vma addr, disassemble_info *info); #define cpu_list cpu_openrisc_list #define cpu_signal_handler cpu_openrisc_signal_handler diff --git a/target/openrisc/disas.c b/target/openrisc/disas.c new file mode 100644 index 0000000000..8ee88ec125 --- /dev/null +++ b/target/openrisc/disas.c @@ -0,0 +1,170 @@ +/* + * OpenRISC disassembler + * + * Copyright (c) 2018 Richard Henderson + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "qemu/osdep.h" +#include "qemu-common.h" +#include "disas/bfd.h" +#include "qemu/bitops.h" +#include "cpu.h" + +typedef disassemble_info DisasContext; + +/* Include the auto-generated decoder. */ +#include "decode.inc.c" + +#define output(mnemonic, format, ...) \ + (info->fprintf_func(info->stream, "%-9s " format, \ + mnemonic, ##__VA_ARGS__)) + +int print_insn_or1k(bfd_vma addr, disassemble_info *info) +{ + bfd_byte buffer[4]; + uint32_t insn; + int status; + + status = info->read_memory_func(addr, buffer, 4, info); + if (status != 0) { + info->memory_error_func(status, addr, info); + return -1; + } + insn = bfd_getb32(buffer); + + if (!decode(info, insn)) { + output(".long", "%#08x", insn); + } + return 4; +} + +#define INSN(opcode, format, ...) \ +static bool trans_l_##opcode(disassemble_info *info, \ + arg_l_##opcode * a, uint32_t insn) \ +{ \ + output("l." #opcode, format, ##__VA_ARGS__); \ + return true; \ +} + +INSN(add, "r%d, r%d, r%d", a->d, a->a, a->b) +INSN(addc, "r%d, r%d, r%d", a->d, a->a, a->b) +INSN(sub, "r%d, r%d, r%d", a->d, a->a, a->b) +INSN(and, "r%d, r%d, r%d", a->d, a->a, a->b) +INSN(or, "r%d, r%d, r%d", a->d, a->a, a->b) +INSN(xor, "r%d, r%d, r%d", a->d, a->a, a->b) +INSN(sll, "r%d, r%d, r%d", a->d, a->a, a->b) +INSN(srl, "r%d, r%d, r%d", a->d, a->a, a->b) +INSN(sra, "r%d, r%d, r%d", a->d, a->a, a->b) +INSN(ror, "r%d, r%d, r%d", a->d, a->a, a->b) +INSN(exths, "r%d, r%d", a->d, a->a) +INSN(extbs, "r%d, r%d", a->d, a->a) +INSN(exthz, "r%d, r%d", a->d, a->a) +INSN(extbz, "r%d, r%d", a->d, a->a) +INSN(cmov, "r%d, r%d, r%d", a->d, a->a, a->b) +INSN(ff1, "r%d, r%d", a->d, a->a) +INSN(fl1, "r%d, r%d", a->d, a->a) +INSN(mul, "r%d, r%d, r%d", a->d, a->a, a->b) +INSN(mulu, "r%d, r%d, r%d", a->d, a->a, a->b) +INSN(div, "r%d, r%d, r%d", a->d, a->a, a->b) +INSN(divu, "r%d, r%d, r%d", a->d, a->a, a->b) +INSN(muld, "r%d, r%d", a->a, a->b) +INSN(muldu, "r%d, r%d", a->a, a->b) +INSN(j, "%d", a->n) +INSN(jal, "%d", a->n) +INSN(bf, "%d", a->n) +INSN(bnf, "%d", a->n) +INSN(jr, "r%d", a->b) +INSN(jalr, "r%d", a->b) +INSN(lwa, "r%d, %d(r%d)", a->d, a->i, a->a) +INSN(lwz, "r%d, %d(r%d)", a->d, a->i, a->a) +INSN(lws, "r%d, %d(r%d)", a->d, a->i, a->a) +INSN(lbz, "r%d, %d(r%d)", a->d, a->i, a->a) +INSN(lbs, "r%d, %d(r%d)", a->d, a->i, a->a) +INSN(lhz, "r%d, %d(r%d)", a->d, a->i, a->a) +INSN(lhs, "r%d, %d(r%d)", a->d, a->i, a->a) +INSN(swa, "%d(r%d), r%d", a->i, a->a, a->b) +INSN(sw, "%d(r%d), r%d", a->i, a->a, a->b) +INSN(sb, "%d(r%d), r%d", a->i, a->a, a->b) +INSN(sh, "%d(r%d), r%d", a->i, a->a, a->b) +INSN(nop, "") +INSN(addi, "r%d, r%d, %d", a->d, a->a, a->i) +INSN(addic, "r%d, r%d, %d", a->d, a->a, a->i) +INSN(muli, "r%d, r%d, %d", a->d, a->a, a->i) +INSN(maci, "r%d, %d", a->a, a->i) +INSN(andi, "r%d, r%d, %d", a->d, a->a, a->k) +INSN(ori, "r%d, r%d, %d", a->d, a->a, a->k) +INSN(xori, "r%d, r%d, %d", a->d, a->a, a->i) +INSN(mfspr, "r%d, r%d, %d", a->d, a->a, a->k) +INSN(mtspr, "r%d, r%d, %d", a->a, a->b, a->k) +INSN(mac, "r%d, r%d", a->a, a->b) +INSN(msb, "r%d, r%d", a->a, a->b) +INSN(macu, "r%d, r%d", a->a, a->b) +INSN(msbu, "r%d, r%d", a->a, a->b) +INSN(slli, "r%d, r%d, %d", a->d, a->a, a->l) +INSN(srli, "r%d, r%d, %d", a->d, a->a, a->l) +INSN(srai, "r%d, r%d, %d", a->d, a->a, a->l) +INSN(rori, "r%d, r%d, %d", a->d, a->a, a->l) +INSN(movhi, "r%d, %d", a->d, a->k) +INSN(macrc, "r%d", a->d) +INSN(sfeq, "r%d, r%d", a->a, a->b) +INSN(sfne, "r%d, r%d", a->a, a->b) +INSN(sfgtu, "r%d, r%d", a->a, a->b) +INSN(sfgeu, "r%d, r%d", a->a, a->b) +INSN(sfltu, "r%d, r%d", a->a, a->b) +INSN(sfleu, "r%d, r%d", a->a, a->b) +INSN(sfgts, "r%d, r%d", a->a, a->b) +INSN(sfges, "r%d, r%d", a->a, a->b) +INSN(sflts, "r%d, r%d", a->a, a->b) +INSN(sfles, "r%d, r%d", a->a, a->b) +INSN(sfeqi, "r%d, %d", a->a, a->i) +INSN(sfnei, "r%d, %d", a->a, a->i) +INSN(sfgtui, "r%d, %d", a->a, a->i) +INSN(sfgeui, "r%d, %d", a->a, a->i) +INSN(sfltui, "r%d, %d", a->a, a->i) +INSN(sfleui, "r%d, %d", a->a, a->i) +INSN(sfgtsi, "r%d, %d", a->a, a->i) +INSN(sfgesi, "r%d, %d", a->a, a->i) +INSN(sfltsi, "r%d, %d", a->a, a->i) +INSN(sflesi, "r%d, %d", a->a, a->i) +INSN(sys, "%d", a->k) +INSN(trap, "%d", a->k) +INSN(msync, "") +INSN(psync, "") +INSN(csync, "") +INSN(rfe, "") + +#define FP_INSN(opcode, suffix, format, ...) \ +static bool trans_lf_##opcode##_##suffix(disassemble_info *info, \ + arg_lf_##opcode##_##suffix * a, uint32_t insn) \ +{ \ + output("lf." #opcode "." #suffix, format, ##__VA_ARGS__); \ + return true; \ +} + +FP_INSN(add, s, "r%d, r%d, r%d", a->d, a->a, a->b) +FP_INSN(sub, s, "r%d, r%d, r%d", a->d, a->a, a->b) +FP_INSN(mul, s, "r%d, r%d, r%d", a->d, a->a, a->b) +FP_INSN(div, s, "r%d, r%d, r%d", a->d, a->a, a->b) +FP_INSN(rem, s, "r%d, r%d, r%d", a->d, a->a, a->b) +FP_INSN(itof, s, "r%d, r%d", a->d, a->a) +FP_INSN(ftoi, s, "r%d, r%d", a->d, a->a) +FP_INSN(madd, s, "r%d, r%d, r%d", a->d, a->a, a->b) +FP_INSN(sfeq, s, "r%d, r%d", a->a, a->b) +FP_INSN(sfne, s, "r%d, r%d", a->a, a->b) +FP_INSN(sfgt, s, "r%d, r%d", a->a, a->b) +FP_INSN(sfge, s, "r%d, r%d", a->a, a->b) +FP_INSN(sflt, s, "r%d, r%d", a->a, a->b) +FP_INSN(sfle, s, "r%d, r%d", a->a, a->b) diff --git a/target/openrisc/translate.c b/target/openrisc/translate.c index d69f8d0422..fbdc2058dc 100644 --- a/target/openrisc/translate.c +++ b/target/openrisc/translate.c @@ -36,10 +36,6 @@ #include "trace-tcg.h" #include "exec/log.h" -#define LOG_DIS(str, ...) \ - qemu_log_mask(CPU_LOG_TB_IN_ASM, "%08x: " str, dc->base.pc_next, \ - ## __VA_ARGS__) - /* is_jmp field values */ #define DISAS_JUMP DISAS_TARGET_0 /* only pc was modified dynamically */ #define DISAS_UPDATE DISAS_TARGET_1 /* cpu state was modified dynamically */ @@ -457,7 +453,6 @@ static void gen_msbu(DisasContext *dc, TCGv srca, TCGv srcb) static bool trans_l_add(DisasContext *dc, arg_dab *a, uint32_t insn) { - LOG_DIS("l.add r%d, r%d, r%d\n", a->d, a->a, a->b); check_r0_write(a->d); gen_add(dc, cpu_R[a->d], cpu_R[a->a], cpu_R[a->b]); return true; @@ -465,7 +460,6 @@ static bool trans_l_add(DisasContext *dc, arg_dab *a, uint32_t insn) static bool trans_l_addc(DisasContext *dc, arg_dab *a, uint32_t insn) { - LOG_DIS("l.addc r%d, r%d, r%d\n", a->d, a->a, a->b); check_r0_write(a->d); gen_addc(dc, cpu_R[a->d], cpu_R[a->a], cpu_R[a->b]); return true; @@ -473,7 +467,6 @@ static bool trans_l_addc(DisasContext *dc, arg_dab *a, uint32_t insn) static bool trans_l_sub(DisasContext *dc, arg_dab *a, uint32_t insn) { - LOG_DIS("l.sub r%d, r%d, r%d\n", a->d, a->a, a->b); check_r0_write(a->d); gen_sub(dc, cpu_R[a->d], cpu_R[a->a], cpu_R[a->b]); return true; @@ -481,7 +474,6 @@ static bool trans_l_sub(DisasContext *dc, arg_dab *a, uint32_t insn) static bool trans_l_and(DisasContext *dc, arg_dab *a, uint32_t insn) { - LOG_DIS("l.and r%d, r%d, r%d\n", a->d, a->a, a->b); check_r0_write(a->d); tcg_gen_and_tl(cpu_R[a->d], cpu_R[a->a], cpu_R[a->b]); return true; @@ -489,7 +481,6 @@ static bool trans_l_and(DisasContext *dc, arg_dab *a, uint32_t insn) static bool trans_l_or(DisasContext *dc, arg_dab *a, uint32_t insn) { - LOG_DIS("l.or r%d, r%d, r%d\n", a->d, a->a, a->b); check_r0_write(a->d); tcg_gen_or_tl(cpu_R[a->d], cpu_R[a->a], cpu_R[a->b]); return true; @@ -497,7 +488,6 @@ static bool trans_l_or(DisasContext *dc, arg_dab *a, uint32_t insn) static bool trans_l_xor(DisasContext *dc, arg_dab *a, uint32_t insn) { - LOG_DIS("l.xor r%d, r%d, r%d\n", a->d, a->a, a->b); check_r0_write(a->d); tcg_gen_xor_tl(cpu_R[a->d], cpu_R[a->a], cpu_R[a->b]); return true; @@ -505,7 +495,6 @@ static bool trans_l_xor(DisasContext *dc, arg_dab *a, uint32_t insn) static bool trans_l_sll(DisasContext *dc, arg_dab *a, uint32_t insn) { - LOG_DIS("l.sll r%d, r%d, r%d\n", a->d, a->a, a->b); check_r0_write(a->d); tcg_gen_shl_tl(cpu_R[a->d], cpu_R[a->a], cpu_R[a->b]); return true; @@ -513,7 +502,6 @@ static bool trans_l_sll(DisasContext *dc, arg_dab *a, uint32_t insn) static bool trans_l_srl(DisasContext *dc, arg_dab *a, uint32_t insn) { - LOG_DIS("l.srl r%d, r%d, r%d\n", a->d, a->a, a->b); check_r0_write(a->d); tcg_gen_shr_tl(cpu_R[a->d], cpu_R[a->a], cpu_R[a->b]); return true; @@ -521,7 +509,6 @@ static bool trans_l_srl(DisasContext *dc, arg_dab *a, uint32_t insn) static bool trans_l_sra(DisasContext *dc, arg_dab *a, uint32_t insn) { - LOG_DIS("l.sra r%d, r%d, r%d\n", a->d, a->a, a->b); check_r0_write(a->d); tcg_gen_sar_tl(cpu_R[a->d], cpu_R[a->a], cpu_R[a->b]); return true; @@ -529,7 +516,6 @@ static bool trans_l_sra(DisasContext *dc, arg_dab *a, uint32_t insn) static bool trans_l_ror(DisasContext *dc, arg_dab *a, uint32_t insn) { - LOG_DIS("l.ror r%d, r%d, r%d\n", a->d, a->a, a->b); check_r0_write(a->d); tcg_gen_rotr_tl(cpu_R[a->d], cpu_R[a->a], cpu_R[a->b]); return true; @@ -537,7 +523,6 @@ static bool trans_l_ror(DisasContext *dc, arg_dab *a, uint32_t insn) static bool trans_l_exths(DisasContext *dc, arg_da *a, uint32_t insn) { - LOG_DIS("l.exths r%d, r%d\n", a->d, a->a); check_r0_write(a->d); tcg_gen_ext16s_tl(cpu_R[a->d], cpu_R[a->a]); return true; @@ -545,7 +530,6 @@ static bool trans_l_exths(DisasContext *dc, arg_da *a, uint32_t insn) static bool trans_l_extbs(DisasContext *dc, arg_da *a, uint32_t insn) { - LOG_DIS("l.extbs r%d, r%d\n", a->d, a->a); check_r0_write(a->d); tcg_gen_ext8s_tl(cpu_R[a->d], cpu_R[a->a]); return true; @@ -553,7 +537,6 @@ static bool trans_l_extbs(DisasContext *dc, arg_da *a, uint32_t insn) static bool trans_l_exthz(DisasContext *dc, arg_da *a, uint32_t insn) { - LOG_DIS("l.exthz r%d, r%d\n", a->d, a->a); check_r0_write(a->d); tcg_gen_ext16u_tl(cpu_R[a->d], cpu_R[a->a]); return true; @@ -561,7 +544,6 @@ static bool trans_l_exthz(DisasContext *dc, arg_da *a, uint32_t insn) static bool trans_l_extbz(DisasContext *dc, arg_da *a, uint32_t insn) { - LOG_DIS("l.extbz r%d, r%d\n", a->d, a->a); check_r0_write(a->d); tcg_gen_ext8u_tl(cpu_R[a->d], cpu_R[a->a]); return true; @@ -570,7 +552,6 @@ static bool trans_l_extbz(DisasContext *dc, arg_da *a, uint32_t insn) static bool trans_l_cmov(DisasContext *dc, arg_dab *a, uint32_t insn) { TCGv zero; - LOG_DIS("l.cmov r%d, r%d, r%d\n", a->d, a->a, a->b); check_r0_write(a->d); zero = tcg_const_tl(0); @@ -582,8 +563,6 @@ static bool trans_l_cmov(DisasContext *dc, arg_dab *a, uint32_t insn) static bool trans_l_ff1(DisasContext *dc, arg_da *a, uint32_t insn) { - LOG_DIS("l.ff1 r%d, r%d\n", a->d, a->a); - check_r0_write(a->d); tcg_gen_ctzi_tl(cpu_R[a->d], cpu_R[a->a], -1); tcg_gen_addi_tl(cpu_R[a->d], cpu_R[a->d], 1); @@ -592,8 +571,6 @@ static bool trans_l_ff1(DisasContext *dc, arg_da *a, uint32_t insn) static bool trans_l_fl1(DisasContext *dc, arg_da *a, uint32_t insn) { - LOG_DIS("l.fl1 r%d, r%d\n", a->d, a->a); - check_r0_write(a->d); tcg_gen_clzi_tl(cpu_R[a->d], cpu_R[a->a], TARGET_LONG_BITS); tcg_gen_subfi_tl(cpu_R[a->d], TARGET_LONG_BITS, cpu_R[a->d]); @@ -602,8 +579,6 @@ static bool trans_l_fl1(DisasContext *dc, arg_da *a, uint32_t insn) static bool trans_l_mul(DisasContext *dc, arg_dab *a, uint32_t insn) { - LOG_DIS("l.mul r%d, r%d, r%d\n", a->d, a->a, a->b); - check_r0_write(a->d); gen_mul(dc, cpu_R[a->d], cpu_R[a->a], cpu_R[a->b]); return true; @@ -611,8 +586,6 @@ static bool trans_l_mul(DisasContext *dc, arg_dab *a, uint32_t insn) static bool trans_l_mulu(DisasContext *dc, arg_dab *a, uint32_t insn) { - LOG_DIS("l.mulu r%d, r%d, r%d\n", a->d, a->a, a->b); - check_r0_write(a->d); gen_mulu(dc, cpu_R[a->d], cpu_R[a->a], cpu_R[a->b]); return true; @@ -620,8 +593,6 @@ static bool trans_l_mulu(DisasContext *dc, arg_dab *a, uint32_t insn) static bool trans_l_div(DisasContext *dc, arg_dab *a, uint32_t insn) { - LOG_DIS("l.div r%d, r%d, r%d\n", a->d, a->a, a->b); - check_r0_write(a->d); gen_div(dc, cpu_R[a->d], cpu_R[a->a], cpu_R[a->b]); return true; @@ -629,8 +600,6 @@ static bool trans_l_div(DisasContext *dc, arg_dab *a, uint32_t insn) static bool trans_l_divu(DisasContext *dc, arg_dab *a, uint32_t insn) { - LOG_DIS("l.divu r%d, r%d, r%d\n", a->d, a->a, a->b); - check_r0_write(a->d); gen_divu(dc, cpu_R[a->d], cpu_R[a->a], cpu_R[a->b]); return true; @@ -638,14 +607,12 @@ static bool trans_l_divu(DisasContext *dc, arg_dab *a, uint32_t insn) static bool trans_l_muld(DisasContext *dc, arg_ab *a, uint32_t insn) { - LOG_DIS("l.muld r%d, r%d\n", a->a, a->b); gen_muld(dc, cpu_R[a->a], cpu_R[a->b]); return true; } static bool trans_l_muldu(DisasContext *dc, arg_ab *a, uint32_t insn) { - LOG_DIS("l.muldu r%d, r%d\n", a->a, a->b); gen_muldu(dc, cpu_R[a->a], cpu_R[a->b]); return true; } @@ -654,7 +621,6 @@ static bool trans_l_j(DisasContext *dc, arg_l_j *a, uint32_t insn) { target_ulong tmp_pc = dc->base.pc_next + a->n * 4; - LOG_DIS("l.j %d\n", a->n); tcg_gen_movi_tl(jmp_pc, tmp_pc); dc->delayed_branch = 2; return true; @@ -665,7 +631,6 @@ static bool trans_l_jal(DisasContext *dc, arg_l_jal *a, uint32_t insn) target_ulong tmp_pc = dc->base.pc_next + a->n * 4; target_ulong ret_pc = dc->base.pc_next + 8; - LOG_DIS("l.jal %d\n", a->n); tcg_gen_movi_tl(cpu_R[9], ret_pc); /* Optimize jal being used to load the PC for PIC. */ if (tmp_pc != ret_pc) { @@ -692,21 +657,18 @@ static void do_bf(DisasContext *dc, arg_l_bf *a, TCGCond cond) static bool trans_l_bf(DisasContext *dc, arg_l_bf *a, uint32_t insn) { - LOG_DIS("l.bf %d\n", a->n); do_bf(dc, a, TCG_COND_NE); return true; } static bool trans_l_bnf(DisasContext *dc, arg_l_bf *a, uint32_t insn) { - LOG_DIS("l.bnf %d\n", a->n); do_bf(dc, a, TCG_COND_EQ); return true; } static bool trans_l_jr(DisasContext *dc, arg_l_jr *a, uint32_t insn) { - LOG_DIS("l.jr r%d\n", a->b); tcg_gen_mov_tl(jmp_pc, cpu_R[a->b]); dc->delayed_branch = 2; return true; @@ -714,7 +676,6 @@ static bool trans_l_jr(DisasContext *dc, arg_l_jr *a, uint32_t insn) static bool trans_l_jalr(DisasContext *dc, arg_l_jalr *a, uint32_t insn) { - LOG_DIS("l.jalr r%d\n", a->b); tcg_gen_mov_tl(jmp_pc, cpu_R[a->b]); tcg_gen_movi_tl(cpu_R[9], dc->base.pc_next + 8); dc->delayed_branch = 2; @@ -725,8 +686,6 @@ static bool trans_l_lwa(DisasContext *dc, arg_load *a, uint32_t insn) { TCGv ea; - LOG_DIS("l.lwa r%d, r%d, %d\n", a->d, a->a, a->i); - check_r0_write(a->d); ea = tcg_temp_new(); tcg_gen_addi_tl(ea, cpu_R[a->a], a->i); @@ -750,42 +709,36 @@ static void do_load(DisasContext *dc, arg_load *a, TCGMemOp mop) static bool trans_l_lwz(DisasContext *dc, arg_load *a, uint32_t insn) { - LOG_DIS("l.lwz r%d, r%d, %d\n", a->d, a->a, a->i); do_load(dc, a, MO_TEUL); return true; } static bool trans_l_lws(DisasContext *dc, arg_load *a, uint32_t insn) { - LOG_DIS("l.lws r%d, r%d, %d\n", a->d, a->a, a->i); do_load(dc, a, MO_TESL); return true; } static bool trans_l_lbz(DisasContext *dc, arg_load *a, uint32_t insn) { - LOG_DIS("l.lbz r%d, r%d, %d\n", a->d, a->a, a->i); do_load(dc, a, MO_UB); return true; } static bool trans_l_lbs(DisasContext *dc, arg_load *a, uint32_t insn) { - LOG_DIS("l.lbs r%d, r%d, %d\n", a->d, a->a, a->i); do_load(dc, a, MO_SB); return true; } static bool trans_l_lhz(DisasContext *dc, arg_load *a, uint32_t insn) { - LOG_DIS("l.lhz r%d, r%d, %d\n", a->d, a->a, a->i); do_load(dc, a, MO_TEUW); return true; } static bool trans_l_lhs(DisasContext *dc, arg_load *a, uint32_t insn) { - LOG_DIS("l.lhs r%d, r%d, %d\n", a->d, a->a, a->i); do_load(dc, a, MO_TESW); return true; } @@ -795,8 +748,6 @@ static bool trans_l_swa(DisasContext *dc, arg_store *a, uint32_t insn) TCGv ea, val; TCGLabel *lab_fail, *lab_done; - LOG_DIS("l.swa r%d, r%d, %d\n", a->a, a->b, a->i); - ea = tcg_temp_new(); tcg_gen_addi_tl(ea, cpu_R[a->a], a->i); @@ -837,28 +788,24 @@ static void do_store(DisasContext *dc, arg_store *a, TCGMemOp mop) static bool trans_l_sw(DisasContext *dc, arg_store *a, uint32_t insn) { - LOG_DIS("l.sw r%d, r%d, %d\n", a->a, a->b, a->i); do_store(dc, a, MO_TEUL); return true; } static bool trans_l_sb(DisasContext *dc, arg_store *a, uint32_t insn) { - LOG_DIS("l.sb r%d, r%d, %d\n", a->a, a->b, a->i); do_store(dc, a, MO_UB); return true; } static bool trans_l_sh(DisasContext *dc, arg_store *a, uint32_t insn) { - LOG_DIS("l.sh r%d, r%d, %d\n", a->a, a->b, a->i); do_store(dc, a, MO_TEUW); return true; } static bool trans_l_nop(DisasContext *dc, arg_l_nop *a, uint32_t insn) { - LOG_DIS("l.nop %d\n", a->k); return true; } @@ -866,7 +813,6 @@ static bool trans_l_addi(DisasContext *dc, arg_rri *a, uint32_t insn) { TCGv t0; - LOG_DIS("l.addi r%d, r%d, %d\n", a->d, a->a, a->i); check_r0_write(a->d); t0 = tcg_const_tl(a->i); gen_add(dc, cpu_R[a->d], cpu_R[a->a], t0); @@ -878,7 +824,6 @@ static bool trans_l_addic(DisasContext *dc, arg_rri *a, uint32_t insn) { TCGv t0; - LOG_DIS("l.addic r%d, r%d, %d\n", a->d, a->a, a->i); check_r0_write(a->d); t0 = tcg_const_tl(a->i); gen_addc(dc, cpu_R[a->d], cpu_R[a->a], t0); @@ -890,7 +835,6 @@ static bool trans_l_muli(DisasContext *dc, arg_rri *a, uint32_t insn) { TCGv t0; - LOG_DIS("l.muli r%d, r%d, %d\n", a->d, a->a, a->i); check_r0_write(a->d); t0 = tcg_const_tl(a->i); gen_mul(dc, cpu_R[a->d], cpu_R[a->a], t0); @@ -902,7 +846,6 @@ static bool trans_l_maci(DisasContext *dc, arg_l_maci *a, uint32_t insn) { TCGv t0; - LOG_DIS("l.maci r%d, %d\n", a->a, a->i); t0 = tcg_const_tl(a->i); gen_mac(dc, cpu_R[a->a], t0); tcg_temp_free(t0); @@ -911,7 +854,6 @@ static bool trans_l_maci(DisasContext *dc, arg_l_maci *a, uint32_t insn) static bool trans_l_andi(DisasContext *dc, arg_rrk *a, uint32_t insn) { - LOG_DIS("l.andi r%d, r%d, %d\n", a->d, a->a, a->k); check_r0_write(a->d); tcg_gen_andi_tl(cpu_R[a->d], cpu_R[a->a], a->k); return true; @@ -919,7 +861,6 @@ static bool trans_l_andi(DisasContext *dc, arg_rrk *a, uint32_t insn) static bool trans_l_ori(DisasContext *dc, arg_rrk *a, uint32_t insn) { - LOG_DIS("l.ori r%d, r%d, %d\n", a->d, a->a, a->k); check_r0_write(a->d); tcg_gen_ori_tl(cpu_R[a->d], cpu_R[a->a], a->k); return true; @@ -927,7 +868,6 @@ static bool trans_l_ori(DisasContext *dc, arg_rrk *a, uint32_t insn) static bool trans_l_xori(DisasContext *dc, arg_rri *a, uint32_t insn) { - LOG_DIS("l.xori r%d, r%d, %d\n", a->d, a->a, a->i); check_r0_write(a->d); tcg_gen_xori_tl(cpu_R[a->d], cpu_R[a->a], a->i); return true; @@ -935,7 +875,6 @@ static bool trans_l_xori(DisasContext *dc, arg_rri *a, uint32_t insn) static bool trans_l_mfspr(DisasContext *dc, arg_l_mfspr *a, uint32_t insn) { - LOG_DIS("l.mfspr r%d, r%d, %d\n", a->d, a->a, a->k); check_r0_write(a->d); #ifdef CONFIG_USER_ONLY @@ -954,8 +893,6 @@ static bool trans_l_mfspr(DisasContext *dc, arg_l_mfspr *a, uint32_t insn) static bool trans_l_mtspr(DisasContext *dc, arg_l_mtspr *a, uint32_t insn) { - LOG_DIS("l.mtspr r%d, r%d, %d\n", a->a, a->b, a->k); - #ifdef CONFIG_USER_ONLY gen_illegal_exception(dc); #else @@ -972,35 +909,30 @@ static bool trans_l_mtspr(DisasContext *dc, arg_l_mtspr *a, uint32_t insn) static bool trans_l_mac(DisasContext *dc, arg_ab *a, uint32_t insn) { - LOG_DIS("l.mac r%d, r%d\n", a->a, a->b); gen_mac(dc, cpu_R[a->a], cpu_R[a->b]); return true; } static bool trans_l_msb(DisasContext *dc, arg_ab *a, uint32_t insn) { - LOG_DIS("l.msb r%d, r%d\n", a->a, a->b); gen_msb(dc, cpu_R[a->a], cpu_R[a->b]); return true; } static bool trans_l_macu(DisasContext *dc, arg_ab *a, uint32_t insn) { - LOG_DIS("l.mac r%d, r%d\n", a->a, a->b); gen_macu(dc, cpu_R[a->a], cpu_R[a->b]); return true; } static bool trans_l_msbu(DisasContext *dc, arg_ab *a, uint32_t insn) { - LOG_DIS("l.msb r%d, r%d\n", a->a, a->b); gen_msbu(dc, cpu_R[a->a], cpu_R[a->b]); return true; } static bool trans_l_slli(DisasContext *dc, arg_dal *a, uint32_t insn) { - LOG_DIS("l.slli r%d, r%d, %d\n", a->d, a->a, a->l); check_r0_write(a->d); tcg_gen_shli_tl(cpu_R[a->d], cpu_R[a->a], a->l & (TARGET_LONG_BITS - 1)); return true; @@ -1008,7 +940,6 @@ static bool trans_l_slli(DisasContext *dc, arg_dal *a, uint32_t insn) static bool trans_l_srli(DisasContext *dc, arg_dal *a, uint32_t insn) { - LOG_DIS("l.srli r%d, r%d, %d\n", a->d, a->a, a->l); check_r0_write(a->d); tcg_gen_shri_tl(cpu_R[a->d], cpu_R[a->a], a->l & (TARGET_LONG_BITS - 1)); return true; @@ -1016,7 +947,6 @@ static bool trans_l_srli(DisasContext *dc, arg_dal *a, uint32_t insn) static bool trans_l_srai(DisasContext *dc, arg_dal *a, uint32_t insn) { - LOG_DIS("l.srai r%d, r%d, %d\n", a->d, a->a, a->l); check_r0_write(a->d); tcg_gen_sari_tl(cpu_R[a->d], cpu_R[a->a], a->l & (TARGET_LONG_BITS - 1)); return true; @@ -1024,7 +954,6 @@ static bool trans_l_srai(DisasContext *dc, arg_dal *a, uint32_t insn) static bool trans_l_rori(DisasContext *dc, arg_dal *a, uint32_t insn) { - LOG_DIS("l.rori r%d, r%d, %d\n", a->d, a->a, a->l); check_r0_write(a->d); tcg_gen_rotri_tl(cpu_R[a->d], cpu_R[a->a], a->l & (TARGET_LONG_BITS - 1)); return true; @@ -1032,7 +961,6 @@ static bool trans_l_rori(DisasContext *dc, arg_dal *a, uint32_t insn) static bool trans_l_movhi(DisasContext *dc, arg_l_movhi *a, uint32_t insn) { - LOG_DIS("l.movhi r%d, %d\n", a->d, a->k); check_r0_write(a->d); tcg_gen_movi_tl(cpu_R[a->d], a->k << 16); return true; @@ -1040,7 +968,6 @@ static bool trans_l_movhi(DisasContext *dc, arg_l_movhi *a, uint32_t insn) static bool trans_l_macrc(DisasContext *dc, arg_l_macrc *a, uint32_t insn) { - LOG_DIS("l.macrc r%d\n", a->d); check_r0_write(a->d); tcg_gen_trunc_i64_tl(cpu_R[a->d], cpu_mac); tcg_gen_movi_i64(cpu_mac, 0); @@ -1049,147 +976,126 @@ static bool trans_l_macrc(DisasContext *dc, arg_l_macrc *a, uint32_t insn) static bool trans_l_sfeq(DisasContext *dc, arg_ab *a, TCGCond cond) { - LOG_DIS("l.sfeq r%d, r%d\n", a->a, a->b); tcg_gen_setcond_tl(TCG_COND_EQ, cpu_sr_f, cpu_R[a->a], cpu_R[a->b]); return true; } static bool trans_l_sfne(DisasContext *dc, arg_ab *a, TCGCond cond) { - LOG_DIS("l.sfne r%d, r%d\n", a->a, a->b); tcg_gen_setcond_tl(TCG_COND_NE, cpu_sr_f, cpu_R[a->a], cpu_R[a->b]); return true; } static bool trans_l_sfgtu(DisasContext *dc, arg_ab *a, TCGCond cond) { - LOG_DIS("l.sfgtu r%d, r%d\n", a->a, a->b); tcg_gen_setcond_tl(TCG_COND_GTU, cpu_sr_f, cpu_R[a->a], cpu_R[a->b]); return true; } static bool trans_l_sfgeu(DisasContext *dc, arg_ab *a, TCGCond cond) { - LOG_DIS("l.sfgeu r%d, r%d\n", a->a, a->b); tcg_gen_setcond_tl(TCG_COND_GEU, cpu_sr_f, cpu_R[a->a], cpu_R[a->b]); return true; } static bool trans_l_sfltu(DisasContext *dc, arg_ab *a, TCGCond cond) { - LOG_DIS("l.sfltu r%d, r%d\n", a->a, a->b); tcg_gen_setcond_tl(TCG_COND_LTU, cpu_sr_f, cpu_R[a->a], cpu_R[a->b]); return true; } static bool trans_l_sfleu(DisasContext *dc, arg_ab *a, TCGCond cond) { - LOG_DIS("l.sfleu r%d, r%d\n", a->a, a->b); tcg_gen_setcond_tl(TCG_COND_LEU, cpu_sr_f, cpu_R[a->a], cpu_R[a->b]); return true; } static bool trans_l_sfgts(DisasContext *dc, arg_ab *a, TCGCond cond) { - LOG_DIS("l.sfgts r%d, r%d\n", a->a, a->b); tcg_gen_setcond_tl(TCG_COND_GT, cpu_sr_f, cpu_R[a->a], cpu_R[a->b]); return true; } static bool trans_l_sfges(DisasContext *dc, arg_ab *a, TCGCond cond) { - LOG_DIS("l.sfges r%d, r%d\n", a->a, a->b); tcg_gen_setcond_tl(TCG_COND_GE, cpu_sr_f, cpu_R[a->a], cpu_R[a->b]); return true; } static bool trans_l_sflts(DisasContext *dc, arg_ab *a, TCGCond cond) { - LOG_DIS("l.sflts r%d, r%d\n", a->a, a->b); tcg_gen_setcond_tl(TCG_COND_LT, cpu_sr_f, cpu_R[a->a], cpu_R[a->b]); return true; } static bool trans_l_sfles(DisasContext *dc, arg_ab *a, TCGCond cond) { - LOG_DIS("l.sfles r%d, r%d\n", a->a, a->b); tcg_gen_setcond_tl(TCG_COND_LE, cpu_sr_f, cpu_R[a->a], cpu_R[a->b]); return true; } static bool trans_l_sfeqi(DisasContext *dc, arg_ai *a, TCGCond cond) { - LOG_DIS("l.sfeqi r%d, %d\n", a->a, a->i); tcg_gen_setcondi_tl(TCG_COND_EQ, cpu_sr_f, cpu_R[a->a], a->i); return true; } static bool trans_l_sfnei(DisasContext *dc, arg_ai *a, TCGCond cond) { - LOG_DIS("l.sfnei r%d, %d\n", a->a, a->i); tcg_gen_setcondi_tl(TCG_COND_NE, cpu_sr_f, cpu_R[a->a], a->i); return true; } static bool trans_l_sfgtui(DisasContext *dc, arg_ai *a, TCGCond cond) { - LOG_DIS("l.sfgtui r%d, %d\n", a->a, a->i); tcg_gen_setcondi_tl(TCG_COND_GTU, cpu_sr_f, cpu_R[a->a], a->i); return true; } static bool trans_l_sfgeui(DisasContext *dc, arg_ai *a, TCGCond cond) { - LOG_DIS("l.sfgeui r%d, %d\n", a->a, a->i); tcg_gen_setcondi_tl(TCG_COND_GEU, cpu_sr_f, cpu_R[a->a], a->i); return true; } static bool trans_l_sfltui(DisasContext *dc, arg_ai *a, TCGCond cond) { - LOG_DIS("l.sfltui r%d, %d\n", a->a, a->i); tcg_gen_setcondi_tl(TCG_COND_LTU, cpu_sr_f, cpu_R[a->a], a->i); return true; } static bool trans_l_sfleui(DisasContext *dc, arg_ai *a, TCGCond cond) { - LOG_DIS("l.sfleui r%d, %d\n", a->a, a->i); tcg_gen_setcondi_tl(TCG_COND_LEU, cpu_sr_f, cpu_R[a->a], a->i); return true; } static bool trans_l_sfgtsi(DisasContext *dc, arg_ai *a, TCGCond cond) { - LOG_DIS("l.sfgtsi r%d, %d\n", a->a, a->i); tcg_gen_setcondi_tl(TCG_COND_GT, cpu_sr_f, cpu_R[a->a], a->i); return true; } static bool trans_l_sfgesi(DisasContext *dc, arg_ai *a, TCGCond cond) { - LOG_DIS("l.sfgesi r%d, %d\n", a->a, a->i); tcg_gen_setcondi_tl(TCG_COND_GE, cpu_sr_f, cpu_R[a->a], a->i); return true; } static bool trans_l_sfltsi(DisasContext *dc, arg_ai *a, TCGCond cond) { - LOG_DIS("l.sfltsi r%d, %d\n", a->a, a->i); tcg_gen_setcondi_tl(TCG_COND_LT, cpu_sr_f, cpu_R[a->a], a->i); return true; } static bool trans_l_sflesi(DisasContext *dc, arg_ai *a, TCGCond cond) { - LOG_DIS("l.sflesi r%d, %d\n", a->a, a->i); tcg_gen_setcondi_tl(TCG_COND_LE, cpu_sr_f, cpu_R[a->a], a->i); return true; } static bool trans_l_sys(DisasContext *dc, arg_l_sys *a, uint32_t insn) { - LOG_DIS("l.sys %d\n", a->k); tcg_gen_movi_tl(cpu_pc, dc->base.pc_next); gen_exception(dc, EXCP_SYSCALL); dc->base.is_jmp = DISAS_NORETURN; @@ -1198,7 +1104,6 @@ static bool trans_l_sys(DisasContext *dc, arg_l_sys *a, uint32_t insn) static bool trans_l_trap(DisasContext *dc, arg_l_trap *a, uint32_t insn) { - LOG_DIS("l.trap %d\n", a->k); tcg_gen_movi_tl(cpu_pc, dc->base.pc_next); gen_exception(dc, EXCP_TRAP); dc->base.is_jmp = DISAS_NORETURN; @@ -1207,27 +1112,22 @@ static bool trans_l_trap(DisasContext *dc, arg_l_trap *a, uint32_t insn) static bool trans_l_msync(DisasContext *dc, arg_l_msync *a, uint32_t insn) { - LOG_DIS("l.msync\n"); tcg_gen_mb(TCG_MO_ALL); return true; } static bool trans_l_psync(DisasContext *dc, arg_l_psync *a, uint32_t insn) { - LOG_DIS("l.psync\n"); return true; } static bool trans_l_csync(DisasContext *dc, arg_l_csync *a, uint32_t insn) { - LOG_DIS("l.csync\n"); return true; } static bool trans_l_rfe(DisasContext *dc, arg_l_rfe *a, uint32_t insn) { - LOG_DIS("l.rfe\n"); - #ifdef CONFIG_USER_ONLY gen_illegal_exception(dc); #else @@ -1274,56 +1174,48 @@ static void do_fpcmp(DisasContext *dc, arg_ab *a, static bool trans_lf_add_s(DisasContext *dc, arg_dab *a, uint32_t insn) { - LOG_DIS("lf.add.s r%d, r%d, r%d\n", a->d, a->a, a->b); do_fp3(dc, a, gen_helper_float_add_s); return true; } static bool trans_lf_sub_s(DisasContext *dc, arg_dab *a, uint32_t insn) { - LOG_DIS("lf.sub.s r%d, r%d, r%d\n", a->d, a->a, a->b); do_fp3(dc, a, gen_helper_float_sub_s); return true; } static bool trans_lf_mul_s(DisasContext *dc, arg_dab *a, uint32_t insn) { - LOG_DIS("lf.mul.s r%d, r%d, r%d\n", a->d, a->a, a->b); do_fp3(dc, a, gen_helper_float_mul_s); return true; } static bool trans_lf_div_s(DisasContext *dc, arg_dab *a, uint32_t insn) { - LOG_DIS("lf.div.s r%d, r%d, r%d\n", a->d, a->a, a->b); do_fp3(dc, a, gen_helper_float_div_s); return true; } static bool trans_lf_rem_s(DisasContext *dc, arg_dab *a, uint32_t insn) { - LOG_DIS("lf.rem.s r%d, r%d, r%d\n", a->d, a->a, a->b); do_fp3(dc, a, gen_helper_float_rem_s); return true; } static bool trans_lf_itof_s(DisasContext *dc, arg_da *a, uint32_t insn) { - LOG_DIS("lf.itof.s r%d, r%d\n", a->d, a->a); do_fp2(dc, a, gen_helper_itofs); return true; } static bool trans_lf_ftoi_s(DisasContext *dc, arg_da *a, uint32_t insn) { - LOG_DIS("lf.ftoi.s r%d, r%d\n", a->d, a->a); do_fp2(dc, a, gen_helper_ftois); return true; } static bool trans_lf_madd_s(DisasContext *dc, arg_dab *a, uint32_t insn) { - LOG_DIS("lf.madd.s r%d, r%d, r%d\n", a->d, a->a, a->b); check_r0_write(a->d); gen_helper_float_madd_s(cpu_R[a->d], cpu_env, cpu_R[a->d], cpu_R[a->a], cpu_R[a->b]); @@ -1333,42 +1225,36 @@ static bool trans_lf_madd_s(DisasContext *dc, arg_dab *a, uint32_t insn) static bool trans_lf_sfeq_s(DisasContext *dc, arg_ab *a, uint32_t insn) { - LOG_DIS("lf.sfeq.s r%d, r%d\n", a->a, a->b); do_fpcmp(dc, a, gen_helper_float_eq_s, false, false); return true; } static bool trans_lf_sfne_s(DisasContext *dc, arg_ab *a, uint32_t insn) { - LOG_DIS("lf.sfne.s r%d, r%d\n", a->a, a->b); do_fpcmp(dc, a, gen_helper_float_eq_s, true, false); return true; } static bool trans_lf_sfgt_s(DisasContext *dc, arg_ab *a, uint32_t insn) { - LOG_DIS("lf.sfgt.s r%d, r%d\n", a->a, a->b); do_fpcmp(dc, a, gen_helper_float_lt_s, false, true); return true; } static bool trans_lf_sfge_s(DisasContext *dc, arg_ab *a, uint32_t insn) { - LOG_DIS("lf.sfge.s r%d, r%d\n", a->a, a->b); do_fpcmp(dc, a, gen_helper_float_le_s, false, true); return true; } static bool trans_lf_sflt_s(DisasContext *dc, arg_ab *a, uint32_t insn) { - LOG_DIS("lf.sflt.s r%d, r%d\n", a->a, a->b); do_fpcmp(dc, a, gen_helper_float_lt_s, false, false); return true; } static bool trans_lf_sfle_s(DisasContext *dc, arg_ab *a, uint32_t insn) { - LOG_DIS("lf.sfle.s r%d, r%d\n", a->a, a->b); do_fpcmp(dc, a, gen_helper_float_le_s, false, false); return true; } From patchwork Mon Jul 2 13:57:44 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 140755 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp4037137ljj; Mon, 2 Jul 2018 07:04:11 -0700 (PDT) X-Google-Smtp-Source: AAOMgpeOHUt4xy3s149ovnGzhNeAgpf9zE7uUwLItKY/EBudalHB2zQl22GQ5H1K5vehULRl5X8K X-Received: by 2002:a0c:e94e:: with SMTP id n14-v6mr12035336qvo.84.1530540251809; Mon, 02 Jul 2018 07:04:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530540251; cv=none; d=google.com; s=arc-20160816; b=edIQrFxhLtq2hW/AGP5untg8CLYBeIRIu8qvCAfrQvAoiskFiToGSNWXlxCrm3SmHx 5Oi2a67m1GLXKpDP0NagiWmmeNT6ujMkGzJvM2AT2Qmif1vyfJkyZJpQtCqa/WcYeee3 zieSfIOKvZ4CG9DAydFS1oF2urM6zF/OKQSo2F2bQL/WeaTln8cfODCNFAOBcYp7xJs3 Tn3S67VC+Z7/Y10B7smFrnWjrYXQlVHM+7YbDyYhCw68bog300Xz+6O8abZTk/8T2ChX VoLG0UQ+k6EuW6rVHLZiS92sg/U87GBDUOCy169zZKQ5Ejskdgo/kS+jGth6aLkfYUHM kq5g== 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 :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:arc-authentication-results; bh=Zf+D1raeWsoWAsHnT7ef46EOTupNmWqr70cskO2ieC0=; b=K9V2mWy1MTbcgHV93IMuLSvsmVPFW6TGGH2G4BtN5UmeBIAPixDbEVKbdSblTIFsXG feXj+Z9f6bvYfiYTGL3ZYxOS65Khv8URLe8s1sfiFV65e1/ksxXNNwxlrhGKBY4Z6a87 lDE25WQxczZ/izdjydWBeieR3gOUpRH5POIgh6tSp7DqM/g8A35rEQwGQScP/+VCyhIU H1aoa0k/BeE1SdrO7IHk2umaC5RV1L71F370omABRaj6a6xUB2q7N0aGBrYNATGUXVru y3khmHgeJ7d7kGYtFZwtFnL4tO3+ByO8xg2GoQtPiLEpPDSRUHoZ0HONkJ3VZFEOJWJk 94YA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=WOMSxSE4; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id q30-v6si36458qtd.148.2018.07.02.07.04.11 for (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 02 Jul 2018 07:04:11 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=WOMSxSE4; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from localhost ([::1]:32960 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzR5-0005kr-5l for patch@linaro.org; Mon, 02 Jul 2018 10:04:11 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47218) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzLS-0002AA-I8 for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fZzLR-0007sc-Mj for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:22 -0400 Received: from mail-pl0-x22c.google.com ([2607:f8b0:400e:c01::22c]:46719) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fZzLR-0007sK-HD for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:21 -0400 Received: by mail-pl0-x22c.google.com with SMTP id 30-v6so7999943pld.13 for ; Mon, 02 Jul 2018 06:58:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Zf+D1raeWsoWAsHnT7ef46EOTupNmWqr70cskO2ieC0=; b=WOMSxSE4vhYYTpYFYKjKqRLlNSakkOrNwFynD7ywt+xOcrrsQC+mfGQ6XRKYri4JVQ eY2NRB8SGZKD9z4hkhXIQYqp3vUlv/4GclH4OOHhXpJ8Z0LYwpjx+BAKwVCwk2hHejf7 R5uUqLunjTFR2vWuqNmYYlAj60aWklmuukbXi9O5Sgp6rmggQdCRSE0EwMeew8mkXAx9 f5lMwP7VQ/8P11GWU5GJrQgok5RhGSNjSx+3+vw46JkNRYgLL+GTuhDY4x1P/1JZSKFt F2500LMLKzLfzqjxwLe7hgSUqIffoxeTk3qmRlQk144Y+1tTXjl8F1M1v3n9o/zWNgHK aApg== 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:mime-version:content-transfer-encoding; bh=Zf+D1raeWsoWAsHnT7ef46EOTupNmWqr70cskO2ieC0=; b=U9ynIhwAiQITgVI+Qd+Y04AJkpyfzX+6KWmPu7D4smUKv+Wmprr4XX7Uxasw46/lsy fjLTrykVeQYuVuPImtoF86cVJXRbVe1TSdwDJBhqaRr2ZdCVdTUI7KfCWnhi8nCsoCWa kt/MEIp3tV5NYIYe4NhE18UX3Z9/U/LvAkqYDlK8KsnaNpcn+dmeBh7KyC9H6sR91K/l 8Ecq0XkDjtZ3Pd7mYeP/RChUioS2EPfRbPeeohHa4UoAPoBKftg/Iml3duEh2gkKRE6w K8GVk8pO8wpXkMMN17AObc02J7tlJXHmKN/0e+4D1DSLbL0af05mGmBzR5Oce7WAClT+ tbvg== X-Gm-Message-State: APt69E1IbYvmCWwBsQ6Q2pDhHPk0Yl8CjWZosd4XeDGx+BZU8dAz9OHk ZQaVUVlQ4anAxB0Lavq0skk= X-Received: by 2002:a17:902:7790:: with SMTP id o16-v6mr21377009pll.130.1530539900527; Mon, 02 Jul 2018 06:58:20 -0700 (PDT) Received: from localhost (g90.124-44-6.ppp.wakwak.ne.jp. [124.44.6.90]) by smtp.gmail.com with ESMTPSA id p12-v6sm5628601pfj.21.2018.07.02.06.58.19 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 02 Jul 2018 06:58:20 -0700 (PDT) From: Stafford Horne To: Peter Maydell Date: Mon, 2 Jul 2018 22:57:44 +0900 Message-Id: <20180702135806.7087-4-shorne@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180702135806.7087-1-shorne@gmail.com> References: <20180702135806.7087-1-shorne@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c01::22c Subject: [Qemu-devel] [PULL 03/25] target/openrisc: Log interrupts 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: Stafford Horne , Richard Henderson , QEMU Development Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: Richard Henderson Signed-off-by: Stafford Horne --- target/openrisc/interrupt.c | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) -- 2.17.0 diff --git a/target/openrisc/interrupt.c b/target/openrisc/interrupt.c index 3959671c59..25351d5de3 100644 --- a/target/openrisc/interrupt.c +++ b/target/openrisc/interrupt.c @@ -32,6 +32,7 @@ void openrisc_cpu_do_interrupt(CPUState *cs) #ifndef CONFIG_USER_ONLY OpenRISCCPU *cpu = OPENRISC_CPU(cs); CPUOpenRISCState *env = &cpu->env; + int exception = cs->exception_index; env->epcr = env->pc; if (env->dflag) { @@ -41,12 +42,12 @@ void openrisc_cpu_do_interrupt(CPUState *cs) } else { env->sr &= ~SR_DSX; } - if (cs->exception_index == EXCP_SYSCALL) { + if (exception == EXCP_SYSCALL) { env->epcr += 4; } /* When we have an illegal instruction the error effective address shall be set to the illegal instruction address. */ - if (cs->exception_index == EXCP_ILLEGAL) { + if (exception == EXCP_ILLEGAL) { env->eear = env->pc; } @@ -66,8 +67,27 @@ void openrisc_cpu_do_interrupt(CPUState *cs) env->tlb->cpu_openrisc_map_address_code = &cpu_openrisc_get_phys_nommu; env->lock_addr = -1; - if (cs->exception_index > 0 && cs->exception_index < EXCP_NR) { - hwaddr vect_pc = cs->exception_index << 8; + if (exception > 0 && exception < EXCP_NR) { + static const char * const int_name[EXCP_NR] = { + [EXCP_RESET] = "RESET", + [EXCP_BUSERR] = "BUSERR (bus error)", + [EXCP_DPF] = "DFP (data protection fault)", + [EXCP_IPF] = "IPF (code protection fault)", + [EXCP_TICK] = "TICK (timer interrupt)", + [EXCP_ALIGN] = "ALIGN", + [EXCP_ILLEGAL] = "ILLEGAL", + [EXCP_INT] = "INT (device interrupt)", + [EXCP_DTLBMISS] = "DTLBMISS (data tlb miss)", + [EXCP_ITLBMISS] = "ITLBMISS (code tlb miss)", + [EXCP_RANGE] = "RANGE", + [EXCP_SYSCALL] = "SYSCALL", + [EXCP_FPE] = "FPE", + [EXCP_TRAP] = "TRAP", + }; + + qemu_log_mask(CPU_LOG_INT, "INT: %s\n", int_name[exception]); + + hwaddr vect_pc = exception << 8; if (env->cpucfgr & CPUCFGR_EVBARP) { vect_pc |= env->evbar; } @@ -76,7 +96,7 @@ void openrisc_cpu_do_interrupt(CPUState *cs) } env->pc = vect_pc; } else { - cpu_abort(cs, "Unhandled exception 0x%x\n", cs->exception_index); + cpu_abort(cs, "Unhandled exception 0x%x\n", exception); } #endif From patchwork Mon Jul 2 13:57:45 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 140758 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp4037790ljj; Mon, 2 Jul 2018 07:04:40 -0700 (PDT) X-Google-Smtp-Source: AAOMgpf3Znb6e1231o2pqJtmEDXd0ZJHdJ4GfsFfJxuNRYJT7sh0YW7izOppNFsiQQvOe9gBaUTa X-Received: by 2002:ac8:84a:: with SMTP id x10-v6mr4981318qth.90.1530540280745; Mon, 02 Jul 2018 07:04:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530540280; cv=none; d=google.com; s=arc-20160816; b=nH8XOEHw9nh5rrzvZeo8EH+4JGI1qJzDm2AiDJ5E/6DTsfhYmfEm1lB7weJdQxdlx/ 0st6vG4nQjuwMvLgBP5/IsQks/W2JUsLkpKSEOjNLswYNwUnS9OK7f/eUylhYfsHZ9s7 zIHqxOSVYE/lUeaWy5izvIWH7rhU/Z9q/N9yEL1irLWnS+KzekL/4W0M9IYHRQoQKoU5 moL46aKQyHRyLgZEswO2C5UKnYpqU+Lm7VLS7jqLf7KQn4t2Q5JEYkEpOUgmXrN1Pyj4 tZRD1cZgZctXoafA2jZvCbny0Hi+/2j5uENOUAkIyDD2D5nxZ5oab0eQwk6uj3MLQObZ IOnw== 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 :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:arc-authentication-results; bh=g6Mduc7hQU9gsvBLzpISCXQ7Roi6dd1EE1YPoIP0Pc4=; b=myja+fUKplwvGhbg3/HXbYlf9osT2jcntlWgU4qcPXbB2WAGBINDknT/uA1cThhIzK RM/PfmsPaGDZiOJStsG43lgfjQma0ub22pnPw1FEOVhzHI+Kzft1xRQRCsPajzryJBNT hfjL2thSlc1zrOgfXh+4GmehKlrXL//GDPh2tltjxljL2j68+y1vNHTnUJEGqYprnPla IX1DCJ1LCdvKEyCnisXW2w7euHXkM/5SBTLuHv87LVmrfNGZ/grP5vOy3xaQgwfPGVB7 Mv8wHPXxnVucaNiMos0I14pA2IBMgQyJch4eTfx7qVrXCsJ6U0lQy4O+5M6ojxdQpefY 52Zw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=Jtyxf1zV; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id k8-v6si1222577qvm.289.2018.07.02.07.04.40 for (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 02 Jul 2018 07:04:40 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=Jtyxf1zV; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from localhost ([::1]:32971 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzRY-0006um-9K for patch@linaro.org; Mon, 02 Jul 2018 10:04:40 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47235) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzLV-0002Cl-P1 for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fZzLU-0007vg-5k for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:25 -0400 Received: from mail-pl0-x241.google.com ([2607:f8b0:400e:c01::241]:34774) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fZzLT-0007uj-W1 for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:24 -0400 Received: by mail-pl0-x241.google.com with SMTP id z9-v6so8007624plo.1 for ; Mon, 02 Jul 2018 06:58:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=g6Mduc7hQU9gsvBLzpISCXQ7Roi6dd1EE1YPoIP0Pc4=; b=Jtyxf1zV25m9WTRooqiMA+Mwz0cnQVJJTO4LQuvDlCgoYYjMEH1PTSLK+MZ5UDSL3L HVk4COe4EzhX002JbsHEQQ0xlO3kH2MBRQiz2kxsIKhKyYu2VZHdYzWHEZE2F7y2lnLK 9lVF/UZ3jDbcnTqTCGIV0BgUSiv+bxB6kvyPG01sLl/iKY7h1VgnWmdKAbxgarNOb4gH D/HpP+zdPoaStK/WsitL7jB+NKBVSjpKzTx7sb/BMufjntWvUZjgGBdOGcQhg+vGQhDP 2jn9uzZK2bfhpdb5072/HkJlwls+ckw7AU/qcgPApT8bCnlCf1BwguFbi4enkkcSobSY AP5g== 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:mime-version:content-transfer-encoding; bh=g6Mduc7hQU9gsvBLzpISCXQ7Roi6dd1EE1YPoIP0Pc4=; b=DZhLnbDrgIfTnb5CDb70rIY8aj8CPKuwuDDlTFuK+Ou7QIOhmeABEYXwOkGjQ9ea6y pvppJXXYtnfpxqP0Q4vHXbByEIZ2jsHNLWBhEELcn5aMarAilCs+pjjgfdCfOqfC56c8 y3lZOPkl8diiCFBWBW7ZrRim0AGUdB5darwmnGrDtsKsGt+rHVGc0sU23iavKznlN03R Tghc78HGLdkxqggmx6ywUCUbvCcUizBfXzMzXn+4bxr+1vCJDmFeZUcYmJfwxMS/ig1R HV6Uj7uZ6YPBBHbPYXLM2byNK7JhjIN15fh/QO38qmECZrQkyTrIvk+L8oXhKhXOykO5 n+OA== X-Gm-Message-State: APt69E2lakuoDiSGEEC59cy/7lpGdiyTa8Rx6vYu276V17yE/cyhmB6k kTGkvtkZ3N/22w+qg+6iraw8Ge0k X-Received: by 2002:a17:902:28a6:: with SMTP id f35-v6mr25917208plb.110.1530539903013; Mon, 02 Jul 2018 06:58:23 -0700 (PDT) Received: from localhost (g90.124-44-6.ppp.wakwak.ne.jp. [124.44.6.90]) by smtp.gmail.com with ESMTPSA id m6-v6sm9679223pfh.153.2018.07.02.06.58.22 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 02 Jul 2018 06:58:22 -0700 (PDT) From: Stafford Horne To: Peter Maydell Date: Mon, 2 Jul 2018 22:57:45 +0900 Message-Id: <20180702135806.7087-5-shorne@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180702135806.7087-1-shorne@gmail.com> References: <20180702135806.7087-1-shorne@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c01::241 Subject: [Qemu-devel] [PULL 04/25] target/openrisc: Remove DISAS_JUMP & DISAS_TB_JUMP 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: Stafford Horne , Richard Henderson , QEMU Development Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson These values are unused. Reviewed-by: Stafford Horne Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: Richard Henderson Signed-off-by: Stafford Horne --- target/openrisc/translate.c | 4 ---- 1 file changed, 4 deletions(-) -- 2.17.0 diff --git a/target/openrisc/translate.c b/target/openrisc/translate.c index fbdc2058dc..f5af515979 100644 --- a/target/openrisc/translate.c +++ b/target/openrisc/translate.c @@ -37,9 +37,7 @@ #include "exec/log.h" /* is_jmp field values */ -#define DISAS_JUMP DISAS_TARGET_0 /* only pc was modified dynamically */ #define DISAS_UPDATE DISAS_TARGET_1 /* cpu state was modified dynamically */ -#define DISAS_TB_JUMP DISAS_TARGET_2 /* only pc was modified statically */ typedef struct DisasContext { DisasContextBase base; @@ -1353,8 +1351,6 @@ static void openrisc_tr_tb_stop(DisasContextBase *dcbase, CPUState *cs) gen_goto_tb(dc, 0, dc->base.pc_next); break; case DISAS_NORETURN: - case DISAS_JUMP: - case DISAS_TB_JUMP: break; case DISAS_UPDATE: /* indicate that the hash table must be used From patchwork Mon Jul 2 13:57:46 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 140757 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp4037691ljj; Mon, 2 Jul 2018 07:04:36 -0700 (PDT) X-Google-Smtp-Source: AAOMgpdZu2puKXM2nRV2tiOIBJvaDHYmYC/YymnV5BtvQmBSGL5YjW0vK6Q8jVD0OHEvTELW4qKq X-Received: by 2002:ac8:8d3:: with SMTP id y19-v6mr21320768qth.112.1530540276382; Mon, 02 Jul 2018 07:04:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530540276; cv=none; d=google.com; s=arc-20160816; b=EcLRqdhplfhuk93cFu1D5jsq/6wJkOtQvBu9ACGdt6wQ5gAXKIbrz3IQBrwYatCBWh lG7cveWwsJQXKka/RTH862t3wK5x7mNQN9gZvyqh6H7wGkHFCROIv7tkERU1sDDiKB5D Ewju0wTvxukkbtFzSG45fNBd8hXIr28+w243jtbmkPRYCX0Vfq7Uj7W9CA03FBqRsZy0 Gf1eTj2+rc1MoX1fj25MueXb5ugO2hyrj7Mmgq5kpCaPyPtemQFV5euZLPpRFoshT77v N+yXyquO5j3SRRnjcQMisTXRsAGFysdcGDs819V5nK0cu+HEzqJ52Ky8hx8R6YtzWqfg HOgg== 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:arc-authentication-results; bh=zwROJDNO19y8L4571rd5vDDy9iKL7GFmoIWAnXAcLlA=; b=ZiMYi25V0vTSZPDllhRkx57ON01EGQqbCXCUJ0EmDj5GS5cKnNm2Kihjf1AKPoQSM4 +aXYIF5DTlzu4Mw+FH/ywXrcB7Ks4v5bgKPo7ZUrBYp1za8Kw23zn7m/WJjzS4LwJpkc DIwqFCqjvR4GFW8SrjrLDITt+NUrKSZFg7xo7q4SOoWdOjrdgrlL3KYf7YlI5RYFjD/+ ksH9inEAai0kS9aWvX1MPM0+eMuI73uFWGylgsXtXq1RLwdWntNsPMJKpkcogfoveXdw QZo98O+EsGKHeTuh73zYv4V9nywcZ8tzFB3QVYyRKc9AFCWqpQ+LHCn5Vv0e/6XUDCmZ rdZw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=CASCIR4j; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id e63-v6si2242123qtb.5.2018.07.02.07.04.36 for (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 02 Jul 2018 07:04:36 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=CASCIR4j; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from localhost ([::1]:32967 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzRT-00062k-Py for patch@linaro.org; Mon, 02 Jul 2018 10:04:35 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47248) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzLX-0002EZ-LU for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fZzLW-0007z4-KW for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:27 -0400 Received: from mail-pl0-x242.google.com ([2607:f8b0:400e:c01::242]:38072) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fZzLW-0007xj-EF for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:26 -0400 Received: by mail-pl0-x242.google.com with SMTP id d10-v6so8003557plo.5 for ; Mon, 02 Jul 2018 06:58:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=zwROJDNO19y8L4571rd5vDDy9iKL7GFmoIWAnXAcLlA=; b=CASCIR4jbNK3pkgy8D66JklU1KJOm7IZMD5iHxUouFSyXOKOh3SqaIJAoNNDcPVad6 9QqB7o2OnQYdhx1YlkG+sLCWzsJuj/J/qGpiqU03QLo1DNYCz8T5OeLziIEAfYQ9ZSig pgyovPhgJk0H2wLAHFgbT0YzvINbR+R4t0hCa3eKZtf39JpMXtKLO7VQiIZrPGp2UCVb RDUjPbvealypM/bVTwXYI7+47JAsKzmVr4yUCbs/9hnk8map2wbIIdTPWmq7HGxTyva+ DIgWrL6+JP2nquZLM0zNoFuRv6KIXfMyTtS+307fPLGKJ6cZM7o47pDOiXORRxYhm8cK +u8A== 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=zwROJDNO19y8L4571rd5vDDy9iKL7GFmoIWAnXAcLlA=; b=c5Ia47XGRZh993lE2xje75MQWOs0PWUr8Kjj1Als6851LE55vH55KFZQN3EwNJSgZr B8rZx6s2ujs2bsQP4U5LBOLzFbpUP41I+KYHm42DM3MSedzdKzvmUJZoyFR4GLf7QUhh waf1fe1tLT/O8RDGS/z013eWub9giHWYc+w7NZKUSIiLvD6JK2oA+lN5ioVUcG0Z66M2 Fgx6pSY1NoMkXlvHnAFLY+tuXH/WNwP4MbSL6zb7p+deycJ8GqVg8v/+ez3043Ia0/8R TMJe0QaVDFcoe8y+o+58xBKBX2aUFDXAzFvG+Tb48gsq/3J5mlubcSFCQZVCTW0EJ/pL 4Sfw== X-Gm-Message-State: APt69E3wRz5gwXQmao9w5mrDMf/WNTMw5DG/ENQyCfWS6Gmz2iS1jYX7 9CBx/ea7hvroeOnF0JQ3VXM= X-Received: by 2002:a17:902:e00a:: with SMTP id ca10-v6mr25840759plb.224.1530539905377; Mon, 02 Jul 2018 06:58:25 -0700 (PDT) Received: from localhost (g90.124-44-6.ppp.wakwak.ne.jp. [124.44.6.90]) by smtp.gmail.com with ESMTPSA id u13-v6sm22236004pgr.36.2018.07.02.06.58.24 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 02 Jul 2018 06:58:24 -0700 (PDT) From: Stafford Horne To: Peter Maydell Date: Mon, 2 Jul 2018 22:57:46 +0900 Message-Id: <20180702135806.7087-6-shorne@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180702135806.7087-1-shorne@gmail.com> References: <20180702135806.7087-1-shorne@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c01::242 Subject: [Qemu-devel] [PULL 05/25] target/openrisc: Use exit_tb instead of CPU_INTERRUPT_EXITTB 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: Stafford Horne , Richard Henderson , QEMU Development Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson No need to use the interrupt mechanisms when we can simply exit the tb directly. Reviewed-by: Stafford Horne Signed-off-by: Richard Henderson Signed-off-by: Stafford Horne --- target/openrisc/interrupt_helper.c | 3 +-- target/openrisc/translate.c | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) -- 2.17.0 diff --git a/target/openrisc/interrupt_helper.c b/target/openrisc/interrupt_helper.c index 56620e0571..b865738f8b 100644 --- a/target/openrisc/interrupt_helper.c +++ b/target/openrisc/interrupt_helper.c @@ -26,7 +26,6 @@ void HELPER(rfe)(CPUOpenRISCState *env) { OpenRISCCPU *cpu = openrisc_env_get_cpu(env); - CPUState *cs = CPU(cpu); #ifndef CONFIG_USER_ONLY int need_flush_tlb = (cpu->env.sr & (SR_SM | SR_IME | SR_DME)) ^ (cpu->env.esr & (SR_SM | SR_IME | SR_DME)); @@ -53,8 +52,8 @@ void HELPER(rfe)(CPUOpenRISCState *env) } if (need_flush_tlb) { + CPUState *cs = CPU(cpu); tlb_flush(cs); } #endif - cs->interrupt_request |= CPU_INTERRUPT_EXITTB; } diff --git a/target/openrisc/translate.c b/target/openrisc/translate.c index f5af515979..43bdf378eb 100644 --- a/target/openrisc/translate.c +++ b/target/openrisc/translate.c @@ -37,6 +37,7 @@ #include "exec/log.h" /* is_jmp field values */ +#define DISAS_EXIT DISAS_TARGET_0 /* force exit to main loop */ #define DISAS_UPDATE DISAS_TARGET_1 /* cpu state was modified dynamically */ typedef struct DisasContext { @@ -1133,7 +1134,7 @@ static bool trans_l_rfe(DisasContext *dc, arg_l_rfe *a, uint32_t insn) gen_illegal_exception(dc); } else { gen_helper_rfe(cpu_env); - dc->base.is_jmp = DISAS_UPDATE; + dc->base.is_jmp = DISAS_EXIT; } #endif return true; @@ -1353,8 +1354,7 @@ static void openrisc_tr_tb_stop(DisasContextBase *dcbase, CPUState *cs) case DISAS_NORETURN: break; case DISAS_UPDATE: - /* indicate that the hash table must be used - to find the next TB */ + case DISAS_EXIT: tcg_gen_exit_tb(NULL, 0); break; default: From patchwork Mon Jul 2 13:57:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 140762 Delivered-To: patch@linaro.org Received: by 2002:a2e:5dc8:0:0:0:0:0 with SMTP id v69-v6csp4095743lje; Mon, 2 Jul 2018 07:09:17 -0700 (PDT) X-Google-Smtp-Source: AAOMgpeISQvk966/C9LVclosXhim/iZueRQPvuwd4E71HUYgWCyOms/RhG/pDbEnhFxZxJRI3pVI X-Received: by 2002:ac8:2463:: with SMTP id d32-v6mr14199839qtd.41.1530540557333; Mon, 02 Jul 2018 07:09:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530540557; cv=none; d=google.com; s=arc-20160816; b=bVERp5X/0KqV5WOtCISe3obTvEUDQOQERyMSbDf7T0keRcrHaCcj4VstSlIChvMes+ EqHwwLbcieSrhqTOZvqIo2ngNMX0YjJ3mkOsbzniSLCpl9vezQhYF63JZk4e6B4D2fqb Qw5+OLLMhSf2qCt4sRXZIkaPAXkbKKHOiQWEpT+Pp+VkNzYSU2kQ2kFu7i12/IvXWyZj RqIC3dALWwTJWQv/22ilT1VoMBC7hMKfEtPSA82JQkkanY/Yn9+46ZFDVcZfifcuZ4SJ l/FB6FdJm4BpVWe8QOYtQm6rxWs2GWej2j5yrn/mbIaXFoeb2oAtwAC+bpnOeFliku0O enWA== 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:arc-authentication-results; bh=egPnLBVgtP7NhsuuXtIHrGJQwyDZe26xfhEhEduYjIY=; b=V5ycKpoJVG0dUH8TBB4UuXQxCwo88SDCsaVRp3NmgoA4XN2XQYYVIzXvYpYEL4HWIW a7KVZcb0QODP7OLX74Otv0dSv2HASmZIJSbKwhxxY1IgTQhCVUpFpGaGuIlBGEmFeLxC gmxx+SfvBufRo0nYo0BAhQ0kdf+fow10ontSpHgWTP9TbZnRK9D2xaWkEZFDRvSfAg6r aX8fRP2gBUDJ0tXi1+kTPopImWTUkAbpWWEWtiBz3jyd/qI1EYrom7s21ObBn0zVm3t3 AaKsZbHRtuR+00vh5r5NwHQFlvHHTEFM17adz3tu36ifNS7Nv9gL9TSs5k/UYo8v22bH da8Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=Oi6GlD41; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id a23-v6si1945012qva.162.2018.07.02.07.09.17 for (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 02 Jul 2018 07:09:17 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=Oi6GlD41; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from localhost ([::1]:32996 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzW0-0001Pg-PV for patch@linaro.org; Mon, 02 Jul 2018 10:09:16 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47263) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzLZ-0002GU-Of for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fZzLY-00083U-SS for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:29 -0400 Received: from mail-pg0-x233.google.com ([2607:f8b0:400e:c05::233]:36648) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fZzLY-00082D-Md for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:28 -0400 Received: by mail-pg0-x233.google.com with SMTP id m19-v6so3662330pgv.3 for ; Mon, 02 Jul 2018 06:58:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=egPnLBVgtP7NhsuuXtIHrGJQwyDZe26xfhEhEduYjIY=; b=Oi6GlD41fuiKjm6nbzVVH8dXTQVtKhGIKUnXun9/me0JKAPABvKXbi2WRXPzt9QmVh 0lKpVlLpzX7T1/r9jiquXg6zje2/Q9dVYDuZulyFZljQiUPDOO9Qxfv+ULs2ATsLLpdN nQ7+bHe2k9f6BYsWdiivoEvMj24u7WZPNOl15frk55ku0S7haQaLxiINSL/rZ+0+sMHg ROpu0HeSCqCxh1oGRAahyhjHjw1cn74j5tGtkI/SE1V5RUBizZZhoukZhz6Su1kVAbNn TXEgbGjZj7Mu6pgrtwDR2GrJ0AAe9z7ufBow2alF4M2mA1o9iWkoDgYfOmeGYgXhZ0ER IwDQ== 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=egPnLBVgtP7NhsuuXtIHrGJQwyDZe26xfhEhEduYjIY=; b=fbokLjgi9J0hIV/Ej/gjycYq7+MJ11urWHW+JfoIfuyeUC4BhmVdEK5uVwcyNJvHMC j0ChhRtBqsJzsybLboEnYBQ1c33m9SQB5Bsh1hDgwiJmzoaroAKvYv6kjdnDW5p0cUdi KEsYuUCmteeqqUjNVQ6qKMIpNf6KWZc3C/npJFkSZkgKow4KjL7dANNp8UxiccNVB7MX 7Q6FUiANHtxjX4gWszhD/eIyovY5/ghtY1u02YwkVfV4QMlpahNYvL+tRn8LzefAyrnB gzPZ6aBcom5qI0LXC3YLFFaPFGT2lmXNbuwAexPhXE3zj8kXdEnTLdyIoJnrk8nses3p ZADg== X-Gm-Message-State: APt69E1i6QQxyM0Ua0feuvcvVIzHlOGRkYwKEcLDB0Jm/tQwvWEITH9Q C0gs91jXLZx9FfC3vDHb/CE= X-Received: by 2002:a63:5624:: with SMTP id k36-v6mr1546696pgb.146.1530539907768; Mon, 02 Jul 2018 06:58:27 -0700 (PDT) Received: from localhost (g90.124-44-6.ppp.wakwak.ne.jp. [124.44.6.90]) by smtp.gmail.com with ESMTPSA id t21-v6sm42331266pfi.22.2018.07.02.06.58.26 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 02 Jul 2018 06:58:27 -0700 (PDT) From: Stafford Horne To: Peter Maydell Date: Mon, 2 Jul 2018 22:57:47 +0900 Message-Id: <20180702135806.7087-7-shorne@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180702135806.7087-1-shorne@gmail.com> References: <20180702135806.7087-1-shorne@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::233 Subject: [Qemu-devel] [PULL 06/25] target/openrisc: Fix singlestep_enabled 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: Stafford Horne , Richard Henderson , QEMU Development Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson We failed to store to cpu_pc before raising the exception, which caused us to re-execute the same insn that we stepped. Reviewed-by: Stafford Horne Signed-off-by: Richard Henderson Signed-off-by: Stafford Horne --- target/openrisc/translate.c | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) -- 2.17.0 diff --git a/target/openrisc/translate.c b/target/openrisc/translate.c index 43bdf378eb..22848b17ad 100644 --- a/target/openrisc/translate.c +++ b/target/openrisc/translate.c @@ -1335,31 +1335,30 @@ static void openrisc_tr_tb_stop(DisasContextBase *dcbase, CPUState *cs) { DisasContext *dc = container_of(dcbase, DisasContext, base); + /* If we have already exited the TB, nothing following has effect. */ + if (dc->base.is_jmp == DISAS_NORETURN) { + return; + } + if ((dc->tb_flags & TB_FLAGS_DFLAG ? 1 : 0) != (dc->delayed_branch != 0)) { tcg_gen_movi_i32(cpu_dflag, dc->delayed_branch != 0); } tcg_gen_movi_tl(cpu_ppc, dc->base.pc_next - 4); - if (dc->base.is_jmp == DISAS_NEXT) { - dc->base.is_jmp = DISAS_UPDATE; - tcg_gen_movi_tl(cpu_pc, dc->base.pc_next); - } - if (unlikely(dc->base.singlestep_enabled)) { - gen_exception(dc, EXCP_DEBUG); - } else { - switch (dc->base.is_jmp) { - case DISAS_TOO_MANY: - gen_goto_tb(dc, 0, dc->base.pc_next); - break; - case DISAS_NORETURN: - break; - case DISAS_UPDATE: - case DISAS_EXIT: + switch (dc->base.is_jmp) { + case DISAS_TOO_MANY: + gen_goto_tb(dc, 0, dc->base.pc_next); + break; + case DISAS_UPDATE: + case DISAS_EXIT: + if (unlikely(dc->base.singlestep_enabled)) { + gen_exception(dc, EXCP_DEBUG); + } else { tcg_gen_exit_tb(NULL, 0); - break; - default: - g_assert_not_reached(); } + break; + default: + g_assert_not_reached(); } } From patchwork Mon Jul 2 13:57:48 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 140764 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp2045ljj; Mon, 2 Jul 2018 07:11:31 -0700 (PDT) X-Google-Smtp-Source: AAOMgpdmxVHrSHyWE9TI6zXt5VeeR5T9PSWuy5D7uCMSA19Lo76Asi9gGFUMpApfd0e6CNhYik+K X-Received: by 2002:a37:be44:: with SMTP id o65-v6mr21159397qkf.439.1530540691632; Mon, 02 Jul 2018 07:11:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530540691; cv=none; d=google.com; s=arc-20160816; b=P6gdT+6PoSQcXAVQQvsv0MrjECyFw1AnnGwVzPPuRFrRc1kF0PmqeBYHB8XWdb8sTy evRrct11/Z0/bIxipryIagJzcSQSWBHg4RG23rMqLeKTDlZIHX8g69SoUaJAPzHlilOJ 3ohHFIYU9hLcdaTSb9f7OKVtX+iVzmBnhgoZR5gUPPb/qEgF+ra7o8bQzbPBfhhZQ4/a zEmJcPGngNz4pv0sMgzEW6gvnSbfwqvPHnB/EeXjbbNR3BZiH1HKLyugWu+DnjEbxYup xiQOJSwkMdTe/me0SPeIqx7iZljbpPEgrimaIFKBCUEpjjPeZ96pySl5EAQ3jPlh1Do5 ykHg== 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:arc-authentication-results; bh=0AwTJ+88ZGHtSYhFlyrIVloh3Xf4GpNuS/w+tenewKg=; b=HQoCOPoLgEyEnD+E/eBAsHGHIE9PAPppBeiV0QY0OOL4EagCdxI09RLplLpr2VDSAb Jws30ssDsLWIssZENnBu8GBh7kYgLtlvGlkLp5dL3Qesp+Q6d8evmHBEVS3QIE4PbB8M NcejN60feVbpMFJeQLfIZ21xVrqM3qOSkcMGdRTOl44l3/bOWb2iY66SMuFZ9yFyhyyA d6k2O3jvrNZ53IOuiAxjOHA+VgonltaHxvwNgbvmuAB3A0YU2ZbcjI7iUjShGjfrkT8v z9xPuoDq0Z0su9g89ymqvD43lEcpERUbOLQSRyK5dqKwS2+UiRK1UufyW+7qHQyDVQ+B UoUg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=WLFSMkYL; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id f26-v6si5943282qte.45.2018.07.02.07.11.31 for (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 02 Jul 2018 07:11:31 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=WLFSMkYL; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from localhost ([::1]:33014 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzYA-0003E9-VO for patch@linaro.org; Mon, 02 Jul 2018 10:11:31 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47290) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzLe-0002LA-Hw for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fZzLb-000858-EI for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:34 -0400 Received: from mail-pg0-x242.google.com ([2607:f8b0:400e:c05::242]:38454) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fZzLb-00084y-5b for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:31 -0400 Received: by mail-pg0-x242.google.com with SMTP id c9-v6so7197754pgf.5 for ; Mon, 02 Jul 2018 06:58:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=0AwTJ+88ZGHtSYhFlyrIVloh3Xf4GpNuS/w+tenewKg=; b=WLFSMkYLPp+yaV+eGbxjr286Bu89Jn4M5k9qWsf58G8nJz9PxDkHru/BboQ9w3yMpO 34Y/GBC5ITBcXuzuDtq76gH/uTxeIzqZhzyhtGGmo1/a+zvarKiTAxZ3kX/5yMS2hd8r 1wKF7WWYQE6eWhihSGhBVlRxzagi6N9d7z1DeUxb7LiwD39ROrRyExaKuHXe74YJ+gBd WDQKluQJojA1h21mFFyjOMZlyAUZaUhwzgb+7SBMHJRKUHdKqbyVU2Fn7+K1jbMsJ9pt kkqGLSW9UlVqMvns7bdyVOkYZP7GBUqCYRwHaeJQlTUUEkHDUExuNRsEAim/hANL2T4o HD3w== 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=0AwTJ+88ZGHtSYhFlyrIVloh3Xf4GpNuS/w+tenewKg=; b=EdPdI+jrmo5vKudogLfPbaLfG+o8lMHGho6KN2NgUfDx0r7jZ+yexwxIDRV4x/PECm MojPl+XIdQF9VF11ooq4JeKOW98yHNkby9BbXxlZ4zhTZPvgUXwLLKx3chuHXBIFI1tG DKvtAAVCpFqEYdxip6T+tj5eLJdCTMBA2JOJaUiNyUKRf527oVWpJluyET96QMDPNreO FnekpM5hvLspcxoySUE1dTHWIf/AX9yD+m3VcAL2ZJ7RS0fJ5FAr0NxOU00gE0nmQOmm es75e14TdkWkZkBZALXm9MaP4dRykPtRLD14IGiK8YgsiNR+Tux6N0Gqrv1t2syQVphK R4bw== X-Gm-Message-State: APt69E3iW0OXTUfmOgWXR9r8Cad21O7TAKKO9aCbUJJtm4fy6b27ocxP uxq6xD7WPTdPe3doTC1Hbcg= X-Received: by 2002:a63:4f63:: with SMTP id p35-v6mr170490pgl.167.1530539910143; Mon, 02 Jul 2018 06:58:30 -0700 (PDT) Received: from localhost (g90.124-44-6.ppp.wakwak.ne.jp. [124.44.6.90]) by smtp.gmail.com with ESMTPSA id h10-v6sm26532005pgn.42.2018.07.02.06.58.29 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 02 Jul 2018 06:58:29 -0700 (PDT) From: Stafford Horne To: Peter Maydell Date: Mon, 2 Jul 2018 22:57:48 +0900 Message-Id: <20180702135806.7087-8-shorne@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180702135806.7087-1-shorne@gmail.com> References: <20180702135806.7087-1-shorne@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::242 Subject: [Qemu-devel] [PULL 07/25] target/openrisc: Link more translation blocks 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: Stafford Horne , Richard Henderson , QEMU Development Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson Track direct jumps via dc->jmp_pc_imm. Use that in preference to jmp_pc when possible. Emit goto_tb in that case, and lookup_and_goto_tb otherwise. Reviewed-by: Stafford Horne Signed-off-by: Richard Henderson Signed-off-by: Stafford Horne --- target/openrisc/translate.c | 96 +++++++++++++++++++++---------------- 1 file changed, 55 insertions(+), 41 deletions(-) -- 2.17.0 diff --git a/target/openrisc/translate.c b/target/openrisc/translate.c index 22848b17ad..a618d39242 100644 --- a/target/openrisc/translate.c +++ b/target/openrisc/translate.c @@ -38,13 +38,16 @@ /* is_jmp field values */ #define DISAS_EXIT DISAS_TARGET_0 /* force exit to main loop */ -#define DISAS_UPDATE DISAS_TARGET_1 /* cpu state was modified dynamically */ +#define DISAS_JUMP DISAS_TARGET_1 /* exit via jmp_pc/jmp_pc_imm */ typedef struct DisasContext { DisasContextBase base; uint32_t mem_idx; uint32_t tb_flags; uint32_t delayed_branch; + + /* If not -1, jmp_pc contains this value and so is a direct jump. */ + target_ulong jmp_pc_imm; } DisasContext; /* Include the auto-generated decoder. */ @@ -160,34 +163,6 @@ static void check_ov64s(DisasContext *dc) } \ } while (0) -static inline bool use_goto_tb(DisasContext *dc, target_ulong dest) -{ - if (unlikely(dc->base.singlestep_enabled)) { - return false; - } - -#ifndef CONFIG_USER_ONLY - return (dc->base.tb->pc & TARGET_PAGE_MASK) == (dest & TARGET_PAGE_MASK); -#else - return true; -#endif -} - -static void gen_goto_tb(DisasContext *dc, int n, target_ulong dest) -{ - if (use_goto_tb(dc, dest)) { - tcg_gen_movi_tl(cpu_pc, dest); - tcg_gen_goto_tb(n); - tcg_gen_exit_tb(dc->base.tb, n); - } else { - tcg_gen_movi_tl(cpu_pc, dest); - if (dc->base.singlestep_enabled) { - gen_exception(dc, EXCP_DEBUG); - } - tcg_gen_exit_tb(NULL, 0); - } -} - static void gen_ove_cy(DisasContext *dc) { if (dc->tb_flags & SR_OVE) { @@ -621,6 +596,7 @@ static bool trans_l_j(DisasContext *dc, arg_l_j *a, uint32_t insn) target_ulong tmp_pc = dc->base.pc_next + a->n * 4; tcg_gen_movi_tl(jmp_pc, tmp_pc); + dc->jmp_pc_imm = tmp_pc; dc->delayed_branch = 2; return true; } @@ -634,6 +610,7 @@ static bool trans_l_jal(DisasContext *dc, arg_l_jal *a, uint32_t insn) /* Optimize jal being used to load the PC for PIC. */ if (tmp_pc != ret_pc) { tcg_gen_movi_tl(jmp_pc, tmp_pc); + dc->jmp_pc_imm = tmp_pc; dc->delayed_branch = 2; } return true; @@ -1267,6 +1244,8 @@ static void openrisc_tr_init_disas_context(DisasContextBase *dcb, CPUState *cs) dc->mem_idx = cpu_mmu_index(env, false); dc->tb_flags = dc->base.tb->flags; dc->delayed_branch = (dc->tb_flags & TB_FLAGS_DFLAG) != 0; + dc->jmp_pc_imm = -1; + bound = -(dc->base.pc_first | TARGET_PAGE_MASK) / 4; dc->base.max_insns = MIN(dc->base.max_insns, bound); } @@ -1319,37 +1298,72 @@ static void openrisc_tr_translate_insn(DisasContextBase *dcbase, CPUState *cs) } dc->base.pc_next += 4; - /* delay slot */ - if (dc->delayed_branch) { - dc->delayed_branch--; - if (!dc->delayed_branch) { - tcg_gen_mov_tl(cpu_pc, jmp_pc); - tcg_gen_discard_tl(jmp_pc); - dc->base.is_jmp = DISAS_UPDATE; - return; - } + /* When exiting the delay slot normally, exit via jmp_pc. + * For DISAS_NORETURN, we have raised an exception and already exited. + * For DISAS_EXIT, we found l.rfe in a delay slot. There's nothing + * in the manual saying this is illegal, but it surely it should. + * At least or1ksim overrides pcnext and ignores the branch. + */ + if (dc->delayed_branch + && --dc->delayed_branch == 0 + && dc->base.is_jmp == DISAS_NEXT) { + dc->base.is_jmp = DISAS_JUMP; } } static void openrisc_tr_tb_stop(DisasContextBase *dcbase, CPUState *cs) { DisasContext *dc = container_of(dcbase, DisasContext, base); + target_ulong jmp_dest; /* If we have already exited the TB, nothing following has effect. */ if (dc->base.is_jmp == DISAS_NORETURN) { return; } + /* Adjust the delayed branch state for the next TB. */ if ((dc->tb_flags & TB_FLAGS_DFLAG ? 1 : 0) != (dc->delayed_branch != 0)) { tcg_gen_movi_i32(cpu_dflag, dc->delayed_branch != 0); } - tcg_gen_movi_tl(cpu_ppc, dc->base.pc_next - 4); + /* For DISAS_TOO_MANY, jump to the next insn. */ + jmp_dest = dc->base.pc_next; + tcg_gen_movi_tl(cpu_ppc, jmp_dest - 4); + switch (dc->base.is_jmp) { + case DISAS_JUMP: + jmp_dest = dc->jmp_pc_imm; + if (jmp_dest == -1) { + /* The jump destination is indirect/computed; use jmp_pc. */ + tcg_gen_mov_tl(cpu_pc, jmp_pc); + tcg_gen_discard_tl(jmp_pc); + if (unlikely(dc->base.singlestep_enabled)) { + gen_exception(dc, EXCP_DEBUG); + } else { + tcg_gen_lookup_and_goto_ptr(); + } + break; + } + /* The jump destination is direct; use jmp_pc_imm. + However, we will have stored into jmp_pc as well; + we know now that it wasn't needed. */ + tcg_gen_discard_tl(jmp_pc); + /* fallthru */ + case DISAS_TOO_MANY: - gen_goto_tb(dc, 0, dc->base.pc_next); + if (unlikely(dc->base.singlestep_enabled)) { + tcg_gen_movi_tl(cpu_pc, jmp_dest); + gen_exception(dc, EXCP_DEBUG); + } else if ((dc->base.pc_first ^ jmp_dest) & TARGET_PAGE_MASK) { + tcg_gen_movi_tl(cpu_pc, jmp_dest); + tcg_gen_lookup_and_goto_ptr(); + } else { + tcg_gen_goto_tb(0); + tcg_gen_movi_tl(cpu_pc, jmp_dest); + tcg_gen_exit_tb(dc->base.tb, 0); + } break; - case DISAS_UPDATE: + case DISAS_EXIT: if (unlikely(dc->base.singlestep_enabled)) { gen_exception(dc, EXCP_DEBUG); From patchwork Mon Jul 2 13:57:50 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 140766 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp4537ljj; Mon, 2 Jul 2018 07:13:46 -0700 (PDT) X-Google-Smtp-Source: AAOMgpfiCMjqh7xY+C80eEhHwlhJil9hcysnWqzTEYDqgTlMBrIF+3ILtDecOEgTDWkCQaEepm9r X-Received: by 2002:ac8:6c3:: with SMTP id j3-v6mr23368242qth.138.1530540826420; Mon, 02 Jul 2018 07:13:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530540826; cv=none; d=google.com; s=arc-20160816; b=c2osy7hTBm/+diFlSf9UzfFrD2NNK9lsKEqQ+2EBf482SppNxaz7hM4yHSMDiGvSEZ M10O/T1n+MpU9O0Ao2NdHVneMCABF7BaI68kOJxkdHTuZ3SKw3IHCuNimJZLvcIDE9lC M6mafpL9aKYWcFegCkr9BPhp0AiZUDGs8/bDsbwv9kQi1N/MpxLuzJVkyXtbpt9xVg+O NyrsAynmVICl43Dws+g6RJrWFrdCUzTh4jfN1mtl3XPmc72fMaL/G7FGZsxDd0BebkbK aNA1YnueLVPefrC2Zlr4qmqojTDNGkBuMWy4lXq+hKQXK/hzy6qczaK2UB7rADuNtVJO k9Vg== 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:arc-authentication-results; bh=/JZVefHUUHKkgVlCuUjnyf/d1zk468BKGk0xxZUY1uE=; b=PXsCv2Bqyy1Ho0Vz0oYHNWp54JI/rhtEjDeGWOdGMmmYWc80+7Oa6aJoD6+JIz0jOX O1dSw11WTITRfFQJzWfCNAbAQqQLvJriTbrQ1zMy8I6A937IzfDfM4B+rjTpa+5XbQS2 4vDh0dzKrGAZcEH5ZbVNcR6eQYX7arwjjy9hZtt1/gccCxWNPBfSh0yKtvgp5mD5eVGB IBAth+So3LVGi1L9BcvWpo6UlhjviLu7Ox3Ul/VQwHkjfIQdNOSIp/aDeQoRQSjzRGUj deTli8V2cTldmfXVTK90/l1ak3sG0JZU8MHaUwqDAs/whSpTOJTuyhC0UyV203CJfPUH 3Hfg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=t7na73Na; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id o19-v6si2209759qki.245.2018.07.02.07.13.46 for (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 02 Jul 2018 07:13:46 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=t7na73Na; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from localhost ([::1]:33023 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzaL-0004v4-QC for patch@linaro.org; Mon, 02 Jul 2018 10:13:45 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47307) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzLg-0002NE-Vx for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fZzLg-00086v-Ag for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:37 -0400 Received: from mail-pf0-x22e.google.com ([2607:f8b0:400e:c00::22e]:34347) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fZzLg-00086f-3S for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:36 -0400 Received: by mail-pf0-x22e.google.com with SMTP id e10-v6so996073pfn.1 for ; Mon, 02 Jul 2018 06:58:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=/JZVefHUUHKkgVlCuUjnyf/d1zk468BKGk0xxZUY1uE=; b=t7na73NalEgvTAmOZIR8OM1NoiK//4+Gs8BB4Wtddj3UNB42cVBHdG9DmnG0PxjOWZ 6kIeM/YprerFRsPdCRBXeArQydgW1m+bTLHt0zn3G7Jmow4AUMMTZMNOOQkS41U0X5/I 1rU93gp7bjDm2jp2Fa8LNNwxH+TRGlC3hp3LQergYD9o1G9QCZFyrHzZ6q8OBZJI3Lsf P6znlwOaWE1S4MW3Q2t1p1gvGpmpJ3Iyu69TtEUVL+clBoo59+cq1dQCTKmtufZ/QUTh N/Zzmfkzbzgsah/63GEsa6zcPX8Sg3pRvEhr905QkxXAYEH1xn9N/Rnv7ungfZDwu0hT sf+A== 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=/JZVefHUUHKkgVlCuUjnyf/d1zk468BKGk0xxZUY1uE=; b=bxx1FNhmLW54Go/PNgjL1xNVIpKon3uSqynEhvEiPJuxXApF68Dq/c1l9qsKNo4bod 9Tj3aPV6/4Vo7QOZVe+xROMzDzkyScxX40jXRRcooywsrUK3RvQOh8n1S4Y6BdSNLVdO i7SRY+fIQIu53VkTNqHNmseKF0dwg56mh5rqwXL4M+VabZcQckqjwVP0yTDQB0LOATpW PdScaAml/bIHcU+JKHX8dJXrgO2zap4kAXIPTY+NqI3XHsKd3qhU/Mtsc3BVnBa/nHxD c+OTZa0quyIG48N2rmnq158uH3IAfGz3NCf3VXnqWgd0BeS5mSri3P+OsCxopFPpjJc4 FjBQ== X-Gm-Message-State: APt69E0UVCTzvLO6us0QbQdwlPJ8iFVPDJZ3iG4bCWvB3YBfTUSOeG+O sGpCwWNtdm21YiT5sgYuB4F7QRMc X-Received: by 2002:a65:4a90:: with SMTP id b16-v6mr21595587pgu.136.1530539915080; Mon, 02 Jul 2018 06:58:35 -0700 (PDT) Received: from localhost (g90.124-44-6.ppp.wakwak.ne.jp. [124.44.6.90]) by smtp.gmail.com with ESMTPSA id 9-v6sm28381993pfn.129.2018.07.02.06.58.34 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 02 Jul 2018 06:58:34 -0700 (PDT) From: Stafford Horne To: Peter Maydell Date: Mon, 2 Jul 2018 22:57:50 +0900 Message-Id: <20180702135806.7087-10-shorne@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180702135806.7087-1-shorne@gmail.com> References: <20180702135806.7087-1-shorne@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c00::22e Subject: [Qemu-devel] [PULL 09/25] target/openrisc: Exit the TB after l.mtspr 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: Stafford Horne , Richard Henderson , QEMU Development Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson A store to SR changes interrupt state, which should return to the main loop to recognize that state. Signed-off-by: Richard Henderson Signed-off-by: Stafford Horne --- target/openrisc/translate.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) -- 2.17.0 diff --git a/target/openrisc/translate.c b/target/openrisc/translate.c index db149986af..59605aacca 100644 --- a/target/openrisc/translate.c +++ b/target/openrisc/translate.c @@ -877,7 +877,22 @@ static bool trans_l_mtspr(DisasContext *dc, arg_l_mtspr *a, uint32_t insn) if (is_user(dc)) { gen_illegal_exception(dc); } else { - TCGv_i32 ti = tcg_const_i32(a->k); + TCGv_i32 ti; + + /* For SR, we will need to exit the TB to recognize the new + * exception state. For NPC, in theory this counts as a branch + * (although the SPR only exists for use by an ICE). Save all + * of the cpu state first, allowing it to be overwritten. + */ + if (dc->delayed_branch) { + tcg_gen_mov_tl(cpu_pc, jmp_pc); + tcg_gen_discard_tl(jmp_pc); + } else { + tcg_gen_movi_tl(cpu_pc, dc->base.pc_next + 4); + } + dc->base.is_jmp = DISAS_EXIT; + + ti = tcg_const_i32(a->k); gen_helper_mtspr(cpu_env, cpu_R[a->a], cpu_R[a->b], ti); tcg_temp_free_i32(ti); } From patchwork Mon Jul 2 13:57:51 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 140754 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp4035296ljj; Mon, 2 Jul 2018 07:02:53 -0700 (PDT) X-Google-Smtp-Source: AAOMgpcRYxXsnei8rtK+q8fjgWucFa+jHGbw1o7j9i8Fp86WF6gnX99QFHOcy64Y19W7gE47gcoC X-Received: by 2002:ac8:2b23:: with SMTP id 32-v6mr13182196qtu.119.1530540173354; Mon, 02 Jul 2018 07:02:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530540173; cv=none; d=google.com; s=arc-20160816; b=Tb7sglNEmZxJrnl+28ytgxXE3H2/k7aLluQ3HKSljgXu7CKMejnHuaNuYTweAyb6VA Xij3XPBNUl5b/b1iR2UtUobKsYYLLQtqnmU3wdc+ZSIxzY1EQqWHVZJtb4jH4jgYWScn g2JPgPzFJLFFvGLMWwLNe/6abhXWtw+eMYOeHOqkiIOGDSkHy8dLV7DtsdN3zWZCEP6v 0MjQbs0Ypf6Ee/XQANHZSL7Jzc2m86r/oG3JnWxWI72RbAcP0TtBJD5FMTroP43PL6vH TXnt4Y+9vABNjW1W+d1Ru5Sg4gT029IwK+2FzEkKR2BhlZ2tHmyiWYwmVFWecSQpkchL 1uLQ== 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 :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:arc-authentication-results; bh=BpXhKplcmVzaEgYPHqOAQOcTQDA7dzSkA3kbaZ3R+rw=; b=sypXHrhyeSaj8IJO4WrmyqOwLiagp0EVhUZnixJxJ0vycOT7nK/mv3NbkRWzL1aUJF h2sTEMvLbHo091+70A5ivLGhdsO9bwPLjfK5Csx8MRMMZYOn1hcD2QTMfkr0aMNJg1Wb zQwMZhbZWWSvBdxsw7l0/5XFEdhQef513w1rOpKcnIPBoHnAqxxNjSzkpRTbSx88TDZ/ 4FuBX4DEcCgSfFMqVnlhpyXVBxcmcl7s1cGkCqgdwD8R0vv+Q0cH604wCsBNroffEQTI sdklI8Zf6gHOmo5nbRClT+qUTgQ31p8clM9vUhytEVANy0C6PgRqIAQiARAfK3GfbHIS TB2Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=HWVkhi+g; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id i58-v6si2935501qvi.285.2018.07.02.07.02.53 for (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 02 Jul 2018 07:02:53 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=HWVkhi+g; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from localhost ([::1]:32955 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzPo-0004kV-Ix for patch@linaro.org; Mon, 02 Jul 2018 10:02:52 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47329) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzLj-0002PO-FI for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fZzLi-00087s-JE for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:39 -0400 Received: from mail-pg0-x235.google.com ([2607:f8b0:400e:c05::235]:34258) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fZzLi-00087U-Ci for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:38 -0400 Received: by mail-pg0-x235.google.com with SMTP id y5-v6so917339pgv.1 for ; Mon, 02 Jul 2018 06:58:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BpXhKplcmVzaEgYPHqOAQOcTQDA7dzSkA3kbaZ3R+rw=; b=HWVkhi+gjzjSvhCXGmXJFkJm+KcQNENSN5bBy+uxpefgghCzcd1U429cgSsYicH3nh FcPVUsBL7U/C0t4ysxuTw+Geg4Y3XcmBjrTJKe70A9YlQpCOJmA3WBwS3mxwSxvwpatG 1yiRehuFP0J98bkzNYOCeSzLl02vMs9TLQtdsMxw/mU7ZD9dA4JsWNa5uezmVqUF6nBN f659WHFGguNUOY5GA0xHmOL8Dg3vaOqUHdQ6vzjKVzdmj/+XDkL56qAFRt1lMg9zb9t3 xCojKw5PWV04FcMM7zD5dmR/xtMDWVc+FuaZ61TiBxDOdF9QNYMZfXUP9l9PSaigYShU j7OA== 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:mime-version:content-transfer-encoding; bh=BpXhKplcmVzaEgYPHqOAQOcTQDA7dzSkA3kbaZ3R+rw=; b=QVxWszVP1CZcr+R28+p4VhAu2XCm9uC2NtdZiFZvHQZ/z09CGIrtV2MdMQVBYjvVDV CQrfVSAlpQX9ZNo2s78SYo6qjPdyV1TjycWQ3cYSNwXtQiF5F8Zb+90QDrN3CnV5n5pM F6Cs0IYJUwsi6dJ0dq0FlA8r83YkMOkam+u5noYe519luLcGsY/gopJdjuN2XscEiDau /lDQc1X6mB3tlplHe4dSNL73GvfOmZcYC9F5Wx1642ywYvVOzCtrfGiKQ4R103dCrXhY KlHYQ2tm+a68Gr/jMiGXC0+LpvOSbRCI3v/yQ3Gs4MVF5Y0pbfggtycjkPrtGCRCY/RJ 5s6A== X-Gm-Message-State: APt69E2dkoTEqi4Qg/yqQzAHh+Sv9byVT9U2UaTzeTGU3UG1Oqzoe5w+ Dz/xjGw06Fibidd/IHr/Frc= X-Received: by 2002:a65:4b0f:: with SMTP id r15-v6mr22245134pgq.103.1530539917411; Mon, 02 Jul 2018 06:58:37 -0700 (PDT) Received: from localhost (g90.124-44-6.ppp.wakwak.ne.jp. [124.44.6.90]) by smtp.gmail.com with ESMTPSA id h12-v6sm24012701pfi.114.2018.07.02.06.58.36 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 02 Jul 2018 06:58:36 -0700 (PDT) From: Stafford Horne To: Peter Maydell Date: Mon, 2 Jul 2018 22:57:51 +0900 Message-Id: <20180702135806.7087-11-shorne@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180702135806.7087-1-shorne@gmail.com> References: <20180702135806.7087-1-shorne@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::235 Subject: [Qemu-devel] [PULL 10/25] target/openrisc: Form the spr index from tcg 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: Stafford Horne , Richard Henderson , QEMU Development Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson Rather than pass base+offset to the helper, pass the full index. In most cases the base is r0 and optimization yields a constant. Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: Richard Henderson Signed-off-by: Stafford Horne --- target/openrisc/helper.h | 4 ++-- target/openrisc/sys_helper.c | 9 +++------ target/openrisc/translate.c | 16 +++++++++------- 3 files changed, 14 insertions(+), 15 deletions(-) -- 2.17.0 diff --git a/target/openrisc/helper.h b/target/openrisc/helper.h index e37dabc77a..9db9bf3963 100644 --- a/target/openrisc/helper.h +++ b/target/openrisc/helper.h @@ -56,5 +56,5 @@ FOP_CMP(le) DEF_HELPER_FLAGS_1(rfe, 0, void, env) /* sys */ -DEF_HELPER_FLAGS_4(mtspr, 0, void, env, tl, tl, tl) -DEF_HELPER_FLAGS_4(mfspr, TCG_CALL_NO_WG, tl, env, tl, tl, tl) +DEF_HELPER_FLAGS_3(mtspr, 0, void, env, tl, tl) +DEF_HELPER_FLAGS_3(mfspr, TCG_CALL_NO_WG, tl, env, tl, tl) diff --git a/target/openrisc/sys_helper.c b/target/openrisc/sys_helper.c index 2f337363ec..2c959f63f4 100644 --- a/target/openrisc/sys_helper.c +++ b/target/openrisc/sys_helper.c @@ -27,13 +27,11 @@ #define TO_SPR(group, number) (((group) << 11) + (number)) -void HELPER(mtspr)(CPUOpenRISCState *env, - target_ulong ra, target_ulong rb, target_ulong offset) +void HELPER(mtspr)(CPUOpenRISCState *env, target_ulong spr, target_ulong rb) { #ifndef CONFIG_USER_ONLY OpenRISCCPU *cpu = openrisc_env_get_cpu(env); CPUState *cs = CPU(cpu); - int spr = (ra | offset); int idx; switch (spr) { @@ -202,13 +200,12 @@ void HELPER(mtspr)(CPUOpenRISCState *env, #endif } -target_ulong HELPER(mfspr)(CPUOpenRISCState *env, - target_ulong rd, target_ulong ra, uint32_t offset) +target_ulong HELPER(mfspr)(CPUOpenRISCState *env, target_ulong rd, + target_ulong spr) { #ifndef CONFIG_USER_ONLY OpenRISCCPU *cpu = openrisc_env_get_cpu(env); CPUState *cs = CPU(cpu); - int spr = (ra | offset); int idx; switch (spr) { diff --git a/target/openrisc/translate.c b/target/openrisc/translate.c index 59605aacca..64b5e84630 100644 --- a/target/openrisc/translate.c +++ b/target/openrisc/translate.c @@ -865,9 +865,10 @@ static bool trans_l_mfspr(DisasContext *dc, arg_l_mfspr *a, uint32_t insn) if (is_user(dc)) { gen_illegal_exception(dc); } else { - TCGv_i32 ti = tcg_const_i32(a->k); - gen_helper_mfspr(cpu_R[a->d], cpu_env, cpu_R[a->d], cpu_R[a->a], ti); - tcg_temp_free_i32(ti); + TCGv spr = tcg_temp_new(); + tcg_gen_ori_tl(spr, cpu_R[a->a], a->k); + gen_helper_mfspr(cpu_R[a->d], cpu_env, cpu_R[a->d], spr); + tcg_temp_free(spr); } return true; } @@ -877,7 +878,7 @@ static bool trans_l_mtspr(DisasContext *dc, arg_l_mtspr *a, uint32_t insn) if (is_user(dc)) { gen_illegal_exception(dc); } else { - TCGv_i32 ti; + TCGv spr; /* For SR, we will need to exit the TB to recognize the new * exception state. For NPC, in theory this counts as a branch @@ -892,9 +893,10 @@ static bool trans_l_mtspr(DisasContext *dc, arg_l_mtspr *a, uint32_t insn) } dc->base.is_jmp = DISAS_EXIT; - ti = tcg_const_i32(a->k); - gen_helper_mtspr(cpu_env, cpu_R[a->a], cpu_R[a->b], ti); - tcg_temp_free_i32(ti); + spr = tcg_temp_new(); + tcg_gen_ori_tl(spr, cpu_R[a->a], a->k); + gen_helper_mtspr(cpu_env, spr, cpu_R[a->b]); + tcg_temp_free(spr); } return true; } From patchwork Mon Jul 2 13:57:52 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 140767 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp6585ljj; Mon, 2 Jul 2018 07:15:38 -0700 (PDT) X-Google-Smtp-Source: AAOMgpfP2KRCMY7J6E2OhTVE8rU5XfSkyurgmlZzAowakEnc+cB3uK0UZvEwjHIO4Oqzyhtfy9mD X-Received: by 2002:ac8:29ef:: with SMTP id 44-v6mr7413315qtt.174.1530540938730; Mon, 02 Jul 2018 07:15:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530540938; cv=none; d=google.com; s=arc-20160816; b=j2S3xsPtpK0NDnLoneqGsBwKA3//7W9OA5yCS3FVNJRbiud/HwQu1IGISNVZEVOF6/ 7k9ycBwlUAueE7c9jBf2EOkCba+A2UnqVX+OLuiZPahcJovpZhIgUD3uSj0L4LMCfoBi 4wTxwPOxe2NsAfbCyoK4/fuqXohJf2VrP4FmMwSKTQ2o86sqa6nJKY5hYDROD3viHARu X9HJGbmWv3EURkiKcEX55/pLCBdwKPoIbJ3ucTVbdOFf+lmGJVdcB2W/aF2kTdIVMSjP zF2KCfxYqopb3fcIc5FnP6u74SPhDNm8Lb9FhzDxuq5MwABj6AMVKjLJmUIfkBaX5gTs Dt/A== 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:arc-authentication-results; bh=v5FrLyXryFF/bWUCf/i79zoVM08Dt+CkMsrtY9ZC8PQ=; b=SpKa8qmfw0p6PEzYSRhRKXZ16EuiSc2rHtUXbwzlCt1IpSqKL0HOO2tAqXb+Oq9+fQ JpHKujt1OeEmMfsqwxZD3HXTMC6RjHFOd8hZwI8qokYM1I139PORTL5RUL8yhFy6gfWf mbxdzvt/4sfbait+AmF7BuCMegC4grKLEO0sMxnLTUbzqu3PdS2NI75GGlUrcB754/ZN O/UYmK0Tq68oZlA69XVOJV4kIi+WMZGjrdnkqaOe6dBWxrmxF9DnV6ph9hSAnjCvdnhi ha5uuAUKPhsNu9oIzQyY45rhAAG75oi2oEI7qAbhxRWRz9McYjlrnphIA9dMLVYbaQUC PSWg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=QXuKmDS5; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id t7-v6si2735634qvn.81.2018.07.02.07.15.38 for (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 02 Jul 2018 07:15:38 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=QXuKmDS5; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from localhost ([::1]:33033 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzcA-000684-23 for patch@linaro.org; Mon, 02 Jul 2018 10:15:38 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47380) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzLo-0002T1-31 for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fZzLl-000895-0o for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:44 -0400 Received: from mail-pg0-x233.google.com ([2607:f8b0:400e:c05::233]:35259) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fZzLk-00088m-On for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:40 -0400 Received: by mail-pg0-x233.google.com with SMTP id i7-v6so7198179pgp.2 for ; Mon, 02 Jul 2018 06:58:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=v5FrLyXryFF/bWUCf/i79zoVM08Dt+CkMsrtY9ZC8PQ=; b=QXuKmDS5YtVgi1XvbO64gV6oirWoVvtGoAFuWDWisWjuvzHvyeK2gU0YZrodr+92se i7nuapXxcjlUUTnGB3nhj7bxjfUrOJxsbv92v6u+Sq1Cf/rGy+t4tY6I7S4Jabb9eLjn cDKbCi/C4p5p2JIetnh2V86sVqs6ksnrKvyR0ygxZ4TllSNy58PS4lRSlWA83Ns3p4BT SefU4nuM3id6+Tkb+bAhV4JFpmCD2jPflPL6NkJxgVQO2Yjog/dwyOi831rqw2ovLEKh M3Huwiah/0+1+i67kIwo1zZJuH7cjHiRa8hyh6b2IXMuUlEA6i6W2OCfNSvaxnDRB2sS dyKw== 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=v5FrLyXryFF/bWUCf/i79zoVM08Dt+CkMsrtY9ZC8PQ=; b=dqhfDlLsnXRz1GpFeu9/nVDW4T3RGn4/hLAvVfvGxs+tQSJWQisAAZKyBL0httvlCD 6ktKPoFw34h4KzQtP/GFmhXc/P4zPGJIpCIM5BZLC4GY5uuGtQLsIXEqtj+6fwW/ZnfM NMpSUbDMsu+9dCXEn7ecGFH+bltervAc2au7IkFSGr3EExx5TLnOW+W+vg/tah7T4a4a 06lBbsFdEc/dy4nXMhEp/AAoSnB2LjORO0C+JyE+AkJ3cDl+eYRx/XqXRXG/e9ITTL5x VArk5jjYz8dFE+PFy/OrWWu93EnzTTWlz+G9xGaKa8xw4uuS3U0nK3IvNElp6USaWDrQ CKlg== X-Gm-Message-State: APt69E3cAWR5/lt04Pbs1lu4DTuKGFlNSyFRIUJmZsdg24S69jNyMSOR 3Otb+KlxkUNsCuv20abcMeMV90Lk X-Received: by 2002:a62:190d:: with SMTP id 13-v6mr13324750pfz.103.1530539919765; Mon, 02 Jul 2018 06:58:39 -0700 (PDT) Received: from localhost (g90.124-44-6.ppp.wakwak.ne.jp. [124.44.6.90]) by smtp.gmail.com with ESMTPSA id 74-v6sm36265659pfj.127.2018.07.02.06.58.38 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 02 Jul 2018 06:58:39 -0700 (PDT) From: Stafford Horne To: Peter Maydell Date: Mon, 2 Jul 2018 22:57:52 +0900 Message-Id: <20180702135806.7087-12-shorne@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180702135806.7087-1-shorne@gmail.com> References: <20180702135806.7087-1-shorne@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::233 Subject: [Qemu-devel] [PULL 11/25] target/openrisc: Merge tlb allocation into CPUOpenRISCState 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: Stafford Horne , Richard Henderson , QEMU Development Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson There is no reason to allocate this separately. This was probably copied from target/mips which makes the same mistake. While doing so, move tlb into the clear-on-reset range. While not all of the TLB bits are guaranteed zero on reset, all of the valid bits are cleared, and the rest of the bits are unspecified. Therefore clearing the whole of the TLB is correct. Reviewed-by: Stafford Horne Signed-off-by: Richard Henderson Signed-off-by: Stafford Horne --- target/openrisc/cpu.h | 6 ++++-- target/openrisc/interrupt.c | 4 ++-- target/openrisc/interrupt_helper.c | 8 +++---- target/openrisc/machine.c | 15 ++++++------- target/openrisc/mmu.c | 34 ++++++++++++++---------------- target/openrisc/sys_helper.c | 28 ++++++++++++------------ 6 files changed, 46 insertions(+), 49 deletions(-) -- 2.17.0 diff --git a/target/openrisc/cpu.h b/target/openrisc/cpu.h index c871d6bfe1..96b7f58659 100644 --- a/target/openrisc/cpu.h +++ b/target/openrisc/cpu.h @@ -301,6 +301,10 @@ typedef struct CPUOpenRISCState { uint32_t dflag; /* In delay slot (boolean) */ +#ifndef CONFIG_USER_ONLY + CPUOpenRISCTLBContext tlb; +#endif + /* Fields up to this point are cleared by a CPU reset */ struct {} end_reset_fields; @@ -310,8 +314,6 @@ typedef struct CPUOpenRISCState { uint32_t cpucfgr; /* CPU configure register */ #ifndef CONFIG_USER_ONLY - CPUOpenRISCTLBContext * tlb; - QEMUTimer *timer; uint32_t ttmr; /* Timer tick mode register */ int is_counting; diff --git a/target/openrisc/interrupt.c b/target/openrisc/interrupt.c index 25351d5de3..2d0b55afa9 100644 --- a/target/openrisc/interrupt.c +++ b/target/openrisc/interrupt.c @@ -63,8 +63,8 @@ void openrisc_cpu_do_interrupt(CPUState *cs) env->sr &= ~SR_TEE; env->pmr &= ~PMR_DME; env->pmr &= ~PMR_SME; - env->tlb->cpu_openrisc_map_address_data = &cpu_openrisc_get_phys_nommu; - env->tlb->cpu_openrisc_map_address_code = &cpu_openrisc_get_phys_nommu; + env->tlb.cpu_openrisc_map_address_data = &cpu_openrisc_get_phys_nommu; + env->tlb.cpu_openrisc_map_address_code = &cpu_openrisc_get_phys_nommu; env->lock_addr = -1; if (exception > 0 && exception < EXCP_NR) { diff --git a/target/openrisc/interrupt_helper.c b/target/openrisc/interrupt_helper.c index b865738f8b..dc97b38704 100644 --- a/target/openrisc/interrupt_helper.c +++ b/target/openrisc/interrupt_helper.c @@ -36,18 +36,18 @@ void HELPER(rfe)(CPUOpenRISCState *env) #ifndef CONFIG_USER_ONLY if (cpu->env.sr & SR_DME) { - cpu->env.tlb->cpu_openrisc_map_address_data = + cpu->env.tlb.cpu_openrisc_map_address_data = &cpu_openrisc_get_phys_data; } else { - cpu->env.tlb->cpu_openrisc_map_address_data = + cpu->env.tlb.cpu_openrisc_map_address_data = &cpu_openrisc_get_phys_nommu; } if (cpu->env.sr & SR_IME) { - cpu->env.tlb->cpu_openrisc_map_address_code = + cpu->env.tlb.cpu_openrisc_map_address_code = &cpu_openrisc_get_phys_code; } else { - cpu->env.tlb->cpu_openrisc_map_address_code = + cpu->env.tlb.cpu_openrisc_map_address_code = &cpu_openrisc_get_phys_nommu; } diff --git a/target/openrisc/machine.c b/target/openrisc/machine.c index 0a793eb14d..c10d28b055 100644 --- a/target/openrisc/machine.c +++ b/target/openrisc/machine.c @@ -30,18 +30,18 @@ static int env_post_load(void *opaque, int version_id) /* Restore MMU handlers */ if (env->sr & SR_DME) { - env->tlb->cpu_openrisc_map_address_data = + env->tlb.cpu_openrisc_map_address_data = &cpu_openrisc_get_phys_data; } else { - env->tlb->cpu_openrisc_map_address_data = + env->tlb.cpu_openrisc_map_address_data = &cpu_openrisc_get_phys_nommu; } if (env->sr & SR_IME) { - env->tlb->cpu_openrisc_map_address_code = + env->tlb.cpu_openrisc_map_address_code = &cpu_openrisc_get_phys_code; } else { - env->tlb->cpu_openrisc_map_address_code = + env->tlb.cpu_openrisc_map_address_code = &cpu_openrisc_get_phys_nommu; } @@ -77,10 +77,6 @@ static const VMStateDescription vmstate_cpu_tlb = { } }; -#define VMSTATE_CPU_TLB(_f, _s) \ - VMSTATE_STRUCT_POINTER(_f, _s, vmstate_cpu_tlb, CPUOpenRISCTLBContext) - - static int get_sr(QEMUFile *f, void *opaque, size_t size, VMStateField *field) { CPUOpenRISCState *env = opaque; @@ -143,7 +139,8 @@ static const VMStateDescription vmstate_env = { VMSTATE_UINT32(fpcsr, CPUOpenRISCState), VMSTATE_UINT64(mac, CPUOpenRISCState), - VMSTATE_CPU_TLB(tlb, CPUOpenRISCState), + VMSTATE_STRUCT(tlb, CPUOpenRISCState, 1, + vmstate_cpu_tlb, CPUOpenRISCTLBContext), VMSTATE_TIMER_PTR(timer, CPUOpenRISCState), VMSTATE_UINT32(ttmr, CPUOpenRISCState), diff --git a/target/openrisc/mmu.c b/target/openrisc/mmu.c index 2bd782f89b..5665bb7cc9 100644 --- a/target/openrisc/mmu.c +++ b/target/openrisc/mmu.c @@ -46,19 +46,19 @@ int cpu_openrisc_get_phys_code(OpenRISCCPU *cpu, int idx = vpn & ITLB_MASK; int right = 0; - if ((cpu->env.tlb->itlb[0][idx].mr >> TARGET_PAGE_BITS) != vpn) { + if ((cpu->env.tlb.itlb[0][idx].mr >> TARGET_PAGE_BITS) != vpn) { return TLBRET_NOMATCH; } - if (!(cpu->env.tlb->itlb[0][idx].mr & 1)) { + if (!(cpu->env.tlb.itlb[0][idx].mr & 1)) { return TLBRET_INVALID; } if (cpu->env.sr & SR_SM) { /* supervisor mode */ - if (cpu->env.tlb->itlb[0][idx].tr & SXE) { + if (cpu->env.tlb.itlb[0][idx].tr & SXE) { right |= PAGE_EXEC; } } else { - if (cpu->env.tlb->itlb[0][idx].tr & UXE) { + if (cpu->env.tlb.itlb[0][idx].tr & UXE) { right |= PAGE_EXEC; } } @@ -67,7 +67,7 @@ int cpu_openrisc_get_phys_code(OpenRISCCPU *cpu, return TLBRET_BADADDR; } - *physical = (cpu->env.tlb->itlb[0][idx].tr & TARGET_PAGE_MASK) | + *physical = (cpu->env.tlb.itlb[0][idx].tr & TARGET_PAGE_MASK) | (address & (TARGET_PAGE_SIZE-1)); *prot = right; return TLBRET_MATCH; @@ -81,25 +81,25 @@ int cpu_openrisc_get_phys_data(OpenRISCCPU *cpu, int idx = vpn & DTLB_MASK; int right = 0; - if ((cpu->env.tlb->dtlb[0][idx].mr >> TARGET_PAGE_BITS) != vpn) { + if ((cpu->env.tlb.dtlb[0][idx].mr >> TARGET_PAGE_BITS) != vpn) { return TLBRET_NOMATCH; } - if (!(cpu->env.tlb->dtlb[0][idx].mr & 1)) { + if (!(cpu->env.tlb.dtlb[0][idx].mr & 1)) { return TLBRET_INVALID; } if (cpu->env.sr & SR_SM) { /* supervisor mode */ - if (cpu->env.tlb->dtlb[0][idx].tr & SRE) { + if (cpu->env.tlb.dtlb[0][idx].tr & SRE) { right |= PAGE_READ; } - if (cpu->env.tlb->dtlb[0][idx].tr & SWE) { + if (cpu->env.tlb.dtlb[0][idx].tr & SWE) { right |= PAGE_WRITE; } } else { - if (cpu->env.tlb->dtlb[0][idx].tr & URE) { + if (cpu->env.tlb.dtlb[0][idx].tr & URE) { right |= PAGE_READ; } - if (cpu->env.tlb->dtlb[0][idx].tr & UWE) { + if (cpu->env.tlb.dtlb[0][idx].tr & UWE) { right |= PAGE_WRITE; } } @@ -111,7 +111,7 @@ int cpu_openrisc_get_phys_data(OpenRISCCPU *cpu, return TLBRET_BADADDR; } - *physical = (cpu->env.tlb->dtlb[0][idx].tr & TARGET_PAGE_MASK) | + *physical = (cpu->env.tlb.dtlb[0][idx].tr & TARGET_PAGE_MASK) | (address & (TARGET_PAGE_SIZE-1)); *prot = right; return TLBRET_MATCH; @@ -126,10 +126,10 @@ static int cpu_openrisc_get_phys_addr(OpenRISCCPU *cpu, if (rw == MMU_INST_FETCH) { /* ITLB */ *physical = 0; - ret = cpu->env.tlb->cpu_openrisc_map_address_code(cpu, physical, + ret = cpu->env.tlb.cpu_openrisc_map_address_code(cpu, physical, prot, address, rw); } else { /* DTLB */ - ret = cpu->env.tlb->cpu_openrisc_map_address_data(cpu, physical, + ret = cpu->env.tlb.cpu_openrisc_map_address_data(cpu, physical, prot, address, rw); } @@ -247,9 +247,7 @@ hwaddr openrisc_cpu_get_phys_page_debug(CPUState *cs, vaddr addr) void cpu_openrisc_mmu_init(OpenRISCCPU *cpu) { - cpu->env.tlb = g_malloc0(sizeof(CPUOpenRISCTLBContext)); - - cpu->env.tlb->cpu_openrisc_map_address_code = &cpu_openrisc_get_phys_nommu; - cpu->env.tlb->cpu_openrisc_map_address_data = &cpu_openrisc_get_phys_nommu; + cpu->env.tlb.cpu_openrisc_map_address_code = &cpu_openrisc_get_phys_nommu; + cpu->env.tlb.cpu_openrisc_map_address_data = &cpu_openrisc_get_phys_nommu; } #endif diff --git a/target/openrisc/sys_helper.c b/target/openrisc/sys_helper.c index 2c959f63f4..ff315f6f1a 100644 --- a/target/openrisc/sys_helper.c +++ b/target/openrisc/sys_helper.c @@ -61,18 +61,18 @@ void HELPER(mtspr)(CPUOpenRISCState *env, target_ulong spr, target_ulong rb) } cpu_set_sr(env, rb); if (env->sr & SR_DME) { - env->tlb->cpu_openrisc_map_address_data = + env->tlb.cpu_openrisc_map_address_data = &cpu_openrisc_get_phys_data; } else { - env->tlb->cpu_openrisc_map_address_data = + env->tlb.cpu_openrisc_map_address_data = &cpu_openrisc_get_phys_nommu; } if (env->sr & SR_IME) { - env->tlb->cpu_openrisc_map_address_code = + env->tlb.cpu_openrisc_map_address_code = &cpu_openrisc_get_phys_code; } else { - env->tlb->cpu_openrisc_map_address_code = + env->tlb.cpu_openrisc_map_address_code = &cpu_openrisc_get_phys_nommu; } break; @@ -101,14 +101,14 @@ void HELPER(mtspr)(CPUOpenRISCState *env, target_ulong spr, target_ulong rb) case TO_SPR(1, 512) ... TO_SPR(1, 512+DTLB_SIZE-1): /* DTLBW0MR 0-127 */ idx = spr - TO_SPR(1, 512); if (!(rb & 1)) { - tlb_flush_page(cs, env->tlb->dtlb[0][idx].mr & TARGET_PAGE_MASK); + tlb_flush_page(cs, env->tlb.dtlb[0][idx].mr & TARGET_PAGE_MASK); } - env->tlb->dtlb[0][idx].mr = rb; + env->tlb.dtlb[0][idx].mr = rb; break; case TO_SPR(1, 640) ... TO_SPR(1, 640+DTLB_SIZE-1): /* DTLBW0TR 0-127 */ idx = spr - TO_SPR(1, 640); - env->tlb->dtlb[0][idx].tr = rb; + env->tlb.dtlb[0][idx].tr = rb; break; case TO_SPR(1, 768) ... TO_SPR(1, 895): /* DTLBW1MR 0-127 */ case TO_SPR(1, 896) ... TO_SPR(1, 1023): /* DTLBW1TR 0-127 */ @@ -120,14 +120,14 @@ void HELPER(mtspr)(CPUOpenRISCState *env, target_ulong spr, target_ulong rb) case TO_SPR(2, 512) ... TO_SPR(2, 512+ITLB_SIZE-1): /* ITLBW0MR 0-127 */ idx = spr - TO_SPR(2, 512); if (!(rb & 1)) { - tlb_flush_page(cs, env->tlb->itlb[0][idx].mr & TARGET_PAGE_MASK); + tlb_flush_page(cs, env->tlb.itlb[0][idx].mr & TARGET_PAGE_MASK); } - env->tlb->itlb[0][idx].mr = rb; + env->tlb.itlb[0][idx].mr = rb; break; case TO_SPR(2, 640) ... TO_SPR(2, 640+ITLB_SIZE-1): /* ITLBW0TR 0-127 */ idx = spr - TO_SPR(2, 640); - env->tlb->itlb[0][idx].tr = rb; + env->tlb.itlb[0][idx].tr = rb; break; case TO_SPR(2, 768) ... TO_SPR(2, 895): /* ITLBW1MR 0-127 */ case TO_SPR(2, 896) ... TO_SPR(2, 1023): /* ITLBW1TR 0-127 */ @@ -259,11 +259,11 @@ target_ulong HELPER(mfspr)(CPUOpenRISCState *env, target_ulong rd, case TO_SPR(1, 512) ... TO_SPR(1, 512+DTLB_SIZE-1): /* DTLBW0MR 0-127 */ idx = spr - TO_SPR(1, 512); - return env->tlb->dtlb[0][idx].mr; + return env->tlb.dtlb[0][idx].mr; case TO_SPR(1, 640) ... TO_SPR(1, 640+DTLB_SIZE-1): /* DTLBW0TR 0-127 */ idx = spr - TO_SPR(1, 640); - return env->tlb->dtlb[0][idx].tr; + return env->tlb.dtlb[0][idx].tr; case TO_SPR(1, 768) ... TO_SPR(1, 895): /* DTLBW1MR 0-127 */ case TO_SPR(1, 896) ... TO_SPR(1, 1023): /* DTLBW1TR 0-127 */ @@ -275,11 +275,11 @@ target_ulong HELPER(mfspr)(CPUOpenRISCState *env, target_ulong rd, case TO_SPR(2, 512) ... TO_SPR(2, 512+ITLB_SIZE-1): /* ITLBW0MR 0-127 */ idx = spr - TO_SPR(2, 512); - return env->tlb->itlb[0][idx].mr; + return env->tlb.itlb[0][idx].mr; case TO_SPR(2, 640) ... TO_SPR(2, 640+ITLB_SIZE-1): /* ITLBW0TR 0-127 */ idx = spr - TO_SPR(2, 640); - return env->tlb->itlb[0][idx].tr; + return env->tlb.itlb[0][idx].tr; case TO_SPR(2, 768) ... TO_SPR(2, 895): /* ITLBW1MR 0-127 */ case TO_SPR(2, 896) ... TO_SPR(2, 1023): /* ITLBW1TR 0-127 */ From patchwork Mon Jul 2 13:57:53 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 140760 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp4040082ljj; Mon, 2 Jul 2018 07:06:32 -0700 (PDT) X-Google-Smtp-Source: AAOMgpfYVL89vzJud8kSymaVlXp+g/2uWDM245GfBgLu0xA/YOD8E4psD/9vC+t0XsmSxzrTMhVx X-Received: by 2002:a37:8b07:: with SMTP id n7-v6mr21884857qkd.353.1530540392581; Mon, 02 Jul 2018 07:06:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530540392; cv=none; d=google.com; s=arc-20160816; b=oQDaZ/eCOZTDV4yaS9px0cIaWpeK8+J847fr4nOuASVPY8gYgOeCuaIxgobqVeLmDJ nr+wa9mfTAuf5WWCJEgX8Zcngw2Ld12Izyl3R9vbYCF/3kt775j+fDS+Uuy6TRR9EwUx zqztTDoBISucuPSKkbXtTPRtz4H0mH8tCsOgJWwzqLiIj1NV95Sl/GQX5lMOhw577YEc kLBoEpLcRV2rpm31d485g+EdhPRONY40VGUft4Vhmoeb/EetOWkooSR4fznEoTJMGurc ut17OFm3bd5Qsqsy1b4Vat1vEEOCkn7QMFznbUa4tFHMJ4sqLGGSGjDebzF7TPmNBHxS M2+w== 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:arc-authentication-results; bh=u+YJliszgwkY8rbcE/JLOHssHRTMCNlXvsTX0k06qok=; b=Fn1ohQyWQEqrRJCbmjsJBpHfqWPUdnnHmvE6oON9zB7XbG+dlea3CTYt2HIFPf11wK KYAgzdIa999UkQnAYDGwKqqyou9H5W7krSEteqHomNNVy623nkdIqwgJsRXO/LW+ieW6 Z3biZwJZFBe2t5bRoVJ2ZKo0MPh4Y4Yypaa0xurdaN0iqWKWSjFMu719Lbu4xT6svnp5 dtR0yIwfA1WUMK/Bsn1ADWRWI3Y1PczyvFRRB3flU3KZhh7WRXCMx1t2YdYoKct18nKp wO8YRYHs/Py7Nr6aUZixvBx3N2CpnfA99rogkI1Ek7aFb5ysBwnHfa57QK7ySXcMUnCG YnVw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=SxqODgB+; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id a23-v6si1939425qva.162.2018.07.02.07.06.32 for (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 02 Jul 2018 07:06:32 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=SxqODgB+; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from localhost ([::1]:32980 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzTM-0007mn-0z for patch@linaro.org; Mon, 02 Jul 2018 10:06:32 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47390) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzLp-0002Tq-1N for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fZzLn-0008AY-I9 for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:45 -0400 Received: from mail-pg0-x22a.google.com ([2607:f8b0:400e:c05::22a]:34248) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fZzLn-0008AF-8b for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:43 -0400 Received: by mail-pg0-x22a.google.com with SMTP id y5-v6so917431pgv.1 for ; Mon, 02 Jul 2018 06:58:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=u+YJliszgwkY8rbcE/JLOHssHRTMCNlXvsTX0k06qok=; b=SxqODgB+zW2UCdwuMXdePb+ZVbRRMC2TXMzfujN289jK2QDOF/CEVU0DpuyoipFBnz trSYGjyaVHUja9+kdmNHC4uKSMsPZ3rMTXOuZr5FlLYQlW2TZ3Dnig6qmBNcAAyhOJk5 55GMGhs9jugBoxpumLf7kPpmH3RJjsZ0vqVAPCoDYuQGOWBq8jh23R3kBsSiUq8Cyj/T EQi6vakdqA7qNyKh55xg1YhblcPkpc6fyyze01O7+TxmNpqOeR+4n/sGVAhIeU5mF2q5 7vIBZY3P62TFIzqNCw1F79H3YnEqSGSYtj33KD6OCwDOKmNBz8Z0oAtnkOyZOgALGsL4 qiAg== 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=u+YJliszgwkY8rbcE/JLOHssHRTMCNlXvsTX0k06qok=; b=MUUT4lWiInKEr9gJErixL3gyf45opPR5/h+bm4ZDZYXz0p+TvInLmIMlJ6uH9hC0s8 RmJABS1hrgL2YknEBXmOewaMe7/vRKYFa4/AX0YQCPoF3xuROVyOXl90sBFbUsMmCgqC 99zG5qF6CQDxqAyX0/rOSI9QTrwYq//xiiJQcAh4+tVwNIfg4KFTLPJ/aO2dnok5u2oE ZlS4GgTOJ4BXkBafZGnaLPoMTYGswZy60xFz2IeqR+Uemdp2rnxt98nv22U8z8RMq5dA VYNPScl4yJK0vGrsIoLHFMxZGUp6sJKEPG0wUz8LabCbTvOFh+a8f0kOcms9BBR9UBpo KdsA== X-Gm-Message-State: APt69E2LjYEyRpyYEtqOeWrTM3RYGMLEbNUMUwkhqkFO4L2LouvzYfs5 98nJx6SUakMjIfpRRQ+UP8Y= X-Received: by 2002:a62:c8c2:: with SMTP id i63-v6mr9709810pfk.73.1530539922209; Mon, 02 Jul 2018 06:58:42 -0700 (PDT) Received: from localhost (g90.124-44-6.ppp.wakwak.ne.jp. [124.44.6.90]) by smtp.gmail.com with ESMTPSA id i188-v6sm17044357pfc.3.2018.07.02.06.58.41 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 02 Jul 2018 06:58:41 -0700 (PDT) From: Stafford Horne To: Peter Maydell Date: Mon, 2 Jul 2018 22:57:53 +0900 Message-Id: <20180702135806.7087-13-shorne@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180702135806.7087-1-shorne@gmail.com> References: <20180702135806.7087-1-shorne@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::22a Subject: [Qemu-devel] [PULL 12/25] target/openrisc: Remove indirect function calls for mmu 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: Stafford Horne , Richard Henderson , QEMU Development Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson There is no reason to use an indirect branch instead of simply testing the SR bits that control mmu state. Signed-off-by: Richard Henderson Signed-off-by: Stafford Horne --- target/openrisc/cpu.c | 4 -- target/openrisc/cpu.h | 11 ----- target/openrisc/interrupt.c | 2 - target/openrisc/interrupt_helper.c | 25 ++--------- target/openrisc/machine.c | 26 ------------ target/openrisc/mmu.c | 68 +++++++++++++----------------- target/openrisc/sys_helper.c | 15 ------- 7 files changed, 32 insertions(+), 119 deletions(-) -- 2.17.0 diff --git a/target/openrisc/cpu.c b/target/openrisc/cpu.c index fa8e342ff7..b92de51ecf 100644 --- a/target/openrisc/cpu.c +++ b/target/openrisc/cpu.c @@ -92,10 +92,6 @@ static void openrisc_cpu_initfn(Object *obj) OpenRISCCPU *cpu = OPENRISC_CPU(obj); cs->env_ptr = &cpu->env; - -#ifndef CONFIG_USER_ONLY - cpu_openrisc_mmu_init(cpu); -#endif } /* CPU models */ diff --git a/target/openrisc/cpu.h b/target/openrisc/cpu.h index 96b7f58659..a27adad085 100644 --- a/target/openrisc/cpu.h +++ b/target/openrisc/cpu.h @@ -379,17 +379,6 @@ void cpu_openrisc_count_update(OpenRISCCPU *cpu); void cpu_openrisc_timer_update(OpenRISCCPU *cpu); void cpu_openrisc_count_start(OpenRISCCPU *cpu); void cpu_openrisc_count_stop(OpenRISCCPU *cpu); - -void cpu_openrisc_mmu_init(OpenRISCCPU *cpu); -int cpu_openrisc_get_phys_nommu(OpenRISCCPU *cpu, - hwaddr *physical, - int *prot, target_ulong address, int rw); -int cpu_openrisc_get_phys_code(OpenRISCCPU *cpu, - hwaddr *physical, - int *prot, target_ulong address, int rw); -int cpu_openrisc_get_phys_data(OpenRISCCPU *cpu, - hwaddr *physical, - int *prot, target_ulong address, int rw); #endif #define OPENRISC_CPU_TYPE_SUFFIX "-" TYPE_OPENRISC_CPU diff --git a/target/openrisc/interrupt.c b/target/openrisc/interrupt.c index 2d0b55afa9..23abcf29ed 100644 --- a/target/openrisc/interrupt.c +++ b/target/openrisc/interrupt.c @@ -63,8 +63,6 @@ void openrisc_cpu_do_interrupt(CPUState *cs) env->sr &= ~SR_TEE; env->pmr &= ~PMR_DME; env->pmr &= ~PMR_SME; - env->tlb.cpu_openrisc_map_address_data = &cpu_openrisc_get_phys_nommu; - env->tlb.cpu_openrisc_map_address_code = &cpu_openrisc_get_phys_nommu; env->lock_addr = -1; if (exception > 0 && exception < EXCP_NR) { diff --git a/target/openrisc/interrupt_helper.c b/target/openrisc/interrupt_helper.c index dc97b38704..a2e9003969 100644 --- a/target/openrisc/interrupt_helper.c +++ b/target/openrisc/interrupt_helper.c @@ -29,31 +29,12 @@ void HELPER(rfe)(CPUOpenRISCState *env) #ifndef CONFIG_USER_ONLY int need_flush_tlb = (cpu->env.sr & (SR_SM | SR_IME | SR_DME)) ^ (cpu->env.esr & (SR_SM | SR_IME | SR_DME)); -#endif - cpu->env.pc = cpu->env.epcr; - cpu_set_sr(&cpu->env, cpu->env.esr); - cpu->env.lock_addr = -1; - -#ifndef CONFIG_USER_ONLY - if (cpu->env.sr & SR_DME) { - cpu->env.tlb.cpu_openrisc_map_address_data = - &cpu_openrisc_get_phys_data; - } else { - cpu->env.tlb.cpu_openrisc_map_address_data = - &cpu_openrisc_get_phys_nommu; - } - - if (cpu->env.sr & SR_IME) { - cpu->env.tlb.cpu_openrisc_map_address_code = - &cpu_openrisc_get_phys_code; - } else { - cpu->env.tlb.cpu_openrisc_map_address_code = - &cpu_openrisc_get_phys_nommu; - } - if (need_flush_tlb) { CPUState *cs = CPU(cpu); tlb_flush(cs); } #endif + cpu->env.pc = cpu->env.epcr; + cpu->env.lock_addr = -1; + cpu_set_sr(&cpu->env, cpu->env.esr); } diff --git a/target/openrisc/machine.c b/target/openrisc/machine.c index c10d28b055..73e0abcfd7 100644 --- a/target/openrisc/machine.c +++ b/target/openrisc/machine.c @@ -24,31 +24,6 @@ #include "hw/boards.h" #include "migration/cpu.h" -static int env_post_load(void *opaque, int version_id) -{ - CPUOpenRISCState *env = opaque; - - /* Restore MMU handlers */ - if (env->sr & SR_DME) { - env->tlb.cpu_openrisc_map_address_data = - &cpu_openrisc_get_phys_data; - } else { - env->tlb.cpu_openrisc_map_address_data = - &cpu_openrisc_get_phys_nommu; - } - - if (env->sr & SR_IME) { - env->tlb.cpu_openrisc_map_address_code = - &cpu_openrisc_get_phys_code; - } else { - env->tlb.cpu_openrisc_map_address_code = - &cpu_openrisc_get_phys_nommu; - } - - - return 0; -} - static const VMStateDescription vmstate_tlb_entry = { .name = "tlb_entry", .version_id = 1, @@ -102,7 +77,6 @@ static const VMStateDescription vmstate_env = { .name = "env", .version_id = 6, .minimum_version_id = 6, - .post_load = env_post_load, .fields = (VMStateField[]) { VMSTATE_UINTTL_2DARRAY(shadow_gpr, CPUOpenRISCState, 16, 32), VMSTATE_UINTTL(pc, CPUOpenRISCState), diff --git a/target/openrisc/mmu.c b/target/openrisc/mmu.c index 5665bb7cc9..b2effaa6d7 100644 --- a/target/openrisc/mmu.c +++ b/target/openrisc/mmu.c @@ -29,18 +29,16 @@ #endif #ifndef CONFIG_USER_ONLY -int cpu_openrisc_get_phys_nommu(OpenRISCCPU *cpu, - hwaddr *physical, - int *prot, target_ulong address, int rw) +static inline int get_phys_nommu(hwaddr *physical, int *prot, + target_ulong address) { *physical = address; *prot = PAGE_READ | PAGE_WRITE | PAGE_EXEC; return TLBRET_MATCH; } -int cpu_openrisc_get_phys_code(OpenRISCCPU *cpu, - hwaddr *physical, - int *prot, target_ulong address, int rw) +static int get_phys_code(OpenRISCCPU *cpu, hwaddr *physical, int *prot, + target_ulong address, int rw, bool supervisor) { int vpn = address >> TARGET_PAGE_BITS; int idx = vpn & ITLB_MASK; @@ -52,8 +50,7 @@ int cpu_openrisc_get_phys_code(OpenRISCCPU *cpu, if (!(cpu->env.tlb.itlb[0][idx].mr & 1)) { return TLBRET_INVALID; } - - if (cpu->env.sr & SR_SM) { /* supervisor mode */ + if (supervisor) { if (cpu->env.tlb.itlb[0][idx].tr & SXE) { right |= PAGE_EXEC; } @@ -62,7 +59,6 @@ int cpu_openrisc_get_phys_code(OpenRISCCPU *cpu, right |= PAGE_EXEC; } } - if ((rw & 2) && ((right & PAGE_EXEC) == 0)) { return TLBRET_BADADDR; } @@ -73,9 +69,8 @@ int cpu_openrisc_get_phys_code(OpenRISCCPU *cpu, return TLBRET_MATCH; } -int cpu_openrisc_get_phys_data(OpenRISCCPU *cpu, - hwaddr *physical, - int *prot, target_ulong address, int rw) +static int get_phys_data(OpenRISCCPU *cpu, hwaddr *physical, int *prot, + target_ulong address, int rw, bool supervisor) { int vpn = address >> TARGET_PAGE_BITS; int idx = vpn & DTLB_MASK; @@ -87,8 +82,7 @@ int cpu_openrisc_get_phys_data(OpenRISCCPU *cpu, if (!(cpu->env.tlb.dtlb[0][idx].mr & 1)) { return TLBRET_INVALID; } - - if (cpu->env.sr & SR_SM) { /* supervisor mode */ + if (supervisor) { if (cpu->env.tlb.dtlb[0][idx].tr & SRE) { right |= PAGE_READ; } @@ -117,20 +111,24 @@ int cpu_openrisc_get_phys_data(OpenRISCCPU *cpu, return TLBRET_MATCH; } -static int cpu_openrisc_get_phys_addr(OpenRISCCPU *cpu, - hwaddr *physical, - int *prot, target_ulong address, - int rw) +static int get_phys_addr(OpenRISCCPU *cpu, hwaddr *physical, + int *prot, target_ulong address, int rw) { - int ret = TLBRET_MATCH; - - if (rw == MMU_INST_FETCH) { /* ITLB */ - *physical = 0; - ret = cpu->env.tlb.cpu_openrisc_map_address_code(cpu, physical, - prot, address, rw); - } else { /* DTLB */ - ret = cpu->env.tlb.cpu_openrisc_map_address_data(cpu, physical, - prot, address, rw); + bool supervisor = (cpu->env.sr & SR_SM) != 0; + int ret; + + /* Assume nommu results for a moment. */ + ret = get_phys_nommu(physical, prot, address); + + /* Overwrite with TLB lookup if enabled. */ + if (rw == MMU_INST_FETCH) { + if (cpu->env.sr & SR_IME) { + ret = get_phys_code(cpu, physical, prot, address, rw, supervisor); + } + } else { + if (cpu->env.sr & SR_DME) { + ret = get_phys_data(cpu, physical, prot, address, rw, supervisor); + } } return ret; @@ -186,8 +184,7 @@ int openrisc_cpu_handle_mmu_fault(CPUState *cs, vaddr address, int size, hwaddr physical = 0; int prot = 0; - ret = cpu_openrisc_get_phys_addr(cpu, &physical, &prot, - address, rw); + ret = get_phys_addr(cpu, &physical, &prot, address, rw); if (ret == TLBRET_MATCH) { tlb_set_page(cs, address & TARGET_PAGE_MASK, @@ -225,17 +222,16 @@ hwaddr openrisc_cpu_get_phys_page_debug(CPUState *cs, vaddr addr) /* Check memory for any kind of address, since during debug the gdb can ask for anything, check data tlb for address */ - miss = cpu_openrisc_get_phys_addr(cpu, &phys_addr, &prot, addr, 0); + miss = get_phys_addr(cpu, &phys_addr, &prot, addr, 0); /* Check instruction tlb */ if (miss) { - miss = cpu_openrisc_get_phys_addr(cpu, &phys_addr, &prot, addr, - MMU_INST_FETCH); + miss = get_phys_addr(cpu, &phys_addr, &prot, addr, MMU_INST_FETCH); } /* Last, fall back to a plain address */ if (miss) { - miss = cpu_openrisc_get_phys_nommu(cpu, &phys_addr, &prot, addr, 0); + miss = get_phys_nommu(&phys_addr, &prot, addr); } if (miss) { @@ -244,10 +240,4 @@ hwaddr openrisc_cpu_get_phys_page_debug(CPUState *cs, vaddr addr) return phys_addr; } } - -void cpu_openrisc_mmu_init(OpenRISCCPU *cpu) -{ - cpu->env.tlb.cpu_openrisc_map_address_code = &cpu_openrisc_get_phys_nommu; - cpu->env.tlb.cpu_openrisc_map_address_data = &cpu_openrisc_get_phys_nommu; -} #endif diff --git a/target/openrisc/sys_helper.c b/target/openrisc/sys_helper.c index ff315f6f1a..9b4339b34e 100644 --- a/target/openrisc/sys_helper.c +++ b/target/openrisc/sys_helper.c @@ -60,21 +60,6 @@ void HELPER(mtspr)(CPUOpenRISCState *env, target_ulong spr, target_ulong rb) tlb_flush(cs); } cpu_set_sr(env, rb); - if (env->sr & SR_DME) { - env->tlb.cpu_openrisc_map_address_data = - &cpu_openrisc_get_phys_data; - } else { - env->tlb.cpu_openrisc_map_address_data = - &cpu_openrisc_get_phys_nommu; - } - - if (env->sr & SR_IME) { - env->tlb.cpu_openrisc_map_address_code = - &cpu_openrisc_get_phys_code; - } else { - env->tlb.cpu_openrisc_map_address_code = - &cpu_openrisc_get_phys_nommu; - } break; case TO_SPR(0, 18): /* PPC */ From patchwork Mon Jul 2 13:57:54 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 140761 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp4040681ljj; Mon, 2 Jul 2018 07:07:02 -0700 (PDT) X-Google-Smtp-Source: AAOMgpcNIF8zmvSOIkiimTMR6uVzQK37WMBS0NBEo7a4SpkVwVpI13UEMnEDQ7Ftb/LYV5qVryIS X-Received: by 2002:ac8:1c5c:: with SMTP id j28-v6mr6937805qtk.365.1530540421933; Mon, 02 Jul 2018 07:07:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530540421; cv=none; d=google.com; s=arc-20160816; b=wB4suoYT2tWFsuylBddJUc7d7jIQhffaqCMqoLQG+75cHz+4LrORKq2sz3daePOozE ogVYCo9qAuqOzQqzPXCo0I3gIRKY1jw8dNI+8Nmx9weLso69T8A3xi3xJeSvNrZymYxy 6qSw2QOjNQmpQI+MgXAmrxPPqU20UV/Z+yAFnq2sAe4oJkArQkWhDf/6HqXJUpUCMbnx iQCxYklEE8scEJ+unBBRTNIdcvcfFOC4Bw6c2O2t5oOSG+poOncVg1Lo1WuBkB2MgQMo U5D/1RKi7gY6gRUrbbTZOii9mljgYLippz4zPJ2z2oCtiJ6znwhg8cvuSVUx1q2Y68mi KDfA== 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 :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:arc-authentication-results; bh=MjW6dn4TOEFg6KjmG/SOXMb8i7HIhfULuWj/uo0zFYU=; b=oMstBYow73ltlVM5aXGJqN5XKqNUKrzghKMyrf/PR6/cFxX7NQtEqbjVu9varaTd0N DaRcsC5oW4/tSuB1/4xbejJPBWUbRi4WgL7DgJoAyP5b/gCIJOutjgWjGO7hxhwGxR3w vT6DDybi23RGRYsdrpipwHCX6ZS5IGxDgVIFfyQkFKuv0GzVQhq6GsMr+efGtnOKqtds ++8z2/MAy1DxY7llvSCNB7v0a5qepGwWHAPUQln9XQQYl8V9f51XsOaQw28GIwHuA6PQ 6DZ8W4d/bypCP9q0sOzn+jIF7jfNmjkcmbnUMJmD5hcvctnQbLRgVHgpRsvCnKcbLp/o 9SNg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=QWSjcuJC; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id n66-v6si5525768qkf.34.2018.07.02.07.07.01 for (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 02 Jul 2018 07:07:01 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=QWSjcuJC; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from localhost ([::1]:32984 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzTp-0000Ln-92 for patch@linaro.org; Mon, 02 Jul 2018 10:07:01 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47426) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzLq-0002VT-V4 for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fZzLp-0008Bw-T7 for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:47 -0400 Received: from mail-pl0-x243.google.com ([2607:f8b0:400e:c01::243]:32902) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fZzLp-0008BW-NX for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:45 -0400 Received: by mail-pl0-x243.google.com with SMTP id 6-v6so8012448plb.0 for ; Mon, 02 Jul 2018 06:58:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=MjW6dn4TOEFg6KjmG/SOXMb8i7HIhfULuWj/uo0zFYU=; b=QWSjcuJCadO5sPkVPPGngElhpbQ1ZvOglxh8U1oA/bZDtvClqFXJhaCUn6Jw6vluaM 5MPDkUPi+3gmtZxI6JTeWoefDSHPxmnkQJp7gwrmECAfJjg+2qL+pH8rUpoXUHiW4LNm z7wsKPBhMuNi/o6L95tqYpNqYyeq8QD5ZO9yuTQV7UkaxLiFO2DawaGp8nboJnn8FU+J Ixeo3gV7Yqmt4ImILh5CWIC8+PfzJbRNavJXq2FSHfbXgkxKeh/GWGSc5E4JD9/OAu3e t+Q3CviGm6OaaIYpkz4dhuw5YvV7atwpXWOgy85lES+dOZDmzg+j1srmC4DUVy+bbWuT vtWg== 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:mime-version:content-transfer-encoding; bh=MjW6dn4TOEFg6KjmG/SOXMb8i7HIhfULuWj/uo0zFYU=; b=NLl3NbTCi9xGAb91q/UTCrSy+rbt6uS84LmBQ5I5s4vIyqkKQ43Hee/ITj9wTl8jL9 /ZB47ADt9aNCvdsFEfHCcocoZIpwBdjLRdBK7UM3xKThPZetEPJEfR/F6Qo8XnELLxtn ryajNworyXa5RtzCcI8fpsqmBjQJUN2LtXwuYc/xBHPVjYwRmzoq1AQ9d5ljw1kSYKSs RnV/VpSl9aAbkV4jDEb1jzFDn9/Ziqv+mQb+cg5bSEGbvgoSokAuKJOQMhU71HGNWugi Qth6WieIeZA5zdMrWuKoPxcfwoGXSiYQAM9V0wGOKDMfg/6007e+Kx1Pxkvn5dgG47dp F1sA== X-Gm-Message-State: APt69E21lTSjb3ZkVBhWZh9gzLMgldbSgiISP8qqacaj2le/KdQMKoSH XEKkqrNtx0YR/VmghvuGkUVrVxfJ X-Received: by 2002:a17:902:6e09:: with SMTP id u9-v6mr25395794plk.13.1530539924740; Mon, 02 Jul 2018 06:58:44 -0700 (PDT) Received: from localhost (g90.124-44-6.ppp.wakwak.ne.jp. [124.44.6.90]) by smtp.gmail.com with ESMTPSA id a8-v6sm32546089pfe.72.2018.07.02.06.58.43 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 02 Jul 2018 06:58:44 -0700 (PDT) From: Stafford Horne To: Peter Maydell Date: Mon, 2 Jul 2018 22:57:54 +0900 Message-Id: <20180702135806.7087-14-shorne@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180702135806.7087-1-shorne@gmail.com> References: <20180702135806.7087-1-shorne@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c01::243 Subject: [Qemu-devel] [PULL 13/25] target/openrisc: Merge mmu_helper.c into mmu.c 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: Stafford Horne , Richard Henderson , QEMU Development Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson With tlb_fill in mmu.c, we can simplify things further. Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: Richard Henderson Signed-off-by: Stafford Horne --- target/openrisc/Makefile.objs | 2 +- target/openrisc/mmu.c | 11 ++++++++++ target/openrisc/mmu_helper.c | 40 ----------------------------------- 3 files changed, 12 insertions(+), 41 deletions(-) delete mode 100644 target/openrisc/mmu_helper.c -- 2.17.0 diff --git a/target/openrisc/Makefile.objs b/target/openrisc/Makefile.objs index 8b8a890c59..b5432f4684 100644 --- a/target/openrisc/Makefile.objs +++ b/target/openrisc/Makefile.objs @@ -1,7 +1,7 @@ obj-$(CONFIG_SOFTMMU) += machine.o obj-y += cpu.o exception.o interrupt.o mmu.o translate.o disas.o obj-y += exception_helper.o fpu_helper.o \ - interrupt_helper.o mmu_helper.o sys_helper.o + interrupt_helper.o sys_helper.o obj-y += gdbstub.o DECODETREE = $(SRC_PATH)/scripts/decodetree.py diff --git a/target/openrisc/mmu.c b/target/openrisc/mmu.c index b2effaa6d7..9b4b5cf04f 100644 --- a/target/openrisc/mmu.c +++ b/target/openrisc/mmu.c @@ -240,4 +240,15 @@ hwaddr openrisc_cpu_get_phys_page_debug(CPUState *cs, vaddr addr) return phys_addr; } } + +void tlb_fill(CPUState *cs, target_ulong addr, int size, + MMUAccessType access_type, int mmu_idx, uintptr_t retaddr) +{ + int ret = openrisc_cpu_handle_mmu_fault(cs, addr, size, + access_type, mmu_idx); + if (ret) { + /* Raise Exception. */ + cpu_loop_exit_restore(cs, retaddr); + } +} #endif diff --git a/target/openrisc/mmu_helper.c b/target/openrisc/mmu_helper.c deleted file mode 100644 index 97e1d17b5a..0000000000 --- a/target/openrisc/mmu_helper.c +++ /dev/null @@ -1,40 +0,0 @@ -/* - * OpenRISC MMU helper routines - * - * Copyright (c) 2011-2012 Jia Liu - * Zhizhou Zhang - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, see . - */ - -#include "qemu/osdep.h" -#include "cpu.h" -#include "exec/exec-all.h" -#include "exec/cpu_ldst.h" - -#ifndef CONFIG_USER_ONLY - -void tlb_fill(CPUState *cs, target_ulong addr, int size, - MMUAccessType access_type, int mmu_idx, uintptr_t retaddr) -{ - int ret; - - ret = openrisc_cpu_handle_mmu_fault(cs, addr, size, access_type, mmu_idx); - - if (ret) { - /* Raise Exception. */ - cpu_loop_exit_restore(cs, retaddr); - } -} -#endif From patchwork Mon Jul 2 13:57:55 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 140768 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp8881ljj; Mon, 2 Jul 2018 07:17:33 -0700 (PDT) X-Google-Smtp-Source: AAOMgpfC+VJqlwC/k9v3zAlWJbu+yYRHdIJIVSrUV5kYi72LMAhj2JeMhMuBg76n8t0X9i2Sk/Lr X-Received: by 2002:a37:7486:: with SMTP id p128-v6mr22488723qkc.335.1530541052696; Mon, 02 Jul 2018 07:17:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530541052; cv=none; d=google.com; s=arc-20160816; b=rTyUm2d7EhKpmk69lF5dAe9TIaB+YhE9JHqg18NWQqHYlA8mRqzLMfvoFti+V6b90g Fg11i8K3G6trIft0ZAVdShXscXY0ji5hSxxaSyLtFA2K71o3j6/K5dre8bEQVtDXeRnw IDmE/P/8bnp6R0IAWxtBHxfZu3WcfZCaYOeEmHgSDD6yrySSWr2Sa1mQZ0UW278GBqYQ PrYzGsQDRhpRcsamx4B2IeAycX+2r08Qqa7yWmkHlhKuYG6xCPxrM6YTCi3OLCqHIVFN ZXxpK8BHXZ2ZkWS+asfGc3pNUTMktTTfkHJsfEyalVzDdm8X7BBtvJ0tdrSCRiWP96hL 3erg== 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 :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:arc-authentication-results; bh=uw6bwresnlFax+lm1Y0j99UCglnsMaf1UI+tOn5Xj+c=; b=t6J1Lmgk2L2dOzOXFOWKlAED3Uc9r8fwDCK8LqZOkxo1vBa3tt4f8ZpnAQBDASqEtM xXCHj5cMOrPYaoNaVXfB46Erz4QMPOtPJxCVcw83IhTPPuCmYloDIiejT0cDQesE8C35 OIFgD+kdCfhyktAs7ZPGGyTeIJp3RWFGa8rdi4IuzBwjxaRZ76bEj0TeHIhvKbNJnW/q qbe+BZKYZaoIR1i+u4RjvuaR492u/nJ+eq7mSEjv+MD8yPbzPE7ZpGMT9wTmCPrn05+z zqNs3fl/gvcUYiLNKcVWYu1tW1DDzbbjXrYXYcs3YNaAcnLeqWD4WAi9atS34VYgVmCU 4QNg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=ANACvuQK; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id e10-v6si1355410qtm.20.2018.07.02.07.17.32 for (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 02 Jul 2018 07:17:32 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=ANACvuQK; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from localhost ([::1]:33054 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZze0-0007D5-61 for patch@linaro.org; Mon, 02 Jul 2018 10:17:32 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47495) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzLt-0002YB-UL for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fZzLs-0008E1-GN for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:50 -0400 Received: from mail-pf0-x243.google.com ([2607:f8b0:400e:c00::243]:43702) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fZzLs-0008DR-8R for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:48 -0400 Received: by mail-pf0-x243.google.com with SMTP id y8-v6so7564066pfm.10 for ; Mon, 02 Jul 2018 06:58:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=uw6bwresnlFax+lm1Y0j99UCglnsMaf1UI+tOn5Xj+c=; b=ANACvuQKnGIWwgr6b9sDUPwV64i3yEm1DAxtWJ6/2KhFxgW44w1si287EO0e0WtPDg E1Y5oKfFo6fHBbVD1T6zal5RIPYsQNcPI0MkoYS1H01+OOqaItPYvtrAD3/sIdSsZewH s24wR/ONfbpMtu9TEFdQU7Efi+CXdSHJpJzIvBNMGXtdHh4a9Yb2O6r+M2YUikxUfhFi mSNgtpZ7F/SkY99Ni2YkqWDYZM5NI0dT5jP8jU5Aepyk7w86zA5BFSNESVQNLLuVfzVC RN5Dz8WvDjgo9fQp2dAjHu6ZmqBXuNDOomGbiLC+AYOPm+sCvu+DwqW+sn94mfyg5Lmf 5MGw== 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:mime-version:content-transfer-encoding; bh=uw6bwresnlFax+lm1Y0j99UCglnsMaf1UI+tOn5Xj+c=; b=oSzllPuXbjx7rLpfi6NlEA5e3JSVxnP0YZxFQ/z90Z3veqgmmhpl5b4cXqoBK1F6tM Y5QrwU1krI0jdcAoIlRwuwIMto4kzkfGTsSL+pOpGRV82RULPVP5TSWJAMd3zB+cSLmQ YGa/XRxlQYXXPlYQT6y82QjJ0aOWAukOsGk/zS2mJa7xT3a3Ch38xck1zyJg/H0Xn40A C5RcU4rpADFWt2/LsuXowYOSRvrkXDo75M47NB10s6CNl1S6WCo0wb9TNOzjQfgZlgqM z8AS9WUCVDDqAakERMVJHM5n4lF/NjEUky4qIVL6RxEwvLy+WhSLPOpzO+37tOF5zQtZ 74XQ== X-Gm-Message-State: APt69E03x//8hesrYfug9c+1O7bZYJ47tMobP+wLEMekLXvWOOzVHC6G M9St4qwwAQmlsJhu1RJe4ZM57guR X-Received: by 2002:a62:d646:: with SMTP id r67-v6mr15103896pfg.130.1530539927191; Mon, 02 Jul 2018 06:58:47 -0700 (PDT) Received: from localhost (g90.124-44-6.ppp.wakwak.ne.jp. [124.44.6.90]) by smtp.gmail.com with ESMTPSA id 86-v6sm43144740pfp.17.2018.07.02.06.58.46 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 02 Jul 2018 06:58:46 -0700 (PDT) From: Stafford Horne To: Peter Maydell Date: Mon, 2 Jul 2018 22:57:55 +0900 Message-Id: <20180702135806.7087-15-shorne@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180702135806.7087-1-shorne@gmail.com> References: <20180702135806.7087-1-shorne@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c00::243 Subject: [Qemu-devel] [PULL 14/25] target/openrisc: Reduce tlb to a single dimension 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: Stafford Horne , Richard Henderson , QEMU Development Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson While we had defines for *_WAYS, we didn't define more than 1. Reduce the complexity by eliminating this unused dimension. Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: Richard Henderson Signed-off-by: Stafford Horne --- target/openrisc/cpu.h | 6 ++---- target/openrisc/machine.c | 6 ++---- target/openrisc/mmu.c | 30 ++++++++++++++++-------------- target/openrisc/sys_helper.c | 20 ++++++++++---------- 4 files changed, 30 insertions(+), 32 deletions(-) -- 2.17.0 diff --git a/target/openrisc/cpu.h b/target/openrisc/cpu.h index a27adad085..eaf6cdd40e 100644 --- a/target/openrisc/cpu.h +++ b/target/openrisc/cpu.h @@ -222,10 +222,8 @@ enum { /* TLB size */ enum { - DTLB_WAYS = 1, DTLB_SIZE = 64, DTLB_MASK = (DTLB_SIZE-1), - ITLB_WAYS = 1, ITLB_SIZE = 64, ITLB_MASK = (ITLB_SIZE-1), }; @@ -256,8 +254,8 @@ typedef struct OpenRISCTLBEntry { #ifndef CONFIG_USER_ONLY typedef struct CPUOpenRISCTLBContext { - OpenRISCTLBEntry itlb[ITLB_WAYS][ITLB_SIZE]; - OpenRISCTLBEntry dtlb[DTLB_WAYS][DTLB_SIZE]; + OpenRISCTLBEntry itlb[ITLB_SIZE]; + OpenRISCTLBEntry dtlb[DTLB_SIZE]; int (*cpu_openrisc_map_address_code)(struct OpenRISCCPU *cpu, hwaddr *physical, diff --git a/target/openrisc/machine.c b/target/openrisc/machine.c index 73e0abcfd7..b795b56dc6 100644 --- a/target/openrisc/machine.c +++ b/target/openrisc/machine.c @@ -42,11 +42,9 @@ static const VMStateDescription vmstate_cpu_tlb = { .minimum_version_id = 1, .minimum_version_id_old = 1, .fields = (VMStateField[]) { - VMSTATE_STRUCT_2DARRAY(itlb, CPUOpenRISCTLBContext, - ITLB_WAYS, ITLB_SIZE, 0, + VMSTATE_STRUCT_ARRAY(itlb, CPUOpenRISCTLBContext, ITLB_SIZE, 0, vmstate_tlb_entry, OpenRISCTLBEntry), - VMSTATE_STRUCT_2DARRAY(dtlb, CPUOpenRISCTLBContext, - DTLB_WAYS, DTLB_SIZE, 0, + VMSTATE_STRUCT_ARRAY(dtlb, CPUOpenRISCTLBContext, DTLB_SIZE, 0, vmstate_tlb_entry, OpenRISCTLBEntry), VMSTATE_END_OF_LIST() } diff --git a/target/openrisc/mmu.c b/target/openrisc/mmu.c index 9b4b5cf04f..856969a7f2 100644 --- a/target/openrisc/mmu.c +++ b/target/openrisc/mmu.c @@ -43,19 +43,21 @@ static int get_phys_code(OpenRISCCPU *cpu, hwaddr *physical, int *prot, int vpn = address >> TARGET_PAGE_BITS; int idx = vpn & ITLB_MASK; int right = 0; + uint32_t mr = cpu->env.tlb.itlb[idx].mr; + uint32_t tr = cpu->env.tlb.itlb[idx].tr; - if ((cpu->env.tlb.itlb[0][idx].mr >> TARGET_PAGE_BITS) != vpn) { + if ((mr >> TARGET_PAGE_BITS) != vpn) { return TLBRET_NOMATCH; } - if (!(cpu->env.tlb.itlb[0][idx].mr & 1)) { + if (!(mr & 1)) { return TLBRET_INVALID; } if (supervisor) { - if (cpu->env.tlb.itlb[0][idx].tr & SXE) { + if (tr & SXE) { right |= PAGE_EXEC; } } else { - if (cpu->env.tlb.itlb[0][idx].tr & UXE) { + if (tr & UXE) { right |= PAGE_EXEC; } } @@ -63,8 +65,7 @@ static int get_phys_code(OpenRISCCPU *cpu, hwaddr *physical, int *prot, return TLBRET_BADADDR; } - *physical = (cpu->env.tlb.itlb[0][idx].tr & TARGET_PAGE_MASK) | - (address & (TARGET_PAGE_SIZE-1)); + *physical = (tr & TARGET_PAGE_MASK) | (address & ~TARGET_PAGE_MASK); *prot = right; return TLBRET_MATCH; } @@ -75,25 +76,27 @@ static int get_phys_data(OpenRISCCPU *cpu, hwaddr *physical, int *prot, int vpn = address >> TARGET_PAGE_BITS; int idx = vpn & DTLB_MASK; int right = 0; + uint32_t mr = cpu->env.tlb.dtlb[idx].mr; + uint32_t tr = cpu->env.tlb.dtlb[idx].tr; - if ((cpu->env.tlb.dtlb[0][idx].mr >> TARGET_PAGE_BITS) != vpn) { + if ((mr >> TARGET_PAGE_BITS) != vpn) { return TLBRET_NOMATCH; } - if (!(cpu->env.tlb.dtlb[0][idx].mr & 1)) { + if (!(mr & 1)) { return TLBRET_INVALID; } if (supervisor) { - if (cpu->env.tlb.dtlb[0][idx].tr & SRE) { + if (tr & SRE) { right |= PAGE_READ; } - if (cpu->env.tlb.dtlb[0][idx].tr & SWE) { + if (tr & SWE) { right |= PAGE_WRITE; } } else { - if (cpu->env.tlb.dtlb[0][idx].tr & URE) { + if (tr & URE) { right |= PAGE_READ; } - if (cpu->env.tlb.dtlb[0][idx].tr & UWE) { + if (tr & UWE) { right |= PAGE_WRITE; } } @@ -105,8 +108,7 @@ static int get_phys_data(OpenRISCCPU *cpu, hwaddr *physical, int *prot, return TLBRET_BADADDR; } - *physical = (cpu->env.tlb.dtlb[0][idx].tr & TARGET_PAGE_MASK) | - (address & (TARGET_PAGE_SIZE-1)); + *physical = (tr & TARGET_PAGE_MASK) | (address & ~TARGET_PAGE_MASK); *prot = right; return TLBRET_MATCH; } diff --git a/target/openrisc/sys_helper.c b/target/openrisc/sys_helper.c index 9b4339b34e..7f458b0d17 100644 --- a/target/openrisc/sys_helper.c +++ b/target/openrisc/sys_helper.c @@ -86,14 +86,14 @@ void HELPER(mtspr)(CPUOpenRISCState *env, target_ulong spr, target_ulong rb) case TO_SPR(1, 512) ... TO_SPR(1, 512+DTLB_SIZE-1): /* DTLBW0MR 0-127 */ idx = spr - TO_SPR(1, 512); if (!(rb & 1)) { - tlb_flush_page(cs, env->tlb.dtlb[0][idx].mr & TARGET_PAGE_MASK); + tlb_flush_page(cs, env->tlb.dtlb[idx].mr & TARGET_PAGE_MASK); } - env->tlb.dtlb[0][idx].mr = rb; + env->tlb.dtlb[idx].mr = rb; break; case TO_SPR(1, 640) ... TO_SPR(1, 640+DTLB_SIZE-1): /* DTLBW0TR 0-127 */ idx = spr - TO_SPR(1, 640); - env->tlb.dtlb[0][idx].tr = rb; + env->tlb.dtlb[idx].tr = rb; break; case TO_SPR(1, 768) ... TO_SPR(1, 895): /* DTLBW1MR 0-127 */ case TO_SPR(1, 896) ... TO_SPR(1, 1023): /* DTLBW1TR 0-127 */ @@ -105,14 +105,14 @@ void HELPER(mtspr)(CPUOpenRISCState *env, target_ulong spr, target_ulong rb) case TO_SPR(2, 512) ... TO_SPR(2, 512+ITLB_SIZE-1): /* ITLBW0MR 0-127 */ idx = spr - TO_SPR(2, 512); if (!(rb & 1)) { - tlb_flush_page(cs, env->tlb.itlb[0][idx].mr & TARGET_PAGE_MASK); + tlb_flush_page(cs, env->tlb.itlb[idx].mr & TARGET_PAGE_MASK); } - env->tlb.itlb[0][idx].mr = rb; + env->tlb.itlb[idx].mr = rb; break; case TO_SPR(2, 640) ... TO_SPR(2, 640+ITLB_SIZE-1): /* ITLBW0TR 0-127 */ idx = spr - TO_SPR(2, 640); - env->tlb.itlb[0][idx].tr = rb; + env->tlb.itlb[idx].tr = rb; break; case TO_SPR(2, 768) ... TO_SPR(2, 895): /* ITLBW1MR 0-127 */ case TO_SPR(2, 896) ... TO_SPR(2, 1023): /* ITLBW1TR 0-127 */ @@ -244,11 +244,11 @@ target_ulong HELPER(mfspr)(CPUOpenRISCState *env, target_ulong rd, case TO_SPR(1, 512) ... TO_SPR(1, 512+DTLB_SIZE-1): /* DTLBW0MR 0-127 */ idx = spr - TO_SPR(1, 512); - return env->tlb.dtlb[0][idx].mr; + return env->tlb.dtlb[idx].mr; case TO_SPR(1, 640) ... TO_SPR(1, 640+DTLB_SIZE-1): /* DTLBW0TR 0-127 */ idx = spr - TO_SPR(1, 640); - return env->tlb.dtlb[0][idx].tr; + return env->tlb.dtlb[idx].tr; case TO_SPR(1, 768) ... TO_SPR(1, 895): /* DTLBW1MR 0-127 */ case TO_SPR(1, 896) ... TO_SPR(1, 1023): /* DTLBW1TR 0-127 */ @@ -260,11 +260,11 @@ target_ulong HELPER(mfspr)(CPUOpenRISCState *env, target_ulong rd, case TO_SPR(2, 512) ... TO_SPR(2, 512+ITLB_SIZE-1): /* ITLBW0MR 0-127 */ idx = spr - TO_SPR(2, 512); - return env->tlb.itlb[0][idx].mr; + return env->tlb.itlb[idx].mr; case TO_SPR(2, 640) ... TO_SPR(2, 640+ITLB_SIZE-1): /* ITLBW0TR 0-127 */ idx = spr - TO_SPR(2, 640); - return env->tlb.itlb[0][idx].tr; + return env->tlb.itlb[idx].tr; case TO_SPR(2, 768) ... TO_SPR(2, 895): /* ITLBW1MR 0-127 */ case TO_SPR(2, 896) ... TO_SPR(2, 1023): /* ITLBW1TR 0-127 */ From patchwork Mon Jul 2 13:57:56 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 140763 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp1965ljj; Mon, 2 Jul 2018 07:11:28 -0700 (PDT) X-Google-Smtp-Source: AAOMgpf3zfrYhSlZVvCW8jgsJzZ76SommrBb4xiVEBKE3iX3c74M70XWqFzPaw5scewehFwfML1C X-Received: by 2002:ac8:3835:: with SMTP id q50-v6mr22816340qtb.235.1530540688563; Mon, 02 Jul 2018 07:11:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530540688; cv=none; d=google.com; s=arc-20160816; b=buBel/MvaMv3l4YTNOoifmhN+mOt5QWP4CIctY8kPorXxvqZRbBasAimIU8dnv0J3r bLfs21VrxZVe9NzSDVXGvUUq5HCdnUU3uCDHPfyLAiye+Fa4Y7ghaPAgnUkgW0fk2NKs MMZ+JmcA/9dMCyVAAeCrY3D5dg9/y8+AimJLX3GZEa2oy2RPgWpCCvhomD9cJILpM0HZ r3690va/a+P48mmywqI8Nukm5O+vQl9kI6SGH2zj/4Ze8twLW9Gfxj/LQsbQoNv8/lb2 j7UwwMXBblJjiOsoSpikFsNLjLci/lLSSUzWCgE3qT3oDTSZJOIuUfiW1D5iE5cwdzI5 zDQQ== 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:arc-authentication-results; bh=XP26Su5f4Z0Z60ApQh47OEXkTrqSOl00r2acJz/P8YI=; b=h9vHINfxwQ2UoyI/XcwyZiwIMZ5twzFk5GHk/YAxlizXCXeQAv0hayWQ2OLWqgi+OZ cNtMkHR6fhnQmvlGNKGdZ8BjWqPVzTFr/+xU1YlHZse4jud3acRmiY1yl/nIlxdQW2BR KWtciB3fCcjQme7cf96hsvhobzZchkAg0BmOenyS6FQhWwlolan3QrregbHl3aCK+1IG ePoYcTywNhEKdK1YfUJs1z3uV5ywbpBSlgLnPPcPEBxSQT1DOQ9nNKe+G37k3f2JQGxp Y0/CMsb4mvmSAfWaMk1GuxM74lYAbTvztkF+bTxA8dNE2D469M6epe17LWnJMESbjZz7 uATA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b="o3RJ/vi8"; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id h39-v6si4452885qth.227.2018.07.02.07.11.28 for (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 02 Jul 2018 07:11:28 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b="o3RJ/vi8"; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from localhost ([::1]:33013 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzY7-0003CY-SA for patch@linaro.org; Mon, 02 Jul 2018 10:11:27 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47606) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzLx-0002bY-Ah for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:55 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fZzLv-0008Gj-Bg for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:53 -0400 Received: from mail-pf0-x229.google.com ([2607:f8b0:400e:c00::229]:42723) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fZzLv-0008FG-2P for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:51 -0400 Received: by mail-pf0-x229.google.com with SMTP id v9-v6so6438010pff.9 for ; Mon, 02 Jul 2018 06:58:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=XP26Su5f4Z0Z60ApQh47OEXkTrqSOl00r2acJz/P8YI=; b=o3RJ/vi8G7Gs9NsF5GMbLhNdsXmMjqKLsmkKri0F5uF8a5JAQKLdd38rqSaqOhTyqp baW6Jhfd94wYlVIXBLRWGskM28dHJyxKip4TjWXaGu/HQtXelEkauAwGAS95XxKEF5vz c9EmLaXGbtR4NKOLLJ+vf8b2BylmPz2Ghz1uIMEXtWdnDIv4QlVWNjpUVc9W8HNiQ/JP zfRvVGUCsuBgRwK3oIs/98kGSkCYx3MpGqMmxWfk3v043A5JqG0KjT1QdtFvGX1Emzi1 Xzh1+xecBWjrIgwpKm3Qlvzz0jDnrV4/1/Z5OxpSXizKZueWOJqpcY0xs8wmt+AV2voA K/Nw== 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=XP26Su5f4Z0Z60ApQh47OEXkTrqSOl00r2acJz/P8YI=; b=DiiWfzuYWokG1aMpK3ujTeckVKaEzWNNELHpBylvinIFvuuv2ZRqwxc8dNzk1VvgBO jnzyNTcTDM++Sg3uAAKcAf/hqe7knEUCKGfVqDP0TQpoYb4AgB5J70lZ4oJCmsUmZ+2J vfleLdYEkAqf4V01kFB8kzuUNyBUDaiXGTplLQfVSi1nG96yGCLWSK9mhhYg/zagNl34 rRQF5eFhgKyEZkTYY1DQGM4e9npVPslWWOdmHvoICek9CoKDeZMPQfvVuLaHBIuDItYt Pfmn8itGqTvVrHV5T+OEMZ1L3HrqDownPCO1TOqO+rJVyQpGMmq2WukMdwXtOxYs5bN6 5Jfw== X-Gm-Message-State: APt69E2lI5x38WDgrpn/6rKiiW8w/qYNaelX7VwhHNok505VkXp4QH1k FJf2hJvHzAnGO0rbKHDfbx4CJVgZ X-Received: by 2002:a62:6f86:: with SMTP id k128-v6mr25574870pfc.150.1530539930078; Mon, 02 Jul 2018 06:58:50 -0700 (PDT) Received: from localhost (g90.124-44-6.ppp.wakwak.ne.jp. [124.44.6.90]) by smtp.gmail.com with ESMTPSA id l85-v6sm31228880pfk.79.2018.07.02.06.58.49 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 02 Jul 2018 06:58:49 -0700 (PDT) From: Stafford Horne To: Peter Maydell Date: Mon, 2 Jul 2018 22:57:56 +0900 Message-Id: <20180702135806.7087-16-shorne@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180702135806.7087-1-shorne@gmail.com> References: <20180702135806.7087-1-shorne@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c00::229 Subject: [Qemu-devel] [PULL 15/25] target/openrisc: Fix tlb flushing in mtspr 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: Stafford Horne , Richard Henderson , QEMU Development Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson The previous code was confused, avoiding the flush of the old entry if the new entry is invalid. We need to flush the old page if the old entry is valid and the new page if the new entry is valid. This bug was masked by over-flushing elsewhere. Signed-off-by: Richard Henderson Signed-off-by: Stafford Horne --- target/openrisc/sys_helper.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) -- 2.17.0 diff --git a/target/openrisc/sys_helper.c b/target/openrisc/sys_helper.c index 7f458b0d17..c9702cd26c 100644 --- a/target/openrisc/sys_helper.c +++ b/target/openrisc/sys_helper.c @@ -32,6 +32,7 @@ void HELPER(mtspr)(CPUOpenRISCState *env, target_ulong spr, target_ulong rb) #ifndef CONFIG_USER_ONLY OpenRISCCPU *cpu = openrisc_env_get_cpu(env); CPUState *cs = CPU(cpu); + target_ulong mr; int idx; switch (spr) { @@ -85,12 +86,15 @@ void HELPER(mtspr)(CPUOpenRISCState *env, target_ulong spr, target_ulong rb) case TO_SPR(1, 512) ... TO_SPR(1, 512+DTLB_SIZE-1): /* DTLBW0MR 0-127 */ idx = spr - TO_SPR(1, 512); - if (!(rb & 1)) { - tlb_flush_page(cs, env->tlb.dtlb[idx].mr & TARGET_PAGE_MASK); + mr = env->tlb.dtlb[idx].mr; + if (mr & 1) { + tlb_flush_page(cs, mr & TARGET_PAGE_MASK); + } + if (rb & 1) { + tlb_flush_page(cs, rb & TARGET_PAGE_MASK); } env->tlb.dtlb[idx].mr = rb; break; - case TO_SPR(1, 640) ... TO_SPR(1, 640+DTLB_SIZE-1): /* DTLBW0TR 0-127 */ idx = spr - TO_SPR(1, 640); env->tlb.dtlb[idx].tr = rb; @@ -102,14 +106,18 @@ void HELPER(mtspr)(CPUOpenRISCState *env, target_ulong spr, target_ulong rb) case TO_SPR(1, 1280) ... TO_SPR(1, 1407): /* DTLBW3MR 0-127 */ case TO_SPR(1, 1408) ... TO_SPR(1, 1535): /* DTLBW3TR 0-127 */ break; + case TO_SPR(2, 512) ... TO_SPR(2, 512+ITLB_SIZE-1): /* ITLBW0MR 0-127 */ idx = spr - TO_SPR(2, 512); - if (!(rb & 1)) { - tlb_flush_page(cs, env->tlb.itlb[idx].mr & TARGET_PAGE_MASK); + mr = env->tlb.itlb[idx].mr; + if (mr & 1) { + tlb_flush_page(cs, mr & TARGET_PAGE_MASK); + } + if (rb & 1) { + tlb_flush_page(cs, rb & TARGET_PAGE_MASK); } env->tlb.itlb[idx].mr = rb; break; - case TO_SPR(2, 640) ... TO_SPR(2, 640+ITLB_SIZE-1): /* ITLBW0TR 0-127 */ idx = spr - TO_SPR(2, 640); env->tlb.itlb[idx].tr = rb; @@ -121,6 +129,7 @@ void HELPER(mtspr)(CPUOpenRISCState *env, target_ulong spr, target_ulong rb) case TO_SPR(2, 1280) ... TO_SPR(2, 1407): /* ITLBW3MR 0-127 */ case TO_SPR(2, 1408) ... TO_SPR(2, 1535): /* ITLBW3TR 0-127 */ break; + case TO_SPR(5, 1): /* MACLO */ env->mac = deposit64(env->mac, 0, 32, rb); break; From patchwork Mon Jul 2 13:57:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 140756 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp4037161ljj; Mon, 2 Jul 2018 07:04:13 -0700 (PDT) X-Google-Smtp-Source: AAOMgpfyHTNgb+CXbcgzRqif2yNdIYjG0EIhAWJBNPOllU760VAWP8RWz7IhaiIJfg6TCWYMjvQQ X-Received: by 2002:a0c:e80b:: with SMTP id y11-v6mr23017896qvn.10.1530540252917; Mon, 02 Jul 2018 07:04:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530540252; cv=none; d=google.com; s=arc-20160816; b=djUlp+i0MmboVxPvSvcGSABp+wYYLSQIWq58U91mnFyceAGtuCqlhGZXecXeck9Noy YeIcl92In8ly9AsPt7kVVPRZdgWBJOXE/4WQTxmtUdOTT+yG31g+sG6gMsHwsGZJB/d5 mxrUQ1N+McTuoeDV9gwxBf247TXtih5YZybtJ5Fy37IUJiMNyfyF7gA7oOnx2CGQ8W03 VANWCJNuF1Fun8QKKBO4nSKI6IncRMtfXq1c308r1AszOZ34GqpQOnAhn35N6N8CPSRK ir6iGggnQyGH8u/1bLS/VHBhWJvedhOem5f5yzjL0qNIKrsuRnnpnKjJi2nVy/vM4QxS P58A== 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:arc-authentication-results; bh=GZeiyhs9RzYP4jMrD0QM9E/kmwQr0SWmgpdpIiEqRpY=; b=06rHKUwOU82ileQVjnlqXHSSnefvFD7bEXVLk/M+eVstYKVvW26N4mFhsvPL6w/lzD +qaQfHSWpb3+tNV/+suD2tzUl3EvlvOlkhkpNIo8bzTYC333j2QoxwMCEOOdm8KArwjb RlhAdksoMXduS72OPi70GBe1gkHsnqghL+ZeMLF3+wpOoVBffr4dMnr3WcSvGIJNewK9 3mU/KgL454DWkQuLrn13zBtDMFp6+z4uzJ3JA8toxzn58+q1f5/E7y5CBsuTen6xJWa1 UmRZqGEr9mquYJqv13QDf7gSHuCf9PLdQdvEO92xNdIjwllhGxxp4bV0yCx07LeShkZe LE6Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=oLbOOt7I; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id s29-v6si1308756qki.146.2018.07.02.07.04.12 for (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 02 Jul 2018 07:04:12 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=oLbOOt7I; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from localhost ([::1]:32961 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzR6-0005lR-CC for patch@linaro.org; Mon, 02 Jul 2018 10:04:12 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47722) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzM0-0002fI-IZ for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fZzLx-0008IW-Sp for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:56 -0400 Received: from mail-pg0-x241.google.com ([2607:f8b0:400e:c05::241]:46151) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fZzLx-0008Hy-KO for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:53 -0400 Received: by mail-pg0-x241.google.com with SMTP id q14-v6so7184903pgt.13 for ; Mon, 02 Jul 2018 06:58:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=GZeiyhs9RzYP4jMrD0QM9E/kmwQr0SWmgpdpIiEqRpY=; b=oLbOOt7IkZ0H22k4EjzM8aN3qwuZGciBlplQ2xX1rwfsVkGHHXvB8piRnqsRtcHsrs TBH4ZWLfPoM1Goz5aQpGa+tmvKFl1BmcM7Ltgu+XctLFWWZzQPQr5vkrRdLTZkJa6AME Sxj1KXmYUril9yUwMEJD9FhKh4nxNLWxLyKmfWEAqJck+klN2MWU5xSKp1lOoybbVIUN v6UIzeKiv47jmbYZ8ycMsQgEJncrLdjEDmVqF6eFy29CA+o5pqay7Hiwmy5djQ5Q+Rwk S0IeiW1hjr5w/KGgasnU+K644FqJ7GPJQR6P3VuQ46LERsQJDFvPyniLeCRlJGBk788g cAyw== 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=GZeiyhs9RzYP4jMrD0QM9E/kmwQr0SWmgpdpIiEqRpY=; b=mgRFA005VZ84sYAkhqb8F9SIZ7JnpqWO4xP5R6XdaNvdT/A4EkdezK25NV4rRwfJyP +LCX8IQGElmEKq3UysH0chZan451V4GLOpZcmXA1nU/rdAf65x6a77/v3gsYtSlUfYb9 P8NBLcPMhDD6OMmKefg4rQFMdbGUEIieYTskoSBEHdhYgAqiU+2YHiw9MdjqVHIInA/k jo3aO2y/kE4yidZwSqj/GuXhlU/skHlagh8QHhi5gFTSeLf8uyom7RY38Jxx25Rbe2rT mMbx0ziQdwUikXqwEX2f7M40kgUkLUTx1jDBNQZ2uh2IUOhDrGaURuHx3h0K7PDA7B8B sErw== X-Gm-Message-State: APt69E01xWfT46EUaeTpA5QvL+fGNnx1wxgzs8GSq5dbO7Ia7zITnXLW TTOjXd1IXnFCfUC//Q79VYU= X-Received: by 2002:a63:4b1f:: with SMTP id y31-v6mr22228973pga.14.1530539932596; Mon, 02 Jul 2018 06:58:52 -0700 (PDT) Received: from localhost (g90.124-44-6.ppp.wakwak.ne.jp. [124.44.6.90]) by smtp.gmail.com with ESMTPSA id m7-v6sm25174034pgr.5.2018.07.02.06.58.51 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 02 Jul 2018 06:58:52 -0700 (PDT) From: Stafford Horne To: Peter Maydell Date: Mon, 2 Jul 2018 22:57:57 +0900 Message-Id: <20180702135806.7087-17-shorne@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180702135806.7087-1-shorne@gmail.com> References: <20180702135806.7087-1-shorne@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::241 Subject: [Qemu-devel] [PULL 16/25] target/openrisc: Fix cpu_mmu_index 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: Stafford Horne , Richard Henderson , QEMU Development Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson The code in cpu_mmu_index does not properly honor SR_DME. This bug has workarounds elsewhere in that we flush the tlb more often than necessary, on the state changes that should be reflected in a change of mmu_index. Fixing this means that we can respect the mmu_index that is given to tlb_flush. Signed-off-by: Richard Henderson Signed-off-by: Stafford Horne --- target/openrisc/cpu.h | 23 +++++++++++++-------- target/openrisc/interrupt.c | 4 ---- target/openrisc/interrupt_helper.c | 15 +++----------- target/openrisc/mmu.c | 33 +++++++++++++++++++++++++++--- target/openrisc/sys_helper.c | 4 ---- target/openrisc/translate.c | 2 +- 6 files changed, 49 insertions(+), 32 deletions(-) -- 2.17.0 diff --git a/target/openrisc/cpu.h b/target/openrisc/cpu.h index eaf6cdd40e..c3a968ec4d 100644 --- a/target/openrisc/cpu.h +++ b/target/openrisc/cpu.h @@ -385,9 +385,12 @@ void cpu_openrisc_count_stop(OpenRISCCPU *cpu); #include "exec/cpu-all.h" -#define TB_FLAGS_DFLAG 1 -#define TB_FLAGS_R0_0 2 +#define TB_FLAGS_SM SR_SM +#define TB_FLAGS_DME SR_DME +#define TB_FLAGS_IME SR_IME #define TB_FLAGS_OVE SR_OVE +#define TB_FLAGS_DFLAG 2 /* reuse SR_TEE */ +#define TB_FLAGS_R0_0 4 /* reuse SR_IEE */ static inline uint32_t cpu_get_gpr(const CPUOpenRISCState *env, int i) { @@ -405,17 +408,21 @@ static inline void cpu_get_tb_cpu_state(CPUOpenRISCState *env, { *pc = env->pc; *cs_base = 0; - *flags = (env->dflag - | (cpu_get_gpr(env, 0) == 0 ? TB_FLAGS_R0_0 : 0) - | (env->sr & SR_OVE)); + *flags = (env->dflag ? TB_FLAGS_DFLAG : 0) + | (cpu_get_gpr(env, 0) ? 0 : TB_FLAGS_R0_0) + | (env->sr & (SR_SM | SR_DME | SR_IME | SR_OVE)); } static inline int cpu_mmu_index(CPUOpenRISCState *env, bool ifetch) { - if (!(env->sr & SR_IME)) { - return MMU_NOMMU_IDX; + int ret = MMU_NOMMU_IDX; /* mmu is disabled */ + + if (env->sr & (ifetch ? SR_IME : SR_DME)) { + /* The mmu is enabled; test supervisor state. */ + ret = env->sr & SR_SM ? MMU_SUPERVISOR_IDX : MMU_USER_IDX; } - return (env->sr & SR_SM) == 0 ? MMU_USER_IDX : MMU_SUPERVISOR_IDX; + + return ret; } static inline uint32_t cpu_get_sr(const CPUOpenRISCState *env) diff --git a/target/openrisc/interrupt.c b/target/openrisc/interrupt.c index 23abcf29ed..138ad17f00 100644 --- a/target/openrisc/interrupt.c +++ b/target/openrisc/interrupt.c @@ -51,10 +51,6 @@ void openrisc_cpu_do_interrupt(CPUState *cs) env->eear = env->pc; } - /* For machine-state changed between user-mode and supervisor mode, - we need flush TLB when we enter&exit EXCP. */ - tlb_flush(cs); - env->esr = cpu_get_sr(env); env->sr &= ~SR_DME; env->sr &= ~SR_IME; diff --git a/target/openrisc/interrupt_helper.c b/target/openrisc/interrupt_helper.c index a2e9003969..9c5489f5f7 100644 --- a/target/openrisc/interrupt_helper.c +++ b/target/openrisc/interrupt_helper.c @@ -25,16 +25,7 @@ void HELPER(rfe)(CPUOpenRISCState *env) { - OpenRISCCPU *cpu = openrisc_env_get_cpu(env); -#ifndef CONFIG_USER_ONLY - int need_flush_tlb = (cpu->env.sr & (SR_SM | SR_IME | SR_DME)) ^ - (cpu->env.esr & (SR_SM | SR_IME | SR_DME)); - if (need_flush_tlb) { - CPUState *cs = CPU(cpu); - tlb_flush(cs); - } -#endif - cpu->env.pc = cpu->env.epcr; - cpu->env.lock_addr = -1; - cpu_set_sr(&cpu->env, cpu->env.esr); + env->pc = env->epcr; + env->lock_addr = -1; + cpu_set_sr(env, env->esr); } diff --git a/target/openrisc/mmu.c b/target/openrisc/mmu.c index 856969a7f2..b293b64e98 100644 --- a/target/openrisc/mmu.c +++ b/target/openrisc/mmu.c @@ -246,9 +246,36 @@ hwaddr openrisc_cpu_get_phys_page_debug(CPUState *cs, vaddr addr) void tlb_fill(CPUState *cs, target_ulong addr, int size, MMUAccessType access_type, int mmu_idx, uintptr_t retaddr) { - int ret = openrisc_cpu_handle_mmu_fault(cs, addr, size, - access_type, mmu_idx); - if (ret) { + OpenRISCCPU *cpu = OPENRISC_CPU(cs); + int ret, prot = 0; + hwaddr physical = 0; + + if (mmu_idx == MMU_NOMMU_IDX) { + ret = get_phys_nommu(&physical, &prot, addr); + } else { + bool super = mmu_idx == MMU_SUPERVISOR_IDX; + if (access_type == MMU_INST_FETCH) { + ret = get_phys_code(cpu, &physical, &prot, addr, 2, super); + } else { + ret = get_phys_data(cpu, &physical, &prot, addr, + access_type == MMU_DATA_STORE, super); + } + } + + if (ret == TLBRET_MATCH) { + tlb_set_page(cs, addr & TARGET_PAGE_MASK, + physical & TARGET_PAGE_MASK, prot, + mmu_idx, TARGET_PAGE_SIZE); + } else if (ret < 0) { + int rw; + if (access_type == MMU_INST_FETCH) { + rw = 2; + } else if (access_type == MMU_DATA_STORE) { + rw = 1; + } else { + rw = 0; + } + cpu_openrisc_raise_mmu_exception(cpu, addr, rw, ret); /* Raise Exception. */ cpu_loop_exit_restore(cs, retaddr); } diff --git a/target/openrisc/sys_helper.c b/target/openrisc/sys_helper.c index c9702cd26c..852b219f9b 100644 --- a/target/openrisc/sys_helper.c +++ b/target/openrisc/sys_helper.c @@ -56,10 +56,6 @@ void HELPER(mtspr)(CPUOpenRISCState *env, target_ulong spr, target_ulong rb) break; case TO_SPR(0, 17): /* SR */ - if ((env->sr & (SR_IME | SR_DME | SR_SM)) ^ - (rb & (SR_IME | SR_DME | SR_SM))) { - tlb_flush(cs); - } cpu_set_sr(env, rb); break; diff --git a/target/openrisc/translate.c b/target/openrisc/translate.c index 64b5e84630..a271cd3903 100644 --- a/target/openrisc/translate.c +++ b/target/openrisc/translate.c @@ -55,7 +55,7 @@ static inline bool is_user(DisasContext *dc) #ifdef CONFIG_USER_ONLY return true; #else - return dc->mem_idx == MMU_USER_IDX; + return !(dc->tb_flags & TB_FLAGS_SM); #endif } From patchwork Mon Jul 2 13:57:58 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 140765 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp2466ljj; Mon, 2 Jul 2018 07:11:55 -0700 (PDT) X-Google-Smtp-Source: AAOMgpfSnqon8WR5Mols2kWlD27YdCzB5sfoDRayRY49RKEme/Qlrv3PgqOSTa8zfO9l/PgWkhvE X-Received: by 2002:a0c:9c88:: with SMTP id i8-v6mr22910574qvf.193.1530540715447; Mon, 02 Jul 2018 07:11:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530540715; cv=none; d=google.com; s=arc-20160816; b=x2v/cMagWXmCKN+/M6DiVAJeBaV2oU36HjL5g1847jxDtSfehn17VDOzja5ts4sYA4 5bsyVdcC39gjlXR4rbaZ7RWveNNutCxyrH+RAwY0PDuxene0PMZO2ckR3GnyjGV4mcgL tzXR1U6cXoDKDnZjElZXPyAEj/mATgPngdscecGDLIWzrBlpPV2bTNvgqXvLpA3sTKq4 aN0uvr4X1q34knVRcZ3/8uUDh4KFkcfxEgRWvU0wAz5TdYdgWL3qtBGxIrFib7PStdMd jW5pmWP4/0CHwP6tI0gMkC/Yj+VnP5WVRxgklaGarr4yGmQHqtmGNjFh2E8sWjy+NIP3 z4yQ== 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 :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:arc-authentication-results; bh=4Ug/yP3+QhvO8U2zdB+6CUD01N1sEYbfPEJw4NI2TCk=; b=pAHDR9Z7nLIIwubjZcyAg2TnA/uS8ZoYSoCw3XLK2StNtNyqEpVJrLWOuXPhU9ripx 84jRDlN83m5ehsBMsXjlQEglzafy22Df0NtsMtuOmyEXTTFjw2Eu+Gaq+vXNyTTMr3c+ vs0PtbOxD/ADZJaLoklvKbdPGEIkFeinSrXtqYo4jzC6dUlKJR8SrJY/mq1DtQ0PGBQe PcG4oSn4hGzvxCirY6T8h7MJwedKr2QSfWkIGkf9Y8aOg89eEpY2Y0Inr0t38t8dGdhN qBjG9hrUv84yHDjxv90GFjvyegY+3ukIVP6QgWGOVTYeRAynvwSXskrvni5OhvyJBNtj CtRQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=gnsNgYWi; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id t188-v6si4250228qkd.327.2018.07.02.07.11.55 for (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 02 Jul 2018 07:11:55 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=gnsNgYWi; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from localhost ([::1]:33017 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzYY-00042u-Rv for patch@linaro.org; Mon, 02 Jul 2018 10:11:54 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47735) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzM1-0002gH-Jk for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fZzM0-0008Kk-E1 for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:57 -0400 Received: from mail-pg0-x232.google.com ([2607:f8b0:400e:c05::232]:42841) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fZzM0-0008KD-4N for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:56 -0400 Received: by mail-pg0-x232.google.com with SMTP id c10-v6so7195869pgu.9 for ; Mon, 02 Jul 2018 06:58:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=4Ug/yP3+QhvO8U2zdB+6CUD01N1sEYbfPEJw4NI2TCk=; b=gnsNgYWiBAj9EPw2CZBKya7j6NYxyOF6NWWo86bDb21JbBa8JhyaKCLNomoDYujBvS hAKYHNw+Xg6qt1rkr7LHs2SdjEZBi5bYlVGBK+Cjc0FExFRSMABz0D1C0UaloSWQX+I3 /Rn/xDGDdN4sLPGg3jOHSol0P5CkZ6O0XQpNhueVxwIcwOmZb86WuVGoJl5C8LhGp+N7 gUz93cyuiymJdwitZBQdMZUV5lrVbSVwlGqeKpMhEAhC8lVjAef9z7fxpAR2BltJeeJQ DNdirP5Imycp1LxqzLAPxTcZR1I/PsKstIPsdgTxij0w6r3EbOO94hn8oMWYfgBAHHLI dEYQ== 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:mime-version:content-transfer-encoding; bh=4Ug/yP3+QhvO8U2zdB+6CUD01N1sEYbfPEJw4NI2TCk=; b=uE+nsvTt3Geog122hTXkF81k3OmpgDuD0XueIoc9y1ygAZ18UHqmHfBy8fLh30HybV K2Y4wQPeU7Flb+LgubBRnoJkmucAXChUwHusVR+Yp1m4UGLjCNpmdBYnvorPdiMrrZa/ Xf4P6KPfkl3DdkN80m3W4R8oBa7CLbCNZthXQ/BLzK8D9X/mi8fG7uxdnTs+HKitjJpU bK507RB8bmFDYZcgc5/+RTuVSOXepCLtXU9d1Zjrdz1QHbDpSd+k6MlizywZR2XtEfFJ POE47tmhQGc9r+QC+oLafiyvYo9HA3j+RFWlXhSKm4FT6Hw3eJxn2CxhZqLnC1IvLG26 Geww== X-Gm-Message-State: APt69E14SV/aTgaQ/+GEYE07z+Fw1ZPvHLGhVnymCCpNcv4kYG9ND2+V jiWiYQRoHOCJGHT4NdeIufLLTeWu X-Received: by 2002:a63:1546:: with SMTP id 6-v6mr7460978pgv.271.1530539935016; Mon, 02 Jul 2018 06:58:55 -0700 (PDT) Received: from localhost (g90.124-44-6.ppp.wakwak.ne.jp. [124.44.6.90]) by smtp.gmail.com with ESMTPSA id k4-v6sm9114971pgo.49.2018.07.02.06.58.54 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 02 Jul 2018 06:58:54 -0700 (PDT) From: Stafford Horne To: Peter Maydell Date: Mon, 2 Jul 2018 22:57:58 +0900 Message-Id: <20180702135806.7087-18-shorne@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180702135806.7087-1-shorne@gmail.com> References: <20180702135806.7087-1-shorne@gmail.com> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::232 Subject: [Qemu-devel] [PULL 17/25] target/openrisc: Use identical sizes for ITLB and DTLB 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: Stafford Horne , Richard Henderson , QEMU Development Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson The sizes are already the same, however, we can improve things if they are identical by design. Reviewed-by: Philippe Mathieu-Daudé Signed-off-by: Richard Henderson Signed-off-by: Stafford Horne --- target/openrisc/cpu.h | 10 ++++------ target/openrisc/machine.c | 4 ++-- target/openrisc/mmu.c | 4 ++-- target/openrisc/sys_helper.c | 16 ++++++++-------- 4 files changed, 16 insertions(+), 18 deletions(-) -- 2.17.0 diff --git a/target/openrisc/cpu.h b/target/openrisc/cpu.h index c3a968ec4d..47e94659e1 100644 --- a/target/openrisc/cpu.h +++ b/target/openrisc/cpu.h @@ -222,10 +222,8 @@ enum { /* TLB size */ enum { - DTLB_SIZE = 64, - DTLB_MASK = (DTLB_SIZE-1), - ITLB_SIZE = 64, - ITLB_MASK = (ITLB_SIZE-1), + TLB_SIZE = 64, + TLB_MASK = TLB_SIZE - 1, }; /* TLB prot */ @@ -254,8 +252,8 @@ typedef struct OpenRISCTLBEntry { #ifndef CONFIG_USER_ONLY typedef struct CPUOpenRISCTLBContext { - OpenRISCTLBEntry itlb[ITLB_SIZE]; - OpenRISCTLBEntry dtlb[DTLB_SIZE]; + OpenRISCTLBEntry itlb[TLB_SIZE]; + OpenRISCTLBEntry dtlb[TLB_SIZE]; int (*cpu_openrisc_map_address_code)(struct OpenRISCCPU *cpu, hwaddr *physical, diff --git a/target/openrisc/machine.c b/target/openrisc/machine.c index b795b56dc6..3fc837b925 100644 --- a/target/openrisc/machine.c +++ b/target/openrisc/machine.c @@ -42,9 +42,9 @@ static const VMStateDescription vmstate_cpu_tlb = { .minimum_version_id = 1, .minimum_version_id_old = 1, .fields = (VMStateField[]) { - VMSTATE_STRUCT_ARRAY(itlb, CPUOpenRISCTLBContext, ITLB_SIZE, 0, + VMSTATE_STRUCT_ARRAY(itlb, CPUOpenRISCTLBContext, TLB_SIZE, 0, vmstate_tlb_entry, OpenRISCTLBEntry), - VMSTATE_STRUCT_ARRAY(dtlb, CPUOpenRISCTLBContext, DTLB_SIZE, 0, + VMSTATE_STRUCT_ARRAY(dtlb, CPUOpenRISCTLBContext, TLB_SIZE, 0, vmstate_tlb_entry, OpenRISCTLBEntry), VMSTATE_END_OF_LIST() } diff --git a/target/openrisc/mmu.c b/target/openrisc/mmu.c index b293b64e98..a4613e9ae4 100644 --- a/target/openrisc/mmu.c +++ b/target/openrisc/mmu.c @@ -41,7 +41,7 @@ static int get_phys_code(OpenRISCCPU *cpu, hwaddr *physical, int *prot, target_ulong address, int rw, bool supervisor) { int vpn = address >> TARGET_PAGE_BITS; - int idx = vpn & ITLB_MASK; + int idx = vpn & TLB_MASK; int right = 0; uint32_t mr = cpu->env.tlb.itlb[idx].mr; uint32_t tr = cpu->env.tlb.itlb[idx].tr; @@ -74,7 +74,7 @@ static int get_phys_data(OpenRISCCPU *cpu, hwaddr *physical, int *prot, target_ulong address, int rw, bool supervisor) { int vpn = address >> TARGET_PAGE_BITS; - int idx = vpn & DTLB_MASK; + int idx = vpn & TLB_MASK; int right = 0; uint32_t mr = cpu->env.tlb.dtlb[idx].mr; uint32_t tr = cpu->env.tlb.dtlb[idx].tr; diff --git a/target/openrisc/sys_helper.c b/target/openrisc/sys_helper.c index 852b219f9b..541615bfb3 100644 --- a/target/openrisc/sys_helper.c +++ b/target/openrisc/sys_helper.c @@ -80,7 +80,7 @@ void HELPER(mtspr)(CPUOpenRISCState *env, target_ulong spr, target_ulong rb) env->shadow_gpr[idx / 32][idx % 32] = rb; break; - case TO_SPR(1, 512) ... TO_SPR(1, 512+DTLB_SIZE-1): /* DTLBW0MR 0-127 */ + case TO_SPR(1, 512) ... TO_SPR(1, 512 + TLB_SIZE - 1): /* DTLBW0MR 0-127 */ idx = spr - TO_SPR(1, 512); mr = env->tlb.dtlb[idx].mr; if (mr & 1) { @@ -91,7 +91,7 @@ void HELPER(mtspr)(CPUOpenRISCState *env, target_ulong spr, target_ulong rb) } env->tlb.dtlb[idx].mr = rb; break; - case TO_SPR(1, 640) ... TO_SPR(1, 640+DTLB_SIZE-1): /* DTLBW0TR 0-127 */ + case TO_SPR(1, 640) ... TO_SPR(1, 640 + TLB_SIZE - 1): /* DTLBW0TR 0-127 */ idx = spr - TO_SPR(1, 640); env->tlb.dtlb[idx].tr = rb; break; @@ -103,7 +103,7 @@ void HELPER(mtspr)(CPUOpenRISCState *env, target_ulong spr, target_ulong rb) case TO_SPR(1, 1408) ... TO_SPR(1, 1535): /* DTLBW3TR 0-127 */ break; - case TO_SPR(2, 512) ... TO_SPR(2, 512+ITLB_SIZE-1): /* ITLBW0MR 0-127 */ + case TO_SPR(2, 512) ... TO_SPR(2, 512 + TLB_SIZE - 1): /* ITLBW0MR 0-127 */ idx = spr - TO_SPR(2, 512); mr = env->tlb.itlb[idx].mr; if (mr & 1) { @@ -114,7 +114,7 @@ void HELPER(mtspr)(CPUOpenRISCState *env, target_ulong spr, target_ulong rb) } env->tlb.itlb[idx].mr = rb; break; - case TO_SPR(2, 640) ... TO_SPR(2, 640+ITLB_SIZE-1): /* ITLBW0TR 0-127 */ + case TO_SPR(2, 640) ... TO_SPR(2, 640 + TLB_SIZE - 1): /* ITLBW0TR 0-127 */ idx = spr - TO_SPR(2, 640); env->tlb.itlb[idx].tr = rb; break; @@ -247,11 +247,11 @@ target_ulong HELPER(mfspr)(CPUOpenRISCState *env, target_ulong rd, idx = (spr - 1024); return env->shadow_gpr[idx / 32][idx % 32]; - case TO_SPR(1, 512) ... TO_SPR(1, 512+DTLB_SIZE-1): /* DTLBW0MR 0-127 */ + case TO_SPR(1, 512) ... TO_SPR(1, 512 + TLB_SIZE - 1): /* DTLBW0MR 0-127 */ idx = spr - TO_SPR(1, 512); return env->tlb.dtlb[idx].mr; - case TO_SPR(1, 640) ... TO_SPR(1, 640+DTLB_SIZE-1): /* DTLBW0TR 0-127 */ + case TO_SPR(1, 640) ... TO_SPR(1, 640 + TLB_SIZE - 1): /* DTLBW0TR 0-127 */ idx = spr - TO_SPR(1, 640); return env->tlb.dtlb[idx].tr; @@ -263,11 +263,11 @@ target_ulong HELPER(mfspr)(CPUOpenRISCState *env, target_ulong rd, case TO_SPR(1, 1408) ... TO_SPR(1, 1535): /* DTLBW3TR 0-127 */ break; - case TO_SPR(2, 512) ... TO_SPR(2, 512+ITLB_SIZE-1): /* ITLBW0MR 0-127 */ + case TO_SPR(2, 512) ... TO_SPR(2, 512 + TLB_SIZE - 1): /* ITLBW0MR 0-127 */ idx = spr - TO_SPR(2, 512); return env->tlb.itlb[idx].mr; - case TO_SPR(2, 640) ... TO_SPR(2, 640+ITLB_SIZE-1): /* ITLBW0TR 0-127 */ + case TO_SPR(2, 640) ... TO_SPR(2, 640 + TLB_SIZE - 1): /* ITLBW0TR 0-127 */ idx = spr - TO_SPR(2, 640); return env->tlb.itlb[idx].tr; From patchwork Mon Jul 2 13:57:59 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 140769 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp10843ljj; Mon, 2 Jul 2018 07:19:16 -0700 (PDT) X-Google-Smtp-Source: AAOMgpdmVd3qYqPRXWUTQncr/nQtzn1TvO7CpqYELjwZSU97ZkkgIK6aqKgGOTXEu13oPmKYfK5v X-Received: by 2002:a37:188c:: with SMTP id 12-v6mr22485299qky.72.1530541156146; Mon, 02 Jul 2018 07:19:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530541156; cv=none; d=google.com; s=arc-20160816; b=fJOvqPuWNTRF+93tI3uuwO2GSLAOOxRPwRMpluWsztJLYzMrtmN8SZj3x/jCVATWQW LN87edKoD81pDr/csyfnu2TjO/XvkbNPSJJTmmkA4B/v+sd5X5rS+HsWxtJxxessrhAU vks2/7GrBX6fq4PVki8KbDGb0GQEh59YOXQZ6fFzM+4RMZkrUHMaGDc2EgOkbGruJETV VV8yeBNkVn96a0t/QznR8W68t/O8rv/Bvvg8knX9XjsTv1hjqu4NbHsl1mhKSZCoBy7G P9YdTJlbQq4GZmf5n2hyP3o9oyNAJCIBFYltUN/ZQbNBfCqcDP6zfDjnMNnEmfptOHUz G3rQ== 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:arc-authentication-results; bh=NfAVGhkiKG5LOSRz+0cX59oYyiQyF8X1AP8p2lZ3qxA=; b=X8+dsFRQh/FiGA4XqVTRhhPwoM/aJNCigDVrmgLLdk7bcgEGuWUZUqvcL179myPvaS wMkwC0PfBpyuVebGMEM+WksidYqQ66qndI4V7yR8S4PsoBC1wLfH0vt4sYb98Lvsp/8K Ng2MBhynfYA9DRgYmXd2BEBYotOpbSkwL9yBl63tYgYY1BYvUrOf6SqYnz3YoRSi+hbh 8sQHo52Q8YdVnGvpOV8QxupkO08N++2vXPS+KvebCyRvo9v6c8aU2kAKpANYJ7Y/uGZv ZWQPJNj4jTMURxCRh75XfQ5WpJXqwFsm+F8MGGLEwZEZnIy9Hmy55+T4bY6lcaX3tX5r nbHQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=paAbMTm6; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id y36-v6si4165712qtd.59.2018.07.02.07.19.15 for (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 02 Jul 2018 07:19:16 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=paAbMTm6; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from localhost ([::1]:33062 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzff-0008SU-Ij for patch@linaro.org; Mon, 02 Jul 2018 10:19:15 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47758) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzM3-0002iC-Jq for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:59:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fZzM2-0008M2-Og for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:59 -0400 Received: from mail-pl0-x231.google.com ([2607:f8b0:400e:c01::231]:35356) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fZzM2-0008La-Ij for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:58:58 -0400 Received: by mail-pl0-x231.google.com with SMTP id k1-v6so8010346plt.2 for ; Mon, 02 Jul 2018 06:58:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=NfAVGhkiKG5LOSRz+0cX59oYyiQyF8X1AP8p2lZ3qxA=; b=paAbMTm6H3dUqLbEBiqxCFpz08GLb5Eb1EaxTSmYGXUeVPmSyKuBveNf8ELsaEE19o X/1ekOcWiAmjYstU2fjnw5Rz6KKx9A3JfRokNiIkGs53id0zd/lorVVMWN77Sw8fARhs kIdl8nzmB32v2VI4CPnfCvkxx8KUbgyFtWJ/173ZWRgsvYYb1nYe9DjxCkfroW3c0Vej UAchjFTN4rIK/eceuZwOCeEt/caetyTzP5ONY7GZUUtJ8GDxBunMtSx84jVPRtV9+fAp t1fzVOznOKNCBnay9xsmqfL0WZVWMF6hPRN010zMdmcLIzOetaD1oN2KC3sUDllYx/7+ PXNg== 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=NfAVGhkiKG5LOSRz+0cX59oYyiQyF8X1AP8p2lZ3qxA=; b=WN4+AoZtbSWfRUlGX5r7ukqmNxe2KOZLQhbPFTOWpg1uvizJtYitrehiF1MkG3NWwo XS5IXdlyDd4Oorw7W7cFtQFXs675saLJaxRU3MdGff65P2BeLTqxgkCXzK1mUKfeUHou VwIqTlvQaEysAQboUJHrHygDzU3/JkpnK4Y+05oKvL8aLjDGujZUs88Vm2Nb849Q5d/4 cggyuuoAANISgcFIDqGJSriaEvzrmQmeMzVxPhqsGSNsy3dqh9JLLzN8bKJIcXbokIPJ 75u6Djw3dw3XFJlmc4Kge6KWcCkk1VHe92cDw4yBr5V8j2jaQq/QPoJ/MUHizDXwjPZ2 vwGg== X-Gm-Message-State: APt69E0XYs+Jf7vuhoT4YTPBZQRxpRW3Yf+Hpdf4Jlu8CwHwWc7m/CgO DhmShrdva+Ek4M/5H/ImiqA= X-Received: by 2002:a17:902:6802:: with SMTP id h2-v6mr25651944plk.113.1530539937595; Mon, 02 Jul 2018 06:58:57 -0700 (PDT) Received: from localhost (g90.124-44-6.ppp.wakwak.ne.jp. [124.44.6.90]) by smtp.gmail.com with ESMTPSA id z123-v6sm24493773pfz.16.2018.07.02.06.58.56 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 02 Jul 2018 06:58:57 -0700 (PDT) From: Stafford Horne To: Peter Maydell Date: Mon, 2 Jul 2018 22:57:59 +0900 Message-Id: <20180702135806.7087-19-shorne@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180702135806.7087-1-shorne@gmail.com> References: <20180702135806.7087-1-shorne@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c01::231 Subject: [Qemu-devel] [PULL 18/25] target/openrisc: Stub out handle_mmu_fault for softmmu 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: Stafford Horne , Richard Henderson , QEMU Development Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson This hook is only used by CONFIG_USER_ONLY. Signed-off-by: Richard Henderson Signed-off-by: Stafford Horne --- target/openrisc/mmu.c | 35 +++++------------------------------ 1 file changed, 5 insertions(+), 30 deletions(-) -- 2.17.0 diff --git a/target/openrisc/mmu.c b/target/openrisc/mmu.c index a4613e9ae4..f4c0a3e217 100644 --- a/target/openrisc/mmu.c +++ b/target/openrisc/mmu.c @@ -177,42 +177,17 @@ static void cpu_openrisc_raise_mmu_exception(OpenRISCCPU *cpu, cpu->env.lock_addr = -1; } -#ifndef CONFIG_USER_ONLY int openrisc_cpu_handle_mmu_fault(CPUState *cs, vaddr address, int size, int rw, int mmu_idx) { +#ifdef CONFIG_USER_ONLY OpenRISCCPU *cpu = OPENRISC_CPU(cs); - int ret = 0; - hwaddr physical = 0; - int prot = 0; - - ret = get_phys_addr(cpu, &physical, &prot, address, rw); - - if (ret == TLBRET_MATCH) { - tlb_set_page(cs, address & TARGET_PAGE_MASK, - physical & TARGET_PAGE_MASK, prot, - mmu_idx, TARGET_PAGE_SIZE); - ret = 0; - } else if (ret < 0) { - cpu_openrisc_raise_mmu_exception(cpu, address, rw, ret); - ret = 1; - } - - return ret; -} + cpu_openrisc_raise_mmu_exception(cpu, address, rw, 0); + return 1; #else -int openrisc_cpu_handle_mmu_fault(CPUState *cs, vaddr address, int size, - int rw, int mmu_idx) -{ - OpenRISCCPU *cpu = OPENRISC_CPU(cs); - int ret = 0; - - cpu_openrisc_raise_mmu_exception(cpu, address, rw, ret); - ret = 1; - - return ret; -} + g_assert_not_reached(); #endif +} #ifndef CONFIG_USER_ONLY hwaddr openrisc_cpu_get_phys_page_debug(CPUState *cs, vaddr addr) From patchwork Mon Jul 2 13:58:00 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 140770 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp12367ljj; Mon, 2 Jul 2018 07:20:35 -0700 (PDT) X-Google-Smtp-Source: AAOMgpcuuIuP3p0uJBCMDa8Ezlz/JH8VJ67EB2hpCVHQp4MZXTMWWmpotvlKsIPnE9S731AXiTlx X-Received: by 2002:a37:ba02:: with SMTP id k2-v6mr1329848qkf.134.1530541234973; Mon, 02 Jul 2018 07:20:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530541234; cv=none; d=google.com; s=arc-20160816; b=pdQZ8bGj0hlecQXhDlWaVgTKdBZ1G52jLwcurBUnrcxVP96tZvLhk2PCzJBFFTMgfd b3P0uJpk/CePMNKSMHOk7rq0umdB8ncZlpG6kh7DfKh1NROdThBiBfhmUbEuziZz4Ljn btqJz0udTaHxe+b1oZcQy3KKde2pKdG4gcKHBX31U8H/hXyYpNnXUQLUzVQrrlH6rLcR Zm0TDH6baA9JAHnFSfvgnI2u3rB60LrAES++Z39XDtyYLJNluDsS9LNWwmeIOgn9gUO4 usfC1Sj80TJkafXI1sPmknXs3F+WGqc5H1g2j6RzjXibKp66jAoNMwmNO3s4w9E2uCIN s7Ow== 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:arc-authentication-results; bh=pNLpyMH2MtrDqswU9mlulZblcEuP061D6R6k4Avg5bA=; b=v/lJAiOYTiQOaP9M10ugpq2eFZ99YJzgvdajtthxmbTMtK8GvEOp7s2oc70uN7BCM2 JRvGfAN79fzhkT1GlXcpiypeufn00eQuM3ZF9IRLg4rV/o9igJgdzRdVW9TPaEnceLYc aZx4+CvL/n1alT+kVk9pnay+4lCIPvyXJFbOb0kgyFphz9cP7bN7TRjVzt+gX8NcU/H2 QemfTKBh9QyiqsRkLvQiA0hevB9eN/Udk4Z8L7P8HuAa1cJ0F9xGcQGH+1FUSVNgP+NA sTHR+gGpXPy81mRBTKtJ+S/uh8uIzOeyfw1TZkot5he7Adf8Y6grNVhYB0ydJlCQ5+j0 dpZg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=d2PMppn0; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id a126-v6si2245476qke.337.2018.07.02.07.20.34 for (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 02 Jul 2018 07:20:34 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=d2PMppn0; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from localhost ([::1]:33069 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzgw-0000n8-EJ for patch@linaro.org; Mon, 02 Jul 2018 10:20:34 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47784) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzM6-0002lL-QI for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:59:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fZzM4-0008N0-WD for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:59:02 -0400 Received: from mail-pg0-x242.google.com ([2607:f8b0:400e:c05::242]:36617) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fZzM4-0008Me-Pq for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:59:00 -0400 Received: by mail-pg0-x242.google.com with SMTP id m19-v6so3662939pgv.3 for ; Mon, 02 Jul 2018 06:59:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=pNLpyMH2MtrDqswU9mlulZblcEuP061D6R6k4Avg5bA=; b=d2PMppn0DeQ5yLZHtGkEZu40eRNQ1+657tKukHaQv2f5cWcG+0twGUUuSN0q4WHgxX Qrj74Q0Tth0UtP0+y7q+z1q74KPlX3+P11muHO63T2PDK35mWSnBUjkspbUJE6xvtujy dhWQElJCvlmnU4BJUQ6toQ/2Ed7Jy6JeUKZC816Q9nXiqDAHczOMhQlp+eo7V4WsUtoM 8H2O/+8XbZaEr97GJj+Fj4FHFvom9Ft8mAs70d+RDf8hy/kIG7xaizrhyfP4Fe8YpvGG /4nXe1aCJqg76RhnOTDIoRdp+67Ffk22UK6KYEhXXDYwInmkUTVP7k6EHf/AIB+4Mmvc RjwA== 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=pNLpyMH2MtrDqswU9mlulZblcEuP061D6R6k4Avg5bA=; b=EI9cZqqYOW30F1RLEUB4VlQ2GjcX3wD2aWMRzFR1SsXiH7DWPEojodbejPTJZVW80C xp7ZJirB64k9pEdMU1FdCakaWYBNA+DnOU/XErjdV7agJn9M8rEKYE40ngq7rdELCFF9 iSHOXj1Gk/BeFvtJ+MHjB6LEOZZvUbLZd1N0JNgVdybB66ZPV+QY7lfWDuVUXJGBwcqQ wvZ/UPvlyr/9oiHbn29dpvct0amt4PO4p1m5jWz2O307ZkZFePwq8hMpFFsgaJTM3Fyf cL1NGSL6gjmNkEFXod36rB1OPK+Fmh22YtV0ZWu+dAF09Y9JNk/cXWtydk5Qee2aFLy6 L+vg== X-Gm-Message-State: APt69E3U9MIdOVOJqtSwLQ3u7AbxZ39lIxZnt88kWxBzVDlhJxAYa6Wd MU0lHXQ4JjgD3he9niuVBmQ= X-Received: by 2002:a63:6741:: with SMTP id b62-v6mr22043323pgc.5.1530539939848; Mon, 02 Jul 2018 06:58:59 -0700 (PDT) Received: from localhost (g90.124-44-6.ppp.wakwak.ne.jp. [124.44.6.90]) by smtp.gmail.com with ESMTPSA id m10-v6sm25009762pgq.89.2018.07.02.06.58.59 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 02 Jul 2018 06:58:59 -0700 (PDT) From: Stafford Horne To: Peter Maydell Date: Mon, 2 Jul 2018 22:58:00 +0900 Message-Id: <20180702135806.7087-20-shorne@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180702135806.7087-1-shorne@gmail.com> References: <20180702135806.7087-1-shorne@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::242 Subject: [Qemu-devel] [PULL 19/25] target/openrisc: Increase the TLB size 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: Stafford Horne , Richard Henderson , QEMU Development Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson The architecture supports 128 TLB entries. There is no reason not to provide all of them. In the process we need to fix a bug that failed to parameterize the configuration register that tells the operating system the number of entries. Signed-off-by: Richard Henderson Signed-off-by: Stafford Horne --- v2: - Change VMState version. --- target/openrisc/cpu.c | 6 ++++-- target/openrisc/cpu.h | 2 +- target/openrisc/machine.c | 5 ++--- 3 files changed, 7 insertions(+), 6 deletions(-) -- 2.17.0 diff --git a/target/openrisc/cpu.c b/target/openrisc/cpu.c index b92de51ecf..e01ce9ed1c 100644 --- a/target/openrisc/cpu.c +++ b/target/openrisc/cpu.c @@ -57,8 +57,10 @@ static void openrisc_cpu_reset(CPUState *s) cpu->env.upr = UPR_UP | UPR_DMP | UPR_IMP | UPR_PICP | UPR_TTP | UPR_PMP; - cpu->env.dmmucfgr = (DMMUCFGR_NTW & (0 << 2)) | (DMMUCFGR_NTS & (6 << 2)); - cpu->env.immucfgr = (IMMUCFGR_NTW & (0 << 2)) | (IMMUCFGR_NTS & (6 << 2)); + cpu->env.dmmucfgr = (DMMUCFGR_NTW & (0 << 2)) + | (DMMUCFGR_NTS & (ctz32(TLB_SIZE) << 2)); + cpu->env.immucfgr = (IMMUCFGR_NTW & (0 << 2)) + | (IMMUCFGR_NTS & (ctz32(TLB_SIZE) << 2)); #ifndef CONFIG_USER_ONLY cpu->env.picmr = 0x00000000; diff --git a/target/openrisc/cpu.h b/target/openrisc/cpu.h index 47e94659e1..b180e30e9e 100644 --- a/target/openrisc/cpu.h +++ b/target/openrisc/cpu.h @@ -222,7 +222,7 @@ enum { /* TLB size */ enum { - TLB_SIZE = 64, + TLB_SIZE = 128, TLB_MASK = TLB_SIZE - 1, }; diff --git a/target/openrisc/machine.c b/target/openrisc/machine.c index 3fc837b925..1eedbf3dbe 100644 --- a/target/openrisc/machine.c +++ b/target/openrisc/machine.c @@ -38,9 +38,8 @@ static const VMStateDescription vmstate_tlb_entry = { static const VMStateDescription vmstate_cpu_tlb = { .name = "cpu_tlb", - .version_id = 1, - .minimum_version_id = 1, - .minimum_version_id_old = 1, + .version_id = 2, + .minimum_version_id = 2, .fields = (VMStateField[]) { VMSTATE_STRUCT_ARRAY(itlb, CPUOpenRISCTLBContext, TLB_SIZE, 0, vmstate_tlb_entry, OpenRISCTLBEntry), From patchwork Mon Jul 2 13:58:01 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 140771 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp13795ljj; Mon, 2 Jul 2018 07:21:47 -0700 (PDT) X-Google-Smtp-Source: AAOMgpe2QDjMRfSJZyrdkTGMdybHq7j7R6dT4BPwwlKK6G+w0F92BBn9J5S0BTUc/7pJ3QuNJAcR X-Received: by 2002:a37:6713:: with SMTP id b19-v6mr22237896qkc.63.1530541307583; Mon, 02 Jul 2018 07:21:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530541307; cv=none; d=google.com; s=arc-20160816; b=q5zh17YCoWkHXmuJYOeR9AAHZfbQvmrsrflKYRWGY+0XMJFizPTycLrAUwIymTKEDS wbh/wTfWqFIumMBvlTyOa5i1eBJPG3azcfwMmZsmBjPcC8uK+v/U64IMbfelX0UHUuhj HaT9C+e95ERqjykE1KjhtbOmQxFk7gTGE7AlDDc2lyMtE0DZVSwvycOY+yRqvdz+aoiW J3vdCE2oSBMEjR1lvRiRZ0chXqoVd6OHIzEoOkv7X+mGZFTjeXpeFAI8PeD/ZDuYaSXd OgLVJi0WM5nD5tJ7v0nEPqvErs3qCaFy/2f7oNnvQBlN/gHtdmkU0/Qc7bEReiTqPWkV SIng== 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:arc-authentication-results; bh=QAqh/3eTuvXq/YfChPe5U3ubjoePgMt1L0T6W0B22sE=; b=Yp0STH6UewqBDNqKIE81ZjQR1RRXBAwO5JRwHoGEidDRh7UjODq10oLw17MlspalLG yPPvWpZLwtJtjwqIQ4B7FiuEUqJbqBIEMf2TFmPwHjakDonFGCOa16H0SDQ0nsYArI8r KH4xcqRgmmIrYQzTHAIhOwtvPMCYzzbbTIjOpVnZXpze5IYQuMEHnOeS5PWIXlPsFrIw Z8cHEb7SYYpLIZvjktLXrwzxCPyHxef1tRrHTZj5IKygWhvlKGeQ+VMICp2rpBKcqK4/ qbFwFpo1HC13RKIdwav0NugAWDeuOS7UNB4O+s3ruXbbIhehcrtC0qTdUrV8+Ph2zN4W 734g== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=VT1dHxoG; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id y45-v6si5095765qtb.355.2018.07.02.07.21.47 for (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 02 Jul 2018 07:21:47 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=VT1dHxoG; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from localhost ([::1]:33078 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzi7-0001Un-02 for patch@linaro.org; Mon, 02 Jul 2018 10:21:47 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47805) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzM9-0002oB-HY for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:59:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fZzM7-0008OB-OZ for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:59:05 -0400 Received: from mail-pf0-x244.google.com ([2607:f8b0:400e:c00::244]:39640) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fZzM7-0008Nr-Ei for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:59:03 -0400 Received: by mail-pf0-x244.google.com with SMTP id s21-v6so7566331pfm.6 for ; Mon, 02 Jul 2018 06:59:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=QAqh/3eTuvXq/YfChPe5U3ubjoePgMt1L0T6W0B22sE=; b=VT1dHxoGojLdJ4iGHStXmRsFJTAatH1QrpGRyWjj0qjJlVr1Uvy+hVtTenJH+MQUyB bpWmpfX3pbgE2UEfyGTIDuU5gyoaHjUJB0oEKYqfVb5pW2Dtw64rMnpAjc1/975vYPnJ zTtwPQI9NHSjAqLILVadUtoAQ2dfrqMp6dr8ZvBhLhr1mX0Mm18G7GV7Uy+vBwikDvWk AXkCvLnE1OauQe1URPIVd3pPmorVl1BL0Zt1M0dJ9jRQjPdnh3ZfM3ab8h3q67NCGnVe CtsOrIty91G/XcOa/J417qAySlonlQuAVaYpsMflerWvHcDcM6qsz8b54vAPFuEH1cE7 4bhA== 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=QAqh/3eTuvXq/YfChPe5U3ubjoePgMt1L0T6W0B22sE=; b=UH5ECiz42YFKpnIGEqI/Zy9J1evD3U8IoaIbQctWhpTMNvpPYK9IUdztwyua9AGUV1 U0wfbHpuip0SxeGdrc412ekvpdn1/F4swoF66qtpsX6IEOlZWAHPlDBVbrLdW+8Pbhkg MaCpifKvMT5RQOwB72POpClTueePdTDOTNOa121HcCFii1o5Tps8h1PuL0arFEg1vAkW okEEVhJ1zz4eTg4ih7VWCTxz9Rl/133gFNw13g34llp58q77wrhTngh2X3NX0oxMyvoZ jptXHs84kqufx4WgZ8CWpHygTUXpF5nW2mbJGLrS+hUSM3O9fxprWovbXY5L0yc0dVPc 0zJA== X-Gm-Message-State: APt69E3kPeK8ZdO+47L9pG4dJJeF0wSTW22UK5UFCGx9l84WkIJZWRSg zRefanJd3//4gb3Ho9p210A= X-Received: by 2002:aa7:820e:: with SMTP id k14-v6mr25462594pfi.97.1530539942317; Mon, 02 Jul 2018 06:59:02 -0700 (PDT) Received: from localhost (g90.124-44-6.ppp.wakwak.ne.jp. [124.44.6.90]) by smtp.gmail.com with ESMTPSA id m86-v6sm13414711pfi.47.2018.07.02.06.59.01 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 02 Jul 2018 06:59:01 -0700 (PDT) From: Stafford Horne To: Peter Maydell Date: Mon, 2 Jul 2018 22:58:01 +0900 Message-Id: <20180702135806.7087-21-shorne@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180702135806.7087-1-shorne@gmail.com> References: <20180702135806.7087-1-shorne@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c00::244 Subject: [Qemu-devel] [PULL 20/25] target/openrisc: Reorg tlb lookup 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: Stafford Horne , Richard Henderson , QEMU Development Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson While openrisc has a split i/d tlb, qemu does not. Perform a lookup on both i & d tlbs in parallel and put the composite rights into qemu's tlb. This avoids ping-ponging the qemu tlb between EXEC and READ. Signed-off-by: Richard Henderson Signed-off-by: Stafford Horne --- target/openrisc/cpu.h | 8 -- target/openrisc/mmu.c | 250 +++++++++++++++--------------------------- 2 files changed, 88 insertions(+), 170 deletions(-) -- 2.17.0 diff --git a/target/openrisc/cpu.h b/target/openrisc/cpu.h index b180e30e9e..f1b31bc24a 100644 --- a/target/openrisc/cpu.h +++ b/target/openrisc/cpu.h @@ -237,14 +237,6 @@ enum { UXE = (1 << 7), }; -/* check if tlb available */ -enum { - TLBRET_INVALID = -3, - TLBRET_NOMATCH = -2, - TLBRET_BADADDR = -1, - TLBRET_MATCH = 0 -}; - typedef struct OpenRISCTLBEntry { uint32_t mr; uint32_t tr; diff --git a/target/openrisc/mmu.c b/target/openrisc/mmu.c index f4c0a3e217..d3796ae41e 100644 --- a/target/openrisc/mmu.c +++ b/target/openrisc/mmu.c @@ -29,148 +29,78 @@ #endif #ifndef CONFIG_USER_ONLY -static inline int get_phys_nommu(hwaddr *physical, int *prot, - target_ulong address) +static inline void get_phys_nommu(hwaddr *phys_addr, int *prot, + target_ulong address) { - *physical = address; + *phys_addr = address; *prot = PAGE_READ | PAGE_WRITE | PAGE_EXEC; - return TLBRET_MATCH; } -static int get_phys_code(OpenRISCCPU *cpu, hwaddr *physical, int *prot, - target_ulong address, int rw, bool supervisor) +static int get_phys_mmu(OpenRISCCPU *cpu, hwaddr *phys_addr, int *prot, + target_ulong addr, int need, bool super) { - int vpn = address >> TARGET_PAGE_BITS; - int idx = vpn & TLB_MASK; - int right = 0; - uint32_t mr = cpu->env.tlb.itlb[idx].mr; - uint32_t tr = cpu->env.tlb.itlb[idx].tr; - - if ((mr >> TARGET_PAGE_BITS) != vpn) { - return TLBRET_NOMATCH; - } - if (!(mr & 1)) { - return TLBRET_INVALID; - } - if (supervisor) { - if (tr & SXE) { - right |= PAGE_EXEC; - } - } else { - if (tr & UXE) { - right |= PAGE_EXEC; + int idx = (addr >> TARGET_PAGE_BITS) & TLB_MASK; + uint32_t imr = cpu->env.tlb.itlb[idx].mr; + uint32_t itr = cpu->env.tlb.itlb[idx].tr; + uint32_t dmr = cpu->env.tlb.dtlb[idx].mr; + uint32_t dtr = cpu->env.tlb.dtlb[idx].tr; + int right, match, valid; + + /* If the ITLB and DTLB indexes map to the same page, we want to + load all permissions all at once. If the destination pages do + not match, zap the one we don't need. */ + if (unlikely((itr ^ dtr) & TARGET_PAGE_MASK)) { + if (need & PAGE_EXEC) { + dmr = dtr = 0; + } else { + imr = itr = 0; } } - if ((rw & 2) && ((right & PAGE_EXEC) == 0)) { - return TLBRET_BADADDR; - } - *physical = (tr & TARGET_PAGE_MASK) | (address & ~TARGET_PAGE_MASK); - *prot = right; - return TLBRET_MATCH; -} + /* Check if either of the entries matches the source address. */ + match = (imr ^ addr) & TARGET_PAGE_MASK ? 0 : PAGE_EXEC; + match |= (dmr ^ addr) & TARGET_PAGE_MASK ? 0 : PAGE_READ | PAGE_WRITE; -static int get_phys_data(OpenRISCCPU *cpu, hwaddr *physical, int *prot, - target_ulong address, int rw, bool supervisor) -{ - int vpn = address >> TARGET_PAGE_BITS; - int idx = vpn & TLB_MASK; - int right = 0; - uint32_t mr = cpu->env.tlb.dtlb[idx].mr; - uint32_t tr = cpu->env.tlb.dtlb[idx].tr; + /* Check if either of the entries is valid. */ + valid = imr & 1 ? PAGE_EXEC : 0; + valid |= dmr & 1 ? PAGE_READ | PAGE_WRITE : 0; + valid &= match; - if ((mr >> TARGET_PAGE_BITS) != vpn) { - return TLBRET_NOMATCH; - } - if (!(mr & 1)) { - return TLBRET_INVALID; - } - if (supervisor) { - if (tr & SRE) { - right |= PAGE_READ; - } - if (tr & SWE) { - right |= PAGE_WRITE; - } - } else { - if (tr & URE) { - right |= PAGE_READ; - } - if (tr & UWE) { - right |= PAGE_WRITE; - } - } - - if (!(rw & 1) && ((right & PAGE_READ) == 0)) { - return TLBRET_BADADDR; - } - if ((rw & 1) && ((right & PAGE_WRITE) == 0)) { - return TLBRET_BADADDR; - } + /* Collect the permissions from the entries. */ + right = itr & (super ? SXE : UXE) ? PAGE_EXEC : 0; + right |= dtr & (super ? SRE : URE) ? PAGE_READ : 0; + right |= dtr & (super ? SWE : UWE) ? PAGE_WRITE : 0; + right &= valid; - *physical = (tr & TARGET_PAGE_MASK) | (address & ~TARGET_PAGE_MASK); + /* Note that above we validated that itr and dtr match on page. + So oring them together changes nothing without having to + check which one we needed. We also want to store to these + variables even on failure, as it avoids compiler warnings. */ + *phys_addr = ((itr | dtr) & TARGET_PAGE_MASK) | (addr & ~TARGET_PAGE_MASK); *prot = right; - return TLBRET_MATCH; -} -static int get_phys_addr(OpenRISCCPU *cpu, hwaddr *physical, - int *prot, target_ulong address, int rw) -{ - bool supervisor = (cpu->env.sr & SR_SM) != 0; - int ret; + qemu_log_mask(CPU_LOG_MMU, + "MMU lookup: need %d match %d valid %d right %d -> %s\n", + need, match, valid, right, (need & right) ? "OK" : "FAIL"); - /* Assume nommu results for a moment. */ - ret = get_phys_nommu(physical, prot, address); + /* Check the collective permissions are present. */ + if (likely(need & right)) { + return 0; /* success! */ + } - /* Overwrite with TLB lookup if enabled. */ - if (rw == MMU_INST_FETCH) { - if (cpu->env.sr & SR_IME) { - ret = get_phys_code(cpu, physical, prot, address, rw, supervisor); - } + /* Determine what kind of failure we have. */ + if (need & valid) { + return need & PAGE_EXEC ? EXCP_IPF : EXCP_DPF; } else { - if (cpu->env.sr & SR_DME) { - ret = get_phys_data(cpu, physical, prot, address, rw, supervisor); - } + return need & PAGE_EXEC ? EXCP_ITLBMISS : EXCP_DTLBMISS; } - - return ret; } #endif -static void cpu_openrisc_raise_mmu_exception(OpenRISCCPU *cpu, - target_ulong address, - int rw, int tlb_error) +static void raise_mmu_exception(OpenRISCCPU *cpu, target_ulong address, + int exception) { CPUState *cs = CPU(cpu); - int exception = 0; - - switch (tlb_error) { - default: - if (rw == 2) { - exception = EXCP_IPF; - } else { - exception = EXCP_DPF; - } - break; -#ifndef CONFIG_USER_ONLY - case TLBRET_BADADDR: - if (rw == 2) { - exception = EXCP_IPF; - } else { - exception = EXCP_DPF; - } - break; - case TLBRET_INVALID: - case TLBRET_NOMATCH: - /* No TLB match for a mapped address */ - if (rw == 2) { - exception = EXCP_ITLBMISS; - } else { - exception = EXCP_DTLBMISS; - } - break; -#endif - } cs->exception_index = exception; cpu->env.eear = address; @@ -182,7 +112,7 @@ int openrisc_cpu_handle_mmu_fault(CPUState *cs, vaddr address, int size, { #ifdef CONFIG_USER_ONLY OpenRISCCPU *cpu = OPENRISC_CPU(cs); - cpu_openrisc_raise_mmu_exception(cpu, address, rw, 0); + raise_mmu_exception(cpu, address, EXCP_DPF); return 1; #else g_assert_not_reached(); @@ -193,27 +123,32 @@ int openrisc_cpu_handle_mmu_fault(CPUState *cs, vaddr address, int size, hwaddr openrisc_cpu_get_phys_page_debug(CPUState *cs, vaddr addr) { OpenRISCCPU *cpu = OPENRISC_CPU(cs); + int prot, excp, sr = cpu->env.sr; hwaddr phys_addr; - int prot; - int miss; - /* Check memory for any kind of address, since during debug the - gdb can ask for anything, check data tlb for address */ - miss = get_phys_addr(cpu, &phys_addr, &prot, addr, 0); + switch (sr & (SR_DME | SR_IME)) { + case SR_DME | SR_IME: + /* The mmu is definitely enabled. */ + excp = get_phys_mmu(cpu, &phys_addr, &prot, addr, + PROT_EXEC | PROT_READ | PROT_WRITE, + (sr & SR_SM) != 0); + return excp ? -1 : phys_addr; - /* Check instruction tlb */ - if (miss) { - miss = get_phys_addr(cpu, &phys_addr, &prot, addr, MMU_INST_FETCH); - } - - /* Last, fall back to a plain address */ - if (miss) { - miss = get_phys_nommu(&phys_addr, &prot, addr); - } + default: + /* The mmu is partially enabled, and we don't really have + a "real" access type. Begin by trying the mmu, but if + that fails try again without. */ + excp = get_phys_mmu(cpu, &phys_addr, &prot, addr, + PROT_EXEC | PROT_READ | PROT_WRITE, + (sr & SR_SM) != 0); + if (!excp) { + return phys_addr; + } + /* fallthru */ - if (miss) { - return -1; - } else { + case 0: + /* The mmu is definitely disabled; lookups never fail. */ + get_phys_nommu(&phys_addr, &prot, addr); return phys_addr; } } @@ -222,37 +157,28 @@ void tlb_fill(CPUState *cs, target_ulong addr, int size, MMUAccessType access_type, int mmu_idx, uintptr_t retaddr) { OpenRISCCPU *cpu = OPENRISC_CPU(cs); - int ret, prot = 0; - hwaddr physical = 0; + int prot, excp; + hwaddr phys_addr; if (mmu_idx == MMU_NOMMU_IDX) { - ret = get_phys_nommu(&physical, &prot, addr); + /* The mmu is disabled; lookups never fail. */ + get_phys_nommu(&phys_addr, &prot, addr); + excp = 0; } else { bool super = mmu_idx == MMU_SUPERVISOR_IDX; - if (access_type == MMU_INST_FETCH) { - ret = get_phys_code(cpu, &physical, &prot, addr, 2, super); - } else { - ret = get_phys_data(cpu, &physical, &prot, addr, - access_type == MMU_DATA_STORE, super); - } + int need = (access_type == MMU_INST_FETCH ? PROT_EXEC + : access_type == MMU_DATA_STORE ? PROT_WRITE + : PROT_READ); + excp = get_phys_mmu(cpu, &phys_addr, &prot, addr, need, super); } - if (ret == TLBRET_MATCH) { - tlb_set_page(cs, addr & TARGET_PAGE_MASK, - physical & TARGET_PAGE_MASK, prot, - mmu_idx, TARGET_PAGE_SIZE); - } else if (ret < 0) { - int rw; - if (access_type == MMU_INST_FETCH) { - rw = 2; - } else if (access_type == MMU_DATA_STORE) { - rw = 1; - } else { - rw = 0; - } - cpu_openrisc_raise_mmu_exception(cpu, addr, rw, ret); - /* Raise Exception. */ + if (unlikely(excp)) { + raise_mmu_exception(cpu, addr, excp); cpu_loop_exit_restore(cs, retaddr); } + + tlb_set_page(cs, addr & TARGET_PAGE_MASK, + phys_addr & TARGET_PAGE_MASK, prot, + mmu_idx, TARGET_PAGE_SIZE); } #endif From patchwork Mon Jul 2 13:58:02 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 140759 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp4038176ljj; Mon, 2 Jul 2018 07:04:59 -0700 (PDT) X-Google-Smtp-Source: AAOMgpeH7ANitGnmhY6DZxbLrfnDWp1jjXTdfn/Rct6/2l6OyOUUHVOrUr3uEoaok/N8hALbuCHg X-Received: by 2002:a37:de02:: with SMTP id h2-v6mr21852525qkj.420.1530540299679; Mon, 02 Jul 2018 07:04:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530540299; cv=none; d=google.com; s=arc-20160816; b=e74pxuaP3hGVxEuhvq0k7b/Dol9NNVwc2FYD12FakkhI1G3JbW2BVoEu08AV/c0FG/ Rb4p3load/zxhgu771gdHA0al7Z9f8ZzeBd3kNzznq+MaBZYbNU07dvXFWkA0CZGE0HX Mar4AKvXM+C2EubNkV8nqf4a9ueIYKnQGl7O7+em40/DVMUq1aCMSq8grOipy9NpKXvM CKnmL6IBwvbkC7qB7gO//Tsh4tdNBrlf0W8NH2oMk7CWMf3GlUhh7nsCAwAZsaCLFBxS foMjlGNXhWcJYWGDCBO/F/q+lZ1ygPT4P7UYLl6g7B0yvQokK2Xs4DPhEBF+UCDwuch3 bt1w== 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:arc-authentication-results; bh=dkOZj/ZqKz8fgp7lnx+Urncpk3L1UM+0bsh5NWkTToY=; b=GOJYpj7H3JEZBIYD8TxmF9D5MlAD1LuxC7+RV1WcRdMe7dhUH4A2+zZ5QG4Qi/KTqU tfvmPSC8m4jBXmsqAUHzJYIcuclhlxTArGiKhDJ+Ao4PpEqtnJ/bI9r1sqEqFOk/YAbI VZbPrVnqxeeoUi70Z/J3Zi+d4besrd8ulb6awT7VkV6E+qxcv5JyViM739OUe3avrPdx envZWWv96F2iHTt0+lkCU2Jz8K5AOOdaDUuKSBe80NuEbaPx9a7iho2Hw1u4OjHkyH2k 3IfQlQOZp+ZBTahYjBn0atPHOQQxOuYpQHJT7SPhvxsy3O5xl9Jg7aEp1HWf4Q399Pqn iJ8A== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=bzSAAB26; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id 20-v6si4994107qtr.180.2018.07.02.07.04.59 for (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 02 Jul 2018 07:04:59 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=bzSAAB26; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from localhost ([::1]:32974 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzRr-00079m-2p for patch@linaro.org; Mon, 02 Jul 2018 10:04:59 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47814) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzMA-0002pG-Qj for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:59:07 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fZzM9-0008PN-TR for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:59:06 -0400 Received: from mail-pg0-x232.google.com ([2607:f8b0:400e:c05::232]:41854) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fZzM9-0008P1-Nd for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:59:05 -0400 Received: by mail-pg0-x232.google.com with SMTP id l65-v6so7195026pgl.8 for ; Mon, 02 Jul 2018 06:59:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=dkOZj/ZqKz8fgp7lnx+Urncpk3L1UM+0bsh5NWkTToY=; b=bzSAAB261XQx6ctEh14PLCepHdDXfb2Sa9osBw0QMrBXmPa0mZBoebA86bCWWqGfvX WVhD1+sh30V6JLgQ4Emd51Her+msFBsRX9u7tv0MVg3EZU13x/16wilVc1wAiGGj0Jyt vCPmqOHamotP8B5unzENoZ4gtkZt9GdTG72CELJfByjOhVmzUhpVo8ogVqwXEG7l8Lg1 mxSw4QLw6xsgqrmUalFm0HG5YvPB9g1l8R1luvpYNd8tD6sAya551FnPFVa+7Ux+CVYO 5YmDcxRVsxjNRobyBPYz3WX4C/+FkJE6XylNkKezMh+KGvcO9LOV273Tf7HJu4XyxKG4 3JBw== 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=dkOZj/ZqKz8fgp7lnx+Urncpk3L1UM+0bsh5NWkTToY=; b=dK84kCsF/j3+Pkdpc35NaYnwYD1WZnAWMEnPlZWb7hZ8msiZWoCj1/B0oZQLklBzR7 S6nlSlHZlLKtA8Nv+DeYvEjkPOoX/8rIrbEd0n1MxYvzfrMlN13h1hYNFiwdSY9+cdUQ 1SJu7xZXwsLkzh6oupS5SY3pDy5ugimUc7cnHgeeEPgecSNWG3jKM83Iuw7rhwofvW2G oebttiHS3cimy+t0cnb1J9VcXBdvXPvkom3CEI6CNCC6UIBmYN2R+i/aPbKY1iBUdyk0 Bo/cA21GFc85bxJh9/nY0XvRbVXfzwOqinCuMEEhD11Up6b19h4HNN5+qFLAYjxYFwFx Ao2A== X-Gm-Message-State: APt69E11/ofnVSTONKWV7M/KnmiSey557GTFBOujTzEbYVYKjFBb7/s/ yNKd7CjaQ+Wu0iilURnteMw= X-Received: by 2002:a62:8d16:: with SMTP id z22-v6mr12005578pfd.181.1530539944769; Mon, 02 Jul 2018 06:59:04 -0700 (PDT) Received: from localhost (g90.124-44-6.ppp.wakwak.ne.jp. [124.44.6.90]) by smtp.gmail.com with ESMTPSA id s2-v6sm11792570pfh.186.2018.07.02.06.59.03 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 02 Jul 2018 06:59:04 -0700 (PDT) From: Stafford Horne To: Peter Maydell Date: Mon, 2 Jul 2018 22:58:02 +0900 Message-Id: <20180702135806.7087-22-shorne@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180702135806.7087-1-shorne@gmail.com> References: <20180702135806.7087-1-shorne@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::232 Subject: [Qemu-devel] [PULL 21/25] target/openrisc: Add support in scripts/qemu-binfmt-conf.sh 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: Stafford Horne , Riku Voipio , Richard Henderson , QEMU Development , Laurent Vivier Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson Reviewed-by: Laurent Vivier Signed-off-by: Richard Henderson Signed-off-by: Stafford Horne --- scripts/qemu-binfmt-conf.sh | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) -- 2.17.0 diff --git a/scripts/qemu-binfmt-conf.sh b/scripts/qemu-binfmt-conf.sh index d7eefda0b8..a5cb96d79a 100755 --- a/scripts/qemu-binfmt-conf.sh +++ b/scripts/qemu-binfmt-conf.sh @@ -1,10 +1,10 @@ #!/bin/sh -# enable automatic i386/ARM/M68K/MIPS/SPARC/PPC/s390/HPPA/Xtensa/microblaze -# program execution by the kernel +# Enable automatic program execution by the kernel. qemu_target_list="i386 i486 alpha arm armeb sparc32plus ppc ppc64 ppc64le m68k \ mips mipsel mipsn32 mipsn32el mips64 mips64el \ -sh4 sh4eb s390x aarch64 aarch64_be hppa riscv32 riscv64 xtensa xtensaeb microblaze microblazeel" +sh4 sh4eb s390x aarch64 aarch64_be hppa riscv32 riscv64 xtensa xtensaeb \ +microblaze microblazeel or1k" i386_magic='\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x03\x00' i386_mask='\xff\xff\xff\xff\xff\xfe\xfe\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff' @@ -124,6 +124,10 @@ microblazeel_magic='\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\ microblazeel_mask='\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff' microblazeel_family=microblazeel +or1k_magic='\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x5c' +or1k_mask='\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff' +or1k_family=or1k + qemu_get_family() { cpu=${HOST_ARCH:-$(uname -m)} case "$cpu" in From patchwork Mon Jul 2 13:58:03 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 140773 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp15348ljj; Mon, 2 Jul 2018 07:23:07 -0700 (PDT) X-Google-Smtp-Source: AAOMgpcdBzfjoCUCk62W8m1/1pUUW6HnwNbd0gZf0qoYpJD/EWEoSHJ6IjS9jOQN00d6GjgfopQs X-Received: by 2002:a37:234c:: with SMTP id j73-v6mr22858913qkj.146.1530541387765; Mon, 02 Jul 2018 07:23:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530541387; cv=none; d=google.com; s=arc-20160816; b=KVc548wdan3xtw6HyQDngKIQZ8HbsX1ukqxzO7w2qLnFmja0LXMia0aTkrQ9PbStlb CApn4FAUS0Ir3b8/qwOhrK1+lA1zVHtIWseqlc0c3CENpp4kEyhi441/9NBOeVqd3udv 74N7VkHJ/ynscAPbUwkjwnQgKhap9Rt5gyPtOx4FvcbN6E0B/tGT33PMGrcYXTShCPkE gO2tgONZxYpVSgCJrJrRp2U31lkxNOfttuOwQCVqN4wW5UWCI0e2HFesyAEDUnB40nzO 8KO/VmRfz/cvZycJGLtzhrneZmH/CdP9oCCcyZsb+fG/R51SQ8RuR10FaSwlE9RHYNyk VGRA== 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:arc-authentication-results; bh=F7rcxKazhym6fGcGabR+MBUe2uMPrZbSmGMOt1qshwg=; b=JvSI2bVbq8IWyegrwv5guDNtnmAMfW+kPD4rOsh00VQ7faz6xNLrIasYNWfgce16y9 RxSvOLZoQgr8M4L/SPJGzyiS2I1hUKLpPsm8Uj41Hc6je0cxzbFIsrqvDXV4B0XDkUrt oxGamlIpY18vNqamTePXDpGDJeGIzYEtuW4HK/RtEnugEsPBFY3vd1Dje45jUY6lwfAt /ddoIUY0U2pbfaQrgFV49gtPrMXfMmyTX/Cc9yMsezRAFg2C3APlx+vOWF41YAiELLnK tBGEoASsv7Tgmmxz24hQOALwYDxTmA8JaVBhO1N08MsJ2/+31Xh1WVRcA/VdU5dNGN7m mHpg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=XL8Qwpbm; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id y48-v6si2464855qvh.56.2018.07.02.07.23.07 for (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 02 Jul 2018 07:23:07 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=XL8Qwpbm; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from localhost ([::1]:33083 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzjP-0002N7-74 for patch@linaro.org; Mon, 02 Jul 2018 10:23:07 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47860) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzMF-0002vt-OH for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:59:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fZzMC-0008QX-JO for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:59:11 -0400 Received: from mail-pf0-x244.google.com ([2607:f8b0:400e:c00::244]:33386) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fZzMC-0008Q6-B1 for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:59:08 -0400 Received: by mail-pf0-x244.google.com with SMTP id b17-v6so7571460pfi.0 for ; Mon, 02 Jul 2018 06:59:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=F7rcxKazhym6fGcGabR+MBUe2uMPrZbSmGMOt1qshwg=; b=XL8Qwpbmu8XTkeWtiyamSZrqXxIRRD4lQsCVvUsaP8iRQLyj0ldS4+xNKNXeBgV/To 78SxS8YHbS8XolLZb6oEkOd4Mnb4AMgEVqr3Qkf5P0A3hZr3XfoaKiVfO+Tq0C4rl2Gn MhUEsELMbmxnk4b5poOPNSRnwSZ9jjNNe+OUrtILNOp1jfmlEy3bexW2URVGOumg+h9+ afIO0VzwYQlJkatXr51C70x9GIwLa3TO8TrAt16C0n3vzjUPIarqZfu+DmP63nzODlLF QtXClXQ1Ir7TGi8rhU2Lvrf+38O3roWjUaJJmG0LLg+NZ6dmHUbyOtu5KfhML9KG1Ud7 6P7Q== 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=F7rcxKazhym6fGcGabR+MBUe2uMPrZbSmGMOt1qshwg=; b=BaVrBQTSZ/Pk5zHoHDkGLOTnvu/IZkc8aKrD4TheqdFeRsP+VMuDbmsQJxeUBhEPiw MYRIKeFvfynzDxSTHbGNaQmPiM/hH7eBYyKcluUnioxu7Zas1IXaYIo1Z+IsdIhv2M/Q 0V9hjj3VYQuYX+1aiDw+NCBalAmVd71oEB0prIvkJuOF0k5SYbFiSavJHFWEaAt/if8H nmcDEKVEow8ASXgsdoJTsX1YMog82GeEbaDSFRwoUAU4DNsPqyObvCksq3jRp1T6kF7T 5ZUwxpjQmf/1AyvyK0VhxfNRCVyi0QVc/sFZyN2xWTuDHTbB8D6/+CFRAbBUq8a2lJcr 0r/g== X-Gm-Message-State: APt69E1ab0HXOgkxFHu6rvVbRpeAyhlz6XKcNy9aBqz87TBSvRjuVBoo N6y0rsH7WKiE7LYBmtCvid4= X-Received: by 2002:a65:63cd:: with SMTP id n13-v6mr21689536pgv.185.1530539947331; Mon, 02 Jul 2018 06:59:07 -0700 (PDT) Received: from localhost (g90.124-44-6.ppp.wakwak.ne.jp. [124.44.6.90]) by smtp.gmail.com with ESMTPSA id l28-v6sm13996718pfi.4.2018.07.02.06.59.06 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 02 Jul 2018 06:59:06 -0700 (PDT) From: Stafford Horne To: Peter Maydell Date: Mon, 2 Jul 2018 22:58:03 +0900 Message-Id: <20180702135806.7087-23-shorne@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180702135806.7087-1-shorne@gmail.com> References: <20180702135806.7087-1-shorne@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c00::244 Subject: [Qemu-devel] [PULL 22/25] linux-user: Implement signals for openrisc 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: Stafford Horne , Riku Voipio , Richard Henderson , QEMU Development , Laurent Vivier Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson All of the existing code was boilerplate from elsewhere, and would crash the guest upon the first signal. Signed-off-by: Richard Henderson Signed-off-by: Stafford Horne --- v2: Add a comment to the new definition of target_pt_regs. Install the signal mask into the ucontext. v3: Incorporate feedback from Laurent. --- linux-user/openrisc/signal.c | 217 +++++++++++---------------- linux-user/openrisc/target_syscall.h | 28 +--- linux-user/signal.c | 2 +- target/openrisc/cpu.c | 1 + 4 files changed, 94 insertions(+), 154 deletions(-) -- 2.17.0 diff --git a/linux-user/openrisc/signal.c b/linux-user/openrisc/signal.c index 8be0b74001..232ad82b98 100644 --- a/linux-user/openrisc/signal.c +++ b/linux-user/openrisc/signal.c @@ -21,124 +21,69 @@ #include "signal-common.h" #include "linux-user/trace.h" -struct target_sigcontext { +typedef struct target_sigcontext { struct target_pt_regs regs; abi_ulong oldmask; - abi_ulong usp; -}; +} target_sigcontext; -struct target_ucontext { +typedef struct target_ucontext { abi_ulong tuc_flags; abi_ulong tuc_link; target_stack_t tuc_stack; - struct target_sigcontext tuc_mcontext; + target_sigcontext tuc_mcontext; target_sigset_t tuc_sigmask; /* mask last for extensibility */ -}; +} target_ucontext; -struct target_rt_sigframe { - abi_ulong pinfo; - uint64_t puc; +typedef struct target_rt_sigframe { struct target_siginfo info; - struct target_sigcontext sc; - struct target_ucontext uc; - unsigned char retcode[16]; /* trampoline code */ -}; - -/* This is the asm-generic/ucontext.h version */ -#if 0 -static int restore_sigcontext(CPUOpenRISCState *regs, - struct target_sigcontext *sc) -{ - unsigned int err = 0; - unsigned long old_usp; - - /* Alwys make any pending restarted system call return -EINTR */ - current_thread_info()->restart_block.fn = do_no_restart_syscall; + target_ucontext uc; + uint32_t retcode[4]; /* trampoline code */ +} target_rt_sigframe; - /* restore the regs from &sc->regs (same as sc, since regs is first) - * (sc is already checked for VERIFY_READ since the sigframe was - * checked in sys_sigreturn previously) - */ +static void restore_sigcontext(CPUOpenRISCState *env, target_sigcontext *sc) +{ + int i; + abi_ulong v; - if (copy_from_user(regs, &sc, sizeof(struct target_pt_regs))) { - goto badframe; + for (i = 0; i < 32; ++i) { + __get_user(v, &sc->regs.gpr[i]); + cpu_set_gpr(env, i, v); } + __get_user(env->pc, &sc->regs.pc); - /* make sure the U-flag is set so user-mode cannot fool us */ - - regs->sr &= ~SR_SM; - - /* restore the old USP as it was before we stacked the sc etc. - * (we cannot just pop the sigcontext since we aligned the sp and - * stuff after pushing it) - */ - - __get_user(old_usp, &sc->usp); - phx_signal("old_usp 0x%lx", old_usp); - - __PHX__ REALLY /* ??? */ - wrusp(old_usp); - regs->gpr[1] = old_usp; - - /* TODO: the other ports use regs->orig_XX to disable syscall checks - * after this completes, but we don't use that mechanism. maybe we can - * use it now ? - */ - - return err; - -badframe: - return 1; + /* Make sure the supervisor flag is clear. */ + __get_user(v, &sc->regs.sr); + cpu_set_sr(env, v & ~SR_SM); } -#endif /* Set up a signal frame. */ -static void setup_sigcontext(struct target_sigcontext *sc, - CPUOpenRISCState *regs, - unsigned long mask) +static void setup_sigcontext(target_sigcontext *sc, CPUOpenRISCState *env) { - unsigned long usp = cpu_get_gpr(regs, 1); - - /* copy the regs. they are first in sc so we can use sc directly */ + int i; - /*copy_to_user(&sc, regs, sizeof(struct target_pt_regs));*/ - - /* Set the frametype to CRIS_FRAME_NORMAL for the execution of - the signal handler. The frametype will be restored to its previous - value in restore_sigcontext. */ - /*regs->frametype = CRIS_FRAME_NORMAL;*/ - - /* then some other stuff */ - __put_user(mask, &sc->oldmask); - __put_user(usp, &sc->usp); -} + for (i = 0; i < 32; ++i) { + __put_user(cpu_get_gpr(env, i), &sc->regs.gpr[i]); + } -static inline unsigned long align_sigframe(unsigned long sp) -{ - return sp & ~3UL; + __put_user(env->pc, &sc->regs.pc); + __put_user(cpu_get_sr(env), &sc->regs.sr); } static inline abi_ulong get_sigframe(struct target_sigaction *ka, - CPUOpenRISCState *regs, + CPUOpenRISCState *env, size_t frame_size) { - unsigned long sp = get_sp_from_cpustate(regs); - int onsigstack = on_sig_stack(sp); - - /* redzone */ - sp = target_sigsp(sp, ka); - - sp = align_sigframe(sp - frame_size); + target_ulong sp = get_sp_from_cpustate(env); - /* - * If we are on the alternate signal stack and would overflow it, don't. - * Return an always-bogus address instead so we will die with SIGSEGV. + /* Honor redzone now. If we swap to signal stack, no need to waste + * the 128 bytes by subtracting afterward. */ + sp -= 128; - if (onsigstack && !likely(on_sig_stack(sp))) { - return -1L; - } + sp = target_sigsp(sp, ka); + sp -= frame_size; + sp = QEMU_ALIGN_DOWN(sp, 4); return sp; } @@ -147,11 +92,9 @@ void setup_rt_frame(int sig, struct target_sigaction *ka, target_siginfo_t *info, target_sigset_t *set, CPUOpenRISCState *env) { - int err = 0; abi_ulong frame_addr; - unsigned long return_ip; - struct target_rt_sigframe *frame; - abi_ulong info_addr, uc_addr; + target_rt_sigframe *frame; + int i; frame_addr = get_sigframe(ka, env, sizeof(*frame)); trace_user_setup_rt_frame(env, frame_addr); @@ -159,47 +102,37 @@ void setup_rt_frame(int sig, struct target_sigaction *ka, goto give_sigsegv; } - info_addr = frame_addr + offsetof(struct target_rt_sigframe, info); - __put_user(info_addr, &frame->pinfo); - uc_addr = frame_addr + offsetof(struct target_rt_sigframe, uc); - __put_user(uc_addr, &frame->puc); - if (ka->sa_flags & SA_SIGINFO) { tswap_siginfo(&frame->info, info); } - /*err |= __clear_user(&frame->uc, offsetof(ucontext_t, uc_mcontext));*/ __put_user(0, &frame->uc.tuc_flags); __put_user(0, &frame->uc.tuc_link); - target_save_altstack(&frame->uc.tuc_stack, env); - setup_sigcontext(&frame->sc, env, set->sig[0]); - /*err |= copy_to_user(frame->uc.tuc_sigmask, set, sizeof(*set));*/ - - /* trampoline - the desired return ip is the retcode itself */ - return_ip = (unsigned long)&frame->retcode; - /* This is l.ori r11,r0,__NR_sigreturn, l.sys 1 */ - __put_user(0xa960, (short *)(frame->retcode + 0)); - __put_user(TARGET_NR_rt_sigreturn, (short *)(frame->retcode + 2)); - __put_user(0x20000001, (unsigned long *)(frame->retcode + 4)); - __put_user(0x15000000, (unsigned long *)(frame->retcode + 8)); - - if (err) { - goto give_sigsegv; + target_save_altstack(&frame->uc.tuc_stack, env); + setup_sigcontext(&frame->uc.tuc_mcontext, env); + for (i = 0; i < TARGET_NSIG_WORDS; ++i) { + __put_user(set->sig[i], &frame->uc.tuc_sigmask.sig[i]); } - /* TODO what is the current->exec_domain stuff and invmap ? */ + /* This is l.ori r11,r0,__NR_sigreturn; l.sys 1; l.nop; l.nop */ + __put_user(0xa9600000 | TARGET_NR_rt_sigreturn, frame->retcode + 0); + __put_user(0x20000001, frame->retcode + 1); + __put_user(0x15000000, frame->retcode + 2); + __put_user(0x15000000, frame->retcode + 3); /* Set up registers for signal handler */ - env->pc = (unsigned long)ka->_sa_handler; /* what we enter NOW */ - cpu_set_gpr(env, 9, (unsigned long)return_ip); /* what we enter LATER */ - cpu_set_gpr(env, 3, (unsigned long)sig); /* arg 1: signo */ - cpu_set_gpr(env, 4, (unsigned long)&frame->info); /* arg 2: (siginfo_t*) */ - cpu_set_gpr(env, 5, (unsigned long)&frame->uc); /* arg 3: ucontext */ - - /* actually move the usp to reflect the stacked frame */ - cpu_set_gpr(env, 1, (unsigned long)frame); - + cpu_set_gpr(env, 9, frame_addr + offsetof(target_rt_sigframe, retcode)); + cpu_set_gpr(env, 3, sig); + cpu_set_gpr(env, 4, frame_addr + offsetof(target_rt_sigframe, info)); + cpu_set_gpr(env, 5, frame_addr + offsetof(target_rt_sigframe, uc)); + cpu_set_gpr(env, 1, frame_addr); + + /* For debugging convenience, set ppc to the insn that faulted. */ + env->ppc = env->pc; + /* When setting the PC for the signal handler, exit delay slot. */ + env->pc = ka->_sa_handler; + env->dflag = 0; return; give_sigsegv: @@ -207,16 +140,34 @@ give_sigsegv: force_sigsegv(sig); } -long do_sigreturn(CPUOpenRISCState *env) -{ - trace_user_do_sigreturn(env, 0); - fprintf(stderr, "do_sigreturn: not implemented\n"); - return -TARGET_ENOSYS; -} - long do_rt_sigreturn(CPUOpenRISCState *env) { + abi_ulong frame_addr = get_sp_from_cpustate(env); + target_rt_sigframe *frame; + sigset_t set; + trace_user_do_rt_sigreturn(env, 0); - fprintf(stderr, "do_rt_sigreturn: not implemented\n"); - return -TARGET_ENOSYS; + if (!lock_user_struct(VERIFY_READ, frame, frame_addr, 1)) { + goto badframe; + } + if (frame_addr & 3) { + goto badframe; + } + + target_to_host_sigset(&set, &frame->uc.tuc_sigmask); + set_sigmask(&set); + + restore_sigcontext(env, &frame->uc.tuc_mcontext); + if (do_sigaltstack(frame_addr + offsetof(target_rt_sigframe, uc.tuc_stack), + 0, frame_addr) == -EFAULT) { + goto badframe; + } + + unlock_user_struct(frame, frame_addr, 0); + return cpu_get_gpr(env, 11); + + badframe: + unlock_user_struct(frame, frame_addr, 0); + force_sig(TARGET_SIGSEGV); + return 0; } diff --git a/linux-user/openrisc/target_syscall.h b/linux-user/openrisc/target_syscall.h index 03104f80af..d586d2a018 100644 --- a/linux-user/openrisc/target_syscall.h +++ b/linux-user/openrisc/target_syscall.h @@ -1,27 +1,15 @@ #ifndef OPENRISC_TARGET_SYSCALL_H #define OPENRISC_TARGET_SYSCALL_H +/* Note that in linux/arch/openrisc/include/uapi/asm/ptrace.h, + * this is called user_regs_struct. Given that this is what + * is used within struct sigcontext we need this definition. + * However, elfload.c wants this name. + */ struct target_pt_regs { - union { - struct { - /* Named registers */ - uint32_t sr; /* Stored in place of r0 */ - target_ulong sp; /* r1 */ - }; - struct { - /* Old style */ - target_ulong offset[2]; - target_ulong gprs[30]; - }; - struct { - /* New style */ - target_ulong gpr[32]; - }; - }; - target_ulong pc; - target_ulong orig_gpr11; /* For restarting system calls */ - uint32_t syscallno; /* Syscall number (used by strace) */ - target_ulong dummy; /* Cheap alignment fix */ + abi_ulong gpr[32]; + abi_ulong pc; + abi_ulong sr; }; #define UNAME_MACHINE "openrisc" diff --git a/linux-user/signal.c b/linux-user/signal.c index be2815b45d..602b631b92 100644 --- a/linux-user/signal.c +++ b/linux-user/signal.c @@ -236,7 +236,7 @@ int do_sigprocmask(int how, const sigset_t *set, sigset_t *oldset) return 0; } -#if !defined(TARGET_OPENRISC) && !defined(TARGET_NIOS2) +#if !defined(TARGET_NIOS2) /* Just set the guest's signal mask to the specified value; the * caller is assumed to have called block_signals() already. */ diff --git a/target/openrisc/cpu.c b/target/openrisc/cpu.c index e01ce9ed1c..fb7cb5c507 100644 --- a/target/openrisc/cpu.c +++ b/target/openrisc/cpu.c @@ -27,6 +27,7 @@ static void openrisc_cpu_set_pc(CPUState *cs, vaddr value) OpenRISCCPU *cpu = OPENRISC_CPU(cs); cpu->env.pc = value; + cpu->env.dflag = 0; } static bool openrisc_cpu_has_work(CPUState *cs) From patchwork Mon Jul 2 13:58:04 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 140772 Delivered-To: patch@linaro.org Received: by 2002:a2e:9754:0:0:0:0:0 with SMTP id f20-v6csp15107ljj; Mon, 2 Jul 2018 07:22:56 -0700 (PDT) X-Google-Smtp-Source: AAOMgpcgpnaXz3tHhDat5IZfb7/cGEMA6qLGxxwWNfNH4I0tp0RInx3vXqGOeI9h4VRLZ9sVU8Vi X-Received: by 2002:a37:6809:: with SMTP id d9-v6mr21199616qkc.444.1530541376279; Mon, 02 Jul 2018 07:22:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530541376; cv=none; d=google.com; s=arc-20160816; b=xIFevMTGDNTWX6ktp3wC3+DwqQvhydG2P8MKtWurPXfLAW5fGmY502/RnlLMIBKpqu 3rucyPyOE6RObfDnWEH9jmX/u/SmR7NOnKXOFklyWxp9XxLb24LG+viZ/kgtaPzgpCMk uMnlTWY7Ud8PunVkkSgstHMkJwliEgkDme7SuVJ46t74Khzij7xKfwZPMgV/DDcBFf+2 JGYU1gwEV2ZCSifmlfvIbF4g9dnHAidaQj6KQ4RiVdpWQvV1zLhor9yOOuO4BIy9oC7V NligIamwApZBFNkRluX5kjeueHqeoDy68beQrttBa0ZyoE1t6nG7sUL3lqIHRCa4wwNM umtw== 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:arc-authentication-results; bh=Jg5o5O8f7NGqpFAqaMDMujT5BHfLWo7v6FNRox8NIPo=; b=bo6MgHtM0lPB0OrZ17q6neiZm0eEd19XYOWpnptNRuL9yo/GSoMSGPx000LJ5egA4P fsO7bTwLfg7qvGu+ty1vU4BfHQLnrOrLDcwvC8z2Dmd94NUu8WvYqPQTbkymldxN6ERg yZR8YpFXcENrOMfJqHmqSMNaarKoGDGSUVS2p6i+hGIJprK8AFIf/MkYyo6ypVmkAIdh FWz0dx/wGFEf9R544BnmV8ZObW2wKO/QQTQnjYh0qmjeKi1iUFlf8DbpWX0Me5FJyu1x j2InePFvIdAAUCHKsnadDJlOWiaweUpicBaHCwNgUbMRXiMQuHiwK+/riKrH8muomDy+ SPEw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=IT+AS0CL; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org. [2001:4830:134:3::11]) by mx.google.com with ESMTPS id u7-v6si578204qvm.118.2018.07.02.07.22.56 for (version=TLS1 cipher=AES128-SHA bits=128/128); Mon, 02 Jul 2018 07:22:56 -0700 (PDT) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) client-ip=2001:4830:134:3::11; Authentication-Results: mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=IT+AS0CL; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 2001:4830:134:3::11 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from localhost ([::1]:33081 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzjD-00024s-Rx for patch@linaro.org; Mon, 02 Jul 2018 10:22:55 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47859) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fZzMF-0002vr-O2 for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:59:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fZzME-0008Sg-OL for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:59:11 -0400 Received: from mail-pg0-x244.google.com ([2607:f8b0:400e:c05::244]:37762) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fZzME-0008Rt-IW for qemu-devel@nongnu.org; Mon, 02 Jul 2018 09:59:10 -0400 Received: by mail-pg0-x244.google.com with SMTP id n15-v6so3961203pgv.4 for ; Mon, 02 Jul 2018 06:59:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Jg5o5O8f7NGqpFAqaMDMujT5BHfLWo7v6FNRox8NIPo=; b=IT+AS0CLZdd8kgdJjvkGRj8hWpRT1ha3HdI2qLdNbbbK3exDnSMP3phh6pR0rM6J4q eUNWQNLHClBRhR9H0KfPNO6WBU3mhW6VD0Ga17y5Mnp8HoK1SCsxop1sQdkvg5r1BN1y bWd++Dl4e+2Fg0OG53hMSj42rdu5+vNurK9JAebZQ8OC0YdzDKp3WWN73kRE6qxpwlEi /IOnQ4bL1ETZ2DmBdUM2m1gfur6JEPf4MaiZlKCAxV0kBBq9llo9WwhO6VSLXdwQPTz7 r2J0yDzNWL3gqltQJsWW1PSr8HHRSefDIGhC60V0u/prduQgW7Er6siyzV2EHYwcIswk 9vpg== 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=Jg5o5O8f7NGqpFAqaMDMujT5BHfLWo7v6FNRox8NIPo=; b=Hp0nE5sgTxuVYDgC2aPr7pIYPLr9iyfo7Kwdhav/BEg7TayeB39cweFqXoyPwY0ZZG 2YMF1fw+duFWZwDFHIOJO5fsFyGPw8hzXgJUvabo4c7SSx+XEU17lGzmLjGdW964WDVr LlsjTi9CHRTJmuC6aszRJ+COqKONThVoKCWPx33BQvH4tybKBlVgFTp/gDH5fZg6qIJ5 E2O5QM7BdNt+M8Lj3kRYmnWJLb+pJ2TMPvwtNnuzWRw6MnAtKrOy1D9JtKKcvoNlrdkl nQSt1bIgYS7WmL45P8c6vYWFMcKdovu+NCj4bkS4Yt1LH/kKxUQX3Ryhjykxp1Fn5zyt YtFQ== X-Gm-Message-State: APt69E3PYf/QQ5svGc7ZippFwsO36GBtftAhAy+iPr2QSQ9NH45G+0ea POGYdW64t715yJVBm87F9/0= X-Received: by 2002:a62:33c4:: with SMTP id z187-v6mr25670764pfz.190.1530539949655; Mon, 02 Jul 2018 06:59:09 -0700 (PDT) Received: from localhost (g90.124-44-6.ppp.wakwak.ne.jp. [124.44.6.90]) by smtp.gmail.com with ESMTPSA id r4-v6sm7472494pfj.53.2018.07.02.06.59.08 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 02 Jul 2018 06:59:09 -0700 (PDT) From: Stafford Horne To: Peter Maydell Date: Mon, 2 Jul 2018 22:58:04 +0900 Message-Id: <20180702135806.7087-24-shorne@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180702135806.7087-1-shorne@gmail.com> References: <20180702135806.7087-1-shorne@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c05::244 Subject: [Qemu-devel] [PULL 23/25] linux-user: Fix struct sigaltstack for openrisc 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: Stafford Horne , Riku Voipio , Richard Henderson , QEMU Development , Laurent Vivier Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" From: Richard Henderson Reviewed-by: Laurent Vivier Signed-off-by: Richard Henderson Signed-off-by: Stafford Horne --- linux-user/openrisc/target_signal.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -- 2.17.0 diff --git a/linux-user/openrisc/target_signal.h b/linux-user/openrisc/target_signal.h index c352a8b333..8283eaf544 100644 --- a/linux-user/openrisc/target_signal.h +++ b/linux-user/openrisc/target_signal.h @@ -5,8 +5,8 @@ typedef struct target_sigaltstack { abi_long ss_sp; + abi_int ss_flags; abi_ulong ss_size; - abi_long ss_flags; } target_stack_t; /* sigaltstack controls */