]> Git Repo - qemu.git/blame - target-sparc/op_mem.h
More CPU definitions
[qemu.git] / target-sparc / op_mem.h
CommitLineData
992f48a0
BS
1#ifdef TARGET_ABI32
2#define ADDR(x) ((x) & 0xffffffff)
3#else
4#define ADDR(x) (x)
5#endif
6
e8af50a3
FB
7/*** Integer load ***/
8#define SPARC_LD_OP(name, qp) \
9void OPPROTO glue(glue(op_, name), MEMSUFFIX)(void) \
10{ \
992f48a0 11 T1 = (target_ulong)glue(qp, MEMSUFFIX)(ADDR(T0)); \
e8af50a3
FB
12}
13
0f8a249a
BS
14#define SPARC_LD_OP_S(name, qp) \
15 void OPPROTO glue(glue(op_, name), MEMSUFFIX)(void) \
16 { \
992f48a0 17 T1 = (target_long)glue(qp, MEMSUFFIX)(ADDR(T0)); \
3475187d
FB
18 }
19
e8af50a3
FB
20#define SPARC_ST_OP(name, op) \
21void OPPROTO glue(glue(op_, name), MEMSUFFIX)(void) \
22{ \
992f48a0 23 glue(op, MEMSUFFIX)(ADDR(T0), T1); \
e8af50a3
FB
24}
25
26SPARC_LD_OP(ld, ldl);
27SPARC_LD_OP(ldub, ldub);
28SPARC_LD_OP(lduh, lduw);
3475187d
FB
29SPARC_LD_OP_S(ldsb, ldsb);
30SPARC_LD_OP_S(ldsh, ldsw);
e8af50a3
FB
31
32/*** Integer store ***/
33SPARC_ST_OP(st, stl);
34SPARC_ST_OP(stb, stb);
35SPARC_ST_OP(sth, stw);
36
37void OPPROTO glue(op_std, MEMSUFFIX)(void)
38{
e909ec2f
BS
39 uint64_t tmp = ((uint64_t)T1 << 32) | (uint64_t)(T2 & 0xffffffff);
40
41 glue(stq, MEMSUFFIX)(ADDR(T0), tmp);
e8af50a3
FB
42}
43
44void OPPROTO glue(op_ldstub, MEMSUFFIX)(void)
45{
992f48a0
BS
46 T1 = glue(ldub, MEMSUFFIX)(ADDR(T0));
47 glue(stb, MEMSUFFIX)(ADDR(T0), 0xff); /* XXX: Should be Atomically */
e8af50a3
FB
48}
49
50void OPPROTO glue(op_swap, MEMSUFFIX)(void)
51{
992f48a0
BS
52 target_ulong tmp = glue(ldl, MEMSUFFIX)(ADDR(T0));
53 glue(stl, MEMSUFFIX)(ADDR(T0), T1); /* XXX: Should be Atomically */
e8af50a3
FB
54 T1 = tmp;
55}
56
57void OPPROTO glue(op_ldd, MEMSUFFIX)(void)
58{
e909ec2f
BS
59 uint64_t tmp;
60
61 tmp = glue(ldq, MEMSUFFIX)(ADDR(T0));
62 T1 = tmp >> 32;
63 T0 = tmp & 0xffffffff;
e8af50a3
FB
64}
65
66/*** Floating-point store ***/
67void OPPROTO glue(op_stf, MEMSUFFIX) (void)
68{
992f48a0 69 glue(stfl, MEMSUFFIX)(ADDR(T0), FT0);
e8af50a3
FB
70}
71
72void OPPROTO glue(op_stdf, MEMSUFFIX) (void)
73{
992f48a0 74 glue(stfq, MEMSUFFIX)(ADDR(T0), DT0);
e8af50a3
FB
75}
76
77/*** Floating-point load ***/
78void OPPROTO glue(op_ldf, MEMSUFFIX) (void)
79{
992f48a0 80 FT0 = glue(ldfl, MEMSUFFIX)(ADDR(T0));
e8af50a3
FB
81}
82
83void OPPROTO glue(op_lddf, MEMSUFFIX) (void)
84{
992f48a0 85 DT0 = glue(ldfq, MEMSUFFIX)(ADDR(T0));
e8af50a3 86}
3475187d
FB
87
88#ifdef TARGET_SPARC64
dc011987
BS
89void OPPROTO glue(op_lduw, MEMSUFFIX)(void)
90{
992f48a0 91 T1 = (uint64_t)(glue(ldl, MEMSUFFIX)(ADDR(T0)) & 0xffffffff);
dc011987
BS
92}
93
3475187d
FB
94void OPPROTO glue(op_ldsw, MEMSUFFIX)(void)
95{
992f48a0 96 T1 = (int64_t)(glue(ldl, MEMSUFFIX)(ADDR(T0)) & 0xffffffff);
3475187d
FB
97}
98
83469015
FB
99SPARC_LD_OP(ldx, ldq);
100SPARC_ST_OP(stx, stq);
3475187d 101#endif
e8af50a3 102#undef MEMSUFFIX
This page took 0.099952 seconds and 4 git commands to generate.