Statistics
| Branch: | Revision:

root / target-mips / op_mem.c @ cd7dd10f

History | View | Annotate | Download (2.7 kB)

1 6af0bf9c bellard
/*
2 6af0bf9c bellard
 *  MIPS emulation memory micro-operations for qemu.
3 6af0bf9c bellard
 * 
4 6af0bf9c bellard
 *  Copyright (c) 2004-2005 Jocelyn Mayer
5 6af0bf9c bellard
 *
6 6af0bf9c bellard
 * This library is free software; you can redistribute it and/or
7 6af0bf9c bellard
 * modify it under the terms of the GNU Lesser General Public
8 6af0bf9c bellard
 * License as published by the Free Software Foundation; either
9 6af0bf9c bellard
 * version 2 of the License, or (at your option) any later version.
10 6af0bf9c bellard
 *
11 6af0bf9c bellard
 * This library is distributed in the hope that it will be useful,
12 6af0bf9c bellard
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 6af0bf9c bellard
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 6af0bf9c bellard
 * Lesser General Public License for more details.
15 6af0bf9c bellard
 *
16 6af0bf9c bellard
 * You should have received a copy of the GNU Lesser General Public
17 6af0bf9c bellard
 * License along with this library; if not, write to the Free Software
18 6af0bf9c bellard
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 6af0bf9c bellard
 */
20 6af0bf9c bellard
21 6af0bf9c bellard
/* Standard loads and stores */
22 6af0bf9c bellard
void glue(op_lb, MEMSUFFIX) (void)
23 6af0bf9c bellard
{
24 6af0bf9c bellard
    T0 = glue(ldsb, MEMSUFFIX)(T0);
25 6af0bf9c bellard
    RETURN();
26 6af0bf9c bellard
}
27 6af0bf9c bellard
28 6af0bf9c bellard
void glue(op_lbu, MEMSUFFIX) (void)
29 6af0bf9c bellard
{
30 6af0bf9c bellard
    T0 = glue(ldub, MEMSUFFIX)(T0);
31 6af0bf9c bellard
    RETURN();
32 6af0bf9c bellard
}
33 6af0bf9c bellard
34 6af0bf9c bellard
void glue(op_sb, MEMSUFFIX) (void)
35 6af0bf9c bellard
{
36 6af0bf9c bellard
    glue(stb, MEMSUFFIX)(T0, T1);
37 6af0bf9c bellard
    RETURN();
38 6af0bf9c bellard
}
39 6af0bf9c bellard
40 6af0bf9c bellard
void glue(op_lh, MEMSUFFIX) (void)
41 6af0bf9c bellard
{
42 6af0bf9c bellard
    T0 = glue(ldsw, MEMSUFFIX)(T0);
43 6af0bf9c bellard
    RETURN();
44 6af0bf9c bellard
}
45 6af0bf9c bellard
46 6af0bf9c bellard
void glue(op_lhu, MEMSUFFIX) (void)
47 6af0bf9c bellard
{
48 6af0bf9c bellard
    T0 = glue(lduw, MEMSUFFIX)(T0);
49 6af0bf9c bellard
    RETURN();
50 6af0bf9c bellard
}
51 6af0bf9c bellard
52 6af0bf9c bellard
void glue(op_sh, MEMSUFFIX) (void)
53 6af0bf9c bellard
{
54 6af0bf9c bellard
    glue(stw, MEMSUFFIX)(T0, T1);
55 6af0bf9c bellard
    RETURN();
56 6af0bf9c bellard
}
57 6af0bf9c bellard
58 6af0bf9c bellard
void glue(op_lw, MEMSUFFIX) (void)
59 6af0bf9c bellard
{
60 6af0bf9c bellard
    T0 = glue(ldl, MEMSUFFIX)(T0);
61 6af0bf9c bellard
    RETURN();
62 6af0bf9c bellard
}
63 6af0bf9c bellard
64 6af0bf9c bellard
void glue(op_sw, MEMSUFFIX) (void)
65 6af0bf9c bellard
{
66 6af0bf9c bellard
    glue(stl, MEMSUFFIX)(T0, T1);
67 6af0bf9c bellard
    RETURN();
68 6af0bf9c bellard
}
69 6af0bf9c bellard
70 4ad40f36 bellard
/* "half" load and stores.  We must do the memory access inline,
71 4ad40f36 bellard
   or fault handling won't work.  */
