This commit is contained in:
Pavel 2025-02-04 23:41:19 +03:00
parent bdc3f06042
commit 49bd57509b
4 changed files with 59 additions and 21 deletions

View File

@ -2640,11 +2640,11 @@ begin
op:=desc.op;
case mreg.AMemSize of
os8:
if (not (not_os8 in desc.opt)) then
begin
Dec(op);
end;
os8:
if (not (not_os8 in desc.opt)) then
begin
Dec(op);
end;
os16:
if (not (not_prefix in desc.opt)) then
begin
@ -2868,11 +2868,11 @@ begin
op:=desc.op;
case size of
os8:
if (not (not_os8 in desc.opt)) then
begin
Dec(op);
end;
os8:
if (not (not_os8 in desc.opt)) then
begin
Dec(op);
end;
os16:
if (not (not_prefix in desc.opt)) then
begin
@ -3368,6 +3368,11 @@ begin
op:=desc.op;
case reg.ASize of
os8:
if (not (not_os8 in desc.opt)) then
begin
Dec(op);
end;
os16:
if (not (not_prefix in desc.opt)) then
begin
@ -3424,6 +3429,11 @@ begin
op:=desc.op;
case mreg.AMemSize of
os8:
if (not (not_os8 in desc.opt)) then
begin
Dec(op);
end;
os16:
if (not (not_prefix in desc.opt)) then
begin

View File

@ -437,22 +437,25 @@ begin
end;
end;
const
maskmov_dqu_desc:t_op_type=(op:$F7;simdop:1;mm:1);
procedure op_maskmov_dqu(var ctx:t_jit_context2);
begin
with ctx.builder do
if jit_memory_guard then
begin
//save
movq(r_tmp0,rdi);
with ctx.builder do
begin
//save
movq(r_tmp1,rdi);
op_uplift(ctx,rdi,os64,[not_use_r_tmp0]); //in/out:rdi
op_uplift(ctx,rdi,os64,[not_use_r_tmp1]); //in/out:rdi
_VV(maskmov_dqu_desc,ctx.din.Operand[1].RegValue[0],ctx.din.Operand[2].RegValue[0],os128);
add_orig(ctx);
//restore
movq(rdi,r_tmp0);
//restore
movq(rdi,r_tmp1);
end;
end else
begin
add_orig(ctx);
end;
end;

View File

@ -603,6 +603,27 @@ begin
end;
end;
procedure op_maskmov(var ctx:t_jit_context2);
begin
if jit_memory_guard then
begin
with ctx.builder do
begin
//save
movq(r_tmp1,rdi);
op_uplift(ctx,rdi,os64,[not_use_r_tmp1]); //in/out:rdi
add_orig(ctx);
//restore
movq(rdi,r_tmp1);
end;
end else
begin
add_orig(ctx);
end;
end;
//
@ -704,6 +725,9 @@ begin
jit_cbs[OPPnone,OPmovmsk ,OPSx_pd]:=@op_reg_mem_mov_wo; //reg reg
jit_cbs[OPPnone,OPpmovmskb,OPSnone]:=@op_reg_mem_mov_wo; //reg reg
jit_cbs[OPPnone,OPmaskmov,OPSx_q ]:=@op_maskmov;
jit_cbs[OPPnone,OPmaskmov,OPSx_dqu]:=@op_maskmov;
jit_cbs[OPPnone,OPcomi ,OPSx_ss]:=@op_reg_mem_ro;
jit_cbs[OPPnone,OPcomi ,OPSx_sd]:=@op_reg_mem_ro;

View File

@ -2891,7 +2891,7 @@ begin
end;
end;
function do_unlock_umutex(td:p_kthread;m:p_umutex):Integer;
function do_unlock_umutex(td:p_kthread;m:p_umutex):Integer; inline;
var
flags:DWORD;
begin
@ -4092,6 +4092,7 @@ begin
if (obj=nil) then Exit(EINVAL);
td:=curkthread;
if (td=nil) then Exit(EFAULT);
Case op of
UMTX_OP_LOCK :Result:=__umtx_op_lock_umtx (td,obj,val,uaddr1,uaddr2);
UMTX_OP_UNLOCK :Result:=__umtx_op_unlock_umtx (td,obj,val,uaddr1,uaddr2);