mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-24 10:32:02 -06:00
target/ppc: moved XXSPLTIB to using decodetree
Changed the function that handles XXSPLTIB emulation to using decodetree, but still use the same logic as before Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Bruno Larsen (billionai) <bruno.larsen@eldorado.org.br> Signed-off-by: Matheus Ferst <matheus.ferst@eldorado.org.br> Message-Id: <20211104123719.323713-20-matheus.ferst@eldorado.org.br> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
30dfca8d8f
commit
6166fced10
3 changed files with 11 additions and 15 deletions
|
@ -96,6 +96,10 @@
|
||||||
&X_bfl bf l:bool ra rb
|
&X_bfl bf l:bool ra rb
|
||||||
@X_bfl ...... bf:3 - l:1 ra:5 rb:5 ..........- &X_bfl
|
@X_bfl ...... bf:3 - l:1 ra:5 rb:5 ..........- &X_bfl
|
||||||
|
|
||||||
|
%x_xt 0:1 21:5
|
||||||
|
&X_imm8 xt imm:uint8_t
|
||||||
|
@X_imm8 ...... ..... .. imm:8 .......... . &X_imm8 xt=%x_xt
|
||||||
|
|
||||||
&X_tb_sp_rc rt rb sp rc:bool
|
&X_tb_sp_rc rt rb sp rc:bool
|
||||||
@X_tb_sp_rc ...... rt:5 sp:2 ... rb:5 .......... rc:1 &X_tb_sp_rc
|
@X_tb_sp_rc ...... rt:5 sp:2 ... rb:5 .......... rc:1 &X_tb_sp_rc
|
||||||
|
|
||||||
|
@ -414,4 +418,5 @@ STXVPX 011111 ..... ..... ..... 0111001101 - @X_TSXP
|
||||||
|
|
||||||
## VSX splat instruction
|
## VSX splat instruction
|
||||||
|
|
||||||
|
XXSPLTIB 111100 ..... 00 ........ 0101101000 . @X_imm8
|
||||||
XXSPLTW 111100 ..... ---.. ..... 010100100 . . @XX2
|
XXSPLTW 111100 ..... ---.. ..... 010100100 . . @XX2
|
||||||
|
|
|
@ -1455,23 +1455,15 @@ static bool trans_XXSPLTW(DisasContext *ctx, arg_XX2 *a)
|
||||||
|
|
||||||
#define pattern(x) (((x) & 0xff) * (~(uint64_t)0 / 0xff))
|
#define pattern(x) (((x) & 0xff) * (~(uint64_t)0 / 0xff))
|
||||||
|
|
||||||
static void gen_xxspltib(DisasContext *ctx)
|
static bool trans_XXSPLTIB(DisasContext *ctx, arg_X_imm8 *a)
|
||||||
{
|
{
|
||||||
uint8_t uim8 = IMM8(ctx->opcode);
|
if (a->xt < 32) {
|
||||||
int rt = xT(ctx->opcode);
|
REQUIRE_VSX(ctx);
|
||||||
|
|
||||||
if (rt < 32) {
|
|
||||||
if (unlikely(!ctx->vsx_enabled)) {
|
|
||||||
gen_exception(ctx, POWERPC_EXCP_VSXU);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (unlikely(!ctx->altivec_enabled)) {
|
REQUIRE_VECTOR(ctx);
|
||||||
gen_exception(ctx, POWERPC_EXCP_VPU);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
tcg_gen_gvec_dup_imm(MO_8, vsr_full_offset(rt), 16, 16, uim8);
|
tcg_gen_gvec_dup_imm(MO_8, vsr_full_offset(a->xt), 16, 16, a->imm);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gen_xxsldwi(DisasContext *ctx)
|
static void gen_xxsldwi(DisasContext *ctx)
|
||||||
|
|
|
@ -348,7 +348,6 @@ GEN_XX3FORM(xxmrghw, 0x08, 0x02, PPC2_VSX),
|
||||||
GEN_XX3FORM(xxmrglw, 0x08, 0x06, PPC2_VSX),
|
GEN_XX3FORM(xxmrglw, 0x08, 0x06, PPC2_VSX),
|
||||||
GEN_XX3FORM(xxperm, 0x08, 0x03, PPC2_ISA300),
|
GEN_XX3FORM(xxperm, 0x08, 0x03, PPC2_ISA300),
|
||||||
GEN_XX3FORM(xxpermr, 0x08, 0x07, PPC2_ISA300),
|
GEN_XX3FORM(xxpermr, 0x08, 0x07, PPC2_ISA300),
|
||||||
GEN_XX1FORM(xxspltib, 0x08, 0x0B, PPC2_ISA300),
|
|
||||||
GEN_XX3FORM_DM(xxsldwi, 0x08, 0x00),
|
GEN_XX3FORM_DM(xxsldwi, 0x08, 0x00),
|
||||||
GEN_XX2FORM_EXT(xxextractuw, 0x0A, 0x0A, PPC2_ISA300),
|
GEN_XX2FORM_EXT(xxextractuw, 0x0A, 0x0A, PPC2_ISA300),
|
||||||
GEN_XX2FORM_EXT(xxinsertw, 0x0A, 0x0B, PPC2_ISA300),
|
GEN_XX2FORM_EXT(xxinsertw, 0x0A, 0x0B, PPC2_ISA300),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue