Lines Matching +full:- +full:n
4 * Copyright (c) 2003-2005 Fabrice Bellard
26 static int ppc_gdb_register_len_apple(int n) in ppc_gdb_register_len_apple() argument
28 switch (n) { in ppc_gdb_register_len_apple()
51 static int ppc_gdb_register_len(int n) in ppc_gdb_register_len() argument
53 switch (n) { in ppc_gdb_register_len()
78 * ordering. For user-only mode we get this for free;
82 * mode of the chip to see if we're running in little-endian.
87 if (!FIELD_EX64(env->msr, MSR, LE)) { in ppc_maybe_bswap_register()
102 * Old gdb always expects FP registers. Newer (xml-aware) gdb only
109 int ppc_cpu_gdb_read_register(CPUState *cs, GByteArray *buf, int n) in ppc_cpu_gdb_read_register() argument
113 int r = ppc_gdb_register_len(n); in ppc_cpu_gdb_read_register()
119 if (n < 32) { in ppc_cpu_gdb_read_register()
121 gdb_get_regl(buf, env->gpr[n]); in ppc_cpu_gdb_read_register()
123 switch (n) { in ppc_cpu_gdb_read_register()
125 gdb_get_regl(buf, env->nip); in ppc_cpu_gdb_read_register()
128 gdb_get_regl(buf, env->msr); in ppc_cpu_gdb_read_register()
137 gdb_get_regl(buf, env->lr); in ppc_cpu_gdb_read_register()
140 gdb_get_regl(buf, env->ctr); in ppc_cpu_gdb_read_register()
147 mem_buf = buf->data + buf->len - r; in ppc_cpu_gdb_read_register()
152 int ppc_cpu_gdb_read_register_apple(CPUState *cs, GByteArray *buf, int n) in ppc_cpu_gdb_read_register_apple() argument
156 int r = ppc_gdb_register_len_apple(n); in ppc_cpu_gdb_read_register_apple()
162 if (n < 32) { in ppc_cpu_gdb_read_register_apple()
164 gdb_get_reg64(buf, env->gpr[n]); in ppc_cpu_gdb_read_register_apple()
165 } else if (n < 64) { in ppc_cpu_gdb_read_register_apple()
167 gdb_get_reg64(buf, *cpu_fpr_ptr(env, n - 32)); in ppc_cpu_gdb_read_register_apple()
168 } else if (n < 96) { in ppc_cpu_gdb_read_register_apple()
170 gdb_get_reg64(buf, n - 64); in ppc_cpu_gdb_read_register_apple()
173 switch (n) { in ppc_cpu_gdb_read_register_apple()
175 gdb_get_reg64(buf, env->nip); in ppc_cpu_gdb_read_register_apple()
178 gdb_get_reg64(buf, env->msr); in ppc_cpu_gdb_read_register_apple()
187 gdb_get_reg64(buf, env->lr); in ppc_cpu_gdb_read_register_apple()
190 gdb_get_reg64(buf, env->ctr); in ppc_cpu_gdb_read_register_apple()
196 gdb_get_reg64(buf, env->fpscr); in ppc_cpu_gdb_read_register_apple()
200 mem_buf = buf->data + buf->len - r; in ppc_cpu_gdb_read_register_apple()
205 int ppc_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n) in ppc_cpu_gdb_write_register() argument
208 int r = ppc_gdb_register_len(n); in ppc_cpu_gdb_write_register()
214 if (n < 32) { in ppc_cpu_gdb_write_register()
216 env->gpr[n] = ldtul_p(mem_buf); in ppc_cpu_gdb_write_register()
217 } else if (n < 64) { in ppc_cpu_gdb_write_register()
219 *cpu_fpr_ptr(env, n - 32) = ldq_p(mem_buf); in ppc_cpu_gdb_write_register()
221 switch (n) { in ppc_cpu_gdb_write_register()
223 env->nip = ldtul_p(mem_buf); in ppc_cpu_gdb_write_register()
235 env->lr = ldtul_p(mem_buf); in ppc_cpu_gdb_write_register()
238 env->ctr = ldtul_p(mem_buf); in ppc_cpu_gdb_write_register()
251 int ppc_cpu_gdb_write_register_apple(CPUState *cs, uint8_t *mem_buf, int n) in ppc_cpu_gdb_write_register_apple() argument
254 int r = ppc_gdb_register_len_apple(n); in ppc_cpu_gdb_write_register_apple()
260 if (n < 32) { in ppc_cpu_gdb_write_register_apple()
262 env->gpr[n] = ldq_p(mem_buf); in ppc_cpu_gdb_write_register_apple()
263 } else if (n < 64) { in ppc_cpu_gdb_write_register_apple()
265 *cpu_fpr_ptr(env, n - 32) = ldq_p(mem_buf); in ppc_cpu_gdb_write_register_apple()
267 switch (n) { in ppc_cpu_gdb_write_register_apple()
269 env->nip = ldq_p(mem_buf); in ppc_cpu_gdb_write_register_apple()
281 env->lr = ldq_p(mem_buf); in ppc_cpu_gdb_write_register_apple()
284 env->ctr = ldq_p(mem_buf); in ppc_cpu_gdb_write_register_apple()
303 CPUPPCState *env = &cpu->env; in gdb_gen_spr_feature()
308 for (i = 0; i < ARRAY_SIZE(env->spr_cb); i++) { in gdb_gen_spr_feature()
309 ppc_spr_t *spr = &env->spr_cb[i]; in gdb_gen_spr_feature()
311 if (!spr->name) { in gdb_gen_spr_feature()
323 spr->gdb_id = num_regs; in gdb_gen_spr_feature()
327 if (pcc->gdb_spr.xml) { in gdb_gen_spr_feature()
331 gdb_feature_builder_init(&builder, &pcc->gdb_spr, in gdb_gen_spr_feature()
332 "org.qemu.power.spr", "power-spr.xml", in gdb_gen_spr_feature()
333 cs->gdb_num_regs); in gdb_gen_spr_feature()
335 for (i = 0; i < ARRAY_SIZE(env->spr_cb); i++) { in gdb_gen_spr_feature()
336 ppc_spr_t *spr = &env->spr_cb[i]; in gdb_gen_spr_feature()
338 if (!spr->name) { in gdb_gen_spr_feature()
342 gdb_feature_builder_append_reg(&builder, g_ascii_strdown(spr->name, -1), in gdb_gen_spr_feature()
343 TARGET_LONG_BITS, spr->gdb_id, in gdb_gen_spr_feature()
352 static int gdb_find_spr_idx(CPUPPCState *env, int n) in gdb_find_spr_idx() argument
356 for (i = 0; i < ARRAY_SIZE(env->spr_cb); i++) { in gdb_find_spr_idx()
357 ppc_spr_t *spr = &env->spr_cb[i]; in gdb_find_spr_idx()
359 if (spr->name && spr->gdb_id == n) { in gdb_find_spr_idx()
363 return -1; in gdb_find_spr_idx()
366 static int gdb_get_spr_reg(CPUState *cs, GByteArray *buf, int n) in gdb_get_spr_reg() argument
369 CPUPPCState *env = &cpu->env; in gdb_get_spr_reg()
373 reg = gdb_find_spr_idx(env, n); in gdb_get_spr_reg()
380 /* Handle those SPRs that are not part of the env->spr[] array */ in gdb_get_spr_reg()
385 val = env->cfar; in gdb_get_spr_reg()
401 val = env->spr[reg]; in gdb_get_spr_reg()
409 static int gdb_set_spr_reg(CPUState *cs, uint8_t *mem_buf, int n) in gdb_set_spr_reg() argument
412 CPUPPCState *env = &cpu->env; in gdb_set_spr_reg()
416 reg = gdb_find_spr_idx(env, n); in gdb_set_spr_reg()
424 /* Handle those SPRs that are not part of the env->spr[] array */ in gdb_set_spr_reg()
429 env->cfar = val; in gdb_set_spr_reg()
433 env->spr[reg] = val; in gdb_set_spr_reg()
440 static int gdb_get_float_reg(CPUState *cs, GByteArray *buf, int n) in gdb_get_float_reg() argument
443 CPUPPCState *env = &cpu->env; in gdb_get_float_reg()
445 if (n < 32) { in gdb_get_float_reg()
446 gdb_get_reg64(buf, *cpu_fpr_ptr(env, n)); in gdb_get_float_reg()
451 if (n == 32) { in gdb_get_float_reg()
452 gdb_get_reg32(buf, env->fpscr); in gdb_get_float_reg()
460 static int gdb_set_float_reg(CPUState *cs, uint8_t *mem_buf, int n) in gdb_set_float_reg() argument
463 CPUPPCState *env = &cpu->env; in gdb_set_float_reg()
465 if (n < 32) { in gdb_set_float_reg()
467 *cpu_fpr_ptr(env, n) = ldq_p(mem_buf); in gdb_set_float_reg()
470 if (n == 32) { in gdb_set_float_reg()
478 static int gdb_get_avr_reg(CPUState *cs, GByteArray *buf, int n) in gdb_get_avr_reg() argument
481 CPUPPCState *env = &cpu->env; in gdb_get_avr_reg()
484 if (n < 32) { in gdb_get_avr_reg()
485 ppc_avr_t *avr = cpu_avr_ptr(env, n); in gdb_get_avr_reg()
486 gdb_get_reg128(buf, avr->VsrD(0), avr->VsrD(1)); in gdb_get_avr_reg()
491 if (n == 32) { in gdb_get_avr_reg()
497 if (n == 33) { in gdb_get_avr_reg()
498 gdb_get_reg32(buf, (uint32_t)env->spr[SPR_VRSAVE]); in gdb_get_avr_reg()
506 static int gdb_set_avr_reg(CPUState *cs, uint8_t *mem_buf, int n) in gdb_set_avr_reg() argument
509 CPUPPCState *env = &cpu->env; in gdb_set_avr_reg()
511 if (n < 32) { in gdb_set_avr_reg()
512 ppc_avr_t *avr = cpu_avr_ptr(env, n); in gdb_set_avr_reg()
514 avr->VsrD(0) = ldq_p(mem_buf); in gdb_set_avr_reg()
515 avr->VsrD(1) = ldq_p(mem_buf + 8); in gdb_set_avr_reg()
518 if (n == 32) { in gdb_set_avr_reg()
523 if (n == 33) { in gdb_set_avr_reg()
525 env->spr[SPR_VRSAVE] = (target_ulong)ldl_p(mem_buf); in gdb_set_avr_reg()
531 static int gdb_get_spe_reg(CPUState *cs, GByteArray *buf, int n) in gdb_get_spe_reg() argument
534 CPUPPCState *env = &cpu->env; in gdb_get_spe_reg()
536 if (n < 32) { in gdb_get_spe_reg()
538 gdb_get_reg32(buf, env->gpr[n] >> 32); in gdb_get_spe_reg()
541 gdb_get_reg32(buf, env->gprh[n]); in gdb_get_spe_reg()
545 if (n == 32) { in gdb_get_spe_reg()
546 gdb_get_reg64(buf, env->spe_acc); in gdb_get_spe_reg()
550 if (n == 33) { in gdb_get_spe_reg()
551 gdb_get_reg32(buf, env->spe_fscr); in gdb_get_spe_reg()
558 static int gdb_set_spe_reg(CPUState *cs, uint8_t *mem_buf, int n) in gdb_set_spe_reg() argument
561 CPUPPCState *env = &cpu->env; in gdb_set_spe_reg()
563 if (n < 32) { in gdb_set_spe_reg()
565 target_ulong lo = (uint32_t)env->gpr[n]; in gdb_set_spe_reg()
571 env->gpr[n] = lo | hi; in gdb_set_spe_reg()
573 env->gprh[n] = ldl_p(mem_buf); in gdb_set_spe_reg()
577 if (n == 32) { in gdb_set_spe_reg()
579 env->spe_acc = ldq_p(mem_buf); in gdb_set_spe_reg()
582 if (n == 33) { in gdb_set_spe_reg()
584 env->spe_fscr = ldl_p(mem_buf); in gdb_set_spe_reg()
590 static int gdb_get_vsx_reg(CPUState *cs, GByteArray *buf, int n) in gdb_get_vsx_reg() argument
593 CPUPPCState *env = &cpu->env; in gdb_get_vsx_reg()
595 if (n < 32) { in gdb_get_vsx_reg()
596 gdb_get_reg64(buf, *cpu_vsrl_ptr(env, n)); in gdb_get_vsx_reg()
603 static int gdb_set_vsx_reg(CPUState *cs, uint8_t *mem_buf, int n) in gdb_set_vsx_reg() argument
606 CPUPPCState *env = &cpu->env; in gdb_set_vsx_reg()
608 if (n < 32) { in gdb_set_vsx_reg()
610 *cpu_vsrl_ptr(env, n) = ldq_p(mem_buf); in gdb_set_vsx_reg()
627 if (pcc->insns_flags & PPC_FLOAT) { in ppc_gdb_init()
629 gdb_find_static_feature("power-fpu.xml"), 0); in ppc_gdb_init()
631 if (pcc->insns_flags & PPC_ALTIVEC) { in ppc_gdb_init()
633 gdb_find_static_feature("power-altivec.xml"), in ppc_gdb_init()
636 if (pcc->insns_flags & PPC_SPE) { in ppc_gdb_init()
638 gdb_find_static_feature("power-spe.xml"), 0); in ppc_gdb_init()
640 if (pcc->insns_flags2 & PPC2_VSX) { in ppc_gdb_init()
642 gdb_find_static_feature("power-vsx.xml"), 0); in ppc_gdb_init()
647 &pcc->gdb_spr, 0); in ppc_gdb_init()