From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jiong Wang Subject: Re: [PATCH bpf-next 7/7] nfp: bpf: migrate to advanced reciprocal divide in reciprocal_div.h Date: Thu, 5 Jul 2018 19:28:24 +0100 Message-ID: <80ac616c-0ccd-5db4-31d7-6436a794772e@netronome.com> References: <20180625035421.2991-1-jakub.kicinski@netronome.com> <20180625035421.2991-8-jakub.kicinski@netronome.com> <20180626135924.0050ab10@cakuba.netronome.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Cc: alexei.starovoitov@gmail.com, daniel@iogearbox.net, oss-drivers@netronome.com, netdev@vger.kernel.org To: Jakub Kicinski Return-path: Received: from mail-wr1-f68.google.com ([209.85.221.68]:36053 "EHLO mail-wr1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753716AbeGES22 (ORCPT ); Thu, 5 Jul 2018 14:28:28 -0400 Received: by mail-wr1-f68.google.com with SMTP id h9-v6so1800687wro.3 for ; Thu, 05 Jul 2018 11:28:27 -0700 (PDT) In-Reply-To: <20180626135924.0050ab10@cakuba.netronome.com> Content-Language: en-GB Sender: netdev-owner@vger.kernel.org List-ID: On 26/06/2018 21:59, Jakub Kicinski wrote: > On Sun, 24 Jun 2018 20:54:21 -0700, Jakub Kicinski wrote: >> + * NOTE: because we are using "reciprocal_value_adv" which doesn't >> + * support dividend with MSB set, so we need to JIT separate NFP >> + * sequence to handle such case. It could be a simple sequence if there >> + * is conditional move, however there isn't for NFP. So, we don't bother >> + * generating compare-if-set-branch sequence by rejecting the program >> + * straight away when the u32 dividend has MSB set. Divide by such a >> + * large constant would be rare in practice. Also, the programmer could >> + * simply rewrite it as "result = divisor >= the_const". > Thinking about this again, can we just use carry bit? Good catch, yes we can. > The code may end > up shorter than the explanation why we don't support that case :P > > immed[c, 0] > alu[--, a, -, b] > alu[c, c, +carry, 0] eBPF input will be "a = a / b", given "immed" doesn't affect carry bit, I'd reorder the sequence so we only need one tmp register for holding "b" who is constant. alu[--, a, -, b] immed[b, 0] alu[a, b, +carry, 0] Thanks. Regards, Jiong > > Should be equivalent to: > > c = a >= b > > (Thanks to Edwin for double-checking the carry semantics.)