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; | ... | ... |