Re: [Qemu-devel] [PATCH, RFC, WIP] TCG for Qemu target Sparc32/64

2008-02-22 Thread Blue Swirl
On 2/22/08, Thiemo Seufer [EMAIL PROTECTED] wrote:
 Blue Swirl wrote:
   The attached patch enables most TCG ops for Qemu Sparc32/64 target.
   Sparc32 softmmu and linux-user are OK, but Sparc64 and Sparc32plus
   targets do not work.
  
   Comments?
  
   It would be nice to get rid of T2 usage in std (also stda and
   casa/casxa) but I don't know how to pass a 64-bit value from legacy op
   to TCG stores and loads on a 32-bit target and host.

[cut]

  This whole lot should probably move to generic code (conditionalized on
  TARGET_LONG_BITS), I have the same code in my MIPS prototype.

I agree. Also these lines, if they are really needed:
+#if TCG_TARGET_REG_BITS == 32
+#define tcg_gen_ld_ptr tcg_gen_ld_i32
+#else
+#define tcg_gen_ld_ptr tcg_gen_ld_i64
+#endif




[Qemu-devel] [PATCH, RFC, WIP] TCG for Qemu target Sparc32/64

2008-02-21 Thread Blue Swirl
The attached patch enables most TCG ops for Qemu Sparc32/64 target.
Sparc32 softmmu and linux-user are OK, but Sparc64 and Sparc32plus
targets do not work.

Comments?

It would be nice to get rid of T2 usage in std (also stda and
casa/casxa) but I don't know how to pass a 64-bit value from legacy op
to TCG stores and loads on a 32-bit target and host.
Index: qemu/target-sparc/translate.c
===
--- qemu.orig/target-sparc/translate.c	2008-02-21 20:00:28.0 +
+++ qemu/target-sparc/translate.c	2008-02-21 20:02:07.0 +
@@ -44,6 +44,81 @@
 #define JUMP_PC 2 /* dynamic pc value which takes only two values
  according to jump_pc[T2] */
 
