https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116590
Bug ID: 116590 Summary: unrecognized opcode th.vmv8r.v th.vfrec7.v when compiling for risc-v xtheadvector Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: shuizhuyuanluo at gmail dot com Target Milestone: --- riscv64-unknown-linux-gnu-g++ test2.c -o test2 -march=rv64gc_zfh_xtheadvector /tmp/cc3hCdvO.s: Assembler messages: /tmp/cc3hCdvO.s:97: Error: unrecognized opcode `th.vmv8r.v v8,v16' /tmp/cc3hCdvO.s:226: Error: unrecognized opcode `th.vfrec7.v v8,v8' $ ./riscv64-unknown-linux-gnu-g++ -v Using built-in specs. COLLECT_GCC=./riscv64-unknown-linux-gnu-g++ COLLECT_LTO_WRAPPER=/data/action/osd/riscv/libexec/gcc/riscv64-unknown-linux-gnu/15.0.0/lto-wrapper Target: riscv64-unknown-linux-gnu Configured with: /data/action/osd/riscv-gnu-toolchain/gcc/configure --target=riscv64-unknown-linux-gnu --prefix=/data/action/osd/riscv --with-sysroot=/data/action/osd/riscv/sysroot --with-pkgversion=g155da081706 --with-system-zlib --enable-shared --enable-tls --enable-languages=c,c++,fortran --disable-libmudflap --disable-libssp --disable-libquadmath --disable-libsanitizer --disable-nls --disable-bootstrap --src=.././gcc --disable-default-pie --disable-multilib --with-abi=lp64d --with-arch=rv64imafdc --with-tune=rocket --with-isa-spec=20191213 'CFLAGS_FOR_TARGET=-O2 -mcmodel=medlow' 'CXXFLAGS_FOR_TARGET=-O2 -mcmodel=medlow' Thread model: posix Supported LTO compression algorithms: zlib gcc version 15.0.0 20240829 (experimental) (g155da081706) #include <stdio.h> #include <time.h> #include <riscv_vector.h> void vmv8r() { float x[32]; for (int i = 0; i < 32; i++) { x[i] = time(NULL); } size_t vl = __riscv_vsetvl_e32m8(32); vfloat32m8_t _p = __riscv_vle32_v_f32m8(x, vl); _p = __riscv_vfmacc_vf_f32m8(__riscv_vfmv_v_f_f32m8(0.5f, vl), 1.442, _p, vl); __riscv_vse32_v_f32m8(x, _p, vl); fprintf(stderr, "%f\n", x[0]); } void vfrec7() { float x[32]; for (int i = 0; i < 32; i++) { x[i] = time(NULL); } size_t vl = __riscv_vsetvl_e32m8(32); vfloat32m8_t _p = __riscv_vle32_v_f32m8(x, vl); _p = __riscv_vfrec7_v_f32m8(_p, vl); __riscv_vse32_v_f32m8(x, _p, vl); fprintf(stderr, "%f\n", x[0]); } int main() { vmv8r(); vfrec7(); return 0; }