All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Rolnik <mrolnik@gmail.com>
To: qemu-devel@nongnu.org
Cc: Michael Rolnik <mrolnik@gmail.com>
Subject: [Qemu-devel] [PATCH RFC v1 19/29] target-arc: LR, SR
Date: Fri,  9 Sep 2016 01:32:00 +0300	[thread overview]
Message-ID: <1473373930-31547-20-git-send-email-mrolnik@gmail.com> (raw)
In-Reply-To: <1473373930-31547-1-git-send-email-mrolnik@gmail.com>

Signed-off-by: Michael Rolnik <mrolnik@gmail.com>
---
 target-arc/helper.h         |   2 +
 target-arc/op_helper.c      | 322 ++++++++++++++++++++++++++++++++++++++++++++
 target-arc/translate-inst.c |  26 ++++
 target-arc/translate-inst.h |   3 +
 4 files changed, 353 insertions(+)

diff --git a/target-arc/helper.h b/target-arc/helper.h
index d480052..1d84935 100644
--- a/target-arc/helper.h
+++ b/target-arc/helper.h
@@ -21,4 +21,6 @@
 DEF_HELPER_1(debug, void, env)
 DEF_HELPER_2(norm, i32, env, i32)
 DEF_HELPER_2(normw, i32, env, i32)
+DEF_HELPER_2(lr, tl, env, i32)
+DEF_HELPER_2(sr, void, i32, i32)
 
diff --git a/target-arc/op_helper.c b/target-arc/op_helper.c
index f372bbf..3cf9080 100644
--- a/target-arc/op_helper.c
+++ b/target-arc/op_helper.c
@@ -89,3 +89,325 @@ target_ulong helper_normw(CPUARCState *env, uint32_t src1)
     }
 }
 
