From: Aurelien Jarno <aurelien@aurel32.net>
To: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 18/19] Correctly decode hw_ld/hw_st opcodes for all alpha implementations.
Date: Tue, 7 Apr 2009 23:52:25 +0200 [thread overview]
Message-ID: <20090407215225.GG23682@volta.aurel32.net> (raw)
In-Reply-To: <1238423794-25455-19-git-send-email-gingold@adacore.com>
On Mon, Mar 30, 2009 at 04:36:33PM +0200, Tristan Gingold wrote:
> Allow privilegied pal_code only in kernel mode.
>
> Signed-off-by: Tristan Gingold <gingold@adacore.com>
> ---
> target-alpha/translate.c | 30 +++++++++++++++++++++++-------
> 1 files changed, 23 insertions(+), 7 deletions(-)
>
> diff --git a/target-alpha/translate.c b/target-alpha/translate.c
> index 061cf5f..6938b5d 100644
> --- a/target-alpha/translate.c
> +++ b/target-alpha/translate.c
> @@ -52,6 +52,7 @@ struct DisasContext {
> int pal_mode;
> #endif
> uint32_t amask;
> + uint32_t implver;
> };
>
> /* global register indexes */
> @@ -103,6 +104,20 @@ static void alpha_translate_init(void)
> done_init = 1;
> }
>
> +static inline int get_mxcr_iprn(DisasContext *ctx, uint32_t insn)
> +{
> + switch (ctx->implver) {
> + case IMPLVER_2106x:
> + return insn & 0xff;
> + case IMPLVER_21164:
> + return insn & 0xffff;
> + case IMPLVER_21264:
> + return (insn >> 8) & 0xff;
> + default:
> + abort();
> + }
> +}
> +
> static always_inline void gen_excp (DisasContext *ctx,
> int exception, int error_code)
> {
> @@ -689,7 +704,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
> #if !defined (CONFIG_USER_ONLY)
> } else if (palcode < 0x40) {
> /* Privileged PAL code */
> - if (ctx->mem_idx & 1)
> + if (ctx->mem_idx != MMU_KERNEL_IDX)
> goto invalid_opc;
> else
> gen_excp(ctx, EXCP_CALL_PALP + ((palcode & 0x3F) << 6), 0);
> @@ -1748,7 +1763,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
> if (!ctx->pal_mode)
> goto invalid_opc;
> if (ra != 31) {
> - TCGv tmp = tcg_const_i32(insn & 0xFF);
> + TCGv tmp = tcg_const_i32(get_mxcr_iprn(ctx, insn));
> gen_helper_mfpr(cpu_ir[ra], tmp, cpu_ir[ra]);
> tcg_temp_free(tmp);
> }
> @@ -2063,9 +2078,9 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
> if (!ctx->pal_mode)
> goto invalid_opc;
> else {
> - TCGv tmp1 = tcg_const_i32(insn & 0xFF);
> - if (ra != 31)
> - gen_helper_mtpr(tmp1, cpu_ir[ra]);
> + TCGv tmp1 = tcg_const_i32(get_mxcr_iprn(ctx, insn));
> + if (rb != 31)
> + gen_helper_mtpr(tmp1, cpu_ir[rb]);
> else {
> TCGv tmp2 = tcg_const_i64(0);
> gen_helper_mtpr(tmp1, tmp2);
> @@ -2089,7 +2104,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
> } else {
> TCGv tmp;
>
> - if (ra != 31) {
> + if (rb != 31) {
> tmp = tcg_temp_new();
> tcg_gen_addi_i64(tmp, cpu_ir[rb], (((int64_t)insn << 51) >> 51));
> } else
> @@ -2097,7 +2112,7 @@ static always_inline int translate_one (DisasContext *ctx, uint32_t insn)
> gen_helper_hw_ret(tmp);
> tcg_temp_free(tmp);
> }
> - ret = 2;
> + ret = 3;
> break;
> #endif
> case 0x1F:
> @@ -2352,6 +2367,7 @@ static always_inline void gen_intermediate_code_internal (CPUState *env,
> gen_opc_end = gen_opc_buf + OPC_MAX_SIZE;
> ctx.pc = pc_start;
> ctx.amask = env->amask;
> + ctx.implver = env->implver;
> #if defined (CONFIG_USER_ONLY)
> ctx.mem_idx = 0;
> #else
implver is defined once at init time, and I don't expect it to change
once qemu has been started. Therefore I think there is no need to copy
env->implver into ctx.implver, env->implver can be accessed directly,
even from translate.c
--
Aurelien Jarno GPG: 1024D/F1BCDB73
aurelien@aurel32.net http://www.aurel32.net
next prev parent reply other threads:[~2009-04-07 21:52 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-03-30 14:36 [Qemu-devel] [PATCH 0/20]: add alpha es40 system emulation (v4) Tristan Gingold
2009-03-30 14:36 ` [Qemu-devel] [PATCH 01/19] Add support for multi-level phys map Tristan Gingold
2009-03-30 14:36 ` [Qemu-devel] [PATCH 02/19] Increase Alpha physical address size to 44 bits Tristan Gingold
2009-03-30 14:36 ` [Qemu-devel] [PATCH 03/19] Alpha: set target page size to 13 bits Tristan Gingold
2009-03-30 14:36 ` [Qemu-devel] [PATCH 04/19] Allow 5 mmu indexes Tristan Gingold
2009-03-30 14:36 ` [Qemu-devel] [PATCH 05/19] Split cpu_mmu_index into cpu_mmu_index_data and cpu_mmu_index_code Tristan Gingold
2009-03-30 14:36 ` [Qemu-devel] [PATCH 06/19] Bug fix alpha: stop translation if too long Tristan Gingold
2009-03-30 14:36 ` [Qemu-devel] [PATCH 07/19] Alpha bug: fix palcode mask for user pal calls Tristan Gingold
2009-03-30 14:36 ` [Qemu-devel] [PATCH 08/19] Alpha: document more registers used by 21264 Tristan Gingold
2009-03-30 14:36 ` [Qemu-devel] [PATCH 09/19] Add square wave output support Tristan Gingold
2009-03-30 14:36 ` [Qemu-devel] [PATCH 10/19] Add ali1543 super IO pci device Tristan Gingold
2009-03-30 14:36 ` [Qemu-devel] [PATCH 11/19] Add 21272 chipset (memory and pci controller for alpha) Tristan Gingold
2009-03-30 14:36 ` [Qemu-devel] [PATCH 12/19] Add target-alpha/machine.c and hw/es40.c for es40 machine emulation Tristan Gingold
2009-03-30 14:36 ` [Qemu-devel] [PATCH 13/19] Move softmmu_helper.h from exec.h to op_helper.c on alpha Tristan Gingold
2009-03-30 14:36 ` [Qemu-devel] [PATCH 14/19] alpha ld helpers now directly return the value Tristan Gingold
2009-03-30 14:36 ` [Qemu-devel] [PATCH 15/19] Add alpha_cpu_list Tristan Gingold
2009-03-30 14:36 ` [Qemu-devel] [PATCH 16/19] Alpha: lower parent irq when irq is lowered Tristan Gingold
2009-03-30 14:36 ` [Qemu-devel] [PATCH 17/19] Move linux-user pal emulation to linux-user/ Tristan Gingold
2009-03-30 14:36 ` [Qemu-devel] [PATCH 18/19] Correctly decode hw_ld/hw_st opcodes for all alpha implementations Tristan Gingold
2009-03-30 14:36 ` [Qemu-devel] [PATCH 19/19] Add full emulation for 21264 Tristan Gingold
2009-04-07 21:52 ` Aurelien Jarno [this message]
2009-04-08 12:26 ` [Qemu-devel] [PATCH 18/19] Correctly decode hw_ld/hw_st opcodes for all alpha implementations Tristan Gingold
2009-04-15 14:42 ` [Qemu-devel] [PATCH 16/19] Alpha: lower parent irq when irq is lowered Aurelien Jarno
2009-04-07 22:29 ` [Qemu-devel] [PATCH 09/19] Add square wave output support Aurelien Jarno
2009-04-07 22:32 ` [Qemu-devel] [PATCH 08/19] Alpha: document more registers used by 21264 Aurelien Jarno
2009-04-07 22:31 ` [Qemu-devel] [PATCH 07/19] Alpha bug: fix palcode mask for user pal calls Aurelien Jarno
2009-04-07 21:44 ` [Qemu-devel] [PATCH 06/19] Bug fix alpha: stop translation if too long Aurelien Jarno
2009-04-15 14:30 ` [Qemu-devel] [PATCH 05/19] Split cpu_mmu_index into cpu_mmu_index_data and cpu_mmu_index_code Aurelien Jarno
2009-04-21 12:10 ` Tristan Gingold
2009-04-07 21:48 ` [Qemu-devel] [PATCH 04/19] Allow 5 mmu indexes Aurelien Jarno
2009-04-07 21:47 ` [Qemu-devel] [PATCH 03/19] Alpha: set target page size to 13 bits Aurelien Jarno
2009-04-15 16:23 ` [Qemu-devel] [PATCH 01/19] Add support for multi-level phys map Aurelien Jarno
2009-04-21 12:11 ` Tristan Gingold
2009-03-30 15:46 ` [Qemu-devel] [PATCH 0/20]: add alpha es40 system emulation (v4) Brian Wheeler
2009-03-30 16:04 ` Tristan Gingold
2009-03-30 16:43 ` Brian Wheeler
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090407215225.GG23682@volta.aurel32.net \
--to=aurelien@aurel32.net \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.