https://gcc.gnu.org/g:d2214271b736c0e6a303a47af3f84ef12d3ed140

commit d2214271b736c0e6a303a47af3f84ef12d3ed140
Author: Michael Meissner <[email protected]>
Date:   Wed Jul 1 11:22:46 2026 -0400

    Add _Float16 and __bfloat16 support.
    
    2026-07-01  Michael Meissner  <[email protected]>
    
    gcc/
    
            * config/rs6000/altivec.md (VM): Add support for V8HFmode and
            V8BFmode.
            (VM2): Likewise.
            (VI_char): Likewise.
            (VI_scalar): Likewise.
            (VI_unit): Likewise.
            (VP_small): Likewise.
            (VP_small_lc): Likewise.
            (VU_char): Likewise.
            * config/rs6000/rs6000-modes.def (HFmode): Add new mode.
            (BFmode): Likewise.
            (V8BFmode): Likewise.
            (V8HFmode): Likewise.
            * config/rs6000/rs6000-p8swap.cc (rs6000_gen_stvx): Remove #ifdef 
for
            HAVE_V8HFmode.  Add support for V8BFmode.
            (rs6000_gen_lvx): Likewise.
            (replace_swapped_load_constant): Likewise.
            * config/rs6000/rs6000.cc (rs6000_debug_reg_global): Add support for
            V8HFmode and V8BFmode.
            (rs6000_init_hard_regno_mode_ok): Likewise.
            (output_vec_const_move): Likewise.
            (reg_offset_addressing_ok_p): Likewise.
            (rs6000_const_vec): Likewise.
            (rs6000_emit_move): Likewise.
            * config/rs6000/rs6000.h (ALTIVEC_VECTOR_MODE): Likewise.
            * config/rs6000/rs6000.md (FMOVE128_GPR): Likewise.
            (wd): Likewise.
            (du_or_d): Likewise.
            (BOOL_128): Likewise.
            (BOOL_REGS_OUTPUT): Likewise.
            (BOOL_REGS_OP1): Likewise.
            (BOOL_REGS_OP2): Likewise.
            (BOOL_REGS_UNARY): Likewise.
            (RELOAD): Likewise.
            * config/rs6000/vector.md (VEC_L): Likewise.
            (VEC_M): Likewise.
            (VEC_E): Likewise.
            (VEC_base): Likewise.
            (VEC_base_l): Likewise.
            * config/rs6000/vsx.md (VECTOR_16BIT): New mode iterator.
            (VSX_L): Add support for V8HFmode and V8BFmode.
            (VSX_M): Likewise.
            (VSX_XXBR): Likewise.
            (VSm): Likewise.
            (VSr): Likewise.
            (VSisa): Likewise.
            (??r): Likewise.
            (nW): Likewise.
            (VSv): Likewise.
            (VSX_EXTRACT_I): Likewise.
            (VSX_EXTRACT_I2): Likewise.
            (VSX_EXTRACT_I4): Likewise.
            (VSX_EXTRACT_WIDTH): Likewise.
            (VSX_EXTRACT_PREDICATE): Likewise.
            (VSX_EX): Likewise.
            (VM3): Likewise.
            (VM3_char): Likewise.
            (vsx_le_perm_load_<mode>): Rename from vsx_le_perm_load_v8hi and add
            V8HFmode and V8BFmode.
            (vsx_le_perm_store_<mode>): Rename from vsx_le_perm_store_v8hi and 
add
            V8HFmode and V8BFmode.
            (splitter for vsx_le_perm_store_<mode>): Likewise.
            (vsx_ld_elemrev_<mode>): Rename from vsx_ld_elemrev_v8hi and add
            V8HFmode and V8BFmode support.
            (vsx_ld_elemrev_<mode>_internal): Rename from
            vsx_ld_elemrev_v8hi_internal and add V8HFmode and V8BFmode support.
            (vsx_st_elemrev_<mode>): Rename from vsx_st_elemrev_v8hi and add
            V8HFmode and V8BFmode support.
            (vsx_st_elemrev_<mode>_internal): Rename from
            vsx_st_elemrev_v8hi_internal and add V8HFmode and V8BFmode support.
            (xxswapd_<mode>): Rename from xxswapd_v8hi and add V8HFmode and 
