]>
Commit | Line | Data |
---|---|---|
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) \ | |
9 | void 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) \ |
21 | void OPPROTO glue(glue(op_, name), MEMSUFFIX)(void) \ | |
22 | { \ | |
992f48a0 | 23 | glue(op, MEMSUFFIX)(ADDR(T0), T1); \ |
e8af50a3 FB |
24 | } |
25 | ||
26 | SPARC_LD_OP(ld, ldl); | |
27 | SPARC_LD_OP(ldub, ldub); | |
28 | SPARC_LD_OP(lduh, lduw); | |
3475187d FB |
29 | SPARC_LD_OP_S(ldsb, ldsb); |
30 | SPARC_LD_OP_S(ldsh, ldsw); | |
e8af50a3 FB |
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 | { | |
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 | ||
44 | void 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 | ||
50 | void 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 | ||
57 | void 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 ***/ | |
67 | void OPPROTO glue(op_stf, MEMSUFFIX) (void) | |
68 | { | |
992f48a0 | 69 | glue(stfl, MEMSUFFIX)(ADDR(T0), FT0); |
e8af50a3 FB |
70 | } |
71 | ||
72 | void OPPROTO glue(op_stdf, MEMSUFFIX) (void) | |
73 | { | |
992f48a0 | 74 | glue(stfq, MEMSUFFIX)(ADDR(T0), DT0); |
e8af50a3 FB |
75 | } |
76 | ||
77 | /*** Floating-point load ***/ | |
78 | void OPPROTO glue(op_ldf, MEMSUFFIX) (void) | |
79 | { | |
992f48a0 | 80 | FT0 = glue(ldfl, MEMSUFFIX)(ADDR(T0)); |
e8af50a3 FB |
81 | } |
82 | ||
83 | void 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 |
89 | void OPPROTO glue(op_lduw, MEMSUFFIX)(void) |
90 | { | |
992f48a0 | 91 | T1 = (uint64_t)(glue(ldl, MEMSUFFIX)(ADDR(T0)) & 0xffffffff); |
dc011987 BS |
92 | } |
93 | ||
3475187d FB |
94 | void OPPROTO glue(op_ldsw, MEMSUFFIX)(void) |
95 | { | |
992f48a0 | 96 | T1 = (int64_t)(glue(ldl, MEMSUFFIX)(ADDR(T0)) & 0xffffffff); |
3475187d FB |
97 | } |
98 | ||
83469015 FB |
99 | SPARC_LD_OP(ldx, ldq); |
100 | SPARC_ST_OP(stx, stq); | |
3475187d | 101 | #endif |
e8af50a3 | 102 | #undef MEMSUFFIX |