Craig Topper via llvm-dev
2021-Jul-09 03:41 UTC
[llvm-dev] [RISC-V V] How to read each bit of vbool8_t individually
There aren't really any instructions for doing this in the ISA. Solutions I can think of are rounding vl to the next multiple of 8 and storing it to a uint8_t using vse8. Then reading it back by looping over the array and looking at all 8 bits of each uint8_t. Or you could use vmerge to turn into a vuint8m1_t vector of 1 and 0. Perhaps if you shared your use case I might be able to come up with something else. ~Craig On Thu, Jul 8, 2021 at 7:23 PM Shao-Ce Sun via llvm-dev < llvm-dev at lists.llvm.org> wrote:> Hi All, > I have a question about RISC-V V, that is how to read each bit of > vbool8_t individually, for example: > vbool8_t A; > bool B[8] = A; > Thanks! > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210708/cf377adf/attachment.html>
Shao-Ce Sun via llvm-dev
2021-Jul-10 02:33 UTC
[llvm-dev] [RISC-V V] How to read each bit of vbool8_t individually
Thanks for your help, and here is the code: #include <stdio.h> #include <riscv_vector.h> #define N 5 int main(int argc, char **argv) { signed char A[N] = {1, 2, 3, 4, 5}; vint8m1_t B = vle8_v_i8m1(A, N); vbool8_t C = vmseq_vx_i8m1_b8(B, 3, N); int i; for (i = 0; i < N; ++i) { if (C[i]) printf("INDEX:%d", i); } } ------------------ Original ------------------ From: "Craig Topper" <craig.topper at gmail.com>; Date: Fri, Jul 9, 2021 11:41 AM To: "Shao-Ce Sun"<llvm at foxmail.com>; Cc: "via llvm-dev"<llvm-dev at lists.llvm.org>; Subject: Re: [llvm-dev] [RISC-V V] How to read each bit of vbool8_t individually There aren't really any instructions for doing this in the ISA. Solutions I can think of are rounding vl to the next multiple of 8 and storing it to a uint8_t using vse8. Then reading it back by looping over the array and looking at all 8 bits of each uint8_t. Or you could use vmerge to turn into a vuint8m1_t vector of 1 and 0. Perhaps if you shared your use case I might be able to come up with something else. ~Craig On Thu, Jul 8, 2021 at 7:23 PM Shao-Ce Sun via llvm-dev <llvm-dev at lists.llvm.org> wrote: Hi All, I have a question about RISC-V V, that is how to read each bit of vbool8_t individually, for example: vbool8_t A; bool B[8] = A; Thanks! _______________________________________________ LLVM Developers mailing list llvm-dev at lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210710/eb2f0df3/attachment-0001.html>