All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Rolnik <mrolnik@gmail.com>
To: qemu-devel@nongnu.org
Cc: thuth@redhat.com, Michael Rolnik <mrolnik@gmail.com>,
	me@xcancerberox.com.ar, richard.henderson@linaro.org,
	dovgaluk@ispras.ru, imammedo@redhat.com, philmd@redhat.com,
	aleksandar.m.mail@gmail.com
Subject: [PATCH v38 04/22] target/avr: Add instruction translation - Registers definition
Date: Sun,  8 Dec 2019 20:39:04 +0200	[thread overview]
Message-ID: <20191208183922.13757-5-mrolnik@gmail.com> (raw)
In-Reply-To: <20191208183922.13757-1-mrolnik@gmail.com>

Signed-off-by: Michael Rolnik <mrolnik@gmail.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
 target/avr/translate.c | 143 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 143 insertions(+)
 create mode 100644 target/avr/translate.c

diff --git a/target/avr/translate.c b/target/avr/translate.c
new file mode 100644
index 0000000000..0139bcabb1
--- /dev/null
+++ b/target/avr/translate.c
@@ -0,0 +1,143 @@
+/*
+ * QEMU AVR CPU
+ *
+ * Copyright (c) 2019 Michael Rolnik
+ *
+ * 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.1 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
+ * <http://www.gnu.org/licenses/lgpl-2.1.html>
+ */
+
+#include "qemu/osdep.h"
+#include "qemu/qemu-print.h"
+#include "tcg/tcg.h"
+#include "cpu.h"
+#include "exec/exec-all.h"
+#include "tcg-op.h"
+#include "exec/cpu_ldst.h"
+#include "exec/helper-proto.h"
+#include "exec/helper-gen.h"
+#include "exec/log.h"
+#include "exec/translator.h"
+#include "exec/gen-icount.h"
+
+/*
+ *  Define if you want a BREAK instruction translated to a breakpoint
+ *  Active debugging connection is assumed
+ *  This is for
+ *  https://github.com/seharris/qemu-avr-tests/tree/master/instruction-tests
+ *  tests
+ */
+#undef BREAKPOINT_ON_BREAK
+
+static TCGv cpu_pc;
+
+static TCGv cpu_Cf;
+static TCGv cpu_Zf;
+static TCGv cpu_Nf;
+static TCGv cpu_Vf;
+static TCGv cpu_Sf;
+static TCGv cpu_Hf;
+static TCGv cpu_Tf;
+static TCGv cpu_If;
+
+static TCGv cpu_rampD;
+static TCGv cpu_rampX;
+static TCGv cpu_rampY;
+static TCGv cpu_rampZ;
+
+static TCGv cpu_r[NUMBER_OF_CPU_REGISTERS];
+static TCGv cpu_eind;
+static TCGv cpu_sp;
+
+static TCGv cpu_skip;
+
+static const char reg_names[NUMBER_OF_CPU_REGISTERS][8] = {
+    "r0",  "r1",  "r2",  "r3",  "r4",  "r5",  "r6",  "r7",
+    "r8",  "r9",  "r10", "r11", "r12", "r13", "r14", "r15",
+    "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
+    "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
+};
+#define REG(x) (cpu_r[x])
+
+enum {
+    DISAS_EXIT   = DISAS_TARGET_0,  /* We want return to the cpu main loop.  */
+    DISAS_LOOKUP = DISAS_TARGET_1,  /* We have a variable condition exit.  */
+    DISAS_CHAIN  = DISAS_TARGET_2,  /* We have a single condition exit.  */
+};
+
+typedef struct DisasContext DisasContext;
+
+/* This is the state at translation time. */
+struct DisasContext {
+    TranslationBlock *tb;
+
+    CPUAVRState *env;
+    CPUState *cs;
+
+    target_long npc;
+    uint32_t opcode;
+
+    /* Routine used to access memory */
+    int memidx;
+    int bstate;
+    int singlestep;
+
+    TCGv skip_var0;
+    TCGv skip_var1;
+    TCGCond skip_cond;
+    bool free_skip_var0;
+};
+
+static int to_regs_16_31_by_one(DisasContext *ctx, int indx)
+{
+    return 16 + (indx % 16);
+}
+
+static int to_regs_16_23_by_one(DisasContext *ctx, int indx)
+{
+    return 16 + (indx % 8);
+}
+static int to_regs_24_30_by_two(DisasContext *ctx, int indx)
+{
+    return 24 + (indx % 4) * 2;
+}
+static int to_regs_00_30_by_two(DisasContext *ctx, int indx)
+{
+    return (indx % 16) * 2;
+}
+
+static uint16_t next_word(DisasContext *ctx)
+{
+    return cpu_lduw_code(ctx->env, ctx->npc++ * 2);
+}
+
+static int append_16(DisasContext *ctx, int x)
+{
+    return x << 16 | next_word(ctx);
+}
+
+
+static bool avr_have_feature(DisasContext *ctx, int feature)
+{
+    if (!avr_feature(ctx->env, feature)) {
+        gen_helper_unsupported(cpu_env);
+        ctx->bstate = DISAS_NORETURN;
+        return false;
+    }
+    return true;
+}
+
+static bool decode_insn(DisasContext *ctx, uint16_t insn);
+#include "decode_insn.inc.c"
+
-- 
2.17.2 (Apple Git-113)



  parent reply	other threads:[~2019-12-08 18:56 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-08 18:39 [PATCH v38 00/22] QEMU AVR 8 bit cores Michael Rolnik
2019-12-08 18:39 ` [PATCH v38 01/22] target/avr: Add outward facing interfaces and core CPU logic Michael Rolnik
2019-12-08 18:39 ` [PATCH v38 02/22] target/avr: Add instruction helpers Michael Rolnik
2019-12-08 18:39 ` [PATCH v38 03/22] target/avr: Add instruction decoding Michael Rolnik
2019-12-09 19:37   ` Aleksandar Markovic
2019-12-09 19:44     ` Aleksandar Markovic
2019-12-08 18:39 ` Michael Rolnik [this message]
2019-12-10 21:03   ` [PATCH v38 04/22] target/avr: Add instruction translation - Registers definition Aleksandar Markovic
2019-12-08 18:39 ` [PATCH v38 05/22] target/avr: Add instruction translation - Arithmetic and Logic Instructions Michael Rolnik
2019-12-10 20:44   ` Aleksandar Markovic
2019-12-08 18:39 ` [PATCH v38 06/22] target/avr: Add instruction translation - Branch Instructions Michael Rolnik
2019-12-08 18:39 ` [PATCH v38 07/22] target/avr: Add instruction translation - Data Transfer Instructions Michael Rolnik
2019-12-08 18:39 ` [PATCH v38 08/22] target/avr: Add instruction translation - Bit and Bit-test Instructions Michael Rolnik
2019-12-08 18:39 ` [PATCH v38 09/22] target/avr: Add instruction translation - MCU Control Instructions Michael Rolnik
2019-12-08 18:39 ` [PATCH v38 10/22] target/avr: Add instruction translation - CPU main translation function Michael Rolnik
2019-12-08 18:39 ` [PATCH v38 11/22] target/avr: Add instruction disassembly function Michael Rolnik
2019-12-09 18:10   ` Aleksandar Markovic
2019-12-09 18:27     ` Michael Rolnik
2019-12-10  4:21       ` Aleksandar Markovic
2019-12-10  7:18         ` Michael Rolnik
2019-12-12  9:12           ` Aleksandar Markovic
2019-12-17 21:24             ` Michael Rolnik
2019-12-17 22:33               ` Aleksandar Markovic
2019-12-08 18:39 ` [PATCH v38 12/22] target/avr: Add limited support for USART peripheral Michael Rolnik
2019-12-08 18:39 ` [PATCH v38 13/22] target/avr: Add limited support for 16 bit timer peripheral Michael Rolnik
2019-12-08 18:39 ` [PATCH v38 14/22] target/avr: Add dummy mask device Michael Rolnik
2019-12-08 18:39 ` [PATCH v38 15/22] target/avr: Add example board configuration Michael Rolnik
2019-12-09 18:24   ` Aleksandar Markovic
2019-12-09 18:30     ` Michael Rolnik
2019-12-09 18:37       ` Michael Rolnik
2019-12-10 16:33         ` Aleksandar Markovic
2019-12-08 18:39 ` [PATCH v38 16/22] target/avr: Add section about AVR into QEMU documentation Michael Rolnik
2019-12-09 20:06   ` Aleksandar Markovic
2019-12-08 18:39 ` [PATCH v38 17/22] target/avr: Register AVR support with the rest of QEMU Michael Rolnik
2019-12-09 18:16   ` Aleksandar Markovic
2019-12-09 18:30     ` Michael Rolnik
2019-12-10 20:47       ` Aleksandar Markovic
2019-12-08 18:39 ` [PATCH v38 18/22] target/avr: Add machine none test Michael Rolnik
2019-12-09 18:13   ` Aleksandar Markovic
2019-12-09 18:28     ` Michael Rolnik
2019-12-09 18:46       ` Aleksandar Markovic
2019-12-08 18:39 ` [PATCH v38 19/22] target/avr: Update build system Michael Rolnik
2019-12-08 18:39 ` [PATCH v38 20/22] target/avr: Add boot serial test Michael Rolnik
2019-12-08 18:39 ` [PATCH v38 21/22] target/avr: Add Avocado test Michael Rolnik
2019-12-08 18:39 ` [PATCH v38 22/22] target/avr: Update MAINTAINERS file Michael Rolnik
2019-12-08 18:41 ` [PATCH v38 00/22] QEMU AVR 8 bit cores Michael Rolnik
2019-12-10 16:12 ` Aleksandar Markovic

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=20191208183922.13757-5-mrolnik@gmail.com \
    --to=mrolnik@gmail.com \
    --cc=aleksandar.m.mail@gmail.com \
    --cc=dovgaluk@ispras.ru \
    --cc=imammedo@redhat.com \
    --cc=me@xcancerberox.com.ar \
    --cc=philmd@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=thuth@redhat.com \
    /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.