RE: Register constraint in NEG instructions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> -----Original Message-----
> From: Jose E. Marchesi <jose.marchesi@xxxxxxxxxx>
> Sent: Wednesday, July 26, 2023 2:17 AM
> To: bpf@xxxxxxxxxxxxxxx
> Cc: Yonghong Song <yonghong.song@xxxxxxxxx>; Eduard Zingerman
> <eddyz87@xxxxxxxxx>
> Subject: Re: Register constraint in NEG instructions
> 
> 
> I see this in the verifier (bpf-next):
> 
>    if (opcode == BPF_NEG) {
> 	if (BPF_SRC(insn->code) != BPF_K ||
> 	    insn->src_reg != BPF_REG_0 ||
> 	    insn->off != 0 || insn->imm != 0) {
> 		verbose(env, "BPF_NEG uses reserved fields\n");
> 	return -EINVAL;
>    }
> 
> And along this llvm assembler test:
> 
>                |
>                v
>   // CHECK: 84 01 00 00 00 00 00 00	w1 = -w1
>   w1 = -w1
> 
> Is enough evidence that NEG is supposed to use only dst and not src.  I am
> sending a fix for standarization/instruction-set.rst.
> 
> > Hello.
> >
> > The neg (and neg32) instructions are documented to use (and encode)
> > both src and dst register operands in standarization/instruction-set.rst:
> >
> >   BPF_NEG   0x80   dst = -src
> >
> > However, in llvm's BPFAsmParser::PreMatchCheck, it is checked that
> > both source and destination registers refer to the same register.  If
> > they are not, an error is raised.
> >
> > Is this to speed up JIT to different architectures, some like x86
> > featuring `NEG reg' and others like aarch64 featuring `NEG reg1,reg2'?
> >
> > Should I send a patch for instruction-set.rst documenting the
> > requirement?
> >
> > Thanks.

I am adding bpf@xxxxxxxx to this thread, for context.

Dave






[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux