translate.c (33ec424535e2e8e5fa1fd78f691eb9c3c68fd449) | translate.c (daf457d40f92dd5f957b206cc86d95d9c42350c6) |
---|---|
1/* 2 SPARC translation 3 4 Copyright (C) 2003 Thomas M. Ogrisegg <tom@fnord.at> 5 Copyright (C) 2003-2005 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 --- 29 unchanged lines hidden (view full) --- 38#ifdef TARGET_SPARC64 39# define gen_helper_rdpsr(D, E) qemu_build_not_reached() 40# define gen_helper_rett(E) qemu_build_not_reached() 41# define gen_helper_power_down(E) qemu_build_not_reached() 42# define gen_helper_wrpsr(E, S) qemu_build_not_reached() 43#else 44# define gen_helper_clear_softint(E, S) qemu_build_not_reached() 45# define gen_helper_done(E) qemu_build_not_reached() | 1/* 2 SPARC translation 3 4 Copyright (C) 2003 Thomas M. Ogrisegg <tom@fnord.at> 5 Copyright (C) 2003-2005 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 --- 29 unchanged lines hidden (view full) --- 38#ifdef TARGET_SPARC64 39# define gen_helper_rdpsr(D, E) qemu_build_not_reached() 40# define gen_helper_rett(E) qemu_build_not_reached() 41# define gen_helper_power_down(E) qemu_build_not_reached() 42# define gen_helper_wrpsr(E, S) qemu_build_not_reached() 43#else 44# define gen_helper_clear_softint(E, S) qemu_build_not_reached() 45# define gen_helper_done(E) qemu_build_not_reached() |
46# define gen_helper_fabsd(D, S) qemu_build_not_reached() | |
47# define gen_helper_flushw(E) qemu_build_not_reached() | 46# define gen_helper_flushw(E) qemu_build_not_reached() |
48# define gen_helper_fnegd(D, S) qemu_build_not_reached() | |
49# define gen_helper_rdccr(D, E) qemu_build_not_reached() 50# define gen_helper_rdcwp(D, E) qemu_build_not_reached() 51# define gen_helper_restored(E) qemu_build_not_reached() 52# define gen_helper_retry(E) qemu_build_not_reached() 53# define gen_helper_saved(E) qemu_build_not_reached() 54# define gen_helper_set_softint(E, S) qemu_build_not_reached() 55# define gen_helper_tick_get_count(D, E, T, C) qemu_build_not_reached() 56# define gen_helper_tick_set_count(P, S) qemu_build_not_reached() 57# define gen_helper_tick_set_limit(P, S) qemu_build_not_reached() 58# define gen_helper_wrccr(E, S) qemu_build_not_reached() 59# define gen_helper_wrcwp(E, S) qemu_build_not_reached() 60# define gen_helper_wrgl(E, S) qemu_build_not_reached() 61# define gen_helper_write_softint(E, S) qemu_build_not_reached() 62# define gen_helper_wrpil(E, S) qemu_build_not_reached() 63# define gen_helper_wrpstate(E, S) qemu_build_not_reached() | 47# define gen_helper_rdccr(D, E) qemu_build_not_reached() 48# define gen_helper_rdcwp(D, E) qemu_build_not_reached() 49# define gen_helper_restored(E) qemu_build_not_reached() 50# define gen_helper_retry(E) qemu_build_not_reached() 51# define gen_helper_saved(E) qemu_build_not_reached() 52# define gen_helper_set_softint(E, S) qemu_build_not_reached() 53# define gen_helper_tick_get_count(D, E, T, C) qemu_build_not_reached() 54# define gen_helper_tick_set_count(P, S) qemu_build_not_reached() 55# define gen_helper_tick_set_limit(P, S) qemu_build_not_reached() 56# define gen_helper_wrccr(E, S) qemu_build_not_reached() 57# define gen_helper_wrcwp(E, S) qemu_build_not_reached() 58# define gen_helper_wrgl(E, S) qemu_build_not_reached() 59# define gen_helper_write_softint(E, S) qemu_build_not_reached() 60# define gen_helper_wrpil(E, S) qemu_build_not_reached() 61# define gen_helper_wrpstate(E, S) qemu_build_not_reached() |
64# define gen_helper_fabsq ({ qemu_build_not_reached(); NULL; }) | |
65# define gen_helper_fcmpeq16 ({ qemu_build_not_reached(); NULL; }) 66# define gen_helper_fcmpeq32 ({ qemu_build_not_reached(); NULL; }) 67# define gen_helper_fcmpgt16 ({ qemu_build_not_reached(); NULL; }) 68# define gen_helper_fcmpgt32 ({ qemu_build_not_reached(); NULL; }) 69# define gen_helper_fcmple16 ({ qemu_build_not_reached(); NULL; }) 70# define gen_helper_fcmple32 ({ qemu_build_not_reached(); NULL; }) 71# define gen_helper_fcmpne16 ({ qemu_build_not_reached(); NULL; }) 72# define gen_helper_fcmpne32 ({ qemu_build_not_reached(); NULL; }) 73# define gen_helper_fdtox ({ qemu_build_not_reached(); NULL; }) 74# define gen_helper_fexpand ({ qemu_build_not_reached(); NULL; }) 75# define gen_helper_fmul8sux16 ({ qemu_build_not_reached(); NULL; }) 76# define gen_helper_fmul8ulx16 ({ qemu_build_not_reached(); NULL; }) 77# define gen_helper_fmul8x16al ({ qemu_build_not_reached(); NULL; }) 78# define gen_helper_fmul8x16au ({ qemu_build_not_reached(); NULL; }) 79# define gen_helper_fmul8x16 ({ qemu_build_not_reached(); NULL; }) 80# define gen_helper_fmuld8sux16 ({ qemu_build_not_reached(); NULL; }) 81# define gen_helper_fmuld8ulx16 ({ qemu_build_not_reached(); NULL; }) | 62# define gen_helper_fcmpeq16 ({ qemu_build_not_reached(); NULL; }) 63# define gen_helper_fcmpeq32 ({ qemu_build_not_reached(); NULL; }) 64# define gen_helper_fcmpgt16 ({ qemu_build_not_reached(); NULL; }) 65# define gen_helper_fcmpgt32 ({ qemu_build_not_reached(); NULL; }) 66# define gen_helper_fcmple16 ({ qemu_build_not_reached(); NULL; }) 67# define gen_helper_fcmple32 ({ qemu_build_not_reached(); NULL; }) 68# define gen_helper_fcmpne16 ({ qemu_build_not_reached(); NULL; }) 69# define gen_helper_fcmpne32 ({ qemu_build_not_reached(); NULL; }) 70# define gen_helper_fdtox ({ qemu_build_not_reached(); NULL; }) 71# define gen_helper_fexpand ({ qemu_build_not_reached(); NULL; }) 72# define gen_helper_fmul8sux16 ({ qemu_build_not_reached(); NULL; }) 73# define gen_helper_fmul8ulx16 ({ qemu_build_not_reached(); NULL; }) 74# define gen_helper_fmul8x16al ({ qemu_build_not_reached(); NULL; }) 75# define gen_helper_fmul8x16au ({ qemu_build_not_reached(); NULL; }) 76# define gen_helper_fmul8x16 ({ qemu_build_not_reached(); NULL; }) 77# define gen_helper_fmuld8sux16 ({ qemu_build_not_reached(); NULL; }) 78# define gen_helper_fmuld8ulx16 ({ qemu_build_not_reached(); NULL; }) |
82# define gen_helper_fnegq ({ qemu_build_not_reached(); NULL; }) | |
83# define gen_helper_fpmerge ({ qemu_build_not_reached(); NULL; }) 84# define gen_helper_fqtox ({ qemu_build_not_reached(); NULL; }) 85# define gen_helper_fstox ({ qemu_build_not_reached(); NULL; }) 86# define gen_helper_fxtod ({ qemu_build_not_reached(); NULL; }) 87# define gen_helper_fxtoq ({ qemu_build_not_reached(); NULL; }) 88# define gen_helper_fxtos ({ qemu_build_not_reached(); NULL; }) 89# define gen_helper_pdist ({ qemu_build_not_reached(); NULL; }) 90# define FSR_LDXFSR_MASK 0 --- 1143 unchanged lines hidden (view full) --- 1234{ 1235 gen_op_clear_ieee_excp_and_FTT(); 1236 tcg_gen_mov_i32(dst, src); 1237} 1238 1239static void gen_op_fnegs(TCGv_i32 dst, TCGv_i32 src) 1240{ 1241 gen_op_clear_ieee_excp_and_FTT(); | 79# define gen_helper_fpmerge ({ qemu_build_not_reached(); NULL; }) 80# define gen_helper_fqtox ({ qemu_build_not_reached(); NULL; }) 81# define gen_helper_fstox ({ qemu_build_not_reached(); NULL; }) 82# define gen_helper_fxtod ({ qemu_build_not_reached(); NULL; }) 83# define gen_helper_fxtoq ({ qemu_build_not_reached(); NULL; }) 84# define gen_helper_fxtos ({ qemu_build_not_reached(); NULL; }) 85# define gen_helper_pdist ({ qemu_build_not_reached(); NULL; }) 86# define FSR_LDXFSR_MASK 0 --- 1143 unchanged lines hidden (view full) --- 1230{ 1231 gen_op_clear_ieee_excp_and_FTT(); 1232 tcg_gen_mov_i32(dst, src); 1233} 1234 1235static void gen_op_fnegs(TCGv_i32 dst, TCGv_i32 src) 1236{ 1237 gen_op_clear_ieee_excp_and_FTT(); |
1242 gen_helper_fnegs(dst, src); | 1238 tcg_gen_xori_i32(dst, src, 1u << 31); |
1243} 1244 1245static void gen_op_fabss(TCGv_i32 dst, TCGv_i32 src) 1246{ 1247 gen_op_clear_ieee_excp_and_FTT(); | 1239} 1240 1241static void gen_op_fabss(TCGv_i32 dst, TCGv_i32 src) 1242{ 1243 gen_op_clear_ieee_excp_and_FTT(); |
1248 gen_helper_fabss(dst, src); | 1244 tcg_gen_andi_i32(dst, src, ~(1u << 31)); |
1249} 1250 1251static void gen_op_fmovd(TCGv_i64 dst, TCGv_i64 src) 1252{ 1253 gen_op_clear_ieee_excp_and_FTT(); 1254 tcg_gen_mov_i64(dst, src); 1255} 1256 1257static void gen_op_fnegd(TCGv_i64 dst, TCGv_i64 src) 1258{ 1259 gen_op_clear_ieee_excp_and_FTT(); | 1245} 1246 1247static void gen_op_fmovd(TCGv_i64 dst, TCGv_i64 src) 1248{ 1249 gen_op_clear_ieee_excp_and_FTT(); 1250 tcg_gen_mov_i64(dst, src); 1251} 1252 1253static void gen_op_fnegd(TCGv_i64 dst, TCGv_i64 src) 1254{ 1255 gen_op_clear_ieee_excp_and_FTT(); |
1260 gen_helper_fnegd(dst, src); | 1256 tcg_gen_xori_i64(dst, src, 1ull << 63); |
1261} 1262 1263static void gen_op_fabsd(TCGv_i64 dst, TCGv_i64 src) 1264{ 1265 gen_op_clear_ieee_excp_and_FTT(); | 1257} 1258 1259static void gen_op_fabsd(TCGv_i64 dst, TCGv_i64 src) 1260{ 1261 gen_op_clear_ieee_excp_and_FTT(); |
1266 gen_helper_fabsd(dst, src); | 1262 tcg_gen_andi_i64(dst, src, ~(1ull << 63)); |
1267} 1268 | 1263} 1264 |
1265static void gen_op_fnegq(TCGv_i128 dst, TCGv_i128 src) 1266{ 1267 TCGv_i64 l = tcg_temp_new_i64(); 1268 TCGv_i64 h = tcg_temp_new_i64(); 1269 1270 tcg_gen_extr_i128_i64(l, h, src); 1271 tcg_gen_xori_i64(h, h, 1ull << 63); 1272 tcg_gen_concat_i64_i128(dst, l, h); 1273} 1274 1275static void gen_op_fabsq(TCGv_i128 dst, TCGv_i128 src) 1276{ 1277 TCGv_i64 l = tcg_temp_new_i64(); 1278 TCGv_i64 h = tcg_temp_new_i64(); 1279 1280 tcg_gen_extr_i128_i64(l, h, src); 1281 tcg_gen_andi_i64(h, h, ~(1ull << 63)); 1282 tcg_gen_concat_i64_i128(dst, l, h); 1283} 1284 |
|
1269#ifdef TARGET_SPARC64 1270static void gen_op_fcmps(int fccno, TCGv_i32 r_rs1, TCGv_i32 r_rs2) 1271{ 1272 switch (fccno) { 1273 case 0: 1274 gen_helper_fcmps(cpu_fsr, tcg_env, r_rs1, r_rs2); 1275 break; 1276 case 1: --- 3347 unchanged lines hidden (view full) --- 4624 gen_store_fpr_D(dc, a->rd, dst); 4625 return advance_pc(dc); 4626} 4627 4628TRANS(FiTOd, ALL, do_env_df, a, gen_helper_fitod) 4629TRANS(FsTOd, ALL, do_env_df, a, gen_helper_fstod) 4630TRANS(FsTOx, 64, do_env_df, a, gen_helper_fstox) 4631 | 1285#ifdef TARGET_SPARC64 1286static void gen_op_fcmps(int fccno, TCGv_i32 r_rs1, TCGv_i32 r_rs2) 1287{ 1288 switch (fccno) { 1289 case 0: 1290 gen_helper_fcmps(cpu_fsr, tcg_env, r_rs1, r_rs2); 1291 break; 1292 case 1: --- 3347 unchanged lines hidden (view full) --- 4640 gen_store_fpr_D(dc, a->rd, dst); 4641 return advance_pc(dc); 4642} 4643 4644TRANS(FiTOd, ALL, do_env_df, a, gen_helper_fitod) 4645TRANS(FsTOd, ALL, do_env_df, a, gen_helper_fstod) 4646TRANS(FsTOx, 64, do_env_df, a, gen_helper_fstox) 4647 |
4632static bool trans_FMOVq(DisasContext *dc, arg_FMOVq *a) | 4648static bool do_qq(DisasContext *dc, arg_r_r *a, 4649 void (*func)(TCGv_i128, TCGv_i128)) |
4633{ 4634 TCGv_i128 t; 4635 | 4650{ 4651 TCGv_i128 t; 4652 |
4636 if (!avail_64(dc)) { 4637 return false; 4638 } | |
4639 if (gen_trap_ifnofpu(dc)) { 4640 return true; 4641 } 4642 if (gen_trap_float128(dc)) { 4643 return true; 4644 } 4645 4646 gen_op_clear_ieee_excp_and_FTT(); 4647 t = gen_load_fpr_Q(dc, a->rs); | 4653 if (gen_trap_ifnofpu(dc)) { 4654 return true; 4655 } 4656 if (gen_trap_float128(dc)) { 4657 return true; 4658 } 4659 4660 gen_op_clear_ieee_excp_and_FTT(); 4661 t = gen_load_fpr_Q(dc, a->rs); |
4662 func(t, t); |
|
4648 gen_store_fpr_Q(dc, a->rd, t); 4649 return advance_pc(dc); 4650} 4651 | 4663 gen_store_fpr_Q(dc, a->rd, t); 4664 return advance_pc(dc); 4665} 4666 |
4652static bool do_qq(DisasContext *dc, arg_r_r *a, 4653 void (*func)(TCGv_env)) 4654{ 4655 if (gen_trap_ifnofpu(dc)) { 4656 return true; 4657 } 4658 if (gen_trap_float128(dc)) { 4659 return true; 4660 } | 4667TRANS(FMOVq, 64, do_qq, a, tcg_gen_mov_i128) 4668TRANS(FNEGq, 64, do_qq, a, gen_op_fnegq) 4669TRANS(FABSq, 64, do_qq, a, gen_op_fabsq) |
4661 | 4670 |
4662 gen_op_clear_ieee_excp_and_FTT(); 4663 gen_op_load_fpr_QT1(QFPREG(a->rs)); 4664 func(tcg_env); 4665 gen_op_store_QT0_fpr(QFPREG(a->rd)); 4666 gen_update_fprs_dirty(dc, QFPREG(a->rd)); 4667 return advance_pc(dc); 4668} 4669 4670TRANS(FNEGq, 64, do_qq, a, gen_helper_fnegq) 4671TRANS(FABSq, 64, do_qq, a, gen_helper_fabsq) 4672 | |
4673static bool do_env_qq(DisasContext *dc, arg_r_r *a, 4674 void (*func)(TCGv_env)) 4675{ 4676 if (gen_trap_ifnofpu(dc)) { 4677 return true; 4678 } 4679 if (gen_trap_float128(dc)) { 4680 return true; --- 761 unchanged lines hidden --- | 4671static bool do_env_qq(DisasContext *dc, arg_r_r *a, 4672 void (*func)(TCGv_env)) 4673{ 4674 if (gen_trap_ifnofpu(dc)) { 4675 return true; 4676 } 4677 if (gen_trap_float128(dc)) { 4678 return true; --- 761 unchanged lines hidden --- |