mirror of
https://github.com/qemu/qemu.git
synced 2024-11-27 05:43:47 +08:00
target/ppc: Implemented [pm]xvbf16ger2*
Implement the following PowerISA v3.1 instructions: xvbf16ger2: VSX Vector bfloat16 GER (rank-2 update) xvbf16ger2nn: VSX Vector bfloat16 GER (rank-2 update) Negative multiply, Negative accumulate xvbf16ger2np: VSX Vector bfloat16 GER (rank-2 update) Negative multiply, Positive accumulate xvbf16ger2pn: VSX Vector bfloat16 GER (rank-2 update) Positive multiply, Negative accumulate xvbf16ger2pp: VSX Vector bfloat16 GER (rank-2 update) Positive multiply, Positive accumulate pmxvbf16ger2: Prefixed Masked VSX Vector bfloat16 GER (rank-2 update) pmxvbf16ger2nn: Prefixed Masked VSX Vector bfloat16 GER (rank-2 update) Negative multiply, Negative accumulate pmxvbf16ger2np: Prefixed Masked VSX Vector bfloat16 GER (rank-2 update) Negative multiply, Positive accumulate pmxvbf16ger2pn: Prefixed Masked VSX Vector bfloat16 GER (rank-2 update) Positive multiply, Negative accumulate pmxvbf16ger2pp: Prefixed Masked VSX Vector bfloat16 GER (rank-2 update) Positive multiply, Positive accumulate Signed-off-by: Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20220524140537.27451-8-lucas.araujo@eldorado.org.br> Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
This commit is contained in:
parent
6f642338dc
commit
5724e131ca
@ -3517,6 +3517,11 @@ static float64 extract_hf16(float16 in, float_status *fp_status)
|
||||
return float16_to_float64(in, true, fp_status);
|
||||
}
|
||||
|
||||
static float64 extract_bf16(bfloat16 in, float_status *fp_status)
|
||||
{
|
||||
return bfloat16_to_float64(in, fp_status);
|
||||
}
|
||||
|
||||
static void vsxger16(CPUPPCState *env, ppc_vsr_t *a, ppc_vsr_t *b,
|
||||
ppc_acc_t *at, uint32_t mask, bool acc,
|
||||
bool neg_mul, bool neg_acc, extract_f16 extract)
|
||||
@ -3639,6 +3644,41 @@ static void vsxger(CPUPPCState *env, ppc_vsr_t *a, ppc_vsr_t *b,
|
||||
vsxger_excp(env, GETPC());
|
||||
}
|
||||
|
||||
QEMU_FLATTEN
|
||||
void helper_XVBF16GER2(CPUPPCState *env, ppc_vsr_t *a, ppc_vsr_t *b,
|
||||
ppc_acc_t *at, uint32_t mask)
|
||||
{
|
||||
vsxger16(env, a, b, at, mask, false, false, false, extract_bf16);
|
||||
}
|
||||
|
||||
QEMU_FLATTEN
|
||||
void helper_XVBF16GER2PP(CPUPPCState *env, ppc_vsr_t *a, ppc_vsr_t *b,
|
||||
ppc_acc_t *at, uint32_t mask)
|
||||
{
|
||||
vsxger16(env, a, b, at, mask, true, false, false, extract_bf16);
|
||||
}
|
||||
|
||||
QEMU_FLATTEN
|
||||
void helper_XVBF16GER2PN(CPUPPCState *env, ppc_vsr_t *a, ppc_vsr_t *b,
|
||||
ppc_acc_t *at, uint32_t mask)
|
||||
{
|
||||
vsxger16(env, a, b, at, mask, true, false, true, extract_bf16);
|
||||
}
|
||||
|
||||
QEMU_FLATTEN
|
||||
void helper_XVBF16GER2NP(CPUPPCState *env, ppc_vsr_t *a, ppc_vsr_t *b,
|
||||
ppc_acc_t *at, uint32_t mask)
|
||||
{
|
||||
vsxger16(env, a, b, at, mask, true, true, false, extract_bf16);
|
||||
}
|
||||
|
||||
QEMU_FLATTEN
|
||||
void helper_XVBF16GER2NN(CPUPPCState *env, ppc_vsr_t *a, ppc_vsr_t *b,
|
||||
ppc_acc_t *at, uint32_t mask)
|
||||
{
|
||||
vsxger16(env, a, b, at, mask, true, true, true, extract_bf16);
|
||||
}
|
||||
|
||||
QEMU_FLATTEN
|
||||
void helper_XVF16GER2(CPUPPCState *env, ppc_vsr_t *a, ppc_vsr_t *b,
|
||||
ppc_acc_t *at, uint32_t mask)
|
||||
|
@ -555,6 +555,11 @@ DEF_HELPER_5(XVF16GER2PP, void, env, vsr, vsr, acc, i32)
|
||||
DEF_HELPER_5(XVF16GER2PN, void, env, vsr, vsr, acc, i32)
|
||||
DEF_HELPER_5(XVF16GER2NP, void, env, vsr, vsr, acc, i32)
|
||||
DEF_HELPER_5(XVF16GER2NN, void, env, vsr, vsr, acc, i32)
|
||||
DEF_HELPER_5(XVBF16GER2, void, env, vsr, vsr, acc, i32)
|
||||
DEF_HELPER_5(XVBF16GER2PP, void, env, vsr, vsr, acc, i32)
|
||||
DEF_HELPER_5(XVBF16GER2PN, void, env, vsr, vsr, acc, i32)
|
||||
DEF_HELPER_5(XVBF16GER2NP, void, env, vsr, vsr, acc, i32)
|
||||
DEF_HELPER_5(XVBF16GER2NN, void, env, vsr, vsr, acc, i32)
|
||||
DEF_HELPER_5(XVF32GER, void, env, vsr, vsr, acc, i32)
|
||||
DEF_HELPER_5(XVF32GERPP, void, env, vsr, vsr, acc, i32)
|
||||
DEF_HELPER_5(XVF32GERPN, void, env, vsr, vsr, acc, i32)
|
||||
|
@ -763,6 +763,12 @@ XVI8GER4SPP 111011 ... -- ..... ..... 01100011 ..- @XX3_at xa=%xx_xa
|
||||
XVI16GER2S 111011 ... -- ..... ..... 00101011 ..- @XX3_at xa=%xx_xa
|
||||
XVI16GER2SPP 111011 ... -- ..... ..... 00101010 ..- @XX3_at xa=%xx_xa
|
||||
|
||||
XVBF16GER2 111011 ... -- ..... ..... 00110011 ..- @XX3_at xa=%xx_xa
|
||||
XVBF16GER2PP 111011 ... -- ..... ..... 00110010 ..- @XX3_at xa=%xx_xa
|
||||
XVBF16GER2PN 111011 ... -- ..... ..... 10110010 ..- @XX3_at xa=%xx_xa
|
||||
XVBF16GER2NP 111011 ... -- ..... ..... 01110010 ..- @XX3_at xa=%xx_xa
|
||||
XVBF16GER2NN 111011 ... -- ..... ..... 11110010 ..- @XX3_at xa=%xx_xa
|
||||
|
||||
XVF16GER2 111011 ... -- ..... ..... 00010011 ..- @XX3_at xa=%xx_xa
|
||||
XVF16GER2PP 111011 ... -- ..... ..... 00010010 ..- @XX3_at xa=%xx_xa
|
||||
XVF16GER2PN 111011 ... -- ..... ..... 10010010 ..- @XX3_at xa=%xx_xa
|
||||
|
@ -150,6 +150,17 @@ PMXVI16GER2S 000001 11 1001 -- - - pmsk:2 ------ ........ \
|
||||
PMXVI16GER2SPP 000001 11 1001 -- - - pmsk:2 ------ ........ \
|
||||
111011 ... -- ..... ..... 00101010 ..- @MMIRR_XX3
|
||||
|
||||
PMXVBF16GER2 000001 11 1001 -- - - pmsk:2 ------ ........ \
|
||||
111011 ... -- ..... ..... 00110011 ..- @MMIRR_XX3
|
||||
PMXVBF16GER2PP 000001 11 1001 -- - - pmsk:2 ------ ........ \
|
||||
111011 ... -- ..... ..... 00110010 ..- @MMIRR_XX3
|
||||
PMXVBF16GER2PN 000001 11 1001 -- - - pmsk:2 ------ ........ \
|
||||
111011 ... -- ..... ..... 10110010 ..- @MMIRR_XX3
|
||||
PMXVBF16GER2NP 000001 11 1001 -- - - pmsk:2 ------ ........ \
|
||||
111011 ... -- ..... ..... 01110010 ..- @MMIRR_XX3
|
||||
PMXVBF16GER2NN 000001 11 1001 -- - - pmsk:2 ------ ........ \
|
||||
111011 ... -- ..... ..... 11110010 ..- @MMIRR_XX3
|
||||
|
||||
PMXVF16GER2 000001 11 1001 -- - - pmsk:2 ------ ........ \
|
||||
111011 ... -- ..... ..... 00010011 ..- @MMIRR_XX3
|
||||
PMXVF16GER2PP 000001 11 1001 -- - - pmsk:2 ------ ........ \
|
||||
|
@ -2898,6 +2898,12 @@ TRANS64(PMXVI16GER2PP, do_ger, gen_helper_XVI16GER2PP)
|
||||
TRANS64(PMXVI16GER2S, do_ger, gen_helper_XVI16GER2S)
|
||||
TRANS64(PMXVI16GER2SPP, do_ger, gen_helper_XVI16GER2SPP)
|
||||
|
||||
TRANS(XVBF16GER2, do_ger, gen_helper_XVBF16GER2)
|
||||
TRANS(XVBF16GER2PP, do_ger, gen_helper_XVBF16GER2PP)
|
||||
TRANS(XVBF16GER2PN, do_ger, gen_helper_XVBF16GER2PN)
|
||||
TRANS(XVBF16GER2NP, do_ger, gen_helper_XVBF16GER2NP)
|
||||
TRANS(XVBF16GER2NN, do_ger, gen_helper_XVBF16GER2NN)
|
||||
|
||||
TRANS(XVF16GER2, do_ger, gen_helper_XVF16GER2)
|
||||
TRANS(XVF16GER2PP, do_ger, gen_helper_XVF16GER2PP)
|
||||
TRANS(XVF16GER2PN, do_ger, gen_helper_XVF16GER2PN)
|
||||
@ -2916,6 +2922,12 @@ TRANS(XVF64GERPN, do_ger, gen_helper_XVF64GERPN)
|
||||
TRANS(XVF64GERNP, do_ger, gen_helper_XVF64GERNP)
|
||||
TRANS(XVF64GERNN, do_ger, gen_helper_XVF64GERNN)
|
||||
|
||||
TRANS64(PMXVBF16GER2, do_ger, gen_helper_XVBF16GER2)
|
||||
TRANS64(PMXVBF16GER2PP, do_ger, gen_helper_XVBF16GER2PP)
|
||||
TRANS64(PMXVBF16GER2PN, do_ger, gen_helper_XVBF16GER2PN)
|
||||
TRANS64(PMXVBF16GER2NP, do_ger, gen_helper_XVBF16GER2NP)
|
||||
TRANS64(PMXVBF16GER2NN, do_ger, gen_helper_XVBF16GER2NN)
|
||||
|
||||
TRANS64(PMXVF16GER2, do_ger, gen_helper_XVF16GER2)
|
||||
TRANS64(PMXVF16GER2PP, do_ger, gen_helper_XVF16GER2PP)
|
||||
TRANS64(PMXVF16GER2PN, do_ger, gen_helper_XVF16GER2PN)
|
||||
|
Loading…
Reference in New Issue
Block a user