V8BFmode
            support.
            (vsx_lxvd2x8_le_<MODE>): Rename from vsx_lxvd2x8_le_V8HI and add
            V8HFmode and V8BFmode support.
            (vsx_stxvd2x8_le_<MODE>): Rename from vsx_stxvd2x8_le_V8HI and add
            V8HFmode and V8BFmode support.
            (vsx_extract_<mode>_store_p9): Add V8HFmode and V8BFmode.
            (vsx_extract_<mode>_p8): Likewise.
    
    2026-07-01  Michael Meissner  <[email protected]>
    
    gcc/
    
            * config.gcc (powerpc*-*-*): Add support for the configuration 
option
            --with-powerpc-float16 and --with-powerpc-float16-disable-warning.
            * config/rs6000/rs6000-cpus.def (TARGET_16BIT_FLOATING_POINT): 
Likewise.
            (ISA_2_7_MASKS_SERVER): Likewise.
            (POWERPC_MASKS): Add -mfloat16.
            * config/rs6000/constraints.md (eZ): New constraint for -0.0.
            * config/rs6000/float16.md: New file to add basic 16-bit floating 
point
            support.
            * config/rs6000/predicates.md (easy_fp_constant): Add support for 
HFmode
            and BFmode constants.
            (easy_vector_constant): Add support for V8HFmode and V8BFmode to 
load up
            the vector -0.0 constant.
            (minus_zero_constant): New predicate.
            (fp16_xxspltiw_constant): Likewise.
            * config/rs6000/rs6000-builtin.cc (rs6000_type_string): Add support 
for
            16-bit floating point types.
            (rs6000_init_builtins): Create the bfloat16_type_node if needed.
            * config/rs6000/rs6000-c.cc (rs6000_target_modify_macros): Define
            __FLOAT16__ and __BFLOAT16__ if 16-bit floating pont is enabled.
            * config/rs6000/rs6000-call.cc (init_cumulative_args): Warn if a
            function returns a 16-bit floating point value unless -Wno-psabi is
            used or if this warning is disabled via the configuration option
            --with-powerpc-float16-disable-warning.
            (rs6000_function_arg): Warn if a 16-bit floating point value is 
passed
            to a function unless -Wno-psabi is ued or if this warning is 
disabled
            via the configuration option --with-powerpc-float16-disable-warning.
            * config/rs6000/rs6000-protos.h (vec_const_128bit_type): Add mode 
field
            to detect initializing 16-bit floating constants.
            * config/rs6000/rs6000.cc (rs6000_hard_regno_mode_ok_uncached): Add
            support for 16-bit floating point.
            (rs6000_modes_tieable_p): Don't allow 16-bit floating point modes 
to tie
            with other modes.
            (rs6000_debug_reg_global): Add BFmode and HFmode.
            (rs6000_setup_reg_addr_masks): Add support for 16-bit floating point
            types.
            (rs6000_setup_reg_addr_masks): Likewise.
            (rs6000_init_hard_regno_mode_ok): Likewise.
            (rs6000_option_override_internal): Add a check whether -mfloat16 
can be
            used.
            (easy_altivec_constant): Add suport for 16-bit floating point.
            (xxspltib_constant_p): Likewise.
            (rs6000_expand_vector_init): Likewise.
            (rs6000_expand_vector_set): Likewise.
            (rs6000_expand_vector_extract): Likewise.
            (rs6000_split_vec_extract_var): Likewise.
            (reg_offset_addressing_ok_p): Likewise.
            (rs6000_legitimate_offset_address_p): Likewise.
            (legitimate_lo_sum_address_p): Likewise.
            (rs6000_secondary_reload_simple_move): Likewise.
            (rs6000_preferred_reload_class): Likewise.
            (rs6000_can_change_mode_class): Likewise.
            (rs6000_output_move_128bit): Likewise.
            (rs6000_load_constant_and_splat): Likewise.
            (rs6000_scalar_mode_supported_p): Likewise.
            (rs6000_libgcc_floating_mode_supported_p): Return true for HFmode 
