Commit 7d307e9edc944e255fc3462ff536ffeb78ac2c68

Authored by ths
1 parent 67fc07d3

Enforce proper sign extension for lwl/lwr on MIPS64.


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3430 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 3 additions and 1 deletions
target-mips/op_mem.c
@@ -89,7 +89,7 @@ void glue(op_lwl, MEMSUFFIX) (void) @@ -89,7 +89,7 @@ void glue(op_lwl, MEMSUFFIX) (void)
89 target_ulong tmp; 89 target_ulong tmp;
90 90
91 tmp = glue(ldub, MEMSUFFIX)(T0); 91 tmp = glue(ldub, MEMSUFFIX)(T0);
92 - T1 = (int32_t)((T1 & 0x00FFFFFF) | (tmp << 24)); 92 + T1 = (T1 & 0x00FFFFFF) | (tmp << 24);
93 93
94 if (GET_LMASK(T0) <= 2) { 94 if (GET_LMASK(T0) <= 2) {
95 tmp = glue(ldub, MEMSUFFIX)(GET_OFFSET(T0, 1)); 95 tmp = glue(ldub, MEMSUFFIX)(GET_OFFSET(T0, 1));
@@ -105,6 +105,7 @@ void glue(op_lwl, MEMSUFFIX) (void) @@ -105,6 +105,7 @@ void glue(op_lwl, MEMSUFFIX) (void)
105 tmp = glue(ldub, MEMSUFFIX)(GET_OFFSET(T0, 3)); 105 tmp = glue(ldub, MEMSUFFIX)(GET_OFFSET(T0, 3));
106 T1 = (T1 & 0xFFFFFF00) | tmp; 106 T1 = (T1 & 0xFFFFFF00) | tmp;
107 } 107 }
  108 + T1 = (int32_t)T1;
108 RETURN(); 109 RETURN();
109 } 110 }
110 111
@@ -129,6 +130,7 @@ void glue(op_lwr, MEMSUFFIX) (void) @@ -129,6 +130,7 @@ void glue(op_lwr, MEMSUFFIX) (void)
129 tmp = glue(ldub, MEMSUFFIX)(GET_OFFSET(T0, -3)); 130 tmp = glue(ldub, MEMSUFFIX)(GET_OFFSET(T0, -3));
130 T1 = (T1 & 0x00FFFFFF) | (tmp << 24); 131 T1 = (T1 & 0x00FFFFFF) | (tmp << 24);
131 } 132 }
  133 + T1 = (int32_t)T1;
132 RETURN(); 134 RETURN();
133 } 135 }
134 136