translate.c (86b82fe021f46ed4501b16132f7e3fccd0a1ad5d) translate.c (d38258003138a42b0aaaf0e1053c7925e54a1635)
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

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

4072 gen_helper_restored(tcg_env);
4073 }
4074 return advance_pc(dc);
4075}
4076
4077TRANS(SAVED, 64, do_saved_restored, true)
4078TRANS(RESTORED, 64, do_saved_restored, false)
4079
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

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

4072 gen_helper_restored(tcg_env);
4073 }
4074 return advance_pc(dc);
4075}
4076
4077TRANS(SAVED, 64, do_saved_restored, true)
4078TRANS(RESTORED, 64, do_saved_restored, false)
4079
4080static bool trans_NOP(DisasContext *dc, arg_NOP *a)
4081{
4082 return advance_pc(dc);
4083}
4084
4080static bool trans_NOP_v7(DisasContext *dc, arg_NOP_v7 *a)
4081{
4082 /*
4083 * TODO: Need a feature bit for sparcv8.
4084 * In the meantime, treat all 32-bit cpus like sparcv7.
4085 */
4086 if (avail_32(dc)) {
4087 return advance_pc(dc);

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

4452
4453 gen_helper_restore(tcg_env);
4454 dc->npc = DYNAMIC_PC_LOOKUP;
4455 return true;
4456}
4457
4458TRANS(RETURN, 64, do_add_special, a, do_return)
4459
4085static bool trans_NOP_v7(DisasContext *dc, arg_NOP_v7 *a)
4086{
4087 /*
4088 * TODO: Need a feature bit for sparcv8.
4089 * In the meantime, treat all 32-bit cpus like sparcv7.
4090 */
4091 if (avail_32(dc)) {
4092 return advance_pc(dc);

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

4457
4458 gen_helper_restore(tcg_env);
4459 dc->npc = DYNAMIC_PC_LOOKUP;
4460 return true;
4461}
4462
4463TRANS(RETURN, 64, do_add_special, a, do_return)
4464
4465static bool do_save(DisasContext *dc, int rd, TCGv src)
4466{
4467 gen_helper_save(tcg_env);
4468 gen_store_gpr(dc, rd, src);
4469 return advance_pc(dc);
4470}
4471
4472TRANS(SAVE, ALL, do_add_special, a, do_save)
4473
4474static bool do_restore(DisasContext *dc, int rd, TCGv src)
4475{
4476 gen_helper_restore(tcg_env);
4477 gen_store_gpr(dc, rd, src);
4478 return advance_pc(dc);
4479}
4480
4481TRANS(RESTORE, ALL, do_add_special, a, do_restore)
4482
4460#define CHECK_IU_FEATURE(dc, FEATURE) \
4461 if (!((dc)->def->features & CPU_FEATURE_ ## FEATURE)) \
4462 goto illegal_insn;
4463#define CHECK_FPU_FEATURE(dc, FEATURE) \
4464 if (!((dc)->def->features & CPU_FEATURE_ ## FEATURE)) \
4465 goto nfpu_insn;
4466
4467/* before an instruction, dc->pc must be static */

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

5267 tcg_gen_add_tl(cpu_tmp0, cpu_src1, cpu_src2);
5268 } else {
5269 tcg_gen_mov_tl(cpu_tmp0, cpu_src1);
5270 }
5271 }
5272 switch (xop) {
5273 case 0x38: /* jmpl */
5274 case 0x39: /* rett, V9 return */
4483#define CHECK_IU_FEATURE(dc, FEATURE) \
4484 if (!((dc)->def->features & CPU_FEATURE_ ## FEATURE)) \
4485 goto illegal_insn;
4486#define CHECK_FPU_FEATURE(dc, FEATURE) \
4487 if (!((dc)->def->features & CPU_FEATURE_ ## FEATURE)) \
4488 goto nfpu_insn;
4489
4490/* before an instruction, dc->pc must be static */

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

5290 tcg_gen_add_tl(cpu_tmp0, cpu_src1, cpu_src2);
5291 } else {
5292 tcg_gen_mov_tl(cpu_tmp0, cpu_src1);
5293 }
5294 }
5295 switch (xop) {
5296 case 0x38: /* jmpl */
5297 case 0x39: /* rett, V9 return */
5275 g_assert_not_reached(); /* in decode tree */
5276 case 0x3b: /* flush */
5277 /* nop */
5278 break;
5298 case 0x3b: /* flush */
5279 case 0x3c: /* save */
5299 case 0x3c: /* save */
5280 gen_helper_save(tcg_env);
5281 gen_store_gpr(dc, rd, cpu_tmp0);
5282 break;
5283 case 0x3d: /* restore */
5300 case 0x3d: /* restore */
5284 gen_helper_restore(tcg_env);
5285 gen_store_gpr(dc, rd, cpu_tmp0);
5286 break;
5301 g_assert_not_reached(); /* in decode tree */
5287#if !defined(CONFIG_USER_ONLY) && defined(TARGET_SPARC64)
5288 case 0x3e: /* V9 done/retry */
5289 {
5290 switch (rd) {
5291 case 0:
5292 if (!supervisor(dc))
5293 goto priv_insn;
5294 dc->npc = DYNAMIC_PC;

--- 712 unchanged lines hidden ---
5302#if !defined(CONFIG_USER_ONLY) && defined(TARGET_SPARC64)
5303 case 0x3e: /* V9 done/retry */
5304 {
5305 switch (rd) {
5306 case 0:
5307 if (!supervisor(dc))
5308 goto priv_insn;
5309 dc->npc = DYNAMIC_PC;

--- 712 unchanged lines hidden ---