Revision 9004627f target-cris/op.c
b/target-cris/op.c | ||
---|---|---|
185 | 185 |
uint32_t ccs; |
186 | 186 |
|
187 | 187 |
/* Apply the ccs shift. */ |
188 |
ccs = env->pregs[SR_CCS];
|
|
188 |
ccs = env->pregs[PR_CCS];
|
|
189 | 189 |
ccs = (ccs & 0xc0000000) | ((ccs << 12) >> 2); |
190 |
env->pregs[SR_CCS] = ccs;
|
|
190 |
env->pregs[PR_CCS] = ccs;
|
|
191 | 191 |
RETURN(); |
192 | 192 |
} |
193 | 193 |
void OPPROTO op_ccs_rshift (void) |
... | ... | |
195 | 195 |
uint32_t ccs; |
196 | 196 |
|
197 | 197 |
/* Apply the ccs shift. */ |
198 |
ccs = env->pregs[SR_CCS];
|
|
198 |
ccs = env->pregs[PR_CCS];
|
|
199 | 199 |
ccs = (ccs & 0xc0000000) | (ccs >> 10); |
200 |
env->pregs[SR_CCS] = ccs;
|
|
200 |
env->pregs[PR_CCS] = ccs;
|
|
201 | 201 |
RETURN(); |
202 | 202 |
} |
203 | 203 |
|
204 | 204 |
void OPPROTO op_setf (void) |
205 | 205 |
{ |
206 |
env->pregs[SR_CCS] |= PARAM1;
|
|
206 |
env->pregs[PR_CCS] |= PARAM1;
|
|
207 | 207 |
RETURN(); |
208 | 208 |
} |
209 | 209 |
|
210 | 210 |
void OPPROTO op_clrf (void) |
211 | 211 |
{ |
212 |
env->pregs[SR_CCS] &= ~PARAM1;
|
|
212 |
env->pregs[PR_CCS] &= ~PARAM1;
|
|
213 | 213 |
RETURN(); |
214 | 214 |
} |
215 | 215 |
|
... | ... | |
254 | 254 |
} |
255 | 255 |
void OPPROTO op_movl_T0_flags (void) |
256 | 256 |
{ |
257 |
T0 = env->pregs[SR_CCS];
|
|
257 |
T0 = env->pregs[PR_CCS];
|
|
258 | 258 |
RETURN(); |
259 | 259 |
} |
260 | 260 |
void OPPROTO op_movl_flags_T0 (void) |
261 | 261 |
{ |
262 |
env->pregs[SR_CCS] = T0;
|
|
262 |
env->pregs[PR_CCS] = T0;
|
|
263 | 263 |
RETURN(); |
264 | 264 |
} |
265 | 265 |
|
266 | 266 |
void OPPROTO op_movl_sreg_T0 (void) |
267 | 267 |
{ |
268 |
env->sregs[env->pregs[SR_SRS]][PARAM1] = T0;
|
|
268 |
env->sregs[env->pregs[PR_SRS]][PARAM1] = T0;
|
|
269 | 269 |
RETURN(); |
270 | 270 |
} |
271 | 271 |
|
272 | 272 |
void OPPROTO op_movl_tlb_lo_T0 (void) |
273 | 273 |
{ |
274 | 274 |
int srs; |
275 |
srs = env->pregs[SR_SRS];
|
|
275 |
srs = env->pregs[PR_SRS];
|
|
276 | 276 |
if (srs == 1 || srs == 2) |
277 | 277 |
{ |
278 | 278 |
int set; |
... | ... | |
296 | 296 |
|
297 | 297 |
void OPPROTO op_movl_T0_sreg (void) |
298 | 298 |
{ |
299 |
T0 = env->sregs[env->pregs[SR_SRS]][PARAM1];
|
|
299 |
T0 = env->sregs[env->pregs[PR_SRS]][PARAM1];
|
|
300 | 300 |
RETURN(); |
301 | 301 |
} |
302 | 302 |
|
... | ... | |
356 | 356 |
int x; |
357 | 357 |
|
358 | 358 |
/* Extended arithmetics, leave the z flag alone. */ |
359 |
env->debug3 = env->pregs[SR_CCS];
|
|
359 |
env->debug3 = env->pregs[PR_CCS];
|
|
360 | 360 |
|
361 | 361 |
if (env->cc_x_live) |
362 | 362 |
x = env->cc_x; |
363 | 363 |
else |
364 |
x = env->pregs[SR_CCS] & X_FLAG;
|
|
364 |
x = env->pregs[PR_CCS] & X_FLAG;
|
|
365 | 365 |
|
366 | 366 |
if ((x || env->cc_op == CC_OP_ADDC) |
367 | 367 |
&& flags & Z_FLAG) |
368 | 368 |
env->cc_mask &= ~Z_FLAG; |
369 | 369 |
|
370 | 370 |
/* all insn clear the x-flag except setf or clrf. */ |
371 |
env->pregs[SR_CCS] &= ~(env->cc_mask | X_FLAG);
|
|
371 |
env->pregs[PR_CCS] &= ~(env->cc_mask | X_FLAG);
|
|
372 | 372 |
flags &= env->cc_mask; |
373 |
env->pregs[SR_CCS] |= flags;
|
|
373 |
env->pregs[PR_CCS] |= flags;
|
|
374 | 374 |
RETURN(); |
375 | 375 |
} |
376 | 376 |
|
... | ... | |
778 | 778 |
|
779 | 779 |
void OPPROTO op_addxl_T0_C (void) |
780 | 780 |
{ |
781 |
if (env->pregs[SR_CCS] & X_FLAG)
|
|
782 |
T0 += !!(env->pregs[SR_CCS] & C_FLAG);
|
|
781 |
if (env->pregs[PR_CCS] & X_FLAG)
|
|
782 |
T0 += !!(env->pregs[PR_CCS] & C_FLAG);
|
|
783 | 783 |
RETURN(); |
784 | 784 |
} |
785 | 785 |
void OPPROTO op_subxl_T0_C (void) |
786 | 786 |
{ |
787 |
if (env->pregs[SR_CCS] & X_FLAG)
|
|
788 |
T0 -= !!(env->pregs[SR_CCS] & C_FLAG);
|
|
787 |
if (env->pregs[PR_CCS] & X_FLAG)
|
|
788 |
T0 -= !!(env->pregs[PR_CCS] & C_FLAG);
|
|
789 | 789 |
RETURN(); |
790 | 790 |
} |
791 | 791 |
void OPPROTO op_addl_T0_C (void) |
792 | 792 |
{ |
793 |
T0 += !!(env->pregs[SR_CCS] & C_FLAG);
|
|
793 |
T0 += !!(env->pregs[PR_CCS] & C_FLAG);
|
|
794 | 794 |
RETURN(); |
795 | 795 |
} |
796 | 796 |
void OPPROTO op_addl_T0_R (void) |
797 | 797 |
{ |
798 |
T0 += !!(env->pregs[SR_CCS] & R_FLAG);
|
|
798 |
T0 += !!(env->pregs[PR_CCS] & R_FLAG);
|
|
799 | 799 |
RETURN(); |
800 | 800 |
} |
801 | 801 |
|
802 | 802 |
void OPPROTO op_clr_R (void) |
803 | 803 |
{ |
804 |
env->pregs[SR_CCS] &= ~R_FLAG;
|
|
804 |
env->pregs[PR_CCS] &= ~R_FLAG;
|
|
805 | 805 |
RETURN(); |
806 | 806 |
} |
807 | 807 |
|
... | ... | |
880 | 880 |
|
881 | 881 |
tmp = t0 * t1; |
882 | 882 |
T0 = tmp & 0xffffffff; |
883 |
env->pregs[REG_MOF] = tmp >> 32;
|
|
883 |
env->pregs[PR_MOF] = tmp >> 32;
|
|
884 | 884 |
RETURN(); |
885 | 885 |
} |
886 | 886 |
|
... | ... | |
892 | 892 |
|
893 | 893 |
tmp = t0 * t1; |
894 | 894 |
T0 = tmp & 0xffffffff; |
895 |
env->pregs[REG_MOF] = tmp >> 32;
|
|
895 |
env->pregs[PR_MOF] = tmp >> 32;
|
|
896 | 896 |
RETURN(); |
897 | 897 |
} |
898 | 898 |
|
... | ... | |
1042 | 1042 |
} |
1043 | 1043 |
|
1044 | 1044 |
void OPPROTO op_tst_cc_eq (void) { |
1045 |
uint32_t flags = env->pregs[SR_CCS];
|
|
1045 |
uint32_t flags = env->pregs[PR_CCS];
|
|
1046 | 1046 |
int z_set; |
1047 | 1047 |
|
1048 | 1048 |
z_set = !!(flags & Z_FLAG); |
... | ... | |
1056 | 1056 |
} |
1057 | 1057 |
|
1058 | 1058 |
void OPPROTO op_tst_cc_ne (void) { |
1059 |
uint32_t flags = env->pregs[SR_CCS];
|
|
1059 |
uint32_t flags = env->pregs[PR_CCS];
|
|
1060 | 1060 |
int z_set; |
1061 | 1061 |
|
1062 | 1062 |
z_set = !!(flags & Z_FLAG); |
... | ... | |
1069 | 1069 |
} |
1070 | 1070 |
|
1071 | 1071 |
void OPPROTO op_tst_cc_cc (void) { |
1072 |
uint32_t flags = env->pregs[SR_CCS];
|
|
1072 |
uint32_t flags = env->pregs[PR_CCS];
|
|
1073 | 1073 |
int c_set; |
1074 | 1074 |
|
1075 | 1075 |
c_set = !!(flags & C_FLAG); |
... | ... | |
1077 | 1077 |
RETURN(); |
1078 | 1078 |
} |
1079 | 1079 |
void OPPROTO op_tst_cc_cs (void) { |
1080 |
uint32_t flags = env->pregs[SR_CCS];
|
|
1080 |
uint32_t flags = env->pregs[PR_CCS];
|
|
1081 | 1081 |
int c_set; |
1082 | 1082 |
|
1083 | 1083 |
c_set = !!(flags & C_FLAG); |
... | ... | |
1086 | 1086 |
} |
1087 | 1087 |
|
1088 | 1088 |
void OPPROTO op_tst_cc_vc (void) { |
1089 |
uint32_t flags = env->pregs[SR_CCS];
|
|
1089 |
uint32_t flags = env->pregs[PR_CCS];
|
|
1090 | 1090 |
int v_set; |
1091 | 1091 |
|
1092 | 1092 |
v_set = !!(flags & V_FLAG); |
... | ... | |
1094 | 1094 |
RETURN(); |
1095 | 1095 |
} |
1096 | 1096 |
void OPPROTO op_tst_cc_vs (void) { |
1097 |
uint32_t flags = env->pregs[SR_CCS];
|
|
1097 |
uint32_t flags = env->pregs[PR_CCS];
|
|
1098 | 1098 |
int v_set; |
1099 | 1099 |
|
1100 | 1100 |
v_set = !!(flags & V_FLAG); |
... | ... | |
1102 | 1102 |
RETURN(); |
1103 | 1103 |
} |
1104 | 1104 |
void OPPROTO op_tst_cc_pl (void) { |
1105 |
uint32_t flags = env->pregs[SR_CCS];
|
|
1105 |
uint32_t flags = env->pregs[PR_CCS];
|
|
1106 | 1106 |
int n_set; |
1107 | 1107 |
|
1108 | 1108 |
n_set = !!(flags & N_FLAG); |
... | ... | |
1115 | 1115 |
} |
1116 | 1116 |
|
1117 | 1117 |
void OPPROTO op_tst_cc_mi (void) { |
1118 |
uint32_t flags = env->pregs[SR_CCS];
|
|
1118 |
uint32_t flags = env->pregs[PR_CCS];
|
|
1119 | 1119 |
int n_set; |
1120 | 1120 |
|
1121 | 1121 |
n_set = !!(flags & N_FLAG); |
... | ... | |
1128 | 1128 |
} |
1129 | 1129 |
|
1130 | 1130 |
void OPPROTO op_tst_cc_ls (void) { |
1131 |
uint32_t flags = env->pregs[SR_CCS];
|
|
1131 |
uint32_t flags = env->pregs[PR_CCS];
|
|
1132 | 1132 |
int c_set; |
1133 | 1133 |
int z_set; |
1134 | 1134 |
|
... | ... | |
1138 | 1138 |
RETURN(); |
1139 | 1139 |
} |
1140 | 1140 |
void OPPROTO op_tst_cc_hi (void) { |
1141 |
uint32_t flags = env->pregs[SR_CCS];
|
|
1141 |
uint32_t flags = env->pregs[PR_CCS];
|
|
1142 | 1142 |
int z_set; |
1143 | 1143 |
int c_set; |
1144 | 1144 |
|
... | ... | |
1150 | 1150 |
} |
1151 | 1151 |
|
1152 | 1152 |
void OPPROTO op_tst_cc_ge (void) { |
1153 |
uint32_t flags = env->pregs[SR_CCS];
|
|
1153 |
uint32_t flags = env->pregs[PR_CCS];
|
|
1154 | 1154 |
int n_set; |
1155 | 1155 |
int v_set; |
1156 | 1156 |
|
... | ... | |
1166 | 1166 |
} |
1167 | 1167 |
|
1168 | 1168 |
void OPPROTO op_tst_cc_lt (void) { |
1169 |
uint32_t flags = env->pregs[SR_CCS];
|
|
1169 |
uint32_t flags = env->pregs[PR_CCS];
|
|
1170 | 1170 |
int n_set; |
1171 | 1171 |
int v_set; |
1172 | 1172 |
|
... | ... | |
1177 | 1177 |
} |
1178 | 1178 |
|
1179 | 1179 |
void OPPROTO op_tst_cc_gt (void) { |
1180 |
uint32_t flags = env->pregs[SR_CCS];
|
|
1180 |
uint32_t flags = env->pregs[PR_CCS];
|
|
1181 | 1181 |
int n_set; |
1182 | 1182 |
int v_set; |
1183 | 1183 |
int z_set; |
... | ... | |
1191 | 1191 |
} |
1192 | 1192 |
|
1193 | 1193 |
void OPPROTO op_tst_cc_le (void) { |
1194 |
uint32_t flags = env->pregs[SR_CCS];
|
|
1194 |
uint32_t flags = env->pregs[PR_CCS];
|
|
1195 | 1195 |
int n_set; |
1196 | 1196 |
int v_set; |
1197 | 1197 |
int z_set; |
... | ... | |
1204 | 1204 |
} |
1205 | 1205 |
|
1206 | 1206 |
void OPPROTO op_tst_cc_p (void) { |
1207 |
uint32_t flags = env->pregs[SR_CCS];
|
|
1207 |
uint32_t flags = env->pregs[PR_CCS];
|
|
1208 | 1208 |
int p_set; |
1209 | 1209 |
|
1210 | 1210 |
p_set = !!(flags & P_FLAG); |
... | ... | |
1224 | 1224 |
/* this one is used on every alu op, optimize it!. */ |
1225 | 1225 |
void OPPROTO op_goto_if_not_x (void) |
1226 | 1226 |
{ |
1227 |
if (env->pregs[SR_CCS] & X_FLAG)
|
|
1227 |
if (env->pregs[PR_CCS] & X_FLAG)
|
|
1228 | 1228 |
GOTO_LABEL_PARAM(1); |
1229 | 1229 |
RETURN(); |
1230 | 1230 |
} |
Also available in: Unified diff