mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 17:53:56 -06:00
target/ppc: Remove PowerPC 601 CPUs
The PowerPC 601 processor is the first generation of processors to implement the PowerPC architecture. It was designed as a bridge processor and also could execute most of the instructions of the previous POWER architecture. It was found on the first Macs and IBM RS/6000 workstations. There is not much interest in keeping the CPU model of this POWER-PowerPC bridge processor. We have the 603 and 604 CPU models of the 60x family which implement the complete PowerPC instruction set. Cc: "Hervé Poussineau" <hpoussin@reactos.org> Cc: Laurent Vivier <laurent@vivier.eu> Signed-off-by: Cédric Le Goater <clg@kaod.org> Reviewed-by: Fabiano Rosas <farosas@linux.ibm.com> Message-Id: <20220203142756.1302515-1-clg@kaod.org> Signed-off-by: Cédric Le Goater <clg@kaod.org>
This commit is contained in:
parent
36387ca51c
commit
005b69fdcc
22 changed files with 13 additions and 1659 deletions
|
@ -1105,185 +1105,6 @@ static inline void gen_qemu_st32fiw(DisasContext *ctx, TCGv_i64 arg1, TCGv arg2)
|
|||
/* stfiwx */
|
||||
GEN_STXF(stfiw, st32fiw, 0x17, 0x1E, PPC_FLOAT_STFIWX);
|
||||
|
||||
/* POWER2 specific instructions */
|
||||
/* Quad manipulation (load/store two floats at a time) */
|
||||
|
||||
/* lfq */
|
||||
static void gen_lfq(DisasContext *ctx)
|
||||
{
|
||||
int rd = rD(ctx->opcode);
|
||||
TCGv t0;
|
||||
TCGv_i64 t1;
|
||||
gen_set_access_type(ctx, ACCESS_FLOAT);
|
||||
t0 = tcg_temp_new();
|
||||
t1 = tcg_temp_new_i64();
|
||||
gen_addr_imm_index(ctx, t0, 0);
|
||||
gen_qemu_ld64_i64(ctx, t1, t0);
|
||||
set_fpr(rd, t1);
|
||||
gen_addr_add(ctx, t0, t0, 8);
|
||||
gen_qemu_ld64_i64(ctx, t1, t0);
|
||||
set_fpr((rd + 1) % 32, t1);
|
||||
tcg_temp_free(t0);
|
||||
tcg_temp_free_i64(t1);
|
||||
}
|
||||
|
||||
/* lfqu */
|
||||
static void gen_lfqu(DisasContext *ctx)
|
||||
{
|
||||
int ra = rA(ctx->opcode);
|
||||
int rd = rD(ctx->opcode);
|
||||
TCGv t0, t1;
|
||||
TCGv_i64 t2;
|
||||
gen_set_access_type(ctx, ACCESS_FLOAT);
|
||||
t0 = tcg_temp_new();
|
||||
t1 = tcg_temp_new();
|
||||
t2 = tcg_temp_new_i64();
|
||||
gen_addr_imm_index(ctx, t0, 0);
|
||||
gen_qemu_ld64_i64(ctx, t2, t0);
|
||||
set_fpr(rd, t2);
|
||||
gen_addr_add(ctx, t1, t0, 8);
|
||||
gen_qemu_ld64_i64(ctx, t2, t1);
|
||||
set_fpr((rd + 1) % 32, t2);
|
||||
if (ra != 0) {
|
||||
tcg_gen_mov_tl(cpu_gpr[ra], t0);
|
||||
}
|
||||
tcg_temp_free(t0);
|
||||
tcg_temp_free(t1);
|
||||
tcg_temp_free_i64(t2);
|
||||
}
|
||||
|
||||
/* lfqux */
|
||||
static void gen_lfqux(DisasContext *ctx)
|
||||
{
|
||||
int ra = rA(ctx->opcode);
|
||||
int rd = rD(ctx->opcode);
|
||||
gen_set_access_type(ctx, ACCESS_FLOAT);
|
||||
TCGv t0, t1;
|
||||
TCGv_i64 t2;
|
||||
t2 = tcg_temp_new_i64();
|
||||
t0 = tcg_temp_new();
|
||||
gen_addr_reg_index(ctx, t0);
|
||||
gen_qemu_ld64_i64(ctx, t2, t0);
|
||||
set_fpr(rd, t2);
|
||||
t1 = tcg_temp_new();
|
||||
gen_addr_add(ctx, t1, t0, 8);
|
||||
gen_qemu_ld64_i64(ctx, t2, t1);
|
||||
set_fpr((rd + 1) % 32, t2);
|
||||
tcg_temp_free(t1);
|
||||
if (ra != 0) {
|
||||
tcg_gen_mov_tl(cpu_gpr[ra], t0);
|
||||
}
|
||||
tcg_temp_free(t0);
|
||||
tcg_temp_free_i64(t2);
|
||||
}
|
||||
|
||||
/* lfqx */
|
||||
static void gen_lfqx(DisasContext *ctx)
|
||||
{
|
||||
int rd = rD(ctx->opcode);
|
||||
TCGv t0;
|
||||
TCGv_i64 t1;
|
||||
gen_set_access_type(ctx, ACCESS_FLOAT);
|
||||
t0 = tcg_temp_new();
|
||||
t1 = tcg_temp_new_i64();
|
||||
gen_addr_reg_index(ctx, t0);
|
||||
gen_qemu_ld64_i64(ctx, t1, t0);
|
||||
set_fpr(rd, t1);
|
||||
gen_addr_add(ctx, t0, t0, 8);
|
||||
gen_qemu_ld64_i64(ctx, t1, t0);
|
||||
set_fpr((rd + 1) % 32, t1);
|
||||
tcg_temp_free(t0);
|
||||
tcg_temp_free_i64(t1);
|
||||
}
|
||||
|
||||
/* stfq */
|
||||
static void gen_stfq(DisasContext *ctx)
|
||||
{
|
||||
int rd = rD(ctx->opcode);
|
||||
TCGv t0;
|
||||
TCGv_i64 t1;
|
||||
gen_set_access_type(ctx, ACCESS_FLOAT);
|
||||
t0 = tcg_temp_new();
|
||||
t1 = tcg_temp_new_i64();
|
||||
gen_addr_imm_index(ctx, t0, 0);
|
||||
get_fpr(t1, rd);
|
||||
gen_qemu_st64_i64(ctx, t1, t0);
|
||||
gen_addr_add(ctx, t0, t0, 8);
|
||||
get_fpr(t1, (rd + 1) % 32);
|
||||
gen_qemu_st64_i64(ctx, t1, t0);
|
||||
tcg_temp_free(t0);
|
||||
tcg_temp_free_i64(t1);
|
||||
}
|
||||
|
||||
/* stfqu */
|
||||
static void gen_stfqu(DisasContext *ctx)
|
||||
{
|
||||
int ra = rA(ctx->opcode);
|
||||
int rd = rD(ctx->opcode);
|
||||
TCGv t0, t1;
|
||||
TCGv_i64 t2;
|
||||
gen_set_access_type(ctx, ACCESS_FLOAT);
|
||||
t2 = tcg_temp_new_i64();
|
||||
t0 = tcg_temp_new();
|
||||
gen_addr_imm_index(ctx, t0, 0);
|
||||
get_fpr(t2, rd);
|
||||
gen_qemu_st64_i64(ctx, t2, t0);
|
||||
t1 = tcg_temp_new();
|
||||
gen_addr_add(ctx, t1, t0, 8);
|
||||
get_fpr(t2, (rd + 1) % 32);
|
||||
gen_qemu_st64_i64(ctx, t2, t1);
|
||||
tcg_temp_free(t1);
|
||||
if (ra != 0) {
|
||||
tcg_gen_mov_tl(cpu_gpr[ra], t0);
|
||||
}
|
||||
tcg_temp_free(t0);
|
||||
tcg_temp_free_i64(t2);
|
||||
}
|
||||
|
||||
/* stfqux */
|
||||
static void gen_stfqux(DisasContext *ctx)
|
||||
{
|
||||
int ra = rA(ctx->opcode);
|
||||
int rd = rD(ctx->opcode);
|
||||
TCGv t0, t1;
|
||||
TCGv_i64 t2;
|
||||
gen_set_access_type(ctx, ACCESS_FLOAT);
|
||||
t2 = tcg_temp_new_i64();
|
||||
t0 = tcg_temp_new();
|
||||
gen_addr_reg_index(ctx, t0);
|
||||
get_fpr(t2, rd);
|
||||
gen_qemu_st64_i64(ctx, t2, t0);
|
||||
t1 = tcg_temp_new();
|
||||
gen_addr_add(ctx, t1, t0, 8);
|
||||
get_fpr(t2, (rd + 1) % 32);
|
||||
gen_qemu_st64_i64(ctx, t2, t1);
|
||||
tcg_temp_free(t1);
|
||||
if (ra != 0) {
|
||||
tcg_gen_mov_tl(cpu_gpr[ra], t0);
|
||||
}
|
||||
tcg_temp_free(t0);
|
||||
tcg_temp_free_i64(t2);
|
||||
}
|
||||
|
||||
/* stfqx */
|
||||
static void gen_stfqx(DisasContext *ctx)
|
||||
{
|
||||
int rd = rD(ctx->opcode);
|
||||
TCGv t0;
|
||||
TCGv_i64 t1;
|
||||
gen_set_access_type(ctx, ACCESS_FLOAT);
|
||||
t1 = tcg_temp_new_i64();
|
||||
t0 = tcg_temp_new();
|
||||
gen_addr_reg_index(ctx, t0);
|
||||
get_fpr(t1, rd);
|
||||
gen_qemu_st64_i64(ctx, t1, t0);
|
||||
gen_addr_add(ctx, t0, t0, 8);
|
||||
get_fpr(t1, (rd + 1) % 32);
|
||||
gen_qemu_st64_i64(ctx, t1, t0);
|
||||
tcg_temp_free(t0);
|
||||
tcg_temp_free_i64(t1);
|
||||
}
|
||||
|
||||
/* Floating-point Load/Store Instructions */
|
||||
static bool do_lsfpsd(DisasContext *ctx, int rt, int ra, TCGv displ,
|
||||
bool update, bool store, bool single)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue