From: Puranjay Mohan <puranjay12@gmail.com>
To: "Russell King (Oracle)" <linux@armlinux.org.uk>
Cc: Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Andrii Nakryiko <andrii@kernel.org>,
Martin KaFai Lau <martin.lau@linux.dev>,
Song Liu <song@kernel.org>,
Yonghong Song <yonghong.song@linux.dev>,
John Fastabend <john.fastabend@gmail.com>,
KP Singh <kpsingh@kernel.org>,
Stanislav Fomichev <sdf@google.com>,
Hao Luo <haoluo@google.com>, Jiri Olsa <jolsa@kernel.org>,
Shubham Bansal <illusionist.neo@gmail.com>,
Mykola Lysenko <mykolal@fb.com>, Shuah Khan <shuah@kernel.org>,
bpf@vger.kernel.org, linux-kselftest@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH bpf-next 2/8] arm32, bpf: add support for sign-extension load instruction
Date: Wed, 06 Sep 2023 11:47:13 +0000 [thread overview]
Message-ID: <mb61pfs3r34n2.fsf@amazon.com> (raw)
In-Reply-To: <ZPeceR+qKgsedJ1H@shell.armlinux.org.uk> (Russell King's message of "Tue, 5 Sep 2023 22:24:09 +0100")
On Tue, Sep 05 2023, Russell King (Oracle) wrote:
[...]
>> +/* dst = *(signed size*)(src + off) */
>> +static inline void emit_ldsx_r(const s8 dst[], const s8 src,
>> + s16 off, struct jit_ctx *ctx, const u8 sz){
>> + const s8 *tmp = bpf2a32[TMP_REG_1];
>> + const s8 *rd = is_stacked(dst_lo) ? tmp : dst;
>> + s8 rm = src;
>> +
>> + if (!is_ldst_imm8(off, sz)) {
>> + emit_a32_mov_i(tmp[0], off, ctx);
>> + emit(ARM_ADD_R(tmp[0], tmp[0], src), ctx);
>
> Hmm. This looks inefficient when "off" is able to fit in an immediate.
> Please try:
>
> int add_off;
>
> if (!is_ldst_imm8(off, sz)) {
> add_off = imm8m(off);
> if (add_off > 0) {
> emit(ARM_ADD_I(tmp[0], src, add_off), ctx);
> rm = tmp[0];
> } else {
> emit_a32_mov_i(tmp[0], off, ctx);
> emit(ARM_ADD_R(tmp[0], tmp[0], src), ctx);
> rm = tmp[0];
> }
> off = 0;
>> + } else if (rd[1] == rm) {
>> + emit(ARM_MOV_R(tmp[0], rm), ctx);
>> + rm = tmp[0];
>
> Why do you need this? rd and rm can be the same for LDRS[BH].
I agree that this is not required, will remove in the next version.
Will also use the suggested optimization for immediate.
>> + }
>> + switch (sz) {
>> + case BPF_B:
>> + /* Load a Byte with sign extension*/
>> + emit(ARM_LDRSB_I(rd[1], rm, off), ctx);
>> + /* Carry the sign extension to upper 32 bits */
>> + emit(ARM_ASR_I(rd[0], rd[1], 31), ctx);
>> + break;
>> + case BPF_H:
>> + /* Load a HalfWord with sign extension*/
>> + emit(ARM_LDRSH_I(rd[1], rm, off), ctx);
>> + /* Carry the sign extension to upper 32 bits */
>> + emit(ARM_ASR_I(rd[0], rd[1], 31), ctx);
>> + break;
>> + case BPF_W:
>> + /* Load a Word*/
>> + emit(ARM_LDR_I(rd[1], rm, off), ctx);
>> + /* Carry the sign extension to upper 32 bits */
>> + emit(ARM_ASR_I(rd[0], rd[1], 31), ctx);
>
> The last instruction extending to the upper 32 bits is the same in each
> of these cases, so is there any reason not to do it outside the switch
> statement?
Will move it outside in the next version.
Thanks,
Puranjay
next prev parent reply other threads:[~2023-09-06 11:47 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-05 21:06 [PATCH bpf-next 0/8] arm32, bpf: add support for cpuv4 insns Puranjay Mohan
2023-09-05 21:06 ` [PATCH bpf-next 1/8] arm32, bpf: add support for 32-bit offset jmp instruction Puranjay Mohan
2023-09-05 21:11 ` Russell King (Oracle)
2023-09-05 21:06 ` [PATCH bpf-next 2/8] arm32, bpf: add support for sign-extension load instruction Puranjay Mohan
2023-09-05 21:24 ` Russell King (Oracle)
2023-09-06 11:47 ` Puranjay Mohan [this message]
2023-09-05 21:06 ` [PATCH bpf-next 3/8] arm32, bpf: add support for sign-extension mov instruction Puranjay Mohan
2023-09-05 21:06 ` [PATCH bpf-next 4/8] arm32, bpf: add support for unconditional bswap instruction Puranjay Mohan
2023-09-05 21:32 ` Russell King (Oracle)
2023-09-06 9:31 ` Puranjay Mohan
2023-09-05 21:06 ` [PATCH bpf-next 5/8] arm32, bpf: add support for 32-bit signed division Puranjay Mohan
2023-09-05 21:44 ` Russell King (Oracle)
2023-09-05 21:06 ` [PATCH bpf-next 6/8] arm32, bpf: add support for 64 bit division instruction Puranjay Mohan
2023-09-05 21:50 ` Russell King (Oracle)
2023-09-06 9:29 ` Puranjay Mohan
2023-09-06 18:56 ` Russell King (Oracle)
2023-09-06 19:19 ` Puranjay Mohan
2023-09-06 20:26 ` Russell King (Oracle)
2023-09-05 21:06 ` [PATCH bpf-next 7/8] selftest, bpf: enable cpu v4 tests for arm32 Puranjay Mohan
2023-09-05 21:06 ` [PATCH bpf-next 8/8] bpf/tests: add tests for cpuv4 instructions Puranjay Mohan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=mb61pfs3r34n2.fsf@amazon.com \
--to=puranjay12@gmail.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=haoluo@google.com \
--cc=illusionist.neo@gmail.com \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kpsingh@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=martin.lau@linux.dev \
--cc=mykolal@fb.com \
--cc=sdf@google.com \
--cc=shuah@kernel.org \
--cc=song@kernel.org \
--cc=yonghong.song@linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.