On 8/13/23 23:50, Jin Ma wrote:
This patch adds the 'Zfa' extension for riscv, which is based on:
https://github.com/riscv/riscv-isa-manual/commits/zfb

The binutils-gdb for 'Zfa' extension:
https://sourceware.org/pipermail/binutils/2023-April/127060.html

What needs special explanation is:
1, According to riscv-spec, "The FCVTMO D.W.D instruction was added principally 
to
   accelerate the processing of JavaScript Numbers.", so it seems that no 
implementation
   is required.

2, The instructions FMINM and FMAXM correspond to C23 library function fminimum 
and fmaximum.
   Therefore, this patch has simply implemented the pattern of fminm<hf\sf\df>3 
and
   fmaxm<hf\sf\df>3 to prepare for later.

gcc/ChangeLog:

        * common/config/riscv/riscv-common.cc: Add zfa extension version, which 
depends on
        the F extension.
        * config/riscv/constraints.md (zfli): Constrain the floating point 
number that the
        instructions FLI.H/S/D can load.
        * config/riscv/iterators.md (ceil): New.
        * config/riscv/riscv-opts.h (MASK_ZFA): New.
        (TARGET_ZFA): New.
        * config/riscv/riscv-protos.h (riscv_float_const_rtx_index_for_fli): 
New.
        * config/riscv/riscv.cc (riscv_float_const_rtx_index_for_fli): New.
        (riscv_cannot_force_const_mem): If instruction FLI.H/S/D can be used, 
memory is
        not applicable.
        (riscv_const_insns): Likewise.
        (riscv_legitimize_const_move): Likewise.
        (riscv_split_64bit_move_p): If instruction FLI.H/S/D can be used, no 
split is
        required.
        (riscv_split_doubleword_move): Likewise.
        (riscv_output_move): Output the mov instructions in zfa extension.
        (riscv_print_operand): Output the floating-point value of the FLI.H/S/D 
immediate
        in assembly.
        (riscv_secondary_memory_needed): Likewise.
        * config/riscv/riscv.md (fminm<mode>3): New.
        (fmaxm<mode>3): New.
        (movsidf2_low_rv32): New.
        (movsidf2_high_rv32): New.
        (movdfsisi3_rv32): New.
        (f<quiet_pattern>_quiet<ANYF:mode><X:mode>4_zfa): New.
        * config/riscv/riscv.opt: New.

gcc/testsuite/ChangeLog:

        * gcc.target/riscv/zfa-fleq-fltq.c: New test.
        * gcc.target/riscv/zfa-fli-zfh.c: New test.
        * gcc.target/riscv/zfa-fli.c: New test.
        * gcc.target/riscv/zfa-fmovh-fmovp.c: New test.
        * gcc.target/riscv/zfa-fround.c: New test.
Thanks. I added Tsukasa's testcases, except for zfa-fli-5.c which depends on sorting out the question around zvfh to your patch.

If you and Tsukasa could sort out the zvfh situation and submit a follow-up patch (if needed) it would be greatly appreciated.

I've pushed this to the trunk.

Thanks for your patience,
Jeff

Reply via email to