and
            BFmode if -mfloat16.
            (rs6000_floatn_mode): Enable _Float16 if -mfloat16.
            (rs6000_opt_masks): Add -mfloat16.
            (constant_fp_to_128bit_vector): Add support for 16-bit floating 
point.
            (vec_const_128bit_to_bytes): Likewise.
            (constant_generates_xxspltiw): Likewise.
            * config/rs6000/rs6000.h (FP16_SCALAR_MODE_P): Ne macro.
            (FP16_VECTOR_MODE_P): Likewise.
            (TARGET_BFLOAT16_HW): New macro.
            (TARGET_FLOAT16_HW): Likewise.
            (TARGET_BFLOAT16_HW_VECTOR): Likewise.
            (TARGET_FLOAT16_HW_VECTOR): Likewise.
            * config/rs6000/rs6000.md (wd): Add BFmode and HFmode.
            (toplevel): Include float16.md.
            * config/rs6000/rs6000.opt (-mloat16): New option.
            * doc/invoke.texi (RS/6000 and PowerPC Options): Document -mfloat16.
    
    2026-07-01  Michael Meissner  <[email protected]>
    
    libgcc/
    
            * config.host (powerpc*-*-linux*): Add HF/BF emulation functions to
            PowerPC libgcc.
            * config/rs6000/sfp-machine.h (_FP_NANFRAC_H): New macro.
            (_FP_NANFRAC_B): Likewise.
            (_FP_NANSIGN_H): Likewise.
            (_FP_NANSIGN_B): Likewise.
            (DFtype2): Add HF/BF emulation function declarations.
            (SFtype2): Likewise.
            (DItype2): Likewise.
            (UDItype2): Likewise.
            (SItype2): Likewise.
            (USItype2): Likewise.
            (HFtype2): Likewise.
            (__eqhf2): Likewise.
            (__extendhfdf2): Likewise.
            (__extendhfsf2): Likewise.
            (__fixhfdi): Likewise.
            (__fixhfsi): Likewise.
            (__fixunshfdi): Likewise.
            (__fixunshfsi): Likewise.
            (__floatdihf): Likewise.
            (__floatsihf): Likewise.
            (__floatundihf): Likewise.
            (__floatunsihf): Likewise.
            (__truncdfhf2): Likewise.
            (__truncsfhf2): Likewise.
            (BFtype2): Likewise.
            (__extendbfsf2): Likewise.
            (__floatdibf): Likewise.
            (__floatsibf): Likewise.
            (__floatundibf): Likewise.
            (__floatunsibf): Likewise.
            (__truncdfbf2): Likewise.
            (__truncsfbf2): Likewise.
            (__truncbfhf2): Likewise.
            (__trunchfbf2): Likewise.
            * config/rs6000/t-float16: New file.
            * configure.ac (powerpc*-*-linux*): Check if the PowerPC compiler
            supports _Float16 and __bfloat16 types.
            * configure: Regenerate.
    
    2026-07-01  Michael Meissner  <[email protected]>
    
    gcc/
    
            * config/rs6000/float16.md (FP16_HW): New mode iterator.
            (extendhf<mode>2): Add support converting between HFmode and
            SFmode/DFmoded if we are on power9 or later.
            (trunc<mode>hf2): Likewise.
            * config/rs6000/rs6000-c.cc (rs6000_target_modify_macros): Define
            __FLOAT16_HW__ if we have hardware support for _Float16.
            * config/rs6000/rs6000.cc (rs6000_init_hard_regno_mode_ok): Mark 
