Statistics
| Branch: | Revision:

root / target-arm / op_mem.h @ 18c9b560

History | View | Annotate | Download (1.7 kB)

1
/* ARM memory operations.  */
2

    
3
/* Load from address T1 into T0.  */
4
#define MEM_LD_OP(name) \
5
void OPPROTO glue(op_ld##name,MEMSUFFIX)(void) \
6
{ \
7
    T0 = glue(ld##name,MEMSUFFIX)(T1); \
8
    FORCE_RET(); \
9
}
10

    
11
MEM_LD_OP(ub)
12
MEM_LD_OP(sb)
13
MEM_LD_OP(uw)
14
MEM_LD_OP(sw)
15
MEM_LD_OP(l)
16

    
17
#undef MEM_LD_OP
18

    
19
/* Store T0 to address T1.  */
20
#define MEM_ST_OP(name) \
21
void OPPROTO glue(op_st##name,MEMSUFFIX)(void) \
22
{ \
23
    glue(st##name,MEMSUFFIX)(T1, T0); \
24
    FORCE_RET(); \
25
}
26

    
27
MEM_ST_OP(b)
28
MEM_ST_OP(w)
29
MEM_ST_OP(l)
30

    
31
#undef MEM_ST_OP
32

    
33
/* Swap T0 with memory at address T1.  */
34
/* ??? Is this exception safe?  */
35
#define MEM_SWP_OP(name, lname) \
36
void OPPROTO glue(op_swp##name,MEMSUFFIX)(void) \
37
{ \
38
    uint32_t tmp; \
39
    cpu_lock(); \
40
    tmp = glue(ld##lname,MEMSUFFIX)(T1); \
41
    glue(st##name,MEMSUFFIX)(T1, T0); \
42
    T0 = tmp; \
43
    cpu_unlock(); \
44
    FORCE_RET(); \
45
}
46

    
47
MEM_SWP_OP(b, ub)
48
MEM_SWP_OP(l, l)
49

    
50
#undef MEM_SWP_OP
51

    
52
/* Floating point load/store.  Address is in T1 */
53
#define VFP_MEM_OP(p, w) \
54
void OPPROTO glue(op_vfp_ld##p,MEMSUFFIX)(void) \
55
{ \
56
    FT0##p = glue(ldf##w,MEMSUFFIX)(T1); \
57
    FORCE_RET(); \
58
} \
59
void OPPROTO glue(op_vfp_st##p,MEMSUFFIX)(void) \
60
{ \
61
    glue(stf##w,MEMSUFFIX)(T1, FT0##p); \
62
    FORCE_RET(); \
63
}
64

    
65
VFP_MEM_OP(s,l)
66
VFP_MEM_OP(d,q)
67

    
68
#undef VFP_MEM_OP
69

    
70
/* iwMMXt load/store.  Address is in T1 */
71
#define MMX_MEM_OP(name, ldname) \
72
void OPPROTO glue(op_iwmmxt_ld##name,MEMSUFFIX)(void) \
73
{ \
74
    M0 = glue(ld##ldname,MEMSUFFIX)(T1); \
75
    FORCE_RET(); \
76
} \
77
void OPPROTO glue(op_iwmmxt_st##name,MEMSUFFIX)(void) \
78
{ \
79
    glue(st##name,MEMSUFFIX)(T1, M0); \
80
    FORCE_RET(); \
81
}
82

    
83
MMX_MEM_OP(b, ub)
84
MMX_MEM_OP(w, uw)
85
MMX_MEM_OP(l, l)
86
MMX_MEM_OP(q, q)
87

    
88
#undef MMX_MEM_OP
89

    
90
#undef MEMSUFFIX