root / target-mips / op_helper_mem.c @ 4ad40f36
History | View | Annotate | Download (2.8 kB)
1 |
void glue(do_lwl, MEMSUFFIX) (uint32_t tmp)
|
---|---|
2 |
{ |
3 |
#if defined (DEBUG_OP)
|
4 |
target_ulong sav = T0; |
5 |
#endif
|
6 |
|
7 |
/* XXX: this is valid only in big-endian mode
|
8 |
* should be reverted for little-endian...
|
9 |
*/
|
10 |
switch (T0 & 3) { |
11 |
case 0: |
12 |
T0 = tmp; |
13 |
break;
|
14 |
case 1: |
15 |
T0 = (tmp << 8) | (T1 & 0x000000FF); |
16 |
break;
|
17 |
case 2: |
18 |
T0 = (tmp << 16) | (T1 & 0x0000FFFF); |
19 |
break;
|
20 |
case 3: |
21 |
T0 = (tmp << 24) | (T1 & 0x00FFFFFF); |
22 |
break;
|
23 |
} |
24 |
#if defined (DEBUG_OP)
|
25 |
if (logfile) {
|
26 |
fprintf(logfile, "%s: %08x - %08x %08x => %08x\n",
|
27 |
__func__, sav, tmp, T1, T0); |
28 |
} |
29 |
#endif
|
30 |
RETURN(); |
31 |
} |
32 |
|
33 |
void glue(do_lwr, MEMSUFFIX) (uint32_t tmp)
|
34 |
{ |
35 |
#if defined (DEBUG_OP)
|
36 |
target_ulong sav = T0; |
37 |
#endif
|
38 |
|
39 |
/* XXX: this is valid only in big-endian mode
|
40 |
* should be reverted for little-endian...
|
41 |
*/
|
42 |
switch (T0 & 3) { |
43 |
case 0: |
44 |
T0 = (tmp >> 24) | (T1 & 0xFFFFFF00); |
45 |
break;
|
46 |
case 1: |
47 |
T0 = (tmp >> 16) | (T1 & 0xFFFF0000); |
48 |
break;
|
49 |
case 2: |
50 |
T0 = (tmp >> 8) | (T1 & 0xFF000000); |
51 |
break;
|
52 |
case 3: |
53 |
T0 = tmp; |
54 |
break;
|
55 |
} |
56 |
#if defined (DEBUG_OP)
|
57 |
if (logfile) {
|
58 |
fprintf(logfile, "%s: %08x - %08x %08x => %08x\n",
|
59 |
__func__, sav, tmp, T1, T0); |
60 |
} |
61 |
#endif
|
62 |
RETURN(); |
63 |
} |
64 |
|
65 |
uint32_t glue(do_swl, MEMSUFFIX) (uint32_t tmp) |
66 |
{ |
67 |
#if defined (DEBUG_OP)
|
68 |
target_ulong sav; |
69 |
#endif
|
70 |
|
71 |
#if defined (DEBUG_OP)
|
72 |
sav = tmp; |
73 |
#endif
|
74 |
/* XXX: this is valid only in big-endian mode
|
75 |
* should be reverted for little-endian...
|
76 |
*/
|
77 |
switch (T0 & 3) { |
78 |
case 0: |
79 |
tmp = T1; |
80 |
break;
|
81 |
case 1: |
82 |
tmp = (tmp & 0xFF000000) | (T1 >> 8); |
83 |
break;
|
84 |
case 2: |
85 |
tmp = (tmp & 0xFFFF0000) | (T1 >> 16); |
86 |
break;
|
87 |
case 3: |
88 |
tmp = (tmp & 0xFFFFFF00) | (T1 >> 24); |
89 |
break;
|
90 |
} |
91 |
#if defined (DEBUG_OP)
|
92 |
if (logfile) {
|
93 |
fprintf(logfile, "%s: %08x - %08x %08x => %08x\n",
|
94 |
__func__, T0, sav, T1, tmp); |
95 |
} |
96 |
#endif
|
97 |
RETURN(); |
98 |
return tmp;
|
99 |
} |
100 |
|
101 |
uint32_t glue(do_swr, MEMSUFFIX) (uint32_t tmp) |
102 |
{ |
103 |
#if defined (DEBUG_OP)
|
104 |
target_ulong sav; |
105 |
#endif
|
106 |
|
107 |
#if defined (DEBUG_OP)
|
108 |
sav = tmp; |
109 |
#endif
|
110 |
/* XXX: this is valid only in big-endian mode
|
111 |
* should be reverted for little-endian...
|
112 |
*/
|
113 |
switch (T0 & 3) { |
114 |
case 0: |
115 |
tmp = (tmp & 0x00FFFFFF) | (T1 << 24); |
116 |
break;
|
117 |
case 1: |
118 |
tmp = (tmp & 0x0000FFFF) | (T1 << 16); |
119 |
break;
|
120 |
case 2: |
121 |
tmp = (tmp & 0x000000FF) | (T1 << 8); |
122 |
break;
|
123 |
case 3: |
124 |
tmp = T1; |
125 |
break;
|
126 |
} |
127 |
#if defined (DEBUG_OP)
|
128 |
if (logfile) {
|
129 |
fprintf(logfile, "%s: %08x - %08x %08x => %08x\n",
|
130 |
__func__, T0, sav, T1, tmp); |
131 |
} |
132 |
#endif
|
133 |
RETURN(); |
134 |
return tmp;
|
135 |
} |