Revision d34defbc
b/target-ppc/translate_init.c | ||
---|---|---|
448 | 448 |
} |
449 | 449 |
#endif |
450 | 450 |
|
451 |
/* SPE specific registers */ |
|
452 |
static void spr_read_spefscr (void *opaque, int gprn, int sprn) |
|
453 |
{ |
|
454 |
TCGv_i32 t0 = tcg_temp_new_i32(); |
|
455 |
tcg_gen_ld_tl(t0, cpu_env, offsetof(CPUState, spe_fscr)); |
|
456 |
tcg_gen_extu_i32_tl(cpu_gpr[gprn], t0); |
|
457 |
tcg_temp_free_i32(t0); |
|
458 |
} |
|
459 |
|
|
460 |
static void spr_write_spefscr (void *opaque, int sprn, int gprn) |
|
461 |
{ |
|
462 |
TCGv_i32 t0 = tcg_temp_new_i32(); |
|
463 |
tcg_gen_trunc_tl_i32(t0, cpu_gpr[gprn]); |
|
464 |
tcg_gen_st_tl(t0, cpu_env, offsetof(CPUState, spe_fscr)); |
|
465 |
tcg_temp_free_i32(t0); |
|
466 |
} |
|
467 |
|
|
451 | 468 |
#if !defined(CONFIG_USER_ONLY) |
452 | 469 |
/* Callback used to write the exception vector base */ |
453 | 470 |
static void spr_write_excp_prefix (void *opaque, int sprn, int gprn) |
... | ... | |
2565 | 2582 |
* HSRR1 => SPR 315 (Power 2.04 hypv) |
2566 | 2583 |
* LPCR => SPR 316 (970) |
2567 | 2584 |
* LPIDR => SPR 317 (970) |
2568 |
* SPEFSCR => SPR 512 (Power 2.04 emb) |
|
2569 | 2585 |
* EPR => SPR 702 (Power 2.04 emb) |
2570 | 2586 |
* perf => 768-783 (Power 2.04) |
2571 | 2587 |
* perf => 784-799 (Power 2.04) |
... | ... | |
4021 | 4037 |
gen_spr_BookE(env, 0x000000070000FFFFULL); |
4022 | 4038 |
/* XXX : not implemented */ |
4023 | 4039 |
spr_register(env, SPR_BOOKE_SPEFSCR, "SPEFSCR", |
4024 |
SPR_NOACCESS, SPR_NOACCESS,
|
|
4025 |
&spr_read_generic, &spr_write_generic,
|
|
4040 |
&spr_read_spefscr, &spr_write_spefscr,
|
|
4041 |
&spr_read_spefscr, &spr_write_spefscr,
|
|
4026 | 4042 |
0x00000000); |
4027 | 4043 |
/* Memory management */ |
4028 | 4044 |
gen_spr_BookE_FSL(env, 0x0000005D); |
... | ... | |
4210 | 4226 |
0x00000000); |
4211 | 4227 |
/* XXX : not implemented */ |
4212 | 4228 |
spr_register(env, SPR_BOOKE_SPEFSCR, "SPEFSCR", |
4213 |
SPR_NOACCESS, SPR_NOACCESS,
|
|
4214 |
&spr_read_generic, &spr_write_generic,
|
|
4229 |
&spr_read_spefscr, &spr_write_spefscr,
|
|
4230 |
&spr_read_spefscr, &spr_write_spefscr,
|
|
4215 | 4231 |
0x00000000); |
4216 | 4232 |
/* Memory management */ |
4217 | 4233 |
#if !defined(CONFIG_USER_ONLY) |
... | ... | |
9428 | 9444 |
return 8; |
9429 | 9445 |
} |
9430 | 9446 |
if (n == 33) { |
9431 |
/* SPEFSCR not implemented */ |
|
9432 |
memset(mem_buf, 0, 4); |
|
9447 |
stl_p(mem_buf, env->spe_fscr); |
|
9433 | 9448 |
return 4; |
9434 | 9449 |
} |
9435 | 9450 |
return 0; |
... | ... | |
9452 | 9467 |
return 8; |
9453 | 9468 |
} |
9454 | 9469 |
if (n == 33) { |
9455 |
/* SPEFSCR not implemented */
|
|
9470 |
env->spe_fscr = ldl_p(mem_buf);
|
|
9456 | 9471 |
return 4; |
9457 | 9472 |
} |
9458 | 9473 |
return 0; |
Also available in: Unified diff