Statistics
| Branch: | Revision:

root / target-sparc / op_mem.h @ 992f48a0

History | View | Annotate | Download (2.8 kB)

1
#ifdef TARGET_ABI32
2
#define ADDR(x) ((x) & 0xffffffff)
3
#else
4
#define ADDR(x) (x)
5
#endif
6

    
7
/***                             Integer load                              ***/
8
#define SPARC_LD_OP(name, qp)                                                 \
9
void OPPROTO glue(glue(op_, name), MEMSUFFIX)(void)                           \
10
{                                                                             \
11
    T1 = (target_ulong)glue(qp, MEMSUFFIX)(ADDR(T0));                         \
12
}
13

    
14
#define SPARC_LD_OP_S(name, qp)                                         \
15
    void OPPROTO glue(glue(op_, name), MEMSUFFIX)(void)                 \
16
    {                                                                   \
17
        T1 = (target_long)glue(qp, MEMSUFFIX)(ADDR(T0));                      \
18
    }
19

    
20
#define SPARC_ST_OP(name, op)                                                 \
21
void OPPROTO glue(glue(op_, name), MEMSUFFIX)(void)                           \
22
{                                                                             \
23
    glue(op, MEMSUFFIX)(ADDR(T0), T1);                                      \
24
}
25

    
26
SPARC_LD_OP(ld, ldl);
27
SPARC_LD_OP(ldub, ldub);
28
SPARC_LD_OP(lduh, lduw);
29
SPARC_LD_OP_S(ldsb, ldsb);
30
SPARC_LD_OP_S(ldsh, ldsw);
31

    
32
/***                              Integer store                            ***/
33
SPARC_ST_OP(st, stl);
34
SPARC_ST_OP(stb, stb);
35
SPARC_ST_OP(sth, stw);
36

    
37
void OPPROTO glue(op_std, MEMSUFFIX)(void)
38
{
39
    glue(stl, MEMSUFFIX)(ADDR(T0), T1);
40
    glue(stl, MEMSUFFIX)((ADDR(T0 + 4)), T2);
41
}
42

    
43
void OPPROTO glue(op_ldstub, MEMSUFFIX)(void)
44
{
45
    T1 = glue(ldub, MEMSUFFIX)(ADDR(T0));
46
    glue(stb, MEMSUFFIX)(ADDR(T0), 0xff);     /* XXX: Should be Atomically */
47
}
48

    
49
void OPPROTO glue(op_swap, MEMSUFFIX)(void)
50
{
51
    target_ulong tmp = glue(ldl, MEMSUFFIX)(ADDR(T0));
52
    glue(stl, MEMSUFFIX)(ADDR(T0), T1);       /* XXX: Should be Atomically */
53
    T1 = tmp;
54
}
55

    
56
void OPPROTO glue(op_ldd, MEMSUFFIX)(void)
57
{
58
    T1 = glue(ldl, MEMSUFFIX)(ADDR(T0));
59
    T0 = glue(ldl, MEMSUFFIX)((ADDR(T0 + 4)));
60
}
61

    
62
/***                         Floating-point store                          ***/
63
void OPPROTO glue(op_stf, MEMSUFFIX) (void)
64
{
65
    glue(stfl, MEMSUFFIX)(ADDR(T0), FT0);
66
}
67

    
68
void OPPROTO glue(op_stdf, MEMSUFFIX) (void)
69
{
70
    glue(stfq, MEMSUFFIX)(ADDR(T0), DT0);
71
}
72

    
73
/***                         Floating-point load                           ***/
74
void OPPROTO glue(op_ldf, MEMSUFFIX) (void)
75
{
76
    FT0 = glue(ldfl, MEMSUFFIX)(ADDR(T0));
77
}
78

    
79
void OPPROTO glue(op_lddf, MEMSUFFIX) (void)
80
{
81
    DT0 = glue(ldfq, MEMSUFFIX)(ADDR(T0));
82
}
83

    
84
#ifdef TARGET_SPARC64
85
void OPPROTO glue(op_lduw, MEMSUFFIX)(void)
86
{
87
    T1 = (uint64_t)(glue(ldl, MEMSUFFIX)(ADDR(T0)) & 0xffffffff);
88
}
89

    
90
void OPPROTO glue(op_ldsw, MEMSUFFIX)(void)
91
{
92
    T1 = (int64_t)(glue(ldl, MEMSUFFIX)(ADDR(T0)) & 0xffffffff);
93
}
94

    
95
SPARC_LD_OP(ldx, ldq);
96
SPARC_ST_OP(stx, stq);
97
#endif
98
#undef MEMSUFFIX