https://gcc.gnu.org/g:fcf47bd477b6820269c9f6a62ba78d97a796357d
commit fcf47bd477b6820269c9f6a62ba78d97a796357d Author: Michael Meissner <[email protected]> Date: Sat Jul 18 03:10:26 2026 -0400 Update ChangeLog.* Diff: --- gcc/ChangeLog.dmf | 680 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 680 insertions(+) diff --git a/gcc/ChangeLog.dmf b/gcc/ChangeLog.dmf index dcc4a00fe9bb..45e4d2d3b4d5 100644 --- a/gcc/ChangeLog.dmf +++ b/gcc/ChangeLog.dmf @@ -1,3 +1,683 @@ +==================== Branch work251-dmf, patch #124 ==================== + +Add paddis support. + +This patch adds support for the paddis instruction that might be added to a +future PowerPC processor. + +I have committed all of the patches in my backlog (dense math registers, other +-mcpu=future instructions, random bug fixes, support for _Float16 and +__bfloat16, and optimizations for vector logical operations on power10/power11) +into the IBM vendor branch: + + vendors/ibm/gcc-17-future + +2026-07-18 Michael Meissner <[email protected]> + +gcc/ + + * config/rs6000/constraints.md (eU): New constraint. + (eV): Likewise. + * config/rs6000/predicates.md (paddis_operand): New predicate. + (paddis_paddi_operand): Likewise. + (add_cint_operand): Add paddis support. + (reg_or_add_cint_operand): Add support for adds that can be done with + paddis and paddi/addi. + (add_operand): Add support for adds that can be done with paddis, but + not paddis + paddi/addi.. + * config/rs6000/rs6000.cc (num_insns_constant_gpr): Add support for adds + that can be done with paddis and also paddis combined with paddi/addi. + (print_operand): Add %B<n> for paddis support. + * config/rs6000/rs6000.h (TARGET_PADDIS): New macro. + (SIGNED_INTEGER_64BIT_P): Likewise. + * config/rs6000/rs6000.md (add<mode>3 define_expand): Add paddis + support. + (*add<mode>3 define_insn): Likewise. + (movdi_internal64): Likewise. + (movdi splitter): New splitter for paddis + paddi/addi. + * doc/md.texi (PowerPC constraints): Add eU and eV documentation. + +gcc/testsuite/ + + * gcc.target/powerpc/prefixed-addis.c: New test. + +==================== Branch work251-dmf, patch #123 ==================== + +Support load/store vector with right length. + +This patch adds support for new instructions that may be added to the PowerPC +architecture in the future to enhance the load and store vector with length +instructions. + +The current instructions (lxvl, lxvll, stxvl, and stxvll) are inconvient to use +since the count for the number of bytes must be in the top 8 bits of the GPR +register, instead of the bottom 8 bits. This meant that code generating these +instructions typically had to do a shift left by 56 bits to get the count into +the right position. In a future version of the PowerPC architecture, new +variants of these instructions might be added that expect the count to be in +the bottom 8 bits of the GPR register. These patches add this support to GCC +if the user uses the -mcpu=future option. + +I discovered that the code in rs6000-string.cc to generate ISA 3.1 lxvl/stxvl +future lxvll/stxvll instructions would generate these instructions on 32-bit. +However the patterns for these instructions is only done on 64-bit systems. So +I added a check for 64-bit support before generating the instructions. + +I have committed all of the patches in my backlog (dense math registers, other +-mcpu=future instructions, random bug fixes, support for _Float16 and +__bfloat16, and optimizations for vector logical operations on power10/power11) +into the IBM vendor branch: + + vendors/ibm/gcc-17-future + +The patches have been tested on both little and big endian systems. Can I check +it into the master branch? + +2026-07-18 Michael Meissner <[email protected]> + +gcc/ + + * config/rs6000/rs6000-string.cc (expand_block_move): Do not generate + lxvl and stxvl on 32-bit. + * config/rs6000/vsx.md (lxvl): If -mcpu=future, generate the lxvl with + the shift count automaticaly used in the insn. + (lxvrl): New insn for -mcpu=future. + (lxvrll): Likewise. + (stxvl): If -mcpu=future, generate the stxvl with the shift count + automaticaly used in the insn. + (stxvrl): New insn for -mcpu=future. + (stxvrll): Likewise. + +gcc/testsuite/ + + * gcc.target/powerpc/lxvrl.c: New test. + +==================== Branch work251-dmf, patch #122 ==================== + +Add xvrlw support. + +This patch adds support for a possible new variant of the vector rotate left +instruction that might be added to a future PowerPC. This variant (xvrlw) can +use any VSX register instead of requiring only Altivec registers. + +I have committed all of the patches in my backlog (dense math registers, other +-mcpu=future instructions, random bug fixes, support for _Float16 and +__bfloat16, and optimizations for vector logical operations on power10/power11) +into the IBM vendor branch: + + vendors/ibm/gcc-17-future + +2026-07-18 Michael Meissner <[email protected]> + +gcc/ + + * config/rs6000/altivec.md (xvrlw): New insn. + * config/rs6000/rs6000.h (TARGET_XVRLW): New macro. + +gcc/testsuite/ + + * gcc.target/powerpc/vector-rotate-left.c: New test. + +==================== Branch work251-dmf, patch #121 ==================== + +Add saturate subtract support + +This patch adds support for saturating subtract instructions that might be added +to a future PowerPC.r I think I had originally submitted patches that added a +new built-in function to generate the subfus and subdus instructions. Segher +suggested that instead of generating a built-in function, that I should just +having GCC automatically recognize cases where a saturating subtract could be +generated. This patch generates the saturating subtract instructions in the +appropriate context. + +I have committed all of the patches in my backlog (dense math registers, other +-mcpu=future instructions, random bug fixes, support for _Float16 and +__bfloat16, and optimizations for vector logical operations on power10/power11) +into the IBM vendor branch: + + vendors/ibm/gcc-17-future + +2026-07-18 Michael Meissner <[email protected]> + +gcc/ + + * config/rs6000/rs6000.md (gtu_geu): New code iterator. + (subfus<mode>3_<code>): New insns. + +gcc/testsuite/ + + * gcc.target/powerpc/saturate-subtract-1.c: New test. + * gcc.target/powerpc/saturate-subtract-2.c: Likewise. + * lib/target-supports.exp (check_effective_target_powerpc_future_ok): + New target test. + +==================== Branch work251-dmf, patch #120 ==================== + +Use vector pair load/store for memcpy with -mcpu=future + +In the development for the power10 processor, GCC did not enable using the load +vector pair and store vector pair instructions when optimizing things like +memory copy. This patch enables using those instructions if -mcpu=future is +used. + +I have committed all of the patches in my backlog (dense math registers, other +-mcpu=future instructions, random bug fixes, support for _Float16 and +__bfloat16, and optimizations for vector logical operations on power10/power11) +into the IBM vendor branch: + + vendors/ibm/gcc-17-future + +I have tested these patches on both big endian and little endian PowerPC +servers, with no regressions. Can I check these patchs into the trunk? + +2026-07-18 Michael Meissner <[email protected]> + +gcc/ + + * config/rs6000/rs6000-cpus.def (FUTURE_MASKS_SERVER): Enable using load + vector pair and store vector pair instructions for memory copy + operations. + (POWERPC_MASKS): Make the option for enabling using load vector pair and + store vector pair operations set and reset when the PowerPC processor is + changed. + * config/rs6000/rs6000.cc (rs6000_machine_from_flags): Disable + -mblock-ops-vector-pair from influencing .machine selection. + +gcc/testsuite/ + + * gcc.target/powerpc/future-3.c: New test. + +==================== Branch work251-dmf, patch #112 ==================== + +DMF patch 12 + +(note, the patch adding UNSPEC_DMF_EXTRACT1024 has been removed). + +Add two new builtins for extracting data from 1024-bit Dense Math +Registers (DMRs): + + - __builtin_dmr_extract512 (void *, dmr1024 *, const int<2>): + extracts one 512-bit half of a DMR into four 128-bit vectors. + - __builtin_disassemble_dmr (void *, dmr1024 *): + extracts both 512-bit halves of a DMR into eight 128-bit vectors. + +2026-07-16 Surya Kumari Jangala <[email protected]> + +gcc/ + + * config/rs6000/rs6000-builtins.def (__builtin_dmr_extract512): New + built-in. + (__builtin_disassemble_dmr): Likewise. + (__builtin_dmr_extract512_internal): New internal built-in. + * config/rs6000/rs6000-builtin.cc (rs6000_gimple_fold_mma_builtin): + Exempt RS6000_BIF_DISASSEMBLE_DMR from the early-return guard. + Generate appropriate gimple code for the extract builtins. + +gcc/testsuite/ + + * gcc.target/powerpc/dmf-extract512.c: New test. + * gcc.target/powerpc/dmf-disassemble-dmr.c: New test. + +==================== Branch work251-dmf, patch #111 ==================== + +DMF patch 11 + +This patch replaces the 'd' constraint that was used for accumulators +previously since they overlapped with the FPRs, to use 'wD' constraint +and the new accumulator_operand in the existing mma define_insns. The +behaviour without dense-math option will be same as before, only if +dense-math option is used will the DMR registers be used. + +It also updates the %A operand printer to print the DMR register numbers +instead of FPR if dense-math option is enabled + +2026-07-16 Avinash Jayakar <[email protected]> + Vijay Shankar <[email protected]> + +gcc/ + + * config/rs6000/mma.md (mma_xxsetaccz): Use wD constraint and + accumulator operand. + (mma_<vv>): Likewise. + (mma_<avv>): Likewise. + (mma_<pv>): Likewise. + (mma_<apv>): Likewise. + (mma_<vvi4i4i8>): Likewise. + (mma_<avvi4i4i8>): Likewise. + (mma_<vvi4i4i2>): Likewise. + (mma_<avvi4i4i2>): Likewise. + (mma_<vvi4i4>): Likewise. + (mma_<avvi4i4>): Likewise. + (mma_<pvi4i2>): Likewise. + (mma_<apvi4i2>): Likewise. + (mma_<vvi4i4i4>): Likewise. + (mma_<avvi4i4i4>): Likewise. + * config/rs6000/rs6000.cc (print_operand): Print DMR register + numbers if dense math option enabled. + +==================== Branch work251-dmf, patch #110 ==================== + +DMF patch 10 + +Add support for the DMF (Dense Math Facility) and MMA+ +(Matrix-Multiply Assist Plus) builtins and instructions which may be +available on a future Power processor. + +This patch extends the existing MMA infrastructure to support Dense +Math Registers (DMRs). + +Key changes: + +1. Extended MMA operand support from 7 to 9 operands (MAX_MMA_OPERANDS) + +2. Added new DMF-specific unspecs: + + * UNSPEC_DMF_DMXOR for DMR XOR operations + * UNSPEC_DMF_DMXVI8GERX4* for DMR GER (outer product) operations + * UNSPEC_DMF_PMDMXVI8GERX4* for prefixed DMR GER operations + * UNSPEC_DMF_DMSETDMRZ for zeroing a DMR register + +3. Implemented new instruction patterns in mma.md: + + * dmf_build_dmr: Build a DMR from eight vector operands + * dmf_dmsetdmrz: Zero a DMR register + * dmf_dmxor: XOR operation on DMR registers + * dmf_dmxvi8gerx4/dmxvi8gerx4pp: DMR outer product operations + * dmf_pmdmxvi8gerx4/pmdmxvi8gerx4pp: Prefixed DMR outer product + operations + +4. Added new DMF builtins and updated GIMPLE folding: + + * Added DMF and MMA+ builtins + * Updated GIMPLE folding to handle DMR pass-by-reference semantics + * Extended builtin expansion to support up to 9 operand instructions + +5. Added documentation for the new DMF and MMA+ builtins. + +The implementation follows the existing MMA pattern where user-facing +builtins use pass-by-reference for DMR arguments, while internal +builtins use pass-by-value for optimization. + +2026-07-15 Peter Bergner <[email protected]> + Surya Kumari Jangala <[email protected]> + Kishan Parmar <[email protected]> + +gcc/ + + * config/rs6000/mma.md (MAX_MMA_OPERANDS): Increase from 7 to 9. + (UNSPEC_DMF_DMXOR): New unspec. + (UNSPEC_DMF_DMXVI8GERX4): Likewise. + (UNSPEC_DMF_DMXVI8GERX4PP): Likewise. + (UNSPEC_DMF_PMDMXVI8GERX4): Likewise. + (UNSPEC_DMF_PMDMXVI8GERX4PP): Likewise. + (UNSPEC_DMF_DMSETDMRZ): Likewise. + (DMF_PV): New iterator. + (DMF_DPV): Likewise. + (DMF_PVI8I4I4): Likewise. + (DMF_DPVI8I4I4): Likewise. + (pv): Add DMF mappings. + (apv): Likewise. + (pvi8i4i4): New attribute. + (dpvi8i4i4): Likewise. + (dmf_build_dmr): New define_expand. + (dmf_dmsetdmrz): New insn. + (dmf_dmxor): Likewise. + (dmf_<pv>): New insn pattern. + (dmf_<apv>): Likewise. + (dmf_<pvi8i4i4>): Likewise. + (dmf_<dpvi8i4i4>): Likewise. + * config/rs6000/rs6000-builtin.cc (rs6000_gimple_fold_mma_builtin): Add + DMF builtin support. Handle DMR pass-by-reference semantics. + Support up to nine builtin operands. + (mma_expand_builtin): Likewise. + (rs6000_expand_builtin): Handle DMF builtins. + * config/rs6000/rs6000-builtins.def: Add DMF and MMA+ builtin + definitions. + * doc/extend.texi + (PowerPC Matrix-Multiply Assist Built-in Functions): Document + MMA+ builtins. + (PowerPC Dense Math Facility Built-in Functions): Document DMF builtins. + +gcc/testsuite/ + + * gcc.target/powerpc/dmf-build-dmr.c: New test. + * gcc.target/powerpc/dmf-builtin.c: New test. + +==================== Branch work251-dmf, patch #109 ==================== + +DMF patch 9 + +(note movxo_dmf has been modified to use %W<n> instead of %Y<n>). + +Split the movxo pattern into DMF and non-DMF variants. + +Use DMF move instructions (dmxxinstdmr512, dmmr, and dmxxextfdmr512) +for accumulator/DMR moves while retaining the existing split for +non-DMR operands. + +2026-07-15 Vijay Shankar <[email protected]> + +gcc/ChangeLog: + * config/rs6000/mma.md (*movxo): renamed to movxo_nodmf + (*movxo_nodmf): updated contraint to use wD and add !TARGET_DMF + (*movxo_dmf): New pattern to handle dmf insert/extract from vsx + +==================== Branch work251-dmf, patch #108 ==================== + +DMF patch 8 + +Add define_insn_and_split patterns for reloading TDOmode values between +Dense Math Registers (DMRs) and memory when TARGET_DMF is enabled. + +2026-07-15 Surya Kumari Jangala <[email protected]> + Peter Bergner <[email protected]> + +gcc/ + + * config/rs6000/mma.md (UNSPEC_DMF_RELOAD_FROM_MEMORY): New unspec. + (UNSPEC_DMF_RELOAD_TO_MEMORY): Likewise. + (reload_tdo_load): New define_insn_and_split. + (reload_tdo_store): Likewise. + * config/rs6000/rs6000.cc (rs6000_init_hard_regno_mode_ok): Set + reload_load and reload_store for TDOmode when TARGET_DMF. + +==================== Branch work251-dmf, patch #107 ==================== + +DMF patch 7 + +(note the 'W' case in print_operand has been moved from the original patch). + +Hi All, + +The following patch has been bootstrapped and regtested on powerpc64le-linux. + +Add move support for the new TDOmode opaque type used to represent +1024-bit Dense Math Registers that may be supported by future Power +processors. + +Implement the movtdo pattern to support moves between memory, VSX +registers, and Dense Math Registers. Memory moves and VSX +register-to-register moves are handled by the generic multi-register +splitter. Dense Math Register-to-Register moves use dmmr, while moves +between VSX and Dense Math Registers are expanded using dm_insert1024 +and dm_extract512. + +2026-07-14 Jeevitha Palanisamy <[email protected]> + +gcc/ + + * config/rs6000/mma.md (UNSPEC_DMF_EXTRACT512): New unspec. + (dm_extract512): New insn. + (movtdo): New expander. + (*movtdo): New insn_and_split to support TDOmode moves between + memory, VSX registers, and Dense Math Registers. + * config/rs6000/rs6000.cc (rs6000_emit_move): Diagnose constant + assignments to TDOmode objects. + (rs6000_split_multireg_move): Handle TDOmode when splitting + multi-register moves. + +==================== Branch work251-dmf, patch #106 ==================== + +DMF patch 6 + +Hi All, + +The following patch has been bootstrapped and regtested on powerpc64le-linux. + +Changes from v1: + - Removed duplicated code from the previous patch so this patch + applies cleanly. + +Thank You, +Kishan + +A future PowerPC processor may provide the Dense Math Facility (DMF), +where accumulators are backed by dedicated Dense Math Registers (DMRs). +Update accumulator assembly to build accumulators in DMRs using the new +DMR insert operations rather than xxmtacc/xxmfacc. + +Add DMR register predicate support, enable the required OOmode VSX pair +patterns under TARGET_DMF, use accumulator operands for MMA accumulator +assembly and disassembly, and avoid emitting xxmtacc/xxmfacc during +internal accumulator moves and GIMPLE folding when DMF is enabled. +Add DMF instruction type and ISA attributes for instruction scheduling +and enablement. + +2026-07-15 Kishan Parmar <[email protected]> + +gcc/ + + * config/rs6000/mma.md (UNSPEC_DMF_INSERT512): New unspec. + (UNSPEC_DMF_INSERT1024): Likewise. + (movoo): Enable for TARGET_DMF. + (*movoo): Likewise. + (vsx_assemble_pair): Likewise. + (*vsx_assemble_pair): Likewise. + (vsx_disassemble_pair): Likewise. + (*vsx_disassemble_pair): Likewise. + (dm_insert512): New insn. + (dm_insert1024): Likewise. + (mma_assemble_acc): Use accumulator_operand. + Build accumulators via DMR insert operations when TARGET_DMF. + (*mma_assemble_acc): Use accumulator_operand. + (mma_<acc>): New define_expand treating xxmtacc/xxmfacc as no-ops + for TARGET_DMF. + (*mma_<acc>): Restrict to !TARGET_DMF and use accumulator_operand. + (mma_disassemble_acc): Use accumulator_operand. + * config/rs6000/predicates.md (dmr_register_operand): New predicate. + (gpc_reg_operand): Accept DMR registers. + * config/rs6000/rs6000-builtin.cc (rs6000_gimple_fold_mma_builtin): Do + not emit xxmfacc for DISASSEMBLE_ACC when TARGET_DMF. + * config/rs6000/rs6000.cc (rs6000_hard_regno_mode_ok_uncached): Allow + OOmode in VSX register pairs for TARGET_DMF. + (rs6000_split_multireg_move): Avoid emitting xxmtacc/xxmfacc when + TARGET_DMF. + * config/rs6000/rs6000.md (type): Add dmf type. + (isa): Add mma and dmf ISA attributes. + (enabled): Add mma and dmf enable conditions. + +gcc/testsuite/ + + * gcc.target/powerpc/future-dmf-xxacc.c: New test. + * gcc.target/powerpc/future-nodmf-xxacc.c: New test. + +==================== Branch work251-dmf, patch #105 ==================== + +DMF patch 5 + +Following patch has been bootstrapped and regtested on +powerpc64le-linux-gnu. Ok for trunk and gcc-16? + +The future processor may introduce new set of registers for +accumulators. This patch adds a constraint and predicate for the +accumulator registers which can be used by the dense math and mma +patterns. + +2026-07-16 Avinash Jayakar <[email protected]> + +gcc/ + + * config/rs6000/constraints.md + (rs6000_constraints[RS6000_CONSTRAINT_wD]): New wD constraint. + * config/rs6000/predicates.md (accumulator_operand): New predicate. + * config/rs6000/rs6000.cc (rs6000_debug_reg_global): Support wD + register class. + (rs6000_init_hard_regno_mode_ok): Map wD to FLOAT_REGS. + * config/rs6000/rs6000.h (enum r6000_reg_class_enum): Add wD constraint. + * doc/md.texi: Document the new constraint. + +==================== Branch work251-dmf, patch #104 ==================== + +DMF patch 4 + +The Dense Math Facility, which may be present in a future processor, +extends the Power architecture's computational capabilities by providing +eight dedicated registers (dmr0-dmr7) that can efficiently handle large +matrix operations. These registers will also be used in cryptographic +operations. +There are no operations to load/store Dense Math registers from/to +memory. For loading from memory, the 1024 bit value is first loaded into +8 VSX registers which are then copied into a DMR register. Similarly, +to store the contents of a DMR register into memory, the the contents +of the DMR are copied to 8 VSX registers which are then loaded into +memory. +The DMR registers are treated as caller-saved. + +Key Features: + + 1. Register Infrastructure: + - Adds 8 new DMR registers (dmr0-dmr7), numbered 111-118 + - Each register is 1024 bits (128 bytes) in size + - Registers are call-used (caller-saved) following ABI conventions + - Increases total pseudo registers from 111 to 119 + + 2. Data Type Support: + - TDOmode: New 1024-bit mode specifically for DMR operations + - XOmode: Extended to support both MMA accumulators (in FPRs) and + DMR registers, providing flexibility in register allocation + - Both modes support DMR registers when TARGET_DMF is enabled + - TDOmode and XOmode excluded from register tying to prevent + incorrect cross-class allocation + + 3. Register Allocation: + - Integrated DMR_REGS into the register class hierarchy + - Added to register pressure classes for optimal allocation + - Implements proper register allocation ordering + - DMR registers can be allocated for XOmode and TDOmode values + + 4. Addressing and Memory Operations: + - Supports offset addressing mode for TDOmode values + - Implements secondary reload mechanisms for DMR ↔ VSX transfers + - New rs6000_dmr_register_move_cost helper computes move costs + between a DMR register and any register class via VSX: + XOmode costs 2, TDOmode costs 4, other modes scale by nregs + - Ensures proper alignment requirements (vector alignment) + - rs6000_register_move_cost and rs6000_memory_move_cost extended + to handle DMR_REGS as source or destination + + 5. Register Moves and Transfers: + - Enables simple moves between DMR and VSX registers + + 6. Debugging and Toolchain Support: + - Assigns debugger register numbers 112-119 for DMR registers + +2027-07-13 Surya Kumari jangala <[email protected]> + +gcc/ + + * config/rs6000/rs6000.cc (enum rs6000_reg_type): Add DMR_REG_TYPE. + (enum rs6000_reload_reg_type): Add RELOAD_REG_DMR. + (LAST_RELOAD_REG_CLASS): Update to RELOAD_REG_DMR. + (reload_reg_map): Add DMR entry. + (rs6000_reg_names): Add DMR register names. + (alt_reg_names): Add alternate DMR register names. + (rs6000_hard_regno_nregs_internal): Handle DMR registers. + (rs6000_hard_regno_mode_ok_uncached): Add TDOmode and XOmode support for + DMR registers. + (rs6000_debug_reg_global): Add TDOmode to debug modes and print DMR + register range. + (rs6000_setup_reg_addr_masks): Handle RELOAD_REG_DMR. + Allow offset loads for TDOmode values. + (rs6000_init_hard_regno_mode_ok): Add DMR_REGS to reg_class_to_reg_type + mapping. + Update precalculation of CLASS_MAX_NREGS. + (rs6000_secondary_reload_memory): Handle DMR_REGS class. + (rs6000_secondary_reload_simple_move): Add DMR to VSX moves. + (rs6000_preferred_reload_class): Handle DMR_REGS. + (rs6000_modes_tieable_p): Exclude TDOmode from register tying. + (reg_offset_addressing_ok_p): Allow XOmode with TARGET_DMF. + Add TDOmode support with TARGET_DMF. + (rs6000_secondary_reload_class): Handle DMR_REGS reload routing. + (rs6000_dmr_register_move_cost): New helper. + (rs6000_register_move_cost): Handle DMR_REGS as source or destination. + (rs6000_memory_move_cost): Add DMR_REGS case routing cost through VSX. + (rs6000_compute_pressure_classes): Add DMR_REGS when TARGET_DMF. + (rs6000_debugger_regno): Add DMR register numbering. + * config/rs6000/rs6000.h (UNITS_PER_DMR_WORD): Define as 128. + (FIRST_PSEUDO_REGISTER): Increase from 111 to 119. + (FIXED_REGISTERS): Add 8 DMR registers as non-fixed. + (CALL_USED_REGISTERS): Mark all DMR registers as call-used. + (REG_ALLOC_ORDER): Add DMR registers to allocation order. + (DMR_REGNO_P): New macro. + (VECTOR_ALIGNMENT_P): Add TDOmode. + (enum reg_class): Add DMR_REGS entry. + (REG_CLASS_CONTENTS): Add DMR_REGS bitmask. + (REGISTER_NAMES): Add dmr0-dmr7 register names. + (ADDITIONAL_REGISTER_NAMES): Add dmr0-dmr7 mappings. + * config/rs6000/rs6000.md (FIRST_DMR_REGNO): Define as 111. + (LAST_DMR_REGNO): Define as 118. + +==================== Branch work251-dmf, patch #103 ==================== + +DMF patch 3 + +The changes have been bootstrapped and regression tested on +powerpc64le-linux. + +Register __dmr1024 as a new 1024-bit opaque built-in type, following +the same pattern as the existing __vector_pair (OOmode) and +__vector_quad (XOmode) opaque types. __dmr1024 uses TDOmode, which +was already added in a previous commit ("rs6000: Add TDOmode +support"), and is intended to hold the contents of a Dense Math +Register (DMR) when the Dense Math Facility (-mdense-math) is +enabled. + +Note there is no __dmr1024 move pattern (movtdo) yet, so none of +these tests perform an actual load/store/copy of a __dmr1024 value; +that is left for a follow-on patch that adds the Dense Math move +support. + +2026-07-13 Manjunath Matti <[email protected]> + +gcc/ + + * config/rs6000/rs6000.h (RS6000_BTI_dmr1024): New enumerator. + (RS6000_BTI_ptr_dmr1024): New enumerator. + (dmr1024_type_node): New macro. + (ptr_dmr1024_type_node): New macro. + * config/rs6000/rs6000-builtin.cc (rs6000_type_string): Handle + dmr1024_type_node. + (rs6000_init_builtins): Register the __dmr1024 opaque type and + its pointer-to-const variant, with 512-bit alignment. + * config/rs6000/rs6000.cc (rs6000_mangle_type): Handle + dmr1024_type_node. + (rs6000_invalid_conversion): Reject conversions to/from TDOmode. + (rs6000_opaque_type_invalid_use_p): Gate __vector_quad and + __vector_pair on TARGET_MMA and __dmr1024 on TARGET_DMF + independently, and require -mdense-math for __dmr1024. + +gcc/testsuite/ + + * gcc.target/powerpc/dmr1024-alignment.c: New test case. + * gcc.target/powerpc/dmr1024-compile.c: Likewise. + * gcc/testsuite/gcc.target/powerpc/dmr1024-invalid-use-1.c: Likewise. + * gcc/testsuite/gcc.target/powerpc/dmr1024-invalid-use-2.c: Likewise. + * gcc/testsuite/gcc.target/powerpc/dmf-no-mma.c: Likewise. + +==================== Branch work251-dmf, patch #102 ==================== + +DMF patch 2 + +Hi All, + +The following patch has been bootstrapped and regtested on powerpc64le-linux. + +Add a new %W print modifier to print_operand that prints the VSX +register number plus two. + +Some future Power instruction patterns require printing two VSX +registers corresponding to a __vector_pair operand. The existing +%x print modifier emits the first VSX register using VSX register +numbering. Add a new %W print modifier to emit the second VSX +register of the pair. + +2025-07-14 Jeevitha Palanisamy <[email protected]> + Kishan Parmar <[email protected]> + +gcc/ + * config/rs6000/rs6000.cc (print_operand): Add the `%W` + print modifier to print the VSX register number plus two. + ==================== Branch work251-dmf, baseline ==================== 2026-07-16 Michael Meissner <[email protected]>