+void helper_sr(uint32_t val, uint32_t aux)
+{
+    switch (aux) {
+        case AUX_ID_STATUS: {
+        } break;
+
+        case AUX_ID_SEMAPHORE: {
+        } break;
+
+        case AUX_ID_LP_START: {
+        } break;
+
+        case AUX_ID_LP_END: {
+        } break;
+
+        case AUX_ID_IDENTITY: {
+        } break;
+
+        case AUX_ID_DEBUG: {
+        } break;
+
+        case AUX_ID_PC: {
+        } break;
+
+        case AUX_ID_STATUS32: {
+        } break;
+
+        case AUX_ID_STATUS32_L1: {
+        } break;
+
+        case AUX_ID_STATUS32_L2: {
+        } break;
+
+        case AUX_ID_MULHI: {
+        } break;
+
+        case AUX_ID_INT_VECTOR_BASE: {
+        } break;
+
+        case AUX_ID_INT_MACMODE: {
+        } break;
+
+        case AUX_ID_IRQ_LV12: {
+        } break;
+
+        case AUX_ID_IRQ_LEV: {
+        } break;
+
+        case AUX_ID_IRQ_HINT: {
+        } break;
+
+        case AUX_ID_ERET: {
+        } break;
+
+        case AUX_ID_ERBTA: {
+        } break;
+
+        case AUX_ID_ERSTATUS: {
+        } break;
+
+        case AUX_ID_ECR: {
+        } break;
+
+        case AUX_ID_EFA: {
+        } break;
+
+        case AUX_ID_ICAUSE1: {
+        } break;
+
+        case AUX_ID_ICAUSE2: {
+        } break;
+
+        case AUX_ID_IENABLE: {
+        } break;
+
+        case AUX_ID_ITRIGGER: {
+        } break;
+
+        case AUX_ID_BTA: {
+        } break;
+
+        case AUX_ID_BTA_L1: {
+        } break;
+
+        case AUX_ID_BTA_L2: {
+        } break;
+
+        case AUX_ID_IRQ_PULSE_CANSEL: {
+        } break;
+
+        case AUX_ID_IRQ_PENDING: {
+        } break;
+
+        default: {
+            cpu_outl(aux, val);
+        }
+    }
+    cpu_outl(aux, val);
+}
+
+static target_ulong get_status(CPUARCState *env)
+{
+    target_ulong res = 0x00000000;
+
+    res |= (env->stat.Zf) ? BIT(31) : 0;
+    res |= (env->stat.Nf) ? BIT(30) : 0;
+    res |= (env->stat.Cf) ? BIT(29) : 0;
+    res |= (env->stat.Vf) ? BIT(28) : 0;
+    res |= (env->stat.E2f) ? BIT(27) : 0;
+    res |= (env->stat.E1f) ? BIT(26) : 0;
+
+    if (env->stopped) {
+        res |= BIT(25);
+    }
+
+    res |= (env->r[63] >> 2) & 0x03ffffff;
+
+    return res;
+}
+
+static target_ulong get_status32(CPUARCState *env)
+{
+    target_ulong res = 0x00000000;
+
+    res |= (env->stat.Lf) ? BIT(12) : 0;
+    res |= (env->stat.Zf) ? BIT(11) : 0;
+    res |= (env->stat.Nf) ? BIT(10) : 0;
+    res |= (env->stat.Cf) ? BIT(9)  : 0;
+    res |= (env->stat.Vf) ? BIT(8)  : 0;
+    res |= (env->stat.Uf) ? BIT(7)  : 0;
+    res |= (env->stat.DEf) ? BIT(6)  : 0;
+    res |= (env->stat.AEf) ? BIT(5)  : 0;
+    res |= (env->stat.A2f) ? BIT(4)  : 0;
+    res |= (env->stat.A1f) ? BIT(3)  : 0;
+    res |= (env->stat.E2f) ? BIT(2)  : 0;
+    res |= (env->stat.E1f) ? BIT(1)  : 0;
+
+    if (env->stopped) {
+        res |= BIT(0);
+    }
+
+    return res;
+}
+
+static target_ulong get_status32_l1(CPUARCState *env)
+{
+    target_ulong res = 0x00000000;
+
+    res |= (env->stat_l1.Lf) ? BIT(12) : 0;
+    res |= (env->stat_l1.Zf) ? BIT(11) : 0;
+    res |= (env->stat_l1.Nf) ? BIT(10) : 0;
+    res |= (env->stat_l1.Cf) ? BIT(9)  : 0;
+    res |= (env->stat_l1.Vf) ? BIT(8)  : 0;
+    res |= (env->stat_l1.Uf) ? BIT(7)  : 0;
+    res |= (env->stat_l1.DEf) ? BIT(6)  : 0;
+    res |= (env->stat_l1.AEf) ? BIT(5)  : 0;
+    res |= (env->stat_l1.A2f) ? BIT(4)  : 0;
+    res |= (env->stat_l1.A1f) ? BIT(3)  : 0;
+    res |= (env->stat_l1.E2f) ? BIT(2)  : 0;
+    res |= (env->stat_l1.E1f) ? BIT(1)  : 0;
+
+    return res;
+}
+
+static target_ulong get_status32_l2(CPUARCState *env)
+{
+    target_ulong res = 0x00000000;
+
+    res |= (env->stat_l2.Lf) ? BIT(12) : 0;
+    res |= (env->stat_l2.Zf) ? BIT(11) : 0;
+    res |= (env->stat_l2.Nf) ? BIT(10) : 0;
+    res |= (env->stat_l2.Cf) ? BIT(9)  : 0;
+    res |= (env->stat_l2.Vf) ? BIT(8)  : 0;
+    res |= (env->stat_l2.Uf) ? BIT(7)  : 0;
+    res |= (env->stat_l2.DEf) ? BIT(6)  : 0;
+    res |= (env->stat_l2.AEf) ? BIT(5)  : 0;
+    res |= (env->stat_l2.A2f) ? BIT(4)  : 0;
+    res |= (env->stat_l2.A1f) ? BIT(3)  : 0;
+    res |= (env->stat_l2.E2f) ? BIT(2)  : 0;
+    res |= (env->stat_l2.E1f) ? BIT(1)  : 0;
+
+    return res;
+}
+
+static target_ulong get_debug(CPUARCState *env)
+{
+    target_ulong res = 0x00000000;
+
+    res |= (env->debug.LD) ? BIT(31) : 0;
+    res |= (env->debug.SH) ? BIT(30) : 0;
+    res |= (env->debug.BH) ? BIT(29) : 0;
+    res |= (env->debug.UB) ? BIT(28) : 0;
+    res |= (env->debug.ZZ) ? BIT(27) : 0;
+    res |= (env->debug.RA) ? BIT(22) : 0;
+    res |= (env->debug.IS) ? BIT(11) : 0;
+    res |= (env->debug.FH) ? BIT(1)  : 0;
+    res |= (env->debug.SS) ? BIT(0)  : 0;
+
+    return res;
+}
+
+target_ulong helper_lr(CPUARCState *env, uint32_t aux)
+{
+    target_ulong result = 0;
+
+    switch (aux) {
+        case AUX_ID_STATUS: {
+            result = get_status(env);
+        } break;
+
+        /*
+            NOTE: SEMAPHORE should be handled by a device
+        */
+
+        case AUX_ID_LP_START: {
+            result = env->lps;
+        } break;
+
+        case AUX_ID_LP_END: {
+            result = env->lpe;
+        } break;
+
+        case AUX_ID_IDENTITY: {
+        } break;
+
+        case AUX_ID_DEBUG: {
+            result = get_debug(env);
+        } break;
+
+        case AUX_ID_PC: {
+            result = env->pc & 0xfffffffe;
+        } break;
+
+        case AUX_ID_STATUS32: {
+            result = get_status32(env);
+        } break;
+
+        case AUX_ID_STATUS32_L1: {
+            result = get_status32_l1(env);
+        } break;
+
+        case AUX_ID_STATUS32_L2: {
+            result = get_status32_l2(env);
+        } break;
+
+        case AUX_ID_MULHI: {
+            result = CPU_MHI(env);
+        } break;
+
+        case AUX_ID_INT_VECTOR_BASE: {
+            result = env->intvec;
+        } break;
+
+        case AUX_ID_INT_MACMODE: {
+        } break;
+
+        case AUX_ID_IRQ_LV12: {
+        } break;
+
+        case AUX_ID_IRQ_LEV: {
+        } break;
+
+        case AUX_ID_IRQ_HINT: {
+        } break;
+
+        case AUX_ID_ERET: {
+            result = env->eret;
+        } break;
+
+        case AUX_ID_ERBTA: {
+            result = env->erbta;
+        } break;
+
+        case AUX_ID_ERSTATUS: {
+        } break;
+
+        case AUX_ID_ECR: {
+            result = env->ecr;
+        } break;
+
+        case AUX_ID_EFA: {
+            result = env->efa;
+        } break;
+
+        case AUX_ID_ICAUSE1: {
+        } break;
+
+        case AUX_ID_ICAUSE2: {
+        } break;
+
+        case AUX_ID_IENABLE: {
+        } break;
+
+        case AUX_ID_ITRIGGER: {
+        } break;
+
+        case AUX_ID_BTA: {
+            result = env->bta;
+        } break;
+
+        case AUX_ID_BTA_L1: {
+            result = env->bta_l1;
+        } break;
+
+        case AUX_ID_BTA_L2: {
+            result = env->bta_l2;
+        } break;
+
+        case AUX_ID_IRQ_PULSE_CANSEL: {
+        } break;
+
+        case AUX_ID_IRQ_PENDING: {
+        } break;
+
+        default: {
+            result = cpu_inl(aux);
+        }
+    }
+
+    return  result;
+}
+
diff --git a/target-arc/translate-inst.c b/target-arc/translate-inst.c
index fd49a16..603a0a8 100644
--- a/target-arc/translate-inst.c
+++ b/target-arc/translate-inst.c
@@ -2069,3 +2069,29 @@ gen_set_label(label_done);
     return  BS_BRANCH_DS;
 }
 
