Commit dc011987f266878ad29009e4fdbc27f666ab31d2
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
Showing
2 changed files
with
14 additions
and
1 deletions
target-sparc/op_mem.h
... | ... | @@ -103,6 +103,11 @@ void OPPROTO glue(op_casx, MEMSUFFIX)(void) |
103 | 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 | 111 | void OPPROTO glue(op_ldsw, MEMSUFFIX)(void) |
107 | 112 | { |
108 | 113 | T1 = (int64_t)(glue(ldl, MEMSUFFIX)(T0) & 0xffffffff); | ... | ... |
target-sparc/translate.c
... | ... | @@ -470,6 +470,7 @@ OP_LD_TABLE(ldf); |
470 | 470 | OP_LD_TABLE(lddf); |
471 | 471 | |
472 | 472 | #ifdef TARGET_SPARC64 |
473 | +OP_LD_TABLE(lduw); | |
473 | 474 | OP_LD_TABLE(ldsw); |
474 | 475 | OP_LD_TABLE(ldx); |
475 | 476 | OP_LD_TABLE(stx); |
... | ... | @@ -2810,7 +2811,11 @@ static void disas_sparc_insn(DisasContext * dc) |
2810 | 2811 | (xop > 0x2c && xop <= 0x33) || xop == 0x1f || xop == 0x3d) { |
2811 | 2812 | switch (xop) { |
2812 | 2813 | case 0x0: /* load word */ |
2814 | +#ifndef TARGET_SPARC64 | |
2813 | 2815 | gen_op_ldst(ld); |
2816 | +#else | |
2817 | + gen_op_ldst(lduw); | |
2818 | +#endif | |
2814 | 2819 | break; |
2815 | 2820 | case 0x1: /* load unsigned byte */ |
2816 | 2821 | gen_op_ldst(ldub); |
... | ... | @@ -2844,8 +2849,10 @@ static void disas_sparc_insn(DisasContext * dc) |
2844 | 2849 | goto illegal_insn; |
2845 | 2850 | if (!supervisor(dc)) |
2846 | 2851 | goto priv_insn; |
2847 | -#endif | |
2848 | 2852 | gen_op_lda(insn, 1, 4, 0); |
2853 | +#else | |
2854 | + gen_op_lduwa(insn, 1, 4, 0); | |
2855 | +#endif | |
2849 | 2856 | break; |
2850 | 2857 | case 0x11: /* load unsigned byte alternate */ |
2851 | 2858 | #ifndef TARGET_SPARC64 |
... | ... | @@ -2926,6 +2933,7 @@ static void disas_sparc_insn(DisasContext * dc) |
2926 | 2933 | (void) &gen_op_ldfa; |
2927 | 2934 | (void) &gen_op_lddfa; |
2928 | 2935 | #else |
2936 | + (void) &gen_op_lda; | |
2929 | 2937 | #if !defined(CONFIG_USER_ONLY) |
2930 | 2938 | (void) &gen_op_cas; |
2931 | 2939 | (void) &gen_op_casx; | ... | ... |