translate.c (9157dccc7e71f7c94581c38f38acbef9a21bbe9a) translate.c (a859602c746baf4892cc8ca1ce003e92411d1716)
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

--- 31 unchanged lines hidden (view full) ---

40# define gen_helper_rdasr17(D, E) qemu_build_not_reached()
41# define gen_helper_rett(E) qemu_build_not_reached()
42# define gen_helper_power_down(E) qemu_build_not_reached()
43# define gen_helper_wrpsr(E, S) qemu_build_not_reached()
44#else
45# define gen_helper_clear_softint(E, S) qemu_build_not_reached()
46# define gen_helper_done(E) qemu_build_not_reached()
47# define gen_helper_flushw(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

--- 31 unchanged lines hidden (view full) ---

40# define gen_helper_rdasr17(D, E) qemu_build_not_reached()
41# define gen_helper_rett(E) qemu_build_not_reached()
42# define gen_helper_power_down(E) qemu_build_not_reached()
43# define gen_helper_wrpsr(E, S) qemu_build_not_reached()
44#else
45# define gen_helper_clear_softint(E, S) qemu_build_not_reached()
46# define gen_helper_done(E) qemu_build_not_reached()
47# define gen_helper_flushw(E) qemu_build_not_reached()
48# define gen_helper_fmul8x16a(D, S1, S2) qemu_build_not_reached()
48# define gen_helper_rdccr(D, E) qemu_build_not_reached()
49# define gen_helper_rdcwp(D, E) qemu_build_not_reached()
50# define gen_helper_restored(E) qemu_build_not_reached()
51# define gen_helper_retry(E) qemu_build_not_reached()
52# define gen_helper_saved(E) qemu_build_not_reached()
53# define gen_helper_set_softint(E, S) qemu_build_not_reached()
54# define gen_helper_tick_get_count(D, E, T, C) qemu_build_not_reached()
55# define gen_helper_tick_set_count(P, S) qemu_build_not_reached()

--- 11 unchanged lines hidden (view full) ---

67# define gen_helper_fcmple16 ({ qemu_build_not_reached(); NULL; })
68# define gen_helper_fcmple32 ({ qemu_build_not_reached(); NULL; })
69# define gen_helper_fcmpne16 ({ qemu_build_not_reached(); NULL; })
70# define gen_helper_fcmpne32 ({ qemu_build_not_reached(); NULL; })
71# define gen_helper_fdtox ({ qemu_build_not_reached(); NULL; })
72# define gen_helper_fexpand ({ qemu_build_not_reached(); NULL; })
73# define gen_helper_fmul8sux16 ({ qemu_build_not_reached(); NULL; })
74# define gen_helper_fmul8ulx16 ({ qemu_build_not_reached(); NULL; })
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()

--- 11 unchanged lines hidden (view full) ---

68# define gen_helper_fcmple16 ({ qemu_build_not_reached(); NULL; })
69# define gen_helper_fcmple32 ({ qemu_build_not_reached(); NULL; })
70# define gen_helper_fcmpne16 ({ qemu_build_not_reached(); NULL; })
71# define gen_helper_fcmpne32 ({ qemu_build_not_reached(); NULL; })
72# define gen_helper_fdtox ({ qemu_build_not_reached(); NULL; })
73# define gen_helper_fexpand ({ qemu_build_not_reached(); NULL; })
74# define gen_helper_fmul8sux16 ({ qemu_build_not_reached(); NULL; })
75# define gen_helper_fmul8ulx16 ({ qemu_build_not_reached(); NULL; })
75# define gen_helper_fmul8x16al ({ qemu_build_not_reached(); NULL; })
76# define gen_helper_fmul8x16au ({ qemu_build_not_reached(); NULL; })
77# define gen_helper_fmul8x16 ({ qemu_build_not_reached(); NULL; })
78# define gen_helper_fmuld8sux16 ({ qemu_build_not_reached(); NULL; })
79# define gen_helper_fmuld8ulx16 ({ qemu_build_not_reached(); NULL; })
80# define gen_helper_fpmerge ({ qemu_build_not_reached(); NULL; })
81# define gen_helper_fqtox ({ qemu_build_not_reached(); NULL; })
82# define gen_helper_fstox ({ qemu_build_not_reached(); NULL; })
83# define gen_helper_fxtod ({ qemu_build_not_reached(); NULL; })
84# define gen_helper_fxtoq ({ qemu_build_not_reached(); NULL; })

--- 629 unchanged lines hidden (view full) ---

714{
715#ifdef TARGET_SPARC64
716 gen_helper_bshuffle(dst, cpu_gsr, src1, src2);
717#else
718 g_assert_not_reached();
719#endif
720}
721
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; })
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; })

--- 629 unchanged lines hidden (view full) ---