+/*
+    LR
+*/
+int arc_gen_LR(DisasCtxt *ctx, TCGv dest, TCGv src1)
+{
+    TCGv cpc = tcg_const_local_i32((ctx->cpc + 3) & 0xfffffffc);
+    TCGv npc = tcg_const_local_i32((ctx->npc + 3) & 0xfffffffc);
+
+    gen_helper_lr(dest, cpu_env, src1);
+
+    tcg_temp_free_i32(cpc);
+    tcg_temp_free_i32(npc);
+
+    return BS_NONE;
+}
+
+/*
+    SR
+*/
+int arc_gen_SR(DisasCtxt *ctx, TCGv src1, TCGv src2)
+{
+    gen_helper_sr(src1, src2);
+
+    return  BS_NONE;
+}
+
diff --git a/target-arc/translate-inst.h b/target-arc/translate-inst.h
index 7d76707..74beb33 100644
--- a/target-arc/translate-inst.h
+++ b/target-arc/translate-inst.h
@@ -141,3 +141,6 @@ int arc_gen_BL(DisasCtxt *c, TCGv Rd, ARC_COND cond);
 int arc_gen_J(DisasCtxt *c, TCGv src1, ARC_COND cond);
 int arc_gen_JL(DisasCtxt *c, TCGv src1, ARC_COND cond);
 
+int arc_gen_LR(DisasCtxt *c, TCGv dest, TCGv src1);
+int arc_gen_SR(DisasCtxt *c, TCGv src1, TCGv src2);
+
-- 
2.4.9 (Apple Git-60)

  parent reply	other threads:[~2016-09-08 22:33 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-08 22:31 [Qemu-devel] [PATCH RFC v1 00/29] ARC cores Michael Rolnik
2016-09-08 22:31 ` [Qemu-devel] [PATCH RFC v1 01/29] target-arc: initial commit Michael Rolnik
2016-09-20 23:31   ` Richard Henderson
2016-09-26  1:22     ` Max Filippov
2016-09-27 18:46       ` Richard Henderson
2016-09-08 22:31 ` [Qemu-devel] [PATCH RFC v1 02/29] target-arc: ADC, ADD, ADD1, ADD2, ADD3 Michael Rolnik
2016-09-20 20:51   ` Richard Henderson
2016-09-08 22:31 ` [Qemu-devel] [PATCH RFC v1 03/29] target-arc: SUB, SUB1, SUB2, SUB3, SBC, RSUB, CMP Michael Rolnik
2016-09-20 23:32   ` Richard Henderson
2016-09-08 22:31 ` [Qemu-devel] [PATCH RFC v1 04/29] target-arc: AND, OR, XOR, BIC, TST Michael Rolnik
2016-09-20 23:35   ` Richard Henderson
2016-09-08 22:31 ` [Qemu-devel] [PATCH RFC v1 05/29] target-arc: ASL(m), ASR(m), LSR(m), ROR(m) Michael Rolnik
2016-09-08 22:31 ` [Qemu-devel] [PATCH RFC v1 06/29] target-arc: EX, LD, ST, SYNC, PREFETCH Michael Rolnik
2016-09-20 23:46   ` Richard Henderson
2016-09-08 22:31 ` [Qemu-devel] [PATCH RFC v1 07/29] target-arc: MAX, MIN Michael Rolnik
2016-09-20 23:48   ` Richard Henderson
2016-09-08 22:31 ` [Qemu-devel] [PATCH RFC v1 08/29] target-arc: MOV, EXT, SEX, SWAP Michael Rolnik
2016-09-08 22:31 ` [Qemu-devel] [PATCH RFC v1 09/29] target-arc: NEG, ABS, NOT Michael Rolnik
2016-09-20 23:55   ` Richard Henderson
2016-09-08 22:31 ` [Qemu-devel] [PATCH RFC v1 10/29] target-arc: POP, PUSH Michael Rolnik
2016-09-20 23:57   ` Richard Henderson
2016-09-08 22:31 ` [Qemu-devel] [PATCH RFC v1 11/29] target-arc: BCLR, BMSK, BSET, BTST, BXOR Michael Rolnik
2016-09-21  0:07   ` Richard Henderson
2016-09-08 22:31 ` [Qemu-devel] [PATCH RFC v1 12/29] target-arc: RLC, RRC Michael Rolnik
2016-09-08 22:31 ` [Qemu-devel] [PATCH RFC v1 13/29] target-arc: NORM, NORMW Michael Rolnik
2016-09-21  0:14   ` Richard Henderson
2016-09-08 22:31 ` [Qemu-devel] [PATCH RFC v1 14/29] target-arc: MPY, MPYH, MPYHU, MPYU Michael Rolnik
2016-09-21  0:17   ` Richard Henderson
2016-09-08 22:31 ` [Qemu-devel] [PATCH RFC v1 15/29] target-arc: MUL64, MULU64, DIVAW Michael Rolnik
2016-09-21  0:20   ` Richard Henderson
2016-09-08 22:31 ` [Qemu-devel] [PATCH RFC v1 16/29] target-arc: BBIT0, BBIT1, BR Michael Rolnik
2016-09-21  0:25   ` Richard Henderson
2016-09-08 22:31 ` [Qemu-devel] [PATCH RFC v1 17/29] target-arc: B, BL Michael Rolnik
2016-09-21  0:28   ` Richard Henderson
2016-09-08 22:31 ` [Qemu-devel] [PATCH RFC v1 18/29] target-arc: J, JL Michael Rolnik
2016-09-08 22:32 ` Michael Rolnik [this message]
2016-09-21  0:31   ` [Qemu-devel] [PATCH RFC v1 19/29] target-arc: LR, SR Richard Henderson
2016-09-08 22:32 ` [Qemu-devel] [PATCH RFC v1 20/29] target-arc: ADDS, ADDSDW, SUBS, SUBSDW Michael Rolnik
2016-09-08 22:32 ` [Qemu-devel] [PATCH RFC v1 21/29] target-arc: ABSS, ABSSW, NEGS, NEGSW, RND16, SAT16 Michael Rolnik
2016-09-08 22:32 ` [Qemu-devel] [PATCH RFC v1 22/29] target-arc: ASLS, ASRS Michael Rolnik
2016-09-21  0:36   ` Richard Henderson
2016-09-08 22:32 ` [Qemu-devel] [PATCH RFC v1 23/29] target-arc: FLAG, BRK, SLEEP Michael Rolnik
2016-09-08 22:32 ` [Qemu-devel] [PATCH RFC v1 24/29] target-arc: NOP, UNIMP Michael Rolnik
2016-09-21  0:39   ` Richard Henderson
2016-09-08 22:32 ` [Qemu-devel] [PATCH RFC v1 25/29] target-arc: TRAP, SWI Michael Rolnik
2016-09-08 22:32 ` [Qemu-devel] [PATCH RFC v1 26/29] target-arc: RTIE Michael Rolnik
2016-09-08 22:32 ` [Qemu-devel] [PATCH RFC v1 27/29] target-arc: LP Michael Rolnik
2016-09-08 22:32 ` [Qemu-devel] [PATCH RFC v1 28/29] target-arc: decode Michael Rolnik
2016-09-21  0:49   ` Richard Henderson
2016-09-08 22:32 ` [Qemu-devel] [PATCH RFC v1 29/29] target-arc: sample board Michael Rolnik
2016-09-16 15:01 ` [PATCH RFC v1 00/29] ARC cores Alexey Brodkin
2016-09-16 15:01   ` [Qemu-devel] " Alexey Brodkin
2016-09-17 18:26   ` Michael Rolnik
2016-09-19 12:40     ` Alexey Brodkin
2016-09-19 12:55       ` Igor Guryanov
2016-09-19 13:45         ` Michael Rolnik

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=1473373930-31547-20-git-send-email-mrolnik@gmail.com \
    --to=mrolnik@gmail.com \
    --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.