Commit 3a3f24fce80c1516fe03e0d4c73505ef6dbaa21c

Authored by ths
1 parent 7495fd0f

Fix lwl/lwr for 64bit emulation, also debug output spec for 64bit emulation.


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2283 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 26 additions and 24 deletions
target-mips/op_helper_mem.c
  1 +#undef DEBUG_OP
  2 +
1 #ifdef TARGET_WORDS_BIGENDIAN 3 #ifdef TARGET_WORDS_BIGENDIAN
2 #define GET_LMASK(v) ((v) & 3) 4 #define GET_LMASK(v) ((v) & 3)
3 #else 5 #else
@@ -12,21 +14,21 @@ void glue(do_lwl, MEMSUFFIX) (uint32_t tmp) @@ -12,21 +14,21 @@ void glue(do_lwl, MEMSUFFIX) (uint32_t tmp)
12 14
13 switch (GET_LMASK(T0)) { 15 switch (GET_LMASK(T0)) {
14 case 0: 16 case 0:
15 - T0 = tmp; 17 + T0 = (int32_t)tmp;
16 break; 18 break;
17 case 1: 19 case 1:
18 - T0 = (tmp << 8) | (T1 & 0x000000FF); 20 + T0 = (int32_t)((tmp << 8) | (T1 & 0x000000FF));
19 break; 21 break;
20 case 2: 22 case 2:
21 - T0 = (tmp << 16) | (T1 & 0x0000FFFF); 23 + T0 = (int32_t)((tmp << 16) | (T1 & 0x0000FFFF));
22 break; 24 break;
23 case 3: 25 case 3:
24 - T0 = (tmp << 24) | (T1 & 0x00FFFFFF); 26 + T0 = (int32_t)((tmp << 24) | (T1 & 0x00FFFFFF));
25 break; 27 break;
26 } 28 }
27 #if defined (DEBUG_OP) 29 #if defined (DEBUG_OP)
28 if (logfile) { 30 if (logfile) {
29 - fprintf(logfile, "%s: %08x - %08x %08x => %08x\n", 31 + fprintf(logfile, "%s: " TLSZ " - %08x " TLSZ " => " TLSZ "\n",
30 __func__, sav, tmp, T1, T0); 32 __func__, sav, tmp, T1, T0);
31 } 33 }
32 #endif 34 #endif
@@ -41,21 +43,21 @@ void glue(do_lwr, MEMSUFFIX) (uint32_t tmp) @@ -41,21 +43,21 @@ void glue(do_lwr, MEMSUFFIX) (uint32_t tmp)
41 43
42 switch (GET_LMASK(T0)) { 44 switch (GET_LMASK(T0)) {
43 case 0: 45 case 0:
44 - T0 = (tmp >> 24) | (T1 & 0xFFFFFF00); 46 + T0 = (int32_t)((tmp >> 24) | (T1 & 0xFFFFFF00));
45 break; 47 break;
46 case 1: 48 case 1:
47 - T0 = (tmp >> 16) | (T1 & 0xFFFF0000); 49 + T0 = (int32_t)((tmp >> 16) | (T1 & 0xFFFF0000));
48 break; 50 break;
49 case 2: 51 case 2:
50 - T0 = (tmp >> 8) | (T1 & 0xFF000000); 52 + T0 = (int32_t)((tmp >> 8) | (T1 & 0xFF000000));
51 break; 53 break;
52 case 3: 54 case 3:
53 - T0 = tmp; 55 + T0 = (int32_t)tmp;
54 break; 56 break;
55 } 57 }
56 #if defined (DEBUG_OP) 58 #if defined (DEBUG_OP)
57 if (logfile) { 59 if (logfile) {
58 - fprintf(logfile, "%s: %08x - %08x %08x => %08x\n", 60 + fprintf(logfile, "%s: " TLSZ " - %08x " TLSZ " => " TLSZ "\n",
59 __func__, sav, tmp, T1, T0); 61 __func__, sav, tmp, T1, T0);
60 } 62 }
61 #endif 63 #endif
@@ -70,21 +72,21 @@ uint32_t glue(do_swl, MEMSUFFIX) (uint32_t tmp) @@ -70,21 +72,21 @@ uint32_t glue(do_swl, MEMSUFFIX) (uint32_t tmp)
70 72
71 switch (GET_LMASK(T0)) { 73 switch (GET_LMASK(T0)) {
72 case 0: 74 case 0:
73 - tmp = T1; 75 + tmp = (int32_t)T1;
74 break; 76 break;
75 case 1: 77 case 1:
76 - tmp = (tmp & 0xFF000000) | (T1 >> 8); 78 + tmp = (int32_t)((tmp & 0xFF000000) | ((uint32_t)T1 >> 8));
77 break; 79 break;
78 case 2: 80 case 2:
79 - tmp = (tmp & 0xFFFF0000) | (T1 >> 16); 81 + tmp = (int32_t)((tmp & 0xFFFF0000) | ((uint32_t)T1 >> 16));
80 break; 82 break;
81 case 3: 83 case 3:
82 - tmp = (tmp & 0xFFFFFF00) | (T1 >> 24); 84 + tmp = (int32_t)((tmp & 0xFFFFFF00) | ((uint32_t)T1 >> 24));
83 break; 85 break;
84 } 86 }
85 #if defined (DEBUG_OP) 87 #if defined (DEBUG_OP)
86 if (logfile) { 88 if (logfile) {
87 - fprintf(logfile, "%s: %08x - %08x %08x => %08x\n", 89 + fprintf(logfile, "%s: " TLSZ " - " TLSZ " " TLSZ " => %08x\n",
88 __func__, T0, sav, T1, tmp); 90 __func__, T0, sav, T1, tmp);
89 } 91 }
90 #endif 92 #endif
@@ -100,21 +102,21 @@ uint32_t glue(do_swr, MEMSUFFIX) (uint32_t tmp) @@ -100,21 +102,21 @@ uint32_t glue(do_swr, MEMSUFFIX) (uint32_t tmp)
100 102
101 switch (GET_LMASK(T0)) { 103 switch (GET_LMASK(T0)) {
102 case 0: 104 case 0:
103 - tmp = (tmp & 0x00FFFFFF) | (T1 << 24); 105 + tmp = (int32_t)((tmp & 0x00FFFFFF) | (T1 << 24));
104 break; 106 break;
105 case 1: 107 case 1:
106 - tmp = (tmp & 0x0000FFFF) | (T1 << 16); 108 + tmp = (int32_t)((tmp & 0x0000FFFF) | (T1 << 16));
107 break; 109 break;
108 case 2: 110 case 2:
109 - tmp = (tmp & 0x000000FF) | (T1 << 8); 111 + tmp = (int32_t)((tmp & 0x000000FF) | (T1 << 8));
110 break; 112 break;
111 case 3: 113 case 3:
112 - tmp = T1; 114 + tmp = (int32_t)T1;
113 break; 115 break;
114 } 116 }
115 #if defined (DEBUG_OP) 117 #if defined (DEBUG_OP)
116 if (logfile) { 118 if (logfile) {
117 - fprintf(logfile, "%s: %08x - %08x %08x => %08x\n", 119 + fprintf(logfile, "%s: " TLSZ " - " TLSZ " " TLSZ " => %08x\n",
118 __func__, T0, sav, T1, tmp); 120 __func__, T0, sav, T1, tmp);
119 } 121 }
120 #endif 122 #endif
@@ -164,7 +166,7 @@ void glue(do_ldl, MEMSUFFIX) (uint64_t tmp) @@ -164,7 +166,7 @@ void glue(do_ldl, MEMSUFFIX) (uint64_t tmp)
164 } 166 }
165 #if defined (DEBUG_OP) 167 #if defined (DEBUG_OP)
166 if (logfile) { 168 if (logfile) {
167 - fprintf(logfile, "%s: %08x - %08x %08x => %08x\n", 169 + fprintf(logfile, "%s: " TLSZ " - " TLSZ " " TLSZ " => " TLSZ "\n",
168 __func__, sav, tmp, T1, T0); 170 __func__, sav, tmp, T1, T0);
169 } 171 }
170 #endif 172 #endif
@@ -205,7 +207,7 @@ void glue(do_ldr, MEMSUFFIX) (uint64_t tmp) @@ -205,7 +207,7 @@ void glue(do_ldr, MEMSUFFIX) (uint64_t tmp)
205 } 207 }
206 #if defined (DEBUG_OP) 208 #if defined (DEBUG_OP)
207 if (logfile) { 209 if (logfile) {
208 - fprintf(logfile, "%s: %08x - %08x %08x => %08x\n", 210 + fprintf(logfile, "%s: " TLSZ " - " TLSZ " " TLSZ " => " TLSZ "\n",
209 __func__, sav, tmp, T1, T0); 211 __func__, sav, tmp, T1, T0);
210 } 212 }
211 #endif 213 #endif
@@ -246,7 +248,7 @@ uint64_t glue(do_sdl, MEMSUFFIX) (uint64_t tmp) @@ -246,7 +248,7 @@ uint64_t glue(do_sdl, MEMSUFFIX) (uint64_t tmp)
246 } 248 }
247 #if defined (DEBUG_OP) 249 #if defined (DEBUG_OP)
248 if (logfile) { 250 if (logfile) {
249 - fprintf(logfile, "%s: %08x - %08x %08x => %08x\n", 251 + fprintf(logfile, "%s: " TLSZ " - " TLSZ " " TLSZ " => " TLSZ "\n",
250 __func__, T0, sav, T1, tmp); 252 __func__, T0, sav, T1, tmp);
251 } 253 }
252 #endif 254 #endif
@@ -288,7 +290,7 @@ uint64_t glue(do_sdr, MEMSUFFIX) (uint64_t tmp) @@ -288,7 +290,7 @@ uint64_t glue(do_sdr, MEMSUFFIX) (uint64_t tmp)
288 } 290 }
289 #if defined (DEBUG_OP) 291 #if defined (DEBUG_OP)
290 if (logfile) { 292 if (logfile) {
291 - fprintf(logfile, "%s: %08x - %08x %08x => %08x\n", 293 + fprintf(logfile, "%s: " TLSZ " - " TLSZ " " TLSZ " => " TLSZ "\n",
292 __func__, T0, sav, T1, tmp); 294 __func__, T0, sav, T1, tmp);
293 } 295 }
294 #endif 296 #endif