19
19
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24
#define OP_WLOAD_FREG(treg, tregname, FREG) \
25
void glue(glue(op_load_fpr_,tregname), FREG) (void) \
27
treg = env->fpu->fpr[FREG].w[FP_ENDIAN_IDX]; \
31
#define OP_WSTORE_FREG(treg, tregname, FREG) \
32
void glue(glue(op_store_fpr_,tregname), FREG) (void) \
34
env->fpu->fpr[FREG].w[FP_ENDIAN_IDX] = treg; \
38
/* WT0 = FREG.w: op_load_fpr_WT0_fprFREG */
39
OP_WLOAD_FREG(WT0, WT0_fpr, FREG)
40
/* FREG.w = WT0: op_store_fpr_WT0_fprFREG */
41
OP_WSTORE_FREG(WT0, WT0_fpr, FREG)
43
OP_WLOAD_FREG(WT1, WT1_fpr, FREG)
44
OP_WSTORE_FREG(WT1, WT1_fpr, FREG)
46
OP_WLOAD_FREG(WT2, WT2_fpr, FREG)
47
OP_WSTORE_FREG(WT2, WT2_fpr, FREG)
49
#define OP_DLOAD_FREG(treg, tregname, FREG) \
50
void glue(glue(op_load_fpr_,tregname), FREG) (void) \
52
if (env->hflags & MIPS_HFLAG_F64) \
53
treg = env->fpu->fpr[FREG].d; \
55
treg = (uint64_t)(env->fpu->fpr[FREG | 1].w[FP_ENDIAN_IDX]) << 32 | \
56
env->fpu->fpr[FREG & ~1].w[FP_ENDIAN_IDX]; \
60
#define OP_DSTORE_FREG(treg, tregname, FREG) \
61
void glue(glue(op_store_fpr_,tregname), FREG) (void) \
63
if (env->hflags & MIPS_HFLAG_F64) \
64
env->fpu->fpr[FREG].d = treg; \
66
env->fpu->fpr[FREG | 1].w[FP_ENDIAN_IDX] = treg >> 32; \
67
env->fpu->fpr[FREG & ~1].w[FP_ENDIAN_IDX] = treg; \
72
OP_DLOAD_FREG(DT0, DT0_fpr, FREG)
73
OP_DSTORE_FREG(DT0, DT0_fpr, FREG)
75
OP_DLOAD_FREG(DT1, DT1_fpr, FREG)
76
OP_DSTORE_FREG(DT1, DT1_fpr, FREG)
78
OP_DLOAD_FREG(DT2, DT2_fpr, FREG)
79
OP_DSTORE_FREG(DT2, DT2_fpr, FREG)
81
#define OP_PSLOAD_FREG(treg, tregname, FREG) \
82
void glue(glue(op_load_fpr_,tregname), FREG) (void) \
84
treg = env->fpu->fpr[FREG].w[!FP_ENDIAN_IDX]; \
88
#define OP_PSSTORE_FREG(treg, tregname, FREG) \
89
void glue(glue(op_store_fpr_,tregname), FREG) (void) \
91
env->fpu->fpr[FREG].w[!FP_ENDIAN_IDX] = treg; \
95
OP_PSLOAD_FREG(WTH0, WTH0_fpr, FREG)
96
OP_PSSTORE_FREG(WTH0, WTH0_fpr, FREG)
98
OP_PSLOAD_FREG(WTH1, WTH1_fpr, FREG)
99
OP_PSSTORE_FREG(WTH1, WTH1_fpr, FREG)
101
OP_PSLOAD_FREG(WTH2, WTH2_fpr, FREG)
102
OP_PSSTORE_FREG(WTH2, WTH2_fpr, FREG)
24
#define OP_WLOAD_FREG(treg, tregname, SFREG) \
25
void glue(glue(op_load_fpr_,tregname), SFREG) (void) \
27
treg = FPR_W(env, SFREG); \
31
#define OP_WSTORE_FREG(treg, tregname, SFREG) \
32
void glue(glue(op_store_fpr_,tregname), SFREG) (void)\
34
FPR_W(env, SFREG) = treg; \
38
/* WT0 = SFREG.w: op_load_fpr_WT0_fprSFREG */
39
OP_WLOAD_FREG(WT0, WT0_fpr, SFREG)
40
/* SFREG.w = WT0: op_store_fpr_WT0_fprSFREG */
41
OP_WSTORE_FREG(WT0, WT0_fpr, SFREG)
43
OP_WLOAD_FREG(WT1, WT1_fpr, SFREG)
44
OP_WSTORE_FREG(WT1, WT1_fpr, SFREG)
46
OP_WLOAD_FREG(WT2, WT2_fpr, SFREG)
47
OP_WSTORE_FREG(WT2, WT2_fpr, SFREG)
53
#define OP_DLOAD_FREG(treg, tregname, DFREG) \
54
void glue(glue(op_load_fpr_,tregname), DFREG) (void) \
56
treg = FPR_D(env, DFREG); \
60
#define OP_DSTORE_FREG(treg, tregname, DFREG) \
61
void glue(glue(op_store_fpr_,tregname), DFREG) (void)\
63
FPR_D(env, DFREG) = treg; \
67
OP_DLOAD_FREG(DT0, DT0_fpr, DFREG)
68
OP_DSTORE_FREG(DT0, DT0_fpr, DFREG)
70
OP_DLOAD_FREG(DT1, DT1_fpr, DFREG)
71
OP_DSTORE_FREG(DT1, DT1_fpr, DFREG)
73
OP_DLOAD_FREG(DT2, DT2_fpr, DFREG)
74
OP_DSTORE_FREG(DT2, DT2_fpr, DFREG)
80
#define SET_RESET(treg, tregname) \
81
void glue(op_set, tregname)(void) \
86
void glue(op_reset, tregname)(void) \