+#ifdef TARGET_SPARC64
+#define TCG_TYPE_TL TCG_TYPE_I64
+#define tcg_gen_movi_tl tcg_gen_movi_i64
+#define tcg_gen_mov_tl tcg_gen_mov_i64
+#define tcg_gen_ld8u_tl tcg_gen_ld8u_i64
+#define tcg_gen_ld8s_tl tcg_gen_ld8s_i64
+#define tcg_gen_ld16u_tl tcg_gen_ld16u_i64
+#define tcg_gen_ld16s_tl tcg_gen_ld16s_i64
+#define tcg_gen_ld32u_tl tcg_gen_ld32u_i64
+#define tcg_gen_ld32s_tl tcg_gen_ld32s_i64
+#define tcg_gen_ld_tl tcg_gen_ld_i64
+#define tcg_gen_st8_tl tcg_gen_st8_i64
+#define tcg_gen_st16_tl tcg_gen_st16_i64
+#define tcg_gen_st32_tl tcg_gen_st32_i64
+#define tcg_gen_st_tl tcg_gen_st_i64
+#define tcg_gen_add_tl tcg_gen_add_i64
+#define tcg_gen_addi_tl tcg_gen_addi_i64
+#define tcg_gen_sub_tl tcg_gen_sub_i64
+#define tcg_gen_subi_tl tcg_gen_subi_i64
+#define tcg_gen_and_tl tcg_gen_and_i64
+#define tcg_gen_andi_tl tcg_gen_andi_i64
+#define tcg_gen_or_tl tcg_gen_or_i64
+#define tcg_gen_ori_tl tcg_gen_ori_i64
+#define tcg_gen_xor_tl tcg_gen_xor_i64
+#define tcg_gen_xori_tl tcg_gen_xori_i64
+#define tcg_gen_shl_tl tcg_gen_shl_i64
+#define tcg_gen_shli_tl tcg_gen_shli_i64
+#define tcg_gen_shr_tl tcg_gen_shr_i64
+#define tcg_gen_shri_tl tcg_gen_shri_i64
+#define tcg_gen_sar_tl tcg_gen_sar_i64
+#define tcg_gen_sari_tl tcg_gen_sari_i64
+#else
+#define TCG_TYPE_TL TCG_TYPE_I32
+#define tcg_gen_movi_tl tcg_gen_movi_i32
+#define tcg_gen_mov_tl tcg_gen_mov_i32
+#define tcg_gen_ld8u_tl tcg_gen_ld8u_i32
+#define tcg_gen_ld8s_tl tcg_gen_ld8s_i32
+#define tcg_gen_ld16u_tl tcg_gen_ld16u_i32
+#define tcg_gen_ld16s_tl tcg_gen_ld16s_i32
+#define tcg_gen_ld32u_tl tcg_gen_ld_i32
+#define tcg_gen_ld32s_tl tcg_gen_ld_i32
+#define tcg_gen_ld_tl tcg_gen_ld_i32
+#define tcg_gen_st8_tl tcg_gen_st8_i32
+#define tcg_gen_st16_tl tcg_gen_st16_i32
+#define tcg_gen_st32_tl tcg_gen_st_i32
+#define tcg_gen_st_tl tcg_gen_st_i32
+#define tcg_gen_add_tl tcg_gen_add_i32
+#define tcg_gen_addi_tl tcg_gen_addi_i32
+#define tcg_gen_sub_tl tcg_gen_sub_i32
+#define tcg_gen_subi_tl tcg_gen_subi_i32
+#define tcg_gen_and_tl tcg_gen_and_i32
+#define tcg_gen_andi_tl tcg_gen_andi_i32
+#define tcg_gen_or_tl tcg_gen_or_i32
+#define tcg_gen_ori_tl tcg_gen_ori_i32
+#define tcg_gen_xor_tl tcg_gen_xor_i32
+#define tcg_gen_xori_tl tcg_gen_xori_i32
+#define tcg_gen_shl_tl tcg_gen_shl_i32
+#define tcg_gen_shli_tl tcg_gen_shli_i32
+#define tcg_gen_shr_tl tcg_gen_shr_i32
+#define tcg_gen_shri_tl tcg_gen_shri_i32
+#define tcg_gen_sar_tl tcg_gen_sar_i32
+#define tcg_gen_sari_tl tcg_gen_sari_i32
+#endif
+
+#if TCG_TARGET_REG_BITS == 32
+#define tcg_gen_ld_ptr tcg_gen_ld_i32
+#else
+#define tcg_gen_ld_ptr tcg_gen_ld_i64
+#endif
+
+/* global register indexes */
+static TCGv cpu_env, cpu_T[3], cpu_regwptr;
+/* local register indexes (only used inside old micro ops) */
+static TCGv cpu_tmp0;
+
 typedef struct DisasContext {
 target_ulong pc;/* current Program Counter: integer or DYNAMIC_PC */
 target_ulong npc;   /* next PC: integer or DYNAMIC_PC or JUMP_PC */
@@ -102,195 +177,6 @@
 
 static void disas_sparc_insn(DisasContext * dc);
 
-static GenOpFunc * const gen_op_movl_TN_reg[2][32] = {
-{
- gen_op_movl_g0_T0,
- gen_op_movl_g1_T0,
- gen_op_movl_g2_T0,
- gen_op_movl_g3_T0,
- gen_op_movl_g4_T0,
- gen_op_movl_g5_T0,
- gen_op_movl_g6_T0,
- gen_op_movl_g7_T0,
- gen_op_movl_o0_T0,
- gen_op_movl_o1_T0,
- gen_op_movl_o2_T0,
- gen_op_movl_o3_T0,
- gen_op_movl_o4_T0,
- gen_op_movl_o5_T0,
- gen_op_movl_o6_T0,
- gen_op_movl_o7_T0,
- gen_op_movl_l0_T0,
- gen_op_movl_l1_T0,
- gen_op_movl_l2_T0,
- gen_op_movl_l3_T0,
- gen_op_movl_l4_T0,
- gen_op_movl_l5_T0,
- gen_op_movl_l6_T0,
- gen_op_movl_l7_T0,
- gen_op_movl_i0_T0,
- gen_op_movl_i1_T0,
- gen_op_movl_i2_T0,
- gen_op_movl_i3_T0,
- gen_op_movl_i4_T0,
- gen_op_movl_i5_T0,
- gen_op_movl_i6_T0,
- gen_op_movl_i7_T0,
- },
-{
- gen_op_movl_g0_T1,
- gen_op_movl_g1_T1,
- gen_op_movl_g2_T1,
- gen_op_movl_g3_T1,
- gen_op_movl_g4_T1,
- gen_op_movl_g5_T1,
- gen_op_movl_g6_T1,
- gen_op_movl_g7_T1,
- gen_op_movl_o0_T1,
- gen_op_movl_o1_T1,
- gen_op_movl_o2_T1,
- gen_op_movl_o3_T1,
- gen_op_movl_o4_T1,
- 

Re: [Qemu-devel] [PATCH, RFC, WIP] TCG for Qemu target Sparc32/64

2008-02-21 Thread Thiemo Seufer
Blue Swirl wrote:
 The attached patch enables most TCG ops for Qemu Sparc32/64 target.
 Sparc32 softmmu and linux-user are OK, but Sparc64 and Sparc32plus
 targets do not work.
 
 Comments?
 
 It would be nice to get rid of T2 usage in std (also stda and
 casa/casxa) but I don't know how to pass a 64-bit value from legacy op
 to TCG stores and loads on a 32-bit target and host.

 Index: qemu/target-sparc/translate.c
 ===
 --- qemu.orig/target-sparc/translate.c2008-02-21 20:00:28.0 
 +
 +++ qemu/target-sparc/translate.c 2008-02-21 20:02:07.0 +
 @@ -44,6 +44,81 @@
  #define JUMP_PC 2 /* dynamic pc value which takes only two values
   according to jump_pc[T2] */
  
 +#ifdef TARGET_SPARC64
 +#define TCG_TYPE_TL TCG_TYPE_I64
 +#define tcg_gen_movi_tl tcg_gen_movi_i64
 +#define tcg_gen_mov_tl tcg_gen_mov_i64
 +#define tcg_gen_ld8u_tl tcg_gen_ld8u_i64
 +#define tcg_gen_ld8s_tl tcg_gen_ld8s_i64
 +#define tcg_gen_ld16u_tl tcg_gen_ld16u_i64
 +#define tcg_gen_ld16s_tl tcg_gen_ld16s_i64
 +#define tcg_gen_ld32u_tl tcg_gen_ld32u_i64
 +#define tcg_gen_ld32s_tl tcg_gen_ld32s_i64
 +#define tcg_gen_ld_tl tcg_gen_ld_i64
 +#define tcg_gen_st8_tl tcg_gen_st8_i64
 +#define tcg_gen_st16_tl tcg_gen_st16_i64
 +#define tcg_gen_st32_tl tcg_gen_st32_i64
 +#define tcg_gen_st_tl tcg_gen_st_i64
 +#define tcg_gen_add_tl tcg_gen_add_i64
 +#define tcg_gen_addi_tl tcg_gen_addi_i64
 +#define tcg_gen_sub_tl tcg_gen_sub_i64
 +#define tcg_gen_subi_tl tcg_gen_subi_i64
 +#define tcg_gen_and_tl tcg_gen_and_i64
 +#define tcg_gen_andi_tl tcg_gen_andi_i64
 +#define tcg_gen_or_tl tcg_gen_or_i64
 +#define tcg_gen_ori_tl tcg_gen_ori_i64
 +#define tcg_gen_xor_tl tcg_gen_xor_i64
 +#define tcg_gen_xori_tl tcg_gen_xori_i64
 +#define tcg_gen_shl_tl tcg_gen_shl_i64
 +#define tcg_gen_shli_tl tcg_gen_shli_i64
 +#define tcg_gen_shr_tl tcg_gen_shr_i64
 +#define tcg_gen_shri_tl tcg_gen_shri_i64
 +#define tcg_gen_sar_tl tcg_gen_sar_i64
 +#define tcg_gen_sari_tl tcg_gen_sari_i64
 +#else
 +#define TCG_TYPE_TL TCG_TYPE_I32
 +#define tcg_gen_movi_tl tcg_gen_movi_i32
 +#define tcg_gen_mov_tl tcg_gen_mov_i32
 +#define tcg_gen_ld8u_tl tcg_gen_ld8u_i32
 +#define tcg_gen_ld8s_tl tcg_gen_ld8s_i32
 +#define tcg_gen_ld16u_tl tcg_gen_ld16u_i32
 +#define tcg_gen_ld16s_tl tcg_gen_ld16s_i32
 +#define tcg_gen_ld32u_tl tcg_gen_ld_i32
 +#define tcg_gen_ld32s_tl tcg_gen_ld_i32
 +#define tcg_gen_ld_tl tcg_gen_ld_i32
 +#define tcg_gen_st8_tl tcg_gen_st8_i32
 +#define tcg_gen_st16_tl tcg_gen_st16_i32
 +#define tcg_gen_st32_tl tcg_gen_st_i32
 +#define tcg_gen_st_tl tcg_gen_st_i32
 +#define tcg_gen_add_tl tcg_gen_add_i32
 +#define tcg_gen_addi_tl tcg_gen_addi_i32
 +#define tcg_gen_sub_tl tcg_gen_sub_i32
 +#define tcg_gen_subi_tl tcg_gen_subi_i32
 +#define tcg_gen_and_tl tcg_gen_and_i32
 +#define tcg_gen_andi_tl tcg_gen_andi_i32
 +#define tcg_gen_or_tl tcg_gen_or_i32
 +#define tcg_gen_ori_tl tcg_gen_ori_i32
 +#define tcg_gen_xor_tl tcg_gen_xor_i32
 +#define tcg_gen_xori_tl tcg_gen_xori_i32
 +#define tcg_gen_shl_tl tcg_gen_shl_i32
 +#define tcg_gen_shli_tl tcg_gen_shli_i32
 +#define tcg_gen_shr_tl tcg_gen_shr_i32
 +#define tcg_gen_shri_tl tcg_gen_shri_i32
 +#define tcg_gen_sar_tl tcg_gen_sar_i32
 +#define tcg_gen_sari_tl tcg_gen_sari_i32
 +#endif

This whole lot should probably move to generic code (conditionalized on
TARGET_LONG_BITS), I have the same code in my MIPS prototype.


Thiemo