Commit b4f8d821e5211bbb51a278ba0fc4a4db2d581221

Authored by aurel32
1 parent 24951522

target-ppc: Add Altivec register read/write using XML

Signed-off-by: Nathan Froyd <froydnj@codesourcery.com>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6424 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 50 additions and 0 deletions
target-ppc/translate_init.c
... ... @@ -9299,6 +9299,52 @@ static int gdb_set_float_reg(CPUState *env, uint8_t *mem_buf, int n)
9299 9299 return 0;
9300 9300 }
9301 9301  
  9302 +static int gdb_get_avr_reg(CPUState *env, uint8_t *mem_buf, int n)
  9303 +{
  9304 + if (n < 32) {
  9305 +#ifdef WORDS_BIGENDIAN
  9306 + stq_p(mem_buf, env->avr[n].u64[0]);
  9307 + stq_p(mem_buf+8, env->avr[n].u64[1]);
  9308 +#else
  9309 + stq_p(mem_buf, env->avr[n].u64[1]);
  9310 + stq_p(mem_buf+8, env->avr[n].u64[0]);
  9311 +#endif
  9312 + return 16;
  9313 + }
  9314 + if (n == 33) {
  9315 + stl_p(mem_buf, env->vscr);
  9316 + return 4;
  9317 + }
  9318 + if (n == 34) {
  9319 + stl_p(mem_buf, (uint32_t)env->spr[SPR_VRSAVE]);
  9320 + return 4;
  9321 + }
  9322 + return 0;
  9323 +}
  9324 +
  9325 +static int gdb_set_avr_reg(CPUState *env, uint8_t *mem_buf, int n)
  9326 +{
  9327 + if (n < 32) {
  9328 +#ifdef WORDS_BIGENDIAN
  9329 + env->avr[n].u64[0] = ldq_p(mem_buf);
  9330 + env->avr[n].u64[1] = ldq_p(mem_buf+8);
  9331 +#else
  9332 + env->avr[n].u64[1] = ldq_p(mem_buf);
  9333 + env->avr[n].u64[0] = ldq_p(mem_buf+8);
  9334 +#endif
  9335 + return 16;
  9336 + }
  9337 + if (n == 33) {
  9338 + env->vscr = ldl_p(mem_buf);
  9339 + return 4;
  9340 + }
  9341 + if (n == 34) {
  9342 + env->spr[SPR_VRSAVE] = (target_ulong)ldl_p(mem_buf);
  9343 + return 4;
  9344 + }
  9345 + return 0;
  9346 +}
  9347 +
9302 9348 int cpu_ppc_register_internal (CPUPPCState *env, const ppc_def_t *def)
9303 9349 {
9304 9350 env->msr_mask = def->msr_mask;
... ... @@ -9316,6 +9362,10 @@ int cpu_ppc_register_internal (CPUPPCState *env, const ppc_def_t *def)
9316 9362 gdb_register_coprocessor(env, gdb_get_float_reg, gdb_set_float_reg,
9317 9363 33, "power-fpu.xml", 0);
9318 9364 }
  9365 + if (def->insns_flags & PPC_ALTIVEC) {
  9366 + gdb_register_coprocessor(env, gdb_get_avr_reg, gdb_set_avr_reg,
  9367 + 34, "power-altivec.xml", 0);
  9368 + }
9319 9369 #if defined(PPC_DUMP_CPU)
9320 9370 {
9321 9371 const char *mmu_model, *excp_model, *bus_model;
... ...