Statistics
| Branch: | Revision:

root / target-mips / op_helper_mem.c @ dfae6487

History | View | Annotate | Download (3 kB)

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