0.6.2-alt1
[qemu] / qemu-snapshot-2004-11-28_23 / target-sparc / op_mem.h
1 /***                             Integer load                              ***/
2 #define SPARC_LD_OP(name, qp)                                                 \
3 void OPPROTO glue(glue(op_, name), MEMSUFFIX)(void)                           \
4 {                                                                             \
5     T1 = glue(qp, MEMSUFFIX)((void *)T0);                                     \
6 }
7
8 #define SPARC_ST_OP(name, op)                                                 \
9 void OPPROTO glue(glue(op_, name), MEMSUFFIX)(void)                           \
10 {                                                                             \
11     glue(op, MEMSUFFIX)((void *)T0, T1);                                      \
12 }
13
14 SPARC_LD_OP(ld, ldl);
15 SPARC_LD_OP(ldub, ldub);
16 SPARC_LD_OP(lduh, lduw);
17 SPARC_LD_OP(ldsb, ldsb);
18 SPARC_LD_OP(ldsh, ldsw);
19
20 /***                              Integer store                            ***/
21 SPARC_ST_OP(st, stl);
22 SPARC_ST_OP(stb, stb);
23 SPARC_ST_OP(sth, stw);
24
25 void OPPROTO glue(op_std, MEMSUFFIX)(void)
26 {
27     glue(stl, MEMSUFFIX)((void *) T0, T1);
28     glue(stl, MEMSUFFIX)((void *) (T0 + 4), T2);
29 }
30
31 void OPPROTO glue(op_ldstub, MEMSUFFIX)(void)
32 {
33     T1 = glue(ldub, MEMSUFFIX)((void *) T0);
34     glue(stb, MEMSUFFIX)((void *) T0, 0xff);     /* XXX: Should be Atomically */
35 }
36
37 void OPPROTO glue(op_swap, MEMSUFFIX)(void)
38 {
39     unsigned int tmp = glue(ldl, MEMSUFFIX)((void *) T0);
40     glue(stl, MEMSUFFIX)((void *) T0, T1);       /* XXX: Should be Atomically */
41     T1 = tmp;
42 }
43
44 void OPPROTO glue(op_ldd, MEMSUFFIX)(void)
45 {
46 #if 1
47     T1 = glue(ldl, MEMSUFFIX)((void *) T0);
48     T0 = glue(ldl, MEMSUFFIX)((void *) (T0 + 4));
49 #else
50     glue(do_ldd, MEMSUFFIX)(T0);
51 #endif
52 }
53
54 /***                         Floating-point store                          ***/
55 void OPPROTO glue(op_stf, MEMSUFFIX) (void)
56 {
57     glue(stfl, MEMSUFFIX)((void *) T0, FT0);
58 }
59
60 void OPPROTO glue(op_stdf, MEMSUFFIX) (void)
61 {
62     glue(stfq, MEMSUFFIX)((void *) T0, DT0);
63 }
64
65 /***                         Floating-point load                           ***/
66 void OPPROTO glue(op_ldf, MEMSUFFIX) (void)
67 {
68     FT0 = glue(ldfl, MEMSUFFIX)((void *) T0);
69 }
70
71 void OPPROTO glue(op_lddf, MEMSUFFIX) (void)
72 {
73     DT0 = glue(ldfq, MEMSUFFIX)((void *) T0);
74 }
75 #undef MEMSUFFIX