3a6d386a68172fd739604d22ee9a0507a481a0fa
[qemu] / target-mips / op_helper_mem.c
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 }