]> git.proxmox.com Git - mirror_qemu.git/blame - target-sparc/fop_template.h
full system SPARC emulation (Blue Swirl)
[mirror_qemu.git] / target-sparc / fop_template.h
CommitLineData
e8af50a3
FB
1/*
2 * SPARC micro operations (templates for various register related
3 * operations)
4 *
5 * Copyright (c) 2003 Fabrice Bellard
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 */
21
22/* floating point registers moves */
23void OPPROTO glue(op_load_fpr_FT0_fpr, REGNAME)(void)
24{
25 FT0 = REG;
26}
27
28void OPPROTO glue(op_store_FT0_fpr_fpr, REGNAME)(void)
29{
30 REG = FT0;
31}
32
33void OPPROTO glue(op_load_fpr_FT1_fpr, REGNAME)(void)
34{
35 FT1 = REG;
36}
37
38void OPPROTO glue(op_store_FT1_fpr_fpr, REGNAME)(void)
39{
40 REG = FT1;
41}
42
43void OPPROTO glue(op_load_fpr_FT2_fpr, REGNAME)(void)
44{
45 FT2 = REG;
46}
47
48void OPPROTO glue(op_store_FT2_fpr_fpr, REGNAME)(void)
49{
50 REG = FT2;
51}
52
53/* double floating point registers moves */
54#if 0
55#define CPU_DOUBLE_U_DEF
56typedef union {
57 double d;
58 struct {
59 uint32_t lower;
60 uint32_t upper;
61 } l;
62 uint64_t ll;
63} CPU_DoubleU;
64#endif /* CPU_DOUBLE_U_DEF */
65
66void OPPROTO glue(op_load_fpr_DT0_fpr, REGNAME)(void)
67{
68 CPU_DoubleU u;
69 uint32_t *p = (uint32_t *)®
70 u.l.lower = *(p +1);
71 u.l.upper = *p;
72 DT0 = u.d;
73}
74
75void OPPROTO glue(op_store_DT0_fpr_fpr, REGNAME)(void)
76{
77 CPU_DoubleU u;
78 uint32_t *p = (uint32_t *)®
79 u.d = DT0;
80 *(p +1) = u.l.lower;
81 *p = u.l.upper;
82}
83
84void OPPROTO glue(op_load_fpr_DT1_fpr, REGNAME)(void)
85{
86 CPU_DoubleU u;
87 uint32_t *p = (uint32_t *)®
88 u.l.lower = *(p +1);
89 u.l.upper = *p;
90 DT1 = u.d;
91}
92
93void OPPROTO glue(op_store_DT1_fpr_fpr, REGNAME)(void)
94{
95 CPU_DoubleU u;
96 uint32_t *p = (uint32_t *)®
97 u.d = DT1;
98 *(p +1) = u.l.lower;
99 *p = u.l.upper;
100}
101
102void OPPROTO glue(op_load_fpr_DT2_fpr, REGNAME)(void)
103{
104 CPU_DoubleU u;
105 uint32_t *p = (uint32_t *)®
106 u.l.lower = *(p +1);
107 u.l.upper = *p;
108 DT2 = u.d;
109}
110
111void OPPROTO glue(op_store_DT2_fpr_fpr, REGNAME)(void)
112{
113 CPU_DoubleU u;
114 uint32_t *p = (uint32_t *)®
115 u.d = DT2;
116 *(p +1) = u.l.lower;
117 *p = u.l.upper;
118}
119
120#undef REG
121#undef REGNAME