that we
            use VSX arithmetic support for V8HFmode if we are a power9 or later.
    
    2026-07-01  Michael Meissner  <[email protected]>
    
    gcc/
    
            * config/rs6000/float16.md (FP16_HW): Add BFmode.
            (VFP16_HW): New mode iterator.
            (cvt_fp16_to_v4sf): New mode attribute.
            (cvt_v4sf_to_fp16): Likewise.
            (FP16_VECTOR4): Likewise.
            (UNSPEC_BF_SHIFT_LEFT_16BIT): New unspec.
            (UNSPEC_XXSPLTW_FP16): Likewise.
            (UNSPEC_XVCVSPBF16_BF): Likewise.
            (UNSPEC_CVT_V4SF_TO_FP16): Likewise.
            (extendbf<mode>2): New insns to convert between BFmode and
            SFmode/DFmode.
            (xscvdpspn_sf): Likewise.
            (xscvspdpn_sf): Likewise.
            (convert_bf_to_sf_store): New insn for converting BFmdoe to SFmode 
and
            then storing it.
            (shift_bf_16bits): Likewise.
            (trunc<mode>bf): New insns to convert SFmode/DFmode to BFmode.
            (vsx_xscvdpspn_sf): Likewise.
            (cvt_fp16_to_v4sf_<mode): Likewise.
            (cvt_fp16_to_v4sf_<mode>_le): Likewise.
            (cvt_fp16_to_v4sf_<mode>_be): Likewise.
            (cvt_v4sf_to_fp16_<mode>): Likewise.
            (dup_<mode>_to_v4s): Likewise.
            (xxspltw_<mode>): Likewise.
            (xvcvbf16spn_bf): Likewise.
            (xvcvspbf16_bf): Likewise.
            (trunchfbf2): New insn to convert BFmode to HFmode.
            (trunchfbf2_mem): Optimize converting BFmode from memory to HFmode.
            (extendbfhf2): New insn to convert HFmode to BFmode.
            (extendbfhf2_mem): Optimize converting HFmode from memory to BFmode.
            * config/rs6000/rs6000-c.cc (rs6000_target_modify_macros): Define
            __BFLOAT16_HW__ if we have hardware support for __bfloat16.
            * config/rs6000/rs6000.cc (rs6000_init_hard_regno_mode_ok): Mark 
that we
            use VSX arithmetic support for V8BFmode if we are a power10 or 
later.
    
    2026-07-01  Michael Meissner  <[email protected]>
    
    gcc/
    
            * config/rs6000/float16.md (fp16_float_convert): New mode iterator.
            (extend<FP16_HW:mode><fp16_float_convert:mode>2): New insns to 
convert
            between the 2 16-bit floating point modes and other floating point
            scalars other than SFmode/DFmode by converting first to DFmode.
            (trunc<fp16_float_convert:mode><FP16_HW:mode>2): Likewise.
            (float<GPR:mode><FP16_HW:mode>2): New insns to convert beween the 2
            16-bit floating point modes and signed/unsigned integers.
            (floatuns<GPR:mode><FP16_HW:mode>2): Likewise.
            (fix_trunc<FP16_HW:mode><GPR:mode>): Likewise.
            (fixuns_trunc<FP16_HW:mode><GPR:mode>2): Likewise.
    
    2026-07-01  Michael Meissner  <[email protected]>
    
    gcc/
    
            * config/rs6000/float16.md (neg<mode>2): Add BFmode/HFmode negate,
            absolute value and negative absolute value operations.  Add logical
            insns operating on BFmode/HFmode.
            (abs<mode>2): Likewise.
            (nabs<mode>2): Likewise.
            (and<mode>3): Likewise.
            (ior<mode>): Likewise.
            (xor<mode>3): Likewise.
            (nor<mode>3): Likewise.
            (andn<mode>3): Likewise.
            (eqv<mode>3): Likewise.
            (nand<mode>3): Likewise.
            (iorn<mode>3): Likewise.
            (bool<mode>3): Likewise.
            (boolc<mode>3): Likewise.
            (boolcc<mode>): Likewise.
    
    2026-07-01  Michael Meissner  <[email protected]>
    
    gcc/
    
            * config.gcc (powerpc*-*-*): Add float16.o.
            * config/rs6000/float16.cc: New file to add 16-bit floating point
            vectorization.
            * config/rs6000/float16.md: (FP16_BINARY_OP): New mode iterator.
            (fp16_names): New mode attribute.
            (UNSPEC_XVCVSPHP_V8HF): New unspec.
            (UNSPEC_XVCVSPBF16_V8BF): Likewise.
            (UNSPEC_CVT_FP16_TO_V4SF): Likewise.
            (<fp16_names><mode>): New insns to support vectorization of 16-bit
            floating point.
            (fma<mode>4): Likewise.
            (fms<mode>4): Likewise.
            (nfma<mode>): Likewise.
            (nfms<mode>4): Likewise.
            (vec_pack_trunc_v4sf_v8hf): Likewise.
            (vec_pack_trunc_v4sf_v8bf): Likewise.
            (vec_pack_trunc_v4sf): Likewise.
            (xvcvsphp_v8hf): Likewise.
            (xvcvspbf16_v8bf): Likewise.
            (vec_unpacks_hi_v8hf): Likewise.
            (vec_unpacks_lo_v8hf): Likewise.
            (xvcvhpsp_v8hf): Likewise.
            (vec_unpacks_hi_v8bf): Likewise.
            (vec_unpacks_lo_v8bf): Likewise.
            (xvcvbf16spn_v8bf): Likewise.
            * config/rs6000/rs6000-protos.h (enum fp16_operation): New 
