[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 04/32] target-xtensa: implement narrow instructio
From: |
Max Filippov |
Subject: |
[Qemu-devel] [PATCH v3 04/32] target-xtensa: implement narrow instructions |
Date: |
Thu, 1 Sep 2011 01:56:55 +0400 |
Instructions with op0 >= 8 are 2 bytes long, others are 3 bytes long.
Signed-off-by: Max Filippov <address@hidden>
---
target-xtensa/translate.c | 54 +++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 54 insertions(+), 0 deletions(-)
diff --git a/target-xtensa/translate.c b/target-xtensa/translate.c
index 049c3cd..2ff5838 100644
--- a/target-xtensa/translate.c
+++ b/target-xtensa/translate.c
@@ -106,6 +106,11 @@ static void gen_jump_slot(DisasContext *dc, TCGv dest, int
slot)
dc->is_jmp = DISAS_UPDATE;
}
+static void gen_jump(DisasContext *dc, TCGv dest)
+{
+ gen_jump_slot(dc, dest, -1);
+}
+
static void gen_jumpi(DisasContext *dc, uint32_t dest, int slot)
{
TCGv_i32 tmp = tcg_const_i32(dest);
@@ -377,22 +382,71 @@ static void disas_xtensa_insn(DisasContext *dc)
case 7: /*B*/
break;
+#define gen_narrow_load_store(type) do { \
+ TCGv_i32 addr = tcg_temp_new_i32(); \
+ tcg_gen_addi_i32(addr, cpu_R[RRRN_S], RRRN_R << 2); \
+ tcg_gen_qemu_##type(cpu_R[RRRN_T], addr, 0); \
+ tcg_temp_free(addr); \
+ } while (0)
+
case 8: /*L32I.Nn*/
+ gen_narrow_load_store(ld32u);
break;
case 9: /*S32I.Nn*/
+ gen_narrow_load_store(st32);
break;
+#undef gen_narrow_load_store
case 10: /*ADD.Nn*/
+ tcg_gen_add_i32(cpu_R[RRRN_R], cpu_R[RRRN_S], cpu_R[RRRN_T]);
break;
case 11: /*ADDI.Nn*/
+ tcg_gen_addi_i32(cpu_R[RRRN_R], cpu_R[RRRN_S], RRRN_T ? RRRN_T : -1);
break;
case 12: /*ST2n*/
+ if (RRRN_T < 8) { /*MOVI.Nn*/
+ tcg_gen_movi_i32(cpu_R[RRRN_S],
+ RRRN_R | (RRRN_T << 4) |
+ ((RRRN_T & 6) == 6 ? 0xffffff80 : 0));
+ } else { /*BEQZ.Nn*/ /*BNEZ.Nn*/
+ }
break;
case 13: /*ST3n*/
+ switch (RRRN_R) {
+ case 0: /*MOV.Nn*/
+ tcg_gen_mov_i32(cpu_R[RRRN_T], cpu_R[RRRN_S]);
+ break;
+
+ case 15: /*S3*/
+ switch (RRRN_T) {
+ case 0: /*RET.Nn*/
+ gen_jump(dc, cpu_R[0]);
+ break;
+
+ case 1: /*RETW.Nn*/
+ break;
+
+ case 2: /*BREAK.Nn*/
+ break;
+
+ case 3: /*NOP.Nn*/
+ break;
+
+ case 6: /*ILL.Nn*/
+ break;
+
+ default: /*reserved*/
+ break;
+ }
+ break;
+
+ default: /*reserved*/
+ break;
+ }
break;
default: /*reserved*/
--
1.7.6
- [Qemu-devel] [PATCH v3 00/32] target-xtensa: new target architecture, Max Filippov, 2011/08/31
- [Qemu-devel] [PATCH v3 31/32] MAINTAINERS: add xtensa maintainer, Max Filippov, 2011/08/31
- [Qemu-devel] [PATCH v3 05/32] target-xtensa: implement RT0 group, Max Filippov, 2011/08/31
- [Qemu-devel] [PATCH v3 14/32] target-xtensa: implement SYNC group, Max Filippov, 2011/08/31
- [Qemu-devel] [PATCH v3 08/32] target-xtensa: implement JX/RET0/CALLX, Max Filippov, 2011/08/31
- [Qemu-devel] [PATCH v3 02/32] target-xtensa: add target to the configure script, Max Filippov, 2011/08/31
- [Qemu-devel] [PATCH v3 26/32] target-xtensa: implement CPENABLE and PRID SRs, Max Filippov, 2011/08/31
- [Qemu-devel] [PATCH v3 04/32] target-xtensa: implement narrow instructions,
Max Filippov <=
- [Qemu-devel] [PATCH v3 15/32] target-xtensa: implement CACHE group, Max Filippov, 2011/08/31
- [Qemu-devel] [PATCH v3 09/32] target-xtensa: add special and user registers, Max Filippov, 2011/08/31
- [Qemu-devel] [PATCH v3 16/32] target-xtensa: add PS register and access control, Max Filippov, 2011/08/31
- [Qemu-devel] [PATCH v3 06/32] target-xtensa: add sample board, Max Filippov, 2011/08/31
- [Qemu-devel] [PATCH v3 18/32] target-xtensa: implement RST2 group (32 bit mul/div/rem), Max Filippov, 2011/08/31
- [Qemu-devel] [PATCH v3 21/32] target-xtensa: implement extended L32R, Max Filippov, 2011/08/31
- [Qemu-devel] [PATCH v3 12/32] target-xtensa: implement LSAI group, Max Filippov, 2011/08/31
- [Qemu-devel] [PATCH v3 07/32] target-xtensa: implement conditional jumps, Max Filippov, 2011/08/31
- [Qemu-devel] [PATCH v3 10/32] target-xtensa: implement RST3 group, Max Filippov, 2011/08/31
- [Qemu-devel] [PATCH v3 22/32] target-xtensa: implement unaligned exception option, Max Filippov, 2011/08/31