Commit dc011987f266878ad29009e4fdbc27f666ab31d2

Authored by blueswir1
1 parent 6ef905f6

Use unsigned 32-bit load for ld/lduw


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3051 c046a42c-6fe2-441c-8c8c-71466251a162
target-sparc/op_mem.h
@@ -103,6 +103,11 @@ void OPPROTO glue(op_casx, MEMSUFFIX)(void) @@ -103,6 +103,11 @@ void OPPROTO glue(op_casx, MEMSUFFIX)(void)
103 T2 = tmp; 103 T2 = tmp;
104 } 104 }
105 105
  106 +void OPPROTO glue(op_lduw, MEMSUFFIX)(void)
  107 +{
  108 + T1 = (uint64_t)(glue(ldl, MEMSUFFIX)(T0) & 0xffffffff);
  109 +}
  110 +
106 void OPPROTO glue(op_ldsw, MEMSUFFIX)(void) 111 void OPPROTO glue(op_ldsw, MEMSUFFIX)(void)
107 { 112 {
108 T1 = (int64_t)(glue(ldl, MEMSUFFIX)(T0) & 0xffffffff); 113 T1 = (int64_t)(glue(ldl, MEMSUFFIX)(T0) & 0xffffffff);
target-sparc/translate.c
@@ -470,6 +470,7 @@ OP_LD_TABLE(ldf); @@ -470,6 +470,7 @@ OP_LD_TABLE(ldf);
470 OP_LD_TABLE(lddf); 470 OP_LD_TABLE(lddf);
471 471
472 #ifdef TARGET_SPARC64 472 #ifdef TARGET_SPARC64
  473 +OP_LD_TABLE(lduw);
473 OP_LD_TABLE(ldsw); 474 OP_LD_TABLE(ldsw);
474 OP_LD_TABLE(ldx); 475 OP_LD_TABLE(ldx);
475 OP_LD_TABLE(stx); 476 OP_LD_TABLE(stx);
@@ -2810,7 +2811,11 @@ static void disas_sparc_insn(DisasContext * dc) @@ -2810,7 +2811,11 @@ static void disas_sparc_insn(DisasContext * dc)
2810 (xop > 0x2c && xop <= 0x33) || xop == 0x1f || xop == 0x3d) { 2811 (xop > 0x2c && xop <= 0x33) || xop == 0x1f || xop == 0x3d) {
2811 switch (xop) { 2812 switch (xop) {
2812 case 0x0: /* load word */ 2813 case 0x0: /* load word */
  2814 +#ifndef TARGET_SPARC64
2813 gen_op_ldst(ld); 2815 gen_op_ldst(ld);
  2816 +#else
  2817 + gen_op_ldst(lduw);
  2818 +#endif
2814 break; 2819 break;
2815 case 0x1: /* load unsigned byte */ 2820 case 0x1: /* load unsigned byte */
2816 gen_op_ldst(ldub); 2821 gen_op_ldst(ldub);
@@ -2844,8 +2849,10 @@ static void disas_sparc_insn(DisasContext * dc) @@ -2844,8 +2849,10 @@ static void disas_sparc_insn(DisasContext * dc)
2844 goto illegal_insn; 2849 goto illegal_insn;
2845 if (!supervisor(dc)) 2850 if (!supervisor(dc))
2846 goto priv_insn; 2851 goto priv_insn;
2847 -#endif  
2848 gen_op_lda(insn, 1, 4, 0); 2852 gen_op_lda(insn, 1, 4, 0);
  2853 +#else
  2854 + gen_op_lduwa(insn, 1, 4, 0);
  2855 +#endif
2849 break; 2856 break;
2850 case 0x11: /* load unsigned byte alternate */ 2857 case 0x11: /* load unsigned byte alternate */
2851 #ifndef TARGET_SPARC64 2858 #ifndef TARGET_SPARC64
@@ -2926,6 +2933,7 @@ static void disas_sparc_insn(DisasContext * dc) @@ -2926,6 +2933,7 @@ static void disas_sparc_insn(DisasContext * dc)
2926 (void) &gen_op_ldfa; 2933 (void) &gen_op_ldfa;
2927 (void) &gen_op_lddfa; 2934 (void) &gen_op_lddfa;
2928 #else 2935 #else
  2936 + (void) &gen_op_lda;
2929 #if !defined(CONFIG_USER_ONLY) 2937 #if !defined(CONFIG_USER_ONLY)
2930 (void) &gen_op_cas; 2938 (void) &gen_op_cas;
2931 (void) &gen_op_casx; 2939 (void) &gen_op_casx;