enumeration
            for vectorizing 16-bit floating point.
            (fp16_vectorization): New declaration.
            * config/rs6000/t-rs6000 (float16.o): Add build rules.
    
    2026-07-01  Michael Meissner  <[email protected]>
    
    gcc/
    
            * config/rs6000/float16.cc (bfloat16_operation_as_v4sf): New 
function to
            optimize __bfloat16 scalar operations.
            * config/rs6000/float16.md (xvcvbf16spn_bf): New insn.
            (bfloat16_binary_op_internal1): New __bfloat16 scalar combiner 
insns.
            (bfloat16_binary_op_internal2): Likewise.
            (bfloat16_fma_internal1): Likewise.
            (bfloat16_fma_internal2): Likewise.
            (bfloat16_fms_internal1): Likewise.
            (bfloat16_fms_internal2): Likewise.
            (bfloat16_nfma_internal1): Likewise.
            (bfloat16_nfma_internal2): Likewise.
            (bfloat16_nfms_internal3): Likewise.
            * config/rs6000/predicates.md (fp16_reg_or_constant_operand): New
            predicate.
            (bfloat16_v4sf_operand): Likewise.
            (bfloat16_bf_operand): Likewise.
            * config/rs6000/rs6000-protos.h (bfloat16_operation_as_v4sf): New
            declaration.
    
    2026-07-01  Michael Meissner  <[email protected]>
    
    gcc/testsuite/
    
            * gcc.target/powerpc/bfloat16-1.c: New target.
            * gcc.target/powerpc/bfloat16-2.c: Likewise.
            * gcc.target/powerpc/float16-1.c: Likewise.
            * gcc.target/powerpc/float16-2.c: Likewise.
            * lib/target-supports.exp (check_ppc_float16_hw_available): New 
target
            supports for _Float16 and __bfloat16 support.
            (check_ppc_float16_runtime_available): Likewise.
            (check_ppc_bfloat16_hw_available): Likewise.
            (check_ppc_bfloat16_runtime_available): Likewise.
            (is-effective-target): Add new _Float16 and __bfloat16 targets.

Diff:
---
 gcc/config/rs6000/rs6000.cc | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc
index 56e2c1e9285d..90534984dbc2 100644
--- a/gcc/config/rs6000/rs6000.cc
+++ b/gcc/config/rs6000/rs6000.cc
@@ -1259,11 +1259,7 @@ static const char alt_reg_names[][8] =
   /* vrsave vscr sfp */
   "vrsave", "vscr", "sfp",
   /* dense math registers.  */
-<<<<<<< HEAD
   "%dm0", "%dm1", "%dm2", "%dm3", "%dm4", "%dm5", "%dm6", "%dm7",
-=======
-  "%dmr0", "%dmr1", "%dmr2", "%dmr3", "%dmr4", "%dmr5", "%dmr6", "%dmr7",
->>>>>>> 36ac20bbf9a (Add dense math register support.)
 };
 #endif

Reply via email to