Revision c905fdac target-mips/translate.c
b/target-mips/translate.c | ||
---|---|---|
7259 | 7259 |
check_cp1_64bitmode(ctx); |
7260 | 7260 |
{ |
7261 | 7261 |
TCGv t0 = tcg_temp_local_new(); |
7262 |
TCGv_i32 fp0 = tcg_temp_local_new_i32(); |
|
7263 |
TCGv_i32 fph0 = tcg_temp_local_new_i32(); |
|
7264 |
TCGv_i32 fp1 = tcg_temp_local_new_i32(); |
|
7265 |
TCGv_i32 fph1 = tcg_temp_local_new_i32(); |
|
7262 |
TCGv_i32 fp = tcg_temp_new_i32(); |
|
7263 |
TCGv_i32 fph = tcg_temp_new_i32(); |
|
7266 | 7264 |
int l1 = gen_new_label(); |
7267 | 7265 |
int l2 = gen_new_label(); |
7268 | 7266 |
|
7269 | 7267 |
gen_load_gpr(t0, fr); |
7270 | 7268 |
tcg_gen_andi_tl(t0, t0, 0x7); |
7271 |
gen_load_fpr32(fp0, fs); |
|
7272 |
gen_load_fpr32h(fph0, fs); |
|
7273 |
gen_load_fpr32(fp1, ft); |
|
7274 |
gen_load_fpr32h(fph1, ft); |
|
7275 | 7269 |
|
7276 | 7270 |
tcg_gen_brcondi_tl(TCG_COND_NE, t0, 0, l1); |
7277 |
gen_store_fpr32(fp0, fd); |
|
7278 |
gen_store_fpr32h(fph0, fd); |
|
7271 |
gen_load_fpr32(fp, fs); |
|
7272 |
gen_load_fpr32h(fph, fs); |
|
7273 |
gen_store_fpr32(fp, fd); |
|
7274 |
gen_store_fpr32h(fph, fd); |
|
7279 | 7275 |
tcg_gen_br(l2); |
7280 | 7276 |
gen_set_label(l1); |
7281 | 7277 |
tcg_gen_brcondi_tl(TCG_COND_NE, t0, 4, l2); |
7282 | 7278 |
tcg_temp_free(t0); |
7283 | 7279 |
#ifdef TARGET_WORDS_BIGENDIAN |
7284 |
gen_store_fpr32(fph1, fd); |
|
7285 |
gen_store_fpr32h(fp0, fd); |
|
7280 |
gen_load_fpr32(fp, fs); |
|
7281 |
gen_load_fpr32h(fph, ft); |
|
7282 |
gen_store_fpr32h(fp, fd); |
|
7283 |
gen_store_fpr32(fph, fd); |
|
7286 | 7284 |
#else |
7287 |
gen_store_fpr32(fph0, fd); |
|
7288 |
gen_store_fpr32h(fp1, fd); |
|
7285 |
gen_load_fpr32h(fph, fs); |
|
7286 |
gen_load_fpr32(fp, ft); |
|
7287 |
gen_store_fpr32(fph, fd); |
|
7288 |
gen_store_fpr32h(fp, fd); |
|
7289 | 7289 |
#endif |
7290 | 7290 |
gen_set_label(l2); |
7291 |
tcg_temp_free_i32(fp0); |
|
7292 |
tcg_temp_free_i32(fph0); |
|
7293 |
tcg_temp_free_i32(fp1); |
|
7294 |
tcg_temp_free_i32(fph1); |
|
7291 |
tcg_temp_free_i32(fp); |
|
7292 |
tcg_temp_free_i32(fph); |
|
7295 | 7293 |
} |
7296 | 7294 |
opn = "alnv.ps"; |
7297 | 7295 |
break; |
Also available in: Unified diff