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 --- |