Statistics
| Branch: | Revision:

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
}