Fix for safe_syscall_base.
Fix for folding of vector add/sub. Fix build on loongarch64 with gcc 8. Remove decl for qemu_run_machine_init_done_notifiers. -----BEGIN PGP SIGNATURE----- iQFRBAABCgA7FiEEekgeeIaLTbaoWgXAZN846K9+IV8FAmHU6McdHHJpY2hhcmQu aGVuZGVyc29uQGxpbmFyby5vcmcACgkQZN846K9+IV9eaggAlghC84C3D2qAQfL/ KWPHVDzVVcaxQlAcVL2VQevJt8zANq82zlg+p6oNEoNv7uV9TRenbM+6yE0ezSld njc265n6WpBua52lubVmfBoVOp8PdARGRLfy4xhyzuDKUspzK7pxhxF/uSaKf2Qr VbWk684Q9DPDMORE4FYruI+hXuM9IX3g3qKLwcxm8/uHEkseU6goS5n0L7XA3YLN IfntWcHSvL8suZoLArnRYbliJopBwVbVNzsf0sDEmzKQdGB6HDbhksQBqVW3rRXY xb70ZuarLVr82rp3Avp38cr02wqemN9qx3ebJyPAry2TRG5DEKHHZrklzo5OFthH XVmKog== =qTNz -----END PGP SIGNATURE----- Merge tag 'pull-tcg-20220104' of https://gitlab.com/rth7680/qemu into staging Fix for safe_syscall_base. Fix for folding of vector add/sub. Fix build on loongarch64 with gcc 8. Remove decl for qemu_run_machine_init_done_notifiers. # gpg: Signature made Tue 04 Jan 2022 04:39:35 PM PST # gpg: using RSA key 7A481E78868B4DB6A85A05C064DF38E8AF7E215F # gpg: issuer "richard.henderson@linaro.org" # gpg: Good signature from "Richard Henderson <richard.henderson@linaro.org>" [ultimate] * tag 'pull-tcg-20220104' of https://gitlab.com/rth7680/qemu: common-user: Fix tail calls to safe_syscall_set_errno_tail sysemu: Cleanup qemu_run_machine_init_done_notifiers() linux-user: Fix trivial build error on loongarch64 hosts tcg/optimize: Fix folding of vector ops Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
commit
58140d3964
@ -120,6 +120,7 @@ safe_syscall_end:
|
||||
pop %ebp
|
||||
.cfi_adjust_cfa_offset -4
|
||||
.cfi_restore ebp
|
||||
mov %eax, (%esp)
|
||||
jmp safe_syscall_set_errno_tail
|
||||
|
||||
.cfi_endproc
|
||||
|
@ -141,6 +141,7 @@ safe_syscall_end:
|
||||
1: USE_ALT_CP(t0)
|
||||
SETUP_GPX(t1)
|
||||
SETUP_GPX64(t0, t1)
|
||||
move a0, v0
|
||||
PTR_LA t9, safe_syscall_set_errno_tail
|
||||
jr t9
|
||||
|
||||
|
@ -99,6 +99,7 @@ safe_syscall_end:
|
||||
1: pop %rbp
|
||||
.cfi_def_cfa_offset 8
|
||||
.cfi_restore rbp
|
||||
mov %eax, %edi
|
||||
jmp safe_syscall_set_errno_tail
|
||||
.cfi_endproc
|
||||
|
||||
|
@ -16,7 +16,6 @@ extern bool qemu_uuid_set;
|
||||
void qemu_add_exit_notifier(Notifier *notify);
|
||||
void qemu_remove_exit_notifier(Notifier *notify);
|
||||
|
||||
void qemu_run_machine_init_done_notifiers(void);
|
||||
void qemu_add_machine_init_done_notifier(Notifier *notify);
|
||||
void qemu_remove_machine_init_done_notifier(Notifier *notify);
|
||||
|
||||
|
@ -54,9 +54,7 @@ static inline bool host_signal_write(siginfo_t *info, ucontext_t *uc)
|
||||
}
|
||||
break;
|
||||
case 0b001110: /* indexed, atomic, bounds-checking memory operations */
|
||||
uint32_t sel = (insn >> 15) & 0b11111111111;
|
||||
|
||||
switch (sel) {
|
||||
switch ((insn >> 15) & 0b11111111111) {
|
||||
case 0b00000100000: /* stx.b */
|
||||
case 0b00000101000: /* stx.h */
|
||||
case 0b00000110000: /* stx.w */
|
||||
|
@ -308,13 +308,13 @@ static uint64_t do_constant_folding_2(TCGOpcode op, uint64_t x, uint64_t y)
|
||||
CASE_OP_32_64(mul):
|
||||
return x * y;
|
||||
|
||||
CASE_OP_32_64(and):
|
||||
CASE_OP_32_64_VEC(and):
|
||||
return x & y;
|
||||
|
||||
CASE_OP_32_64(or):
|
||||
CASE_OP_32_64_VEC(or):
|
||||
return x | y;
|
||||
|
||||
CASE_OP_32_64(xor):
|
||||
CASE_OP_32_64_VEC(xor):
|
||||
return x ^ y;
|
||||
|
||||
case INDEX_op_shl_i32:
|
||||
@ -347,16 +347,16 @@ static uint64_t do_constant_folding_2(TCGOpcode op, uint64_t x, uint64_t y)
|
||||
case INDEX_op_rotl_i64:
|
||||
return rol64(x, y & 63);
|
||||
|
||||
CASE_OP_32_64(not):
|
||||
CASE_OP_32_64_VEC(not):
|
||||
return ~x;
|
||||
|
||||
CASE_OP_32_64(neg):
|
||||
return -x;
|
||||
|
||||
CASE_OP_32_64(andc):
|
||||
CASE_OP_32_64_VEC(andc):
|
||||
return x & ~y;
|
||||
|
||||
CASE_OP_32_64(orc):
|
||||
CASE_OP_32_64_VEC(orc):
|
||||
return x | ~y;
|
||||
|
||||
CASE_OP_32_64(eqv):
|
||||
@ -751,6 +751,12 @@ static bool fold_const2(OptContext *ctx, TCGOp *op)
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool fold_commutative(OptContext *ctx, TCGOp *op)
|
||||
{
|
||||
swap_commutative(op->args[0], &op->args[1], &op->args[2]);
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool fold_const2_commutative(OptContext *ctx, TCGOp *op)
|
||||
{
|
||||
swap_commutative(op->args[0], &op->args[1], &op->args[2]);
|
||||
@ -905,6 +911,16 @@ static bool fold_add(OptContext *ctx, TCGOp *op)
|
||||
return false;
|
||||
}
|
||||
|
||||
/* We cannot as yet do_constant_folding with vectors. */
|
||||
static bool fold_add_vec(OptContext *ctx, TCGOp *op)
|
||||
{
|
||||
if (fold_commutative(ctx, op) ||
|
||||
fold_xi_to_x(ctx, op, 0)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool fold_addsub2(OptContext *ctx, TCGOp *op, bool add)
|
||||
{
|
||||
if (arg_is_const(op->args[2]) && arg_is_const(op->args[3]) &&
|
||||
@ -1938,10 +1954,10 @@ static bool fold_sub_to_neg(OptContext *ctx, TCGOp *op)
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool fold_sub(OptContext *ctx, TCGOp *op)
|
||||
/* We cannot as yet do_constant_folding with vectors. */
|
||||
static bool fold_sub_vec(OptContext *ctx, TCGOp *op)
|
||||
{
|
||||
if (fold_const2(ctx, op) ||
|
||||
fold_xx_to_i(ctx, op, 0) ||
|
||||
if (fold_xx_to_i(ctx, op, 0) ||
|
||||
fold_xi_to_x(ctx, op, 0) ||
|
||||
fold_sub_to_neg(ctx, op)) {
|
||||
return true;
|
||||
@ -1949,6 +1965,11 @@ static bool fold_sub(OptContext *ctx, TCGOp *op)
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool fold_sub(OptContext *ctx, TCGOp *op)
|
||||
{
|
||||
return fold_const2(ctx, op) || fold_sub_vec(ctx, op);
|
||||
}
|
||||
|
||||
static bool fold_sub2(OptContext *ctx, TCGOp *op)
|
||||
{
|
||||
return fold_addsub2(ctx, op, false);
|
||||
@ -2052,9 +2073,12 @@ void tcg_optimize(TCGContext *s)
|
||||
* Sorted alphabetically by opcode as much as possible.
|
||||
*/
|
||||
switch (opc) {
|
||||
CASE_OP_32_64_VEC(add):
|
||||
CASE_OP_32_64(add):
|
||||
done = fold_add(&ctx, op);
|
||||
break;
|
||||
case INDEX_op_add_vec:
|
||||
done = fold_add_vec(&ctx, op);
|
||||
break;
|
||||
CASE_OP_32_64(add2):
|
||||
done = fold_add2(&ctx, op);
|
||||
break;
|
||||
@ -2193,9 +2217,12 @@ void tcg_optimize(TCGContext *s)
|
||||
CASE_OP_32_64(sextract):
|
||||
done = fold_sextract(&ctx, op);
|
||||
break;
|
||||
CASE_OP_32_64_VEC(sub):
|
||||
CASE_OP_32_64(sub):
|
||||
done = fold_sub(&ctx, op);
|
||||
break;
|
||||
case INDEX_op_sub_vec:
|
||||
done = fold_sub_vec(&ctx, op);
|
||||
break;
|
||||
CASE_OP_32_64(sub2):
|
||||
done = fold_sub2(&ctx, op);
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user