~ubuntu-branches/ubuntu/utopic/qemu/utopic

« back to all changes in this revision

Viewing changes to debian/patches/arm64/0034-target-arm-A64-add-support-for-test-and-branch-imm.patch

  • Committer: Package Import Robot
  • Author(s): Serge Hallyn, Serge Hallyn, dann frazier
  • Date: 2014-01-10 12:19:08 UTC
  • Revision ID: package-import@ubuntu.com-20140110121908-6lsn06rypqbokbaf
Tags: 1.7.0+dfsg-2ubuntu6
[ Serge Hallyn ]
* add arm64 patchset from upstream.  The three arm virt patches previously
  pushed are in that set, so drop them.

[ dann frazier ]
* Add packaging for qemu-system-aarch64. This package is currently only
  available for arm64, as full software emulation is not yet supported.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
From 99de47d546424fb097ece8832bc514e1f2fd1a6e Mon Sep 17 00:00:00 2001
 
2
From: Alexander Graf <agraf@suse.de>
 
3
Date: Tue, 17 Dec 2013 19:42:33 +0000
 
4
Subject: [PATCH 34/49] target-arm: A64: add support for 'test and branch' imm
 
5
 
 
6
This patch adds emulation for the test and branch insns,
 
7
TBZ and TBNZ.
 
8
 
 
9
Signed-off-by: Alexander Graf <agraf@suse.de>
 
10
[claudio:
 
11
  adapted for new decoder
 
12
  always compare with 0
 
13
  remove a TCG temporary
 
14
]
 
15
Signed-off-by: Claudio Fontana <claudio.fontana@linaro.org>
 
16
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
 
17
Reviewed-by: Richard Henderson <rth@twiddle.net>
 
18
---
 
19
 target-arm/translate-a64.c | 27 +++++++++++++++++++++++++--
 
20
 1 file changed, 25 insertions(+), 2 deletions(-)
 
21
 
 
22
diff --git a/target-arm/translate-a64.c b/target-arm/translate-a64.c
 
23
index 4eb2992..1d04303 100644
 
24
--- a/target-arm/translate-a64.c
 
25
+++ b/target-arm/translate-a64.c
 
26
@@ -233,10 +233,33 @@ static void disas_comp_b_imm(DisasContext *s, uint32_t insn)
 
27
     unsupported_encoding(s, insn);
 
28
 }
 
29
 
 
30
-/* Test & branch (immediate) */
 
31
+/* C3.2.5 Test & branch (immediate)
 
32
+ *   31  30         25  24  23   19 18          5 4    0
 
33
+ * +----+-------------+----+-------+-------------+------+
 
34
+ * | b5 | 0 1 1 0 1 1 | op |  b40  |    imm14    |  Rt  |
 
35
+ * +----+-------------+----+-------+-------------+------+
 
36
+ */
 
37
 static void disas_test_b_imm(DisasContext *s, uint32_t insn)
 
38
 {
 
39
-    unsupported_encoding(s, insn);
 
40
+    unsigned int bit_pos, op, rt;
 
41
+    uint64_t addr;
 
42
+    int label_match;
 
43
+    TCGv_i64 tcg_cmp;
 
44
+
 
45
+    bit_pos = (extract32(insn, 31, 1) << 5) | extract32(insn, 19, 5);
 
46
+    op = extract32(insn, 24, 1); /* 0: TBZ; 1: TBNZ */
 
47
+    addr = s->pc + sextract32(insn, 5, 14) * 4 - 4;
 
48
+    rt = extract32(insn, 0, 5);
 
49
+
 
50
+    tcg_cmp = tcg_temp_new_i64();
 
51
+    tcg_gen_andi_i64(tcg_cmp, cpu_reg(s, rt), (1ULL << bit_pos));
 
52
+    label_match = gen_new_label();
 
53
+    tcg_gen_brcondi_i64(op ? TCG_COND_NE : TCG_COND_EQ,
 
54
+                        tcg_cmp, 0, label_match);
 
55
+    tcg_temp_free_i64(tcg_cmp);
 
56
+    gen_goto_tb(s, 0, s->pc);
 
57
+    gen_set_label(label_match);
 
58
+    gen_goto_tb(s, 1, addr);
 
59
 }
 
60
 
 
61
 /* C3.2.2 / C5.6.19 Conditional branch (immediate)
 
62
-- 
 
63
1.8.5.2
 
64