713{
714#ifdef TARGET_SPARC64
715 gen_helper_bshuffle(dst, cpu_gsr, src1, src2);
716#else
717 g_assert_not_reached();
718#endif
719}
720
721static void gen_op_fmul8x16al(TCGv_i64 dst, TCGv_i32 src1, TCGv_i32 src2)
722{
723 tcg_gen_ext16s_i32(src2, src2);
724 gen_helper_fmul8x16a(dst, src1, src2);
725}
726
727static void gen_op_fmul8x16au(TCGv_i64 dst, TCGv_i32 src1, TCGv_i32 src2)
728{
729 tcg_gen_sari_i32(src2, src2, 16);
730 gen_helper_fmul8x16a(dst, src1, src2);
731}
732
722static void finishing_insn(DisasContext *dc)
723{
724 /*
725 * From here, there is no future path through an unwinding exception.
726 * If the current insn cannot raise an exception, the computation of
727 * cpu_cond may be able to be elided.
728 */
729 if (dc->cpu_cond_live) {

--- 3848 unchanged lines hidden (view full) ---

4578 return advance_pc(dc);
4579}
4580
4581TRANS(FADDs, ALL, do_env_fff, a, gen_helper_fadds)
4582TRANS(FSUBs, ALL, do_env_fff, a, gen_helper_fsubs)
4583TRANS(FMULs, ALL, do_env_fff, a, gen_helper_fmuls)
4584TRANS(FDIVs, ALL, do_env_fff, a, gen_helper_fdivs)
4585
733static void finishing_insn(DisasContext *dc)
734{
735 /*
736 * From here, there is no future path through an unwinding exception.
737 * If the current insn cannot raise an exception, the computation of
738 * cpu_cond may be able to be elided.
739 */
740 if (dc->cpu_cond_live) {

--- 3848 unchanged lines hidden (view full) ---

4589 return advance_pc(dc);
4590}
4591
4592TRANS(FADDs, ALL, do_env_fff, a, gen_helper_fadds)
4593TRANS(FSUBs, ALL, do_env_fff, a, gen_helper_fsubs)
4594TRANS(FMULs, ALL, do_env_fff, a, gen_helper_fmuls)
4595TRANS(FDIVs, ALL, do_env_fff, a, gen_helper_fdivs)
4596
4597static bool do_dff(DisasContext *dc, arg_r_r_r *a,
4598 void (*func)(TCGv_i64, TCGv_i32, TCGv_i32))
4599{
4600 TCGv_i64 dst;
4601 TCGv_i32 src1, src2;
4602
4603 if (gen_trap_ifnofpu(dc)) {
4604 return true;
4605 }
4606
4607 dst = gen_dest_fpr_D(dc, a->rd);
4608 src1 = gen_load_fpr_F(dc, a->rs1);
4609 src2 = gen_load_fpr_F(dc, a->rs2);
4610 func(dst, src1, src2);
4611 gen_store_fpr_D(dc, a->rd, dst);
4612 return advance_pc(dc);
4613}
4614
4615TRANS(FMUL8x16AU, VIS1, do_dff, a, gen_op_fmul8x16au)
4616TRANS(FMUL8x16AL, VIS1, do_dff, a, gen_op_fmul8x16al)
4617
4586static bool do_dfd(DisasContext *dc, arg_r_r_r *a,
4587 void (*func)(TCGv_i64, TCGv_i32, TCGv_i64))
4588{
4589 TCGv_i64 dst, src2;
4590 TCGv_i32 src1;
4591
4592 if (gen_trap_ifnofpu(dc)) {
4593 return true;

--- 21 unchanged lines hidden (view full) ---

4615 dst = gen_dest_fpr_D(dc, a->rd);
4616 src1 = gen_load_fpr_D(dc, a->rs1);
4617 src2 = gen_load_fpr_D(dc, a->rs2);
4618 func(dst, src1, src2);
4619 gen_store_fpr_D(dc, a->rd, dst);
4620 return advance_pc(dc);
4621}
4622
4618static bool do_dfd(DisasContext *dc, arg_r_r_r *a,
4619 void (*func)(TCGv_i64, TCGv_i32, TCGv_i64))
4620{
4621 TCGv_i64 dst, src2;
4622 TCGv_i32 src1;
4623
4624 if (gen_trap_ifnofpu(dc)) {
4625 return true;

--- 21 unchanged lines hidden (view full) ---

4647 dst = gen_dest_fpr_D(dc, a->rd);
4648 src1 = gen_load_fpr_D(dc, a->rs1);
4649 src2 = gen_load_fpr_D(dc, a->rs2);
4650 func(dst, src1, src2);
4651 gen_store_fpr_D(dc, a->rd, dst);
4652 return advance_pc(dc);
4653}
4654
4623TRANS(FMUL8x16AU, VIS1, do_ddd, a, gen_helper_fmul8x16au)
4624TRANS(FMUL8x16AL, VIS1, do_ddd, a, gen_helper_fmul8x16al)
4625TRANS(FMUL8SUx16, VIS1, do_ddd, a, gen_helper_fmul8sux16)
4626TRANS(FMUL8ULx16, VIS1, do_ddd, a, gen_helper_fmul8ulx16)
4627TRANS(FMULD8SUx16, VIS1, do_ddd, a, gen_helper_fmuld8sux16)
4628TRANS(FMULD8ULx16, VIS1, do_ddd, a, gen_helper_fmuld8ulx16)
4629TRANS(FPMERGE, VIS1, do_ddd, a, gen_helper_fpmerge)
4630
4631TRANS(FPADD16, VIS1, do_ddd, a, tcg_gen_vec_add16_i64)
4632TRANS(FPADD32, VIS1, do_ddd, a, tcg_gen_vec_add32_i64)

--- 573 unchanged lines hidden ---
4655TRANS(FMUL8SUx16, VIS1, do_ddd, a, gen_helper_fmul8sux16)
4656TRANS(FMUL8ULx16, VIS1, do_ddd, a, gen_helper_fmul8ulx16)
4657TRANS(FMULD8SUx16, VIS1, do_ddd, a, gen_helper_fmuld8sux16)
4658TRANS(FMULD8ULx16, VIS1, do_ddd, a, gen_helper_fmuld8ulx16)
4659TRANS(FPMERGE, VIS1, do_ddd, a, gen_helper_fpmerge)
4660
4661TRANS(FPADD16, VIS1, do_ddd, a, tcg_gen_vec_add16_i64)
4662TRANS(FPADD32, VIS1, do_ddd, a, tcg_gen_vec_add32_i64)

--- 573 unchanged lines hidden ---