72 6af0bf9c bellard
void glue(op_lwl, MEMSUFFIX) (void)
73 6af0bf9c bellard
{
74 4ad40f36 bellard
    uint32_t tmp = glue(ldl, MEMSUFFIX)(T0 & ~3);
75 4ad40f36 bellard
    CALL_FROM_TB1(glue(do_lwl, MEMSUFFIX), tmp);
76 6af0bf9c bellard
    RETURN();
77 6af0bf9c bellard
}
78 6af0bf9c bellard
79 6af0bf9c bellard
void glue(op_lwr, MEMSUFFIX) (void)
80 6af0bf9c bellard
{
81 4ad40f36 bellard
    uint32_t tmp = glue(ldl, MEMSUFFIX)(T0 & ~3);
82 4ad40f36 bellard
    CALL_FROM_TB1(glue(do_lwr, MEMSUFFIX), tmp);
83 6af0bf9c bellard
    RETURN();
84 6af0bf9c bellard
}
85 6af0bf9c bellard
86 6af0bf9c bellard
void glue(op_swl, MEMSUFFIX) (void)
87 6af0bf9c bellard
{
88 4ad40f36 bellard
    uint32_t tmp = glue(ldl, MEMSUFFIX)(T0 & ~3);
89 4ad40f36 bellard
    tmp = CALL_FROM_TB1(glue(do_swl, MEMSUFFIX), tmp);
90 4ad40f36 bellard
    glue(stl, MEMSUFFIX)(T0 & ~3, tmp);
91 6af0bf9c bellard
    RETURN();
92 6af0bf9c bellard
}
93 6af0bf9c bellard
94 6af0bf9c bellard
void glue(op_swr, MEMSUFFIX) (void)
95 6af0bf9c bellard
{
96 4ad40f36 bellard
    uint32_t tmp = glue(ldl, MEMSUFFIX)(T0 & ~3);
97 4ad40f36 bellard
    tmp = CALL_FROM_TB1(glue(do_swr, MEMSUFFIX), tmp);
98 4ad40f36 bellard
    glue(stl, MEMSUFFIX)(T0 & ~3, tmp);
99 6af0bf9c bellard
    RETURN();
100 6af0bf9c bellard
}
101 6af0bf9c bellard
102 6af0bf9c bellard
void glue(op_ll, MEMSUFFIX) (void)
103 6af0bf9c bellard
{
104 6af0bf9c bellard
    T1 = T0;
105 6af0bf9c bellard
    T0 = glue(ldl, MEMSUFFIX)(T0);
106 6af0bf9c bellard
    env->CP0_LLAddr = T1;
107 6af0bf9c bellard
    RETURN();
108 6af0bf9c bellard
}
109 6af0bf9c bellard
110 6af0bf9c bellard
void glue(op_sc, MEMSUFFIX) (void)
111 6af0bf9c bellard
{
112 6af0bf9c bellard
    CALL_FROM_TB0(dump_sc);
113 6af0bf9c bellard
    if (T0 == env->CP0_LLAddr) {
114 6af0bf9c bellard
        glue(stl, MEMSUFFIX)(T0, T1);
115 6af0bf9c bellard
        T0 = 1;
116 6af0bf9c bellard
    } else {
117 6af0bf9c bellard
        T0 = 0;
118 6af0bf9c bellard
    }
119 6af0bf9c bellard
    RETURN();
120 6af0bf